diff --git a/src/components/app/FriendsList.vue b/src/components/app/FriendsList.vue index 3bfbd50..2a3e2fd 100644 --- a/src/components/app/FriendsList.vue +++ b/src/components/app/FriendsList.vue @@ -66,7 +66,12 @@ export default { const notifications = this.$store.getters.notifications; const channels = this.$store.getters.channels; const notification = notifications.find(e => { - return channels[e.channelID] && !channels[e.channelID].server_id; + return ( + channels[e.channelID] && + !channels[e.channelID].server_id && + (e.channelID !== this.$store.getters.selectedChannelID || + !document.hasFocus()) + ); }); // unopened dm if (!notification) { diff --git a/src/components/app/Navigation.vue b/src/components/app/Navigation.vue index 94b6de5..0c2957f 100644 --- a/src/components/app/Navigation.vue +++ b/src/components/app/Navigation.vue @@ -214,7 +214,13 @@ export default { const notifications = this.$store.getters.notifications; const channels = this.$store.getters.channels; const notification = notifications.find(e => { - return channels[e.channelID] && channels[e.channelID].server_id; + return ( + channels[e.channelID] && + channels[e.channelID].server_id && + (e.channelID !== this.$store.getters.selectedChannelID || + !document.hasFocus() || + this.currentTab !== 2) + ); }); return notification; }, @@ -222,7 +228,13 @@ export default { const notifications = this.$store.getters.notifications; const channels = this.$store.getters.channels; const notification = notifications.find(e => { - return channels[e.channelID] && !channels[e.channelID].server_id; + return ( + channels[e.channelID] && + !channels[e.channelID].server_id && + (e.channelID !== this.$store.getters.selectedChannelID || + !document.hasFocus() || + this.currentTab !== 1) + ); }); // unopened dm if (!notification) { diff --git a/src/components/app/ServerTemplate/ChannelTemplate.vue b/src/components/app/ServerTemplate/ChannelTemplate.vue index ba0ea63..adebc29 100644 --- a/src/components/app/ServerTemplate/ChannelTemplate.vue +++ b/src/components/app/ServerTemplate/ChannelTemplate.vue @@ -12,15 +12,23 @@ export default { props: ["channelData"], computed: { + selectedChannelID() { + return this.$store.getters.selectedChannelID; + }, hasNotifications() { const notifications = this.$store.getters.notifications; + + if ( + document.hasFocus() && + this.selectedChannelID === this.channelData.channelID + ) { + return false; + } + const find = notifications.find( n => n.channelID === this.channelData.channelID ); return find; - }, - selectedChannelID() { - return this.$store.getters.selectedChannelID; } } }; diff --git a/src/components/app/ServerTemplate/ServerTemplate.vue b/src/components/app/ServerTemplate/ServerTemplate.vue index 6aceb14..5409fc4 100644 --- a/src/components/app/ServerTemplate/ServerTemplate.vue +++ b/src/components/app/ServerTemplate/ServerTemplate.vue @@ -36,15 +36,20 @@ export default { selectedServerID() { return this.$store.getters["servers/selectedServerID"]; }, + selectedChannelID() { + return this.$store.getters.selectedChannelID; + }, notification() { const notifications = this.$store.getters.notifications; + const channels = this.$store.getters.channels; const notification = notifications.find(e => { return ( channels[e.channelID] && channels[e.channelID].server_id && this.serverData && - channels[e.channelID].server_id === this.serverData.server_id + channels[e.channelID].server_id === this.serverData.server_id && + (this.selectedChannelID !== e.channelID || !document.hasFocus()) ); }); return notification; diff --git a/src/store/modules/socketIOModule.js b/src/store/modules/socketIOModule.js index b370de9..466dfa6 100644 --- a/src/store/modules/socketIOModule.js +++ b/src/store/modules/socketIOModule.js @@ -1,34 +1,40 @@ -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/isElectron' -import { isMobile } from '@/utils/Mobile'; +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/isElectron"; +import { isMobile } from "@/utils/Mobile"; -const state = { - -} +const state = {}; const actions = { - socket_authErr(context){ - context.dispatch('logout') - router.push({ path: '/' }) + socket_authErr(context) { + context.dispatch("logout"); + router.push({ path: "/" }); }, socket_connect() { - this._vm.$socket.emit('authentication', {token: localStorage.getItem("hauthid")}) + 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: '/' }) + context.dispatch("logout"); + router.push({ path: "/" }); } }, socket_success(context, data) { - - const {message, user, serverMembers, dms, notifications, currentFriendStatus, settings} = data; - + const { + message, + user, + serverMembers, + dms, + notifications, + currentFriendStatus, + settings + } = data; const friendsArr = user.friends; @@ -36,7 +42,7 @@ const actions = { const friendObj = {}; const memberObj = {}; if (friendsArr) { - for ( let friend of friendsArr ){ + for (let friend of friendsArr) { const member = friend.recipient; delete friend.recipient; friend.uniqueID = member.uniqueID; @@ -50,12 +56,9 @@ const actions = { } } - context.dispatch('members/addPresences', presence); - - context.dispatch('members/addMembers', memberObj); - - + context.dispatch("members/addPresences", presence); + context.dispatch("members/addMembers", memberObj); // const friendsArray = user.friends; // const friendObject = {}; @@ -80,32 +83,29 @@ const actions = { //convert array to object for servers servers = servers.reduce((obj, item) => { item.channels.forEach(element => { - element.server = undefined + element.server = undefined; element._id = undefined; element.__v = undefined; - element.server_id = item.server_id + element.server_id = item.server_id; - - context.dispatch('channel', element) + 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 - }, {}) + obj[item.server_id] = item; + return obj; + }, {}); - context.dispatch('servers/setServers', servers) + context.dispatch("servers/setServers", servers); data.user.servers = undefined; data.user.friends = friendObj; - context.commit('user', data.user) + context.commit("user", data.user); - - //server members let serverMembersArr = []; let membersObj = {}; @@ -116,171 +116,201 @@ const actions = { serverMembersArr.push(serverMember); membersObj[member.uniqueID] = member; } - context.dispatch('members/addMembers', membersObj); - context.dispatch( 'servers/addServerMembers', serverMembersArr ) - + context.dispatch("members/addMembers", membersObj); + context.dispatch("servers/addServerMembers", serverMembersArr); // convert dms array to object - const channelsObject = {} - if (dms && dms.length >=1) { + 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) - - + 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}) + context.dispatch("members/updatePresence", { + uniqueID: member.uniqueID, + status: member.status + }); delete member.status; - context.dispatch('members/addMember', member) - context.commit('addFriend', friend) + context.dispatch("members/addMember", member); + context.commit("addFriend", friend); }, socket_relationshipAccept(context, uniqueID) { - context.commit('acceptFriend', uniqueID) + context.commit("acceptFriend", uniqueID); }, socket_relationshipRemove(context, uniqueID) { - context.commit('removeFriend', 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.channels[data.message.channelID]) { + context.dispatch("updateChannelLastMessage", data.message.channelID); } if (context.getters.messages[data.message.channelID]) { - context.dispatch('addMessage', { + 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}); + const currentTab = context.rootGetters.currentTab; + if ( + context.rootState.channelModule.selectedChannelID == + data.message.channelID && + document.hasFocus() && + (currentTab === 1 || currentTab === 2) + ) { + 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."); + if (data.message.creator.uniqueID === context.getters.user.uniqueID) + return; + bus.$emit( + "title:change", + data.message.creator.username + " sent a message." + ); desktopNotification(); } - const notification = { + const notification = { channelID: data.message.channelID, lastMessageID: data.message.messageID, sender: data.message.creator - } - context.dispatch('messageCreatedNotification', notification); + }; + context.dispatch("messageCreatedNotification", notification); function desktopNotification() { // send desktop notification const channel = context.getters.channels[data.message.channelID]; - const disableDesktopNotification = context.rootGetters['settingsModule/settings'].notification.disableDesktopNotification; - + const disableDesktopNotification = + context.rootGetters["settingsModule/settings"].notification + .disableDesktopNotification; if (isMobile()) return; - if (isElectron && disableDesktopNotification === undefined) return sendNotification(); - if (disableDesktopNotification !== undefined && disableDesktopNotification === false) return sendNotification() - + if (isElectron && disableDesktopNotification === undefined) + return sendNotification(); + if ( + disableDesktopNotification !== undefined && + disableDesktopNotification === false + ) + return sendNotification(); function sendNotification() { if (channel && channel.server_id) { - const server = context.getters['servers/servers'][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, + 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, + 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}) + context.dispatch("members/updatePresence", { + uniqueID: data.uniqueID, + status: data.status + }); }, socket_multiDeviceStatus(context, data) { - context.commit('changeStatus', data.status) + context.commit("changeStatus", data.status); }, socket_disconnect(context) { - context.commit('user', null) + context.commit("user", null); }, socket_multiDeviceUserAvatarChange(context, data) { - context.commit('changeAvatar', data.avatarID); + context.commit("changeAvatar", data.avatarID); }, socket_userAvatarChange(context, data) { - context.commit('members/updateAvatar', data) + context.commit("members/updateAvatar", data); }, - ['socket_updateMember'](context, data) { + ["socket_updateMember"](context, data) { if (context.rootGetters.user.uniqueID === data.uniqueID) { - context.dispatch('updateUser', data) + context.dispatch("updateUser", data); } }, - ['socket_channel:created'](context, data){ - const {channel} = data; + ["socket_channel:created"](context, data) { + const { channel } = data; // rename to 'channel' to setChannel - context.dispatch('channel', channel); + context.dispatch("channel", channel); }, - ['socket_notification:dismiss'](context, data){ - const {channelID} = data; - context.dispatch('dismissNotification', channelID); + ["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_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:uploaded"](context, emoji) { + context.dispatch("settingsModule/addCustomEmoji", emoji); }, - ['socket_customEmoji:remove'](context, emoji) { - context.dispatch('settingsModule/removeCustomEmoji', emoji) + ["socket_customEmoji:remove"](context, emoji) { + context.dispatch("settingsModule/removeCustomEmoji", emoji); }, - ['socket_customEmoji:rename'](context, emoji) { - context.dispatch('settingsModule/renameCustomEmoji', emoji) + ["socket_customEmoji:rename"](context, emoji) { + context.dispatch("settingsModule/renameCustomEmoji", emoji); }, - ['socket_survey:completed'](context) { - context.dispatch('surveyCompleted'); + ["socket_survey:completed"](context) { + context.dispatch("surveyCompleted"); }, - ['socket_server:joined'](context, server) { - context.dispatch('servers/setServer', server) + ["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("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) - context.dispatch('setCurrentTab', 2, {root: true}) - context.dispatch('servers/setSelectedServerID', server.server_id, {root: true}) - context.dispatch('openChannel', defaultChannel, {root: true}) - - + const defaultChannel = channels.find( + c => c.channelID === server.default_channel_id + ); + context.dispatch("setCurrentTab", 2, { root: true }); + context.dispatch("servers/setSelectedServerID", server.server_id, { + root: true + }); + context.dispatch("openChannel", defaultChannel, { root: true }); }, - ['socket_server:leave'](context, {server_id}) { - const lastSelectedChannel = JSON.parse(localStorage.getItem('selectedChannels') || '{}') + ["socket_server:leave"](context, { server_id }) { + const lastSelectedChannel = JSON.parse( + localStorage.getItem("selectedChannels") || "{}" + ); if (lastSelectedChannel[server_id]) { delete lastSelectedChannel[server_id]; - localStorage.setItem('selectedChannels', JSON.stringify(lastSelectedChannel)); + localStorage.setItem( + "selectedChannels", + JSON.stringify(lastSelectedChannel) + ); } // check if server channel selected const serverChannelIDs = context.rootState.servers.channelsIDs[server_id]; @@ -289,31 +319,37 @@ const actions = { const serverChannelID = context.rootState.channelModule.serverChannelID; if (serverChannelIDs.includes(selectedChannelID)) { - context.dispatch('selectedChannelID', null) + context.dispatch("selectedChannelID", null); } if (serverChannelIDs.includes(serverChannelID)) { - context.dispatch('setServerChannelID', null) + 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) + 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 + ["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) + 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:memberRemove"](context, { uniqueID, server_id }) { + // member_remove + context.dispatch("servers/removeServerMember", { uniqueID, server_id }); }, - ['socket_server:members'](context, {serverMembers, memberPresences}) { // members + ["socket_server:members"](context, { serverMembers, memberPresences }) { + // members let serverMembersArr = []; let members = {}; for (let serverMember of serverMembers) { @@ -323,37 +359,49 @@ const actions = { serverMembersArr.push(serverMember); members[member.uniqueID] = member; } - context.dispatch('members/addMembers', members); - context.dispatch('servers/addServerMembers', serverMembers) + 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); + 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: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: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: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_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_updateMessage"](context, data) { + context.dispatch("updateMessage", { + channelID: data.channelID, + messageID: data.messageID, + message: data + }); }, - ['socket_deleteMessage'](context, {channelID, messageID}) { - context.dispatch('deleteMessage', {channelID, messageID}) - }, -} + ["socket_deleteMessage"](context, { channelID, messageID }) { + context.dispatch("deleteMessage", { channelID, messageID }); + } +}; export default { namespace: true, actions -} \ No newline at end of file +};