/**
* @copyright Copyright (c) 2019 Marco Ambrosini <marcoambrosini@icloud.com>
*
* @author Marco Ambrosini <marcoambrosini@icloud.com>
*
* @license AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import Vue from 'vue'
import { getCurrentUser } from '@nextcloud/auth'
import { showInfo, showSuccess, showError, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'
import { emit } from '@nextcloud/event-bus'
import {
CALL,
CONVERSATION,
PARTICIPANT,
WEBINAR,
} from '../constants.js'
import {
makePublic,
makePrivate,
setSIPEnabled,
changeLobbyState,
changeReadOnlyState,
changeListable,
createOneToOneConversation,
addToFavorites,
removeFromFavorites,
fetchConversations,
fetchConversation,
setConversationName,
setConversationDescription,
deleteConversation,
clearConversationHistory,
setConversationUnread,
setNotificationLevel,
setNotificationCalls,
setConversationPermissions,
setCallPermissions,
setMessageExpiration,
setConversationPassword,
setConversationAvatar,
setConversationEmojiAvatar,
deleteConversationAvatar,
} from '../services/conversationsService.js'
import { FEATURE_FLAGS } from '../services/localFeatureFlagsService.js'
import {
startCallRecording,
stopCallRecording,
} from '../services/recordingService.js'
const DUMMY_CONVERSATION = {
token: '',
displayName: '',
isFavorite: false,
hasPassword: false,
breakoutRoomMode: CONVERSATION.BREAKOUT_ROOM_MODE.NOT_CONFIGURED,
breakoutRoomStatus: CONVERSATION.BREAKOUT_ROOM_STATUS.STOPPED,
canEnableSIP: false,
type: CONVERSATION.TYPE.PUBLIC,
participantFlags: PARTICIPANT.CALL_FLAG.DISCONNECTED,
participantType: PARTICIPANT.TYPE.USER,
readOnly: CONVERSATION.STATE.READ_ONLY,
listable: CONVERSATION.LISTABLE.NONE,
hasCall: false,
canStartCall: false,
lobbyState: WEBINAR.LOBBY.NONE,
lobbyTimer: 0,
attendeePin: '',
isDummyConversation: true,
}
const getDefaultState = () => {
return {
conversations: {
},
}
}
const state = {
conversations: {
},
}
const getters = {
conversations: state => state.conversations,
/**
* List of all conversations sorted by isFavorite and lastActivity without breakout rooms
*
* @param {object} state state
* @return {object[]} - Sorted conversations list
*/
conversationsList: state => {
return Object.values(state.conversations)
// Filter out breakout rooms from left sidebar
.filter(conversation