Skip to content

Commit

Permalink
move createCombinedSystemMessage method to utils
Browse files Browse the repository at this point in the history
Signed-off-by: Maksim Sukharev <[email protected]>
  • Loading branch information
Antreesy committed Jul 24, 2023
1 parent dfd525b commit 098c6da
Show file tree
Hide file tree
Showing 2 changed files with 309 additions and 278 deletions.
282 changes: 4 additions & 278 deletions src/components/MessagesList/MessagesGroup/MessagesSystemGroup.vue
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,15 @@
</template>
<script>
import cloneDeep from 'lodash/cloneDeep.js'
import UnfoldLess from 'vue-material-design-icons/UnfoldLessHorizontal.vue'
import UnfoldMore from 'vue-material-design-icons/UnfoldMoreHorizontal.vue'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import Message from './Message/Message.vue'
import { createCombinedSystemMessage } from '../../../utils/createCombinedSystemMessage.js'
// List only sortable messages with order, in which they should be sorted
const MESSAGES = {
user_added: 1,
Expand Down Expand Up @@ -151,6 +151,8 @@ export default {
},
methods: {
createCombinedSystemMessage,
/**
* Compare two messages to decide if they should be grouped
*
Expand Down Expand Up @@ -257,282 +259,6 @@ export default {
return groups
},
checkIfSelfIsActor(message) {
return message.messageParameters.actor.id === this.$store.getters.getActorId()
&& message.messageParameters.actor.type + 's' === this.$store.getters.getActorType()
},
checkIfSelfIsUser(message) {
return message.messageParameters.user.id === this.$store.getters.getActorId()
&& message.messageParameters.user.type + 's' === this.$store.getters.getActorType()
},
createCombinedSystemMessage({ messages, type }) {
const combinedMessage = cloneDeep(messages[0])
// Handle cases when users reconnected to the call
if (type === 'call_reconnected') {
if (this.checkIfSelfIsActor(combinedMessage)) {
combinedMessage.message = t('spreed', 'You reconnected to the call')
} else {
combinedMessage.message = t('spreed', '{actor} reconnected to the call')
}
return combinedMessage
}
// clear messageParameters to be filled later
const actor = messages[0].messageParameters.actor
combinedMessage.messageParameters = { actor }
const actorIsAdministrator = actor.id === 'guest/cli' && actor.type === 'guest'
// usersCounter should be equal at least 2, as we're using this method only for groups
let usersCounter = 0
let selfIsUser = false
let referenceIndex = 0
// Handle cases when actor added users to conversation (when populate on creation, for example)
if (type === 'user_added') {
const selfIsActor = combinedMessage.actorId === this.$store.getters.getActorId()
&& combinedMessage.actorType === this.$store.getters.getActorType()
messages.forEach(message => {
if (this.checkIfSelfIsUser(message)) {
selfIsUser = true
} else {
combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
referenceIndex++
}
usersCounter++
})
if (selfIsActor) {
if (usersCounter === 2) {
combinedMessage.message = t('spreed', 'You added {user0} and {user1}')
} else {
combinedMessage.message = n('spreed',
'You added {user0}, {user1} and %n more participant',
'You added {user0}, {user1} and %n more participants', usersCounter - 2)
}
} else if (selfIsUser) {
if (usersCounter === 2) {
combinedMessage.message = actorIsAdministrator
? t('spreed', 'An administrator added you and {user0}')
: t('spreed', '{actor} added you and {user0}')
} else {
combinedMessage.message = actorIsAdministrator
? n('spreed',
'An administrator added you, {user0} and %n more participant',
'An administrator added you, {user0} and %n more participants', usersCounter - 2)
: n('spreed',
'{actor} added you, {user0} and %n more participant',
'{actor} added you, {user0} and %n more participants', usersCounter - 2)
}
} else {
if (usersCounter === 2) {
combinedMessage.message = actorIsAdministrator
? t('spreed', 'An administrator added {user0} and {user1}')
: t('spreed', '{actor} added {user0} and {user1}')
} else {
combinedMessage.message = actorIsAdministrator
? n('spreed',
'An administrator added {user0}, {user1} and %n more participant',
'An administrator added {user0}, {user1} and %n more participants', usersCounter - 2)
: n('spreed',
'{actor} added {user0}, {user1} and %n more participant',
'{actor} added {user0}, {user1} and %n more participants', usersCounter - 2)
}
}
}
// Used to hide duplicates from system message headers,
// when the same user joins or leaves call several times
const storedUniqueUsers = []
// Handle cases when users joined the call
if (type === 'call_joined') {
messages.forEach(message => {
const actorReference = `${message.messageParameters.actor.id}_${message.messageParameters.actor.type}`
if (storedUniqueUsers.includes(actorReference)) {
return
}
if (this.checkIfSelfIsActor(message)) {
selfIsUser = true
} else {
combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.actor
storedUniqueUsers.push(actorReference)
referenceIndex++
}
usersCounter++
})
if (usersCounter === 1) {
combinedMessage.message = messages[0].message
} else if (selfIsUser) {
if (usersCounter === 2) {
combinedMessage.message = t('spreed', 'You and {user0} joined the call')
} else {
combinedMessage.message = n('spreed',
'You, {user0} and %n more participant joined the call',
'You, {user0} and %n more participants joined the call', usersCounter - 2)
}
} else {
if (usersCounter === 2) {
combinedMessage.message = t('spreed', '{user0} and {user1} joined the call')
} else {
combinedMessage.message = n('spreed',
'{user0}, {user1} and %n more participant joined the call',
'{user0}, {user1} and %n more participants joined the call', usersCounter - 2)
}
}
}
// Handle cases when users left the call
if (type === 'call_left') {
messages.forEach(message => {
const actorReference = `${message.messageParameters.actor.id}_${message.messageParameters.actor.type}`
if (storedUniqueUsers.includes(actorReference)) {
return
}
if (this.checkIfSelfIsActor(message)) {
selfIsUser = true
} else {
combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.actor
storedUniqueUsers.push(actorReference)
referenceIndex++
}
usersCounter++
})
if (usersCounter === 1) {
combinedMessage.message = messages[0].message
} else if (selfIsUser) {
if (usersCounter === 2) {
combinedMessage.message = t('spreed', 'You and {user0} left the call')
} else {
combinedMessage.message = n('spreed',
'You, {user0} and %n more participant left the call',
'You, {user0} and %n more participants left the call', usersCounter - 2)
}
} else {
if (usersCounter === 2) {
combinedMessage.message = t('spreed', '{user0} and {user1} left the call')
} else {
combinedMessage.message = n('spreed',
'{user0}, {user1} and %n more participant left the call',
'{user0}, {user1} and %n more participants left the call', usersCounter - 2)
}
}
}
// Handle cases when actor promoted several users to moderators
if (type === 'moderator_promoted') {
const selfIsActor = combinedMessage.actorId === this.$store.getters.getActorId()
&& combinedMessage.actorType === this.$store.getters.getActorType()
messages.forEach(message => {
if (this.checkIfSelfIsUser(message)) {
selfIsUser = true
} else {
combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
referenceIndex++
}
usersCounter++
})
if (selfIsActor) {
if (usersCounter === 2) {
combinedMessage.message = t('spreed', 'You promoted {user0} and {user1} to moderators')
} else {
combinedMessage.message = n('spreed',
'You promoted {user0}, {user1} and %n more participant to moderators',
'You promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
}
} else if (selfIsUser) {
if (usersCounter === 2) {
combinedMessage.message = actorIsAdministrator
? t('spreed', 'An administrator promoted you and {user0} to moderators')
: t('spreed', '{actor} promoted you and {user0} to moderators')
} else {
combinedMessage.message = actorIsAdministrator
? n('spreed',
'An administrator promoted you, {user0} and %n more participant to moderators',
'An administrator promoted you, {user0} and %n more participants to moderators', usersCounter - 2)
: n('spreed',
'{actor} promoted you, {user0} and %n more participant to moderators',
'{actor} promoted you, {user0} and %n more participants to moderators', usersCounter - 2)
}
} else {
if (usersCounter === 2) {
combinedMessage.message = actorIsAdministrator
? t('spreed', 'An administrator promoted {user0} and {user1} to moderators')
: t('spreed', '{actor} promoted {user0} and {user1} to moderators')
} else {
combinedMessage.message = actorIsAdministrator
? n('spreed',
'An administrator promoted {user0}, {user1} and %n more participant to moderators',
'An administrator promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
: n('spreed',
'{actor} promoted {user0}, {user1} and %n more participant to moderators',
'{actor} promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
}
}
}
// Handle cases when actor demoted several users from moderators
if (type === 'moderator_demoted') {
const selfIsActor = combinedMessage.actorId === this.$store.getters.getActorId()
&& combinedMessage.actorType === this.$store.getters.getActorType()
messages.forEach(message => {
if (this.checkIfSelfIsUser(message)) {
selfIsUser = true
} else {
combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
referenceIndex++
}
usersCounter++
})
if (selfIsActor) {
if (usersCounter === 2) {
combinedMessage.message = t('spreed', 'You demoted {user0} and {user1} from moderators')
} else {
combinedMessage.message = n('spreed',
'You demoted {user0}, {user1} and %n more participant from moderators',
'You demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
}
} else if (selfIsUser) {
if (usersCounter === 2) {
combinedMessage.message = actorIsAdministrator
? t('spreed', 'An administrator demoted you and {user0} from moderators')
: t('spreed', '{actor} demoted you and {user0} from moderators')
} else {
combinedMessage.message = actorIsAdministrator
? n('spreed',
'An administrator demoted you, {user0} and %n more participant from moderators',
'An administrator demoted you, {user0} and %n more participants from moderators', usersCounter - 2)
: n('spreed',
'{actor} demoted you, {user0} and %n more participant from moderators',
'{actor} demoted you, {user0} and %n more participants from moderators', usersCounter - 2)
}
} else {
if (usersCounter === 2) {
combinedMessage.message = actorIsAdministrator
? t('spreed', 'An administrator demoted {user0} and {user1} from moderators')
: t('spreed', '{actor} demoted {user0} and {user1} from moderators')
} else {
combinedMessage.message = actorIsAdministrator
? n('spreed',
'An administrator demoted {user0}, {user1} and %n more participant from moderators',
'An administrator demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
: n('spreed',
'{actor} demoted {user0}, {user1} and %n more participant from moderators',
'{actor} demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
}
}
}
return combinedMessage
},
toggleCollapsed(messages) {
this.$set(messages, 'collapsed', !messages.collapsed)
this.groupIsCollapsed[messages.id] = !this.groupIsCollapsed[messages.id]
Expand Down
Loading

0 comments on commit 098c6da

Please sign in to comment.