mirror of
https://github.com/danbulant/Nertivia-Client
synced 2026-06-19 06:21:02 +00:00
347 lines
No EOL
12 KiB
JavaScript
347 lines
No EOL
12 KiB
JavaScript
import config from '@/config';
|
|
import {bus} from '../../main'
|
|
import {router} from './../../router'
|
|
import Vue from 'vue';
|
|
import DesktopNotification from '@/utils/ElectronJS/DesktopNotification'
|
|
import isElectron from '@/utils/ElectronJS/DesktopNotification'
|
|
|
|
const state = {
|
|
|
|
}
|
|
|
|
const actions = {
|
|
socket_authErr(context){
|
|
context.dispatch('logout')
|
|
router.push({ path: '/' })
|
|
},
|
|
socket_connect() {
|
|
this._vm.$socket.emit('authentication', {token: localStorage.getItem("hauthid")})
|
|
},
|
|
socket_error(context, error) {
|
|
// if the token is invalid.
|
|
if (error === "Authentication error") {
|
|
context.dispatch('logout')
|
|
router.push({ path: '/' })
|
|
}
|
|
},
|
|
socket_success(context, data) {
|
|
|
|
const {message, user, serverMembers, dms, notifications, currentFriendStatus, settings} = data;
|
|
|
|
|
|
const friendsArr = user.friends;
|
|
|
|
const presence = {};
|
|
const friendObj = {};
|
|
const memberObj = {};
|
|
if (friendsArr) {
|
|
for ( let friend of friendsArr ){
|
|
const member = friend.recipient;
|
|
delete friend.recipient;
|
|
friend.uniqueID = member.uniqueID;
|
|
friendObj[member.uniqueID] = friend;
|
|
memberObj[member.uniqueID] = member;
|
|
}
|
|
}
|
|
if (currentFriendStatus) {
|
|
for (const _presence of currentFriendStatus) {
|
|
presence[_presence[0]] = _presence[1];
|
|
}
|
|
}
|
|
|
|
context.dispatch('members/addPresences', presence);
|
|
|
|
context.dispatch('members/addMembers', memberObj);
|
|
|
|
|
|
|
|
|
|
// const friendsArray = user.friends;
|
|
// const friendObject = {};
|
|
|
|
// // convert array into object and add online status.
|
|
// if(friendsArray !== undefined && friendsArray.length >=1) {
|
|
// for (let index = 0; index < friendsArray.length; index++) {
|
|
// const element = friendsArray[index];
|
|
// if (element.recipient) {
|
|
// friendObject[element.recipient.uniqueID] = element;
|
|
// for (let currentFriendStatus of currentFriendStatus){
|
|
// console.log(currentFriendStatus[0], currentFriendStatus[1])
|
|
// if(currentFriendStatus[0] == element.recipient.uniqueID){
|
|
// friendObject[element.recipient.uniqueID].recipient.status = currentFriendStatus[1]
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
let servers = user.servers || [];
|
|
//convert array to object for servers
|
|
servers = servers.reduce((obj, item) => {
|
|
item.channels.forEach(element => {
|
|
element.server = undefined
|
|
element._id = undefined;
|
|
element.__v = undefined;
|
|
element.server_id = item.server_id
|
|
|
|
|
|
context.dispatch('channel', element)
|
|
context.dispatch("servers/AddChannelsIDs", {
|
|
serverID: item.server_id,
|
|
channelsIDs: [element.channelID]
|
|
});
|
|
});
|
|
item.channels = undefined;
|
|
obj[item.server_id] = item
|
|
return obj
|
|
}, {})
|
|
|
|
context.dispatch('servers/setServers', servers)
|
|
|
|
data.user.servers = undefined;
|
|
data.user.friends = friendObj;
|
|
|
|
context.commit('user', data.user)
|
|
|
|
|
|
|
|
//server members
|
|
let serverMembersArr = [];
|
|
let membersObj = {};
|
|
for (let serverMember of serverMembers) {
|
|
const member = serverMember.member;
|
|
delete serverMember.member;
|
|
serverMember.uniqueID = member.uniqueID;
|
|
serverMembersArr.push(serverMember);
|
|
membersObj[member.uniqueID] = member;
|
|
}
|
|
context.dispatch('members/addMembers', membersObj);
|
|
context.dispatch( 'servers/addServerMembers', serverMembersArr )
|
|
|
|
|
|
// convert dms array to object
|
|
const channelsObject = {}
|
|
if (dms && dms.length >=1) {
|
|
for (let channel of dms) {
|
|
channelsObject[channel.channelID] = channel;
|
|
}
|
|
}
|
|
context.commit('addAllChannels', channelsObject)
|
|
context.dispatch('addAllNotifications', notifications)
|
|
context.dispatch('settingsModule/setSettings', settings)
|
|
|
|
|
|
},
|
|
socket_relationshipAdd(context, friend) {
|
|
const member = friend.recipient;
|
|
delete friend.recipient;
|
|
friend.uniqueID = member.uniqueID;
|
|
context.dispatch('members/updatePresence', {uniqueID: member.uniqueID, status: member.status})
|
|
delete member.status;
|
|
context.dispatch('members/addMember', member)
|
|
context.commit('addFriend', friend)
|
|
},
|
|
socket_relationshipAccept(context, uniqueID) {
|
|
context.commit('acceptFriend', uniqueID)
|
|
},
|
|
socket_relationshipRemove(context, uniqueID) {
|
|
context.commit('removeFriend', uniqueID)
|
|
},
|
|
socket_receiveMessage(context, data) {
|
|
if (context.getters.channels[data.message.channelID]){
|
|
context.dispatch('updateChannelLastMessage', data.message.channelID);
|
|
}
|
|
if (context.getters.messages[data.message.channelID]) {
|
|
context.dispatch('addMessage', {
|
|
message: data.message,
|
|
channelID: data.message.channelID,
|
|
tempID: data.tempID
|
|
})
|
|
}
|
|
if (context.rootState.channelModule.selectedChannelID == data.message.channelID && document.hasFocus()) {
|
|
this._vm.$socket.emit('notification:dismiss', {channelID: data.message.channelID});
|
|
} else {
|
|
// send notification if other users message the recipient
|
|
if (data.message.creator.uniqueID === context.getters.user.uniqueID) return;
|
|
bus.$emit('title:change', data.message.creator.username + " sent a message.");
|
|
desktopNotification();
|
|
}
|
|
const notification = {
|
|
channelID: data.message.channelID,
|
|
lastMessageID: data.message.messageID,
|
|
sender: data.message.creator
|
|
}
|
|
context.dispatch('messageCreatedNotification', notification);
|
|
function desktopNotification() {
|
|
// send desktop notification
|
|
const disableDesktopNotification = context.rootGetters['settingsModule/settings'].notification.disableDesktopNotification;
|
|
if (disableDesktopNotification === true) return
|
|
|
|
if (!isElectron || disableDesktopNotification === undefined) return;
|
|
const channel = context.getters.channels[data.message.channelID];
|
|
if (channel && channel.server_id) {
|
|
const server = context.getters['servers/servers'][channel.server_id]
|
|
DesktopNotification.serverMessage({
|
|
serverName: server.name,
|
|
channelName: channel.name,
|
|
username: data.message.creator.username,
|
|
avatarURL: config.domain + '/avatars/' + server.avatar,
|
|
message: data.message.message
|
|
})
|
|
} else {
|
|
DesktopNotification.directMessage({
|
|
username: data.message.creator.username,
|
|
avatarURL: config.domain + '/avatars/' + data.message.creator.avatar,
|
|
message: data.message.message
|
|
})
|
|
}
|
|
}
|
|
},
|
|
socket_userStatusChange(context, data) {
|
|
if (context.rootState.user.user.uniqueID === data.uniqueID) return;
|
|
context.dispatch('members/updatePresence', {uniqueID: data.uniqueID, status: data.status})
|
|
},
|
|
socket_multiDeviceStatus(context, data) {
|
|
context.commit('changeStatus', data.status)
|
|
},
|
|
socket_disconnect(context) {
|
|
context.commit('user', null)
|
|
},
|
|
socket_multiDeviceUserAvatarChange(context, data) {
|
|
context.commit('changeAvatar', data.avatarID);
|
|
},
|
|
socket_userAvatarChange(context, data) {
|
|
context.commit('members/updateAvatar', data)
|
|
},
|
|
['socket_updateMember'](context, data) {
|
|
if (context.rootGetters.user.uniqueID === data.uniqueID) {
|
|
context.dispatch('updateUser', data)
|
|
}
|
|
},
|
|
['socket_channel:created'](context, data){
|
|
const {channel} = data;
|
|
// rename to 'channel' to setChannel
|
|
context.dispatch('channel', channel);
|
|
},
|
|
['socket_notification:dismiss'](context, data){
|
|
const {channelID} = data;
|
|
context.dispatch('dismissNotification', channelID);
|
|
},
|
|
['socket_googleDrive:linked'](context) {
|
|
context.dispatch('setPopoutVisibility', {name: 'GDLinkMenu', visibility: false})
|
|
context.dispatch('settingsModule/setGDriveLinked', true)
|
|
},
|
|
['socket_customEmoji:uploaded'](context, emoji) {
|
|
context.dispatch('settingsModule/addCustomEmoji', emoji)
|
|
},
|
|
['socket_customEmoji:remove'](context, emoji) {
|
|
context.dispatch('settingsModule/removeCustomEmoji', emoji)
|
|
},
|
|
['socket_customEmoji:rename'](context, emoji) {
|
|
context.dispatch('settingsModule/renameCustomEmoji', emoji)
|
|
},
|
|
['socket_survey:completed'](context) {
|
|
context.dispatch('surveyCompleted');
|
|
},
|
|
['socket_server:joined'](context, server) {
|
|
context.dispatch('servers/setServer', server)
|
|
|
|
const channels = server.channels;
|
|
|
|
|
|
for (let index = 0; index < channels.length; index++) {
|
|
const element = channels[index];
|
|
element.server = undefined;
|
|
element.server_id = server.server_id;
|
|
context.dispatch('channel', element)
|
|
context.dispatch("servers/AddChannelsIDs", {
|
|
serverID: server.server_id,
|
|
channelsIDs: [element.channelID]
|
|
});
|
|
}
|
|
|
|
if (!server.socketID) return;
|
|
if (this._vm.$socket.id !== server.socketID) return;
|
|
const defaultChannel = channels.find(c => c.channelID === server.default_channel_id)
|
|
bus.$emit('changeTab', 2)
|
|
context.dispatch('servers/setSelectedServerID', server.server_id, {root: true})
|
|
context.dispatch('openChannel', defaultChannel, {root: true})
|
|
|
|
|
|
},
|
|
['socket_server:leave'](context, {server_id}) {
|
|
// check if server channel selected
|
|
const serverChannelIDs = context.rootState.servers.channelsIDs[server_id];
|
|
|
|
const selectedChannelID = context.rootState.channelModule.selectedChannelID;
|
|
const serverChannelID = context.rootState.channelModule.serverChannelID;
|
|
|
|
if (serverChannelIDs.includes(selectedChannelID)) {
|
|
context.dispatch('selectedChannelID', null)
|
|
}
|
|
if (serverChannelIDs.includes(serverChannelID)) {
|
|
context.dispatch('setServerChannelID', null)
|
|
}
|
|
context.dispatch('servers/removePresences', server_id);
|
|
context.dispatch('servers/removeServer', server_id)
|
|
context.dispatch('servers/removeNotifications', server_id)
|
|
context.dispatch('servers/removeAllServerChannels', server_id)
|
|
context.dispatch('deleteAllMessages', serverChannelIDs)
|
|
},
|
|
['socket_server:memberAdd'](context, {serverMember, presence}) { // member_add
|
|
let sm = Object.assign({}, serverMember);
|
|
const member = sm.member;
|
|
delete sm.member;
|
|
sm.uniqueID = member.uniqueID;
|
|
|
|
context.dispatch('members/updatePresence', {uniqueID: member.uniqueID, status: presence})
|
|
context.dispatch('members/addMember', member)
|
|
context.dispatch('servers/addServerMember', sm)
|
|
},
|
|
['socket_server:memberRemove'](context, {uniqueID, server_id}) { // member_remove
|
|
context.dispatch('servers/removeServerMember', {uniqueID, server_id})
|
|
},
|
|
['socket_server:members'](context, {serverMembers, memberPresences}) { // members
|
|
let serverMembersArr = [];
|
|
let members = {};
|
|
for (let serverMember of serverMembers) {
|
|
const member = serverMember.member;
|
|
delete serverMember.member;
|
|
serverMember.uniqueID = member.uniqueID;
|
|
serverMembersArr.push(serverMember);
|
|
members[member.uniqueID] = member;
|
|
}
|
|
context.dispatch('members/addMembers', members);
|
|
context.dispatch('servers/addServerMembers', serverMembers)
|
|
let presences = {};
|
|
for (const _presence of memberPresences) {
|
|
presences[_presence[0]] = _presence[1];
|
|
}
|
|
context.dispatch('members/addPresences', presences);
|
|
},
|
|
['socket_server:addChannel'](context, {channel}) { // add_channel
|
|
context.dispatch('channel', channel);
|
|
context.dispatch('servers/AddChannelsIDs', {serverID: channel.server_id, channelsIDs: [channel.channelID]})
|
|
},
|
|
['socket_server:updateChannel'](context, update) { // update_channel
|
|
context.dispatch('updateChannel', update);
|
|
},
|
|
['socket_server:removeChannel'](context, {server_id, channelID}) {
|
|
context.dispatch('servers/removeServerChannel', {server_id, channelID});
|
|
context.dispatch('dismissNotification', channelID);
|
|
},
|
|
['socket_server:updateServer'](context, data) {
|
|
context.dispatch('servers/updateServer', {server_id: data.server_id, server: data});
|
|
},
|
|
['socket_updateMessage'](context, data) {
|
|
context.dispatch('updateMessage', {channelID: data.channelID, messageID: data.messageID, message: data});
|
|
},
|
|
['socket_deleteMessage'](context, {channelID, messageID}) {
|
|
context.dispatch('deleteMessage', {channelID, messageID})
|
|
},
|
|
}
|
|
|
|
export default {
|
|
namespace: true,
|
|
actions
|
|
} |