fixed more problems with notifications

This commit is contained in:
supertiger1234 2019-11-06 11:53:04 +00:00
parent a7a51a34b4
commit 75871e4b61
5 changed files with 229 additions and 151 deletions

View file

@ -66,7 +66,12 @@ export default {
const notifications = this.$store.getters.notifications; const notifications = this.$store.getters.notifications;
const channels = this.$store.getters.channels; const channels = this.$store.getters.channels;
const notification = notifications.find(e => { 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 // unopened dm
if (!notification) { if (!notification) {

View file

@ -214,7 +214,13 @@ export default {
const notifications = this.$store.getters.notifications; const notifications = this.$store.getters.notifications;
const channels = this.$store.getters.channels; const channels = this.$store.getters.channels;
const notification = notifications.find(e => { 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; return notification;
}, },
@ -222,7 +228,13 @@ export default {
const notifications = this.$store.getters.notifications; const notifications = this.$store.getters.notifications;
const channels = this.$store.getters.channels; const channels = this.$store.getters.channels;
const notification = notifications.find(e => { 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 // unopened dm
if (!notification) { if (!notification) {

View file

@ -12,15 +12,23 @@
export default { export default {
props: ["channelData"], props: ["channelData"],
computed: { computed: {
selectedChannelID() {
return this.$store.getters.selectedChannelID;
},
hasNotifications() { hasNotifications() {
const notifications = this.$store.getters.notifications; const notifications = this.$store.getters.notifications;
if (
document.hasFocus() &&
this.selectedChannelID === this.channelData.channelID
) {
return false;
}
const find = notifications.find( const find = notifications.find(
n => n.channelID === this.channelData.channelID n => n.channelID === this.channelData.channelID
); );
return find; return find;
},
selectedChannelID() {
return this.$store.getters.selectedChannelID;
} }
} }
}; };

View file

@ -36,15 +36,20 @@ export default {
selectedServerID() { selectedServerID() {
return this.$store.getters["servers/selectedServerID"]; return this.$store.getters["servers/selectedServerID"];
}, },
selectedChannelID() {
return this.$store.getters.selectedChannelID;
},
notification() { notification() {
const notifications = this.$store.getters.notifications; const notifications = this.$store.getters.notifications;
const channels = this.$store.getters.channels; const channels = this.$store.getters.channels;
const notification = notifications.find(e => { const notification = notifications.find(e => {
return ( return (
channels[e.channelID] && channels[e.channelID] &&
channels[e.channelID].server_id && channels[e.channelID].server_id &&
this.serverData && 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; return notification;

View file

@ -1,34 +1,40 @@
import config from '@/config'; import config from "@/config";
import {bus} from '../../main' import { bus } from "../../main";
import {router} from './../../router' import { router } from "./../../router";
import Vue from 'vue'; import Vue from "vue";
import DesktopNotification from '@/utils/ElectronJS/DesktopNotification' import DesktopNotification from "@/utils/ElectronJS/DesktopNotification";
import isElectron from '@/utils/ElectronJS/isElectron' import isElectron from "@/utils/ElectronJS/isElectron";
import { isMobile } from '@/utils/Mobile'; import { isMobile } from "@/utils/Mobile";
const state = { const state = {};
}
const actions = { const actions = {
socket_authErr(context){ socket_authErr(context) {
context.dispatch('logout') context.dispatch("logout");
router.push({ path: '/' }) router.push({ path: "/" });
}, },
socket_connect() { socket_connect() {
this._vm.$socket.emit('authentication', {token: localStorage.getItem("hauthid")}) this._vm.$socket.emit("authentication", {
token: localStorage.getItem("hauthid")
});
}, },
socket_error(context, error) { socket_error(context, error) {
// if the token is invalid. // if the token is invalid.
if (error === "Authentication error") { if (error === "Authentication error") {
context.dispatch('logout') context.dispatch("logout");
router.push({ path: '/' }) router.push({ path: "/" });
} }
}, },
socket_success(context, data) { socket_success(context, data) {
const {
const {message, user, serverMembers, dms, notifications, currentFriendStatus, settings} = data; message,
user,
serverMembers,
dms,
notifications,
currentFriendStatus,
settings
} = data;
const friendsArr = user.friends; const friendsArr = user.friends;
@ -36,7 +42,7 @@ const actions = {
const friendObj = {}; const friendObj = {};
const memberObj = {}; const memberObj = {};
if (friendsArr) { if (friendsArr) {
for ( let friend of friendsArr ){ for (let friend of friendsArr) {
const member = friend.recipient; const member = friend.recipient;
delete friend.recipient; delete friend.recipient;
friend.uniqueID = member.uniqueID; friend.uniqueID = member.uniqueID;
@ -50,12 +56,9 @@ const actions = {
} }
} }
context.dispatch('members/addPresences', presence); context.dispatch("members/addPresences", presence);
context.dispatch('members/addMembers', memberObj);
context.dispatch("members/addMembers", memberObj);
// const friendsArray = user.friends; // const friendsArray = user.friends;
// const friendObject = {}; // const friendObject = {};
@ -80,31 +83,28 @@ const actions = {
//convert array to object for servers //convert array to object for servers
servers = servers.reduce((obj, item) => { servers = servers.reduce((obj, item) => {
item.channels.forEach(element => { item.channels.forEach(element => {
element.server = undefined element.server = undefined;
element._id = undefined; element._id = undefined;
element.__v = 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", { context.dispatch("servers/AddChannelsIDs", {
serverID: item.server_id, serverID: item.server_id,
channelsIDs: [element.channelID] channelsIDs: [element.channelID]
}); });
}); });
item.channels = undefined; item.channels = undefined;
obj[item.server_id] = item obj[item.server_id] = item;
return obj return obj;
}, {}) }, {});
context.dispatch('servers/setServers', servers) context.dispatch("servers/setServers", servers);
data.user.servers = undefined; data.user.servers = undefined;
data.user.friends = friendObj; data.user.friends = friendObj;
context.commit('user', data.user) context.commit("user", data.user);
//server members //server members
let serverMembersArr = []; let serverMembersArr = [];
@ -116,151 +116,174 @@ const actions = {
serverMembersArr.push(serverMember); serverMembersArr.push(serverMember);
membersObj[member.uniqueID] = member; membersObj[member.uniqueID] = member;
} }
context.dispatch('members/addMembers', membersObj); context.dispatch("members/addMembers", membersObj);
context.dispatch( 'servers/addServerMembers', serverMembersArr ) context.dispatch("servers/addServerMembers", serverMembersArr);
// convert dms array to object // convert dms array to object
const channelsObject = {} const channelsObject = {};
if (dms && dms.length >=1) { if (dms && dms.length >= 1) {
for (let channel of dms) { for (let channel of dms) {
channelsObject[channel.channelID] = channel; channelsObject[channel.channelID] = channel;
} }
} }
context.commit('addAllChannels', channelsObject) context.commit("addAllChannels", channelsObject);
context.dispatch('addAllNotifications', notifications) context.dispatch("addAllNotifications", notifications);
context.dispatch('settingsModule/setSettings', settings) context.dispatch("settingsModule/setSettings", settings);
}, },
socket_relationshipAdd(context, friend) { socket_relationshipAdd(context, friend) {
const member = friend.recipient; const member = friend.recipient;
delete friend.recipient; delete friend.recipient;
friend.uniqueID = member.uniqueID; 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; delete member.status;
context.dispatch('members/addMember', member) context.dispatch("members/addMember", member);
context.commit('addFriend', friend) context.commit("addFriend", friend);
}, },
socket_relationshipAccept(context, uniqueID) { socket_relationshipAccept(context, uniqueID) {
context.commit('acceptFriend', uniqueID) context.commit("acceptFriend", uniqueID);
}, },
socket_relationshipRemove(context, uniqueID) { socket_relationshipRemove(context, uniqueID) {
context.commit('removeFriend', uniqueID) context.commit("removeFriend", uniqueID);
}, },
socket_receiveMessage(context, data) { socket_receiveMessage(context, data) {
if (context.getters.channels[data.message.channelID]){ if (context.getters.channels[data.message.channelID]) {
context.dispatch('updateChannelLastMessage', data.message.channelID); context.dispatch("updateChannelLastMessage", data.message.channelID);
} }
if (context.getters.messages[data.message.channelID]) { if (context.getters.messages[data.message.channelID]) {
context.dispatch('addMessage', { context.dispatch("addMessage", {
message: data.message, message: data.message,
channelID: data.message.channelID, channelID: data.message.channelID,
tempID: data.tempID tempID: data.tempID
}) });
} }
if (context.rootState.channelModule.selectedChannelID == data.message.channelID && document.hasFocus()) { const currentTab = context.rootGetters.currentTab;
this._vm.$socket.emit('notification:dismiss', {channelID: data.message.channelID}); 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 { } else {
// send notification if other users message the recipient // send notification if other users message the recipient
if (data.message.creator.uniqueID === context.getters.user.uniqueID) return; if (data.message.creator.uniqueID === context.getters.user.uniqueID)
bus.$emit('title:change', data.message.creator.username + " sent a message."); return;
bus.$emit(
"title:change",
data.message.creator.username + " sent a message."
);
desktopNotification(); desktopNotification();
} }
const notification = { const notification = {
channelID: data.message.channelID, channelID: data.message.channelID,
lastMessageID: data.message.messageID, lastMessageID: data.message.messageID,
sender: data.message.creator sender: data.message.creator
} };
context.dispatch('messageCreatedNotification', notification); context.dispatch("messageCreatedNotification", notification);
function desktopNotification() { function desktopNotification() {
// send desktop notification // send desktop notification
const channel = context.getters.channels[data.message.channelID]; 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 (isMobile()) return;
if (isElectron && disableDesktopNotification === undefined) return sendNotification(); if (isElectron && disableDesktopNotification === undefined)
if (disableDesktopNotification !== undefined && disableDesktopNotification === false) return sendNotification() return sendNotification();
if (
disableDesktopNotification !== undefined &&
disableDesktopNotification === false
)
return sendNotification();
function sendNotification() { function sendNotification() {
if (channel && channel.server_id) { 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({ DesktopNotification.serverMessage({
serverName: server.name, serverName: server.name,
channelName: channel.name, channelName: channel.name,
username: data.message.creator.username, username: data.message.creator.username,
avatarURL: config.domain + '/avatars/' + server.avatar, avatarURL: config.domain + "/avatars/" + server.avatar,
message: data.message.message message: data.message.message
}) });
} else { } else {
DesktopNotification.directMessage({ DesktopNotification.directMessage({
username: data.message.creator.username, 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 message: data.message.message
}) });
} }
} }
} }
}, },
socket_userStatusChange(context, data) { socket_userStatusChange(context, data) {
if (context.rootState.user.user.uniqueID === data.uniqueID) return; 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) { socket_multiDeviceStatus(context, data) {
context.commit('changeStatus', data.status) context.commit("changeStatus", data.status);
}, },
socket_disconnect(context) { socket_disconnect(context) {
context.commit('user', null) context.commit("user", null);
}, },
socket_multiDeviceUserAvatarChange(context, data) { socket_multiDeviceUserAvatarChange(context, data) {
context.commit('changeAvatar', data.avatarID); context.commit("changeAvatar", data.avatarID);
}, },
socket_userAvatarChange(context, data) { 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) { if (context.rootGetters.user.uniqueID === data.uniqueID) {
context.dispatch('updateUser', data) context.dispatch("updateUser", data);
} }
}, },
['socket_channel:created'](context, data){ ["socket_channel:created"](context, data) {
const {channel} = data; const { channel } = data;
// rename to 'channel' to setChannel // rename to 'channel' to setChannel
context.dispatch('channel', channel); context.dispatch("channel", channel);
}, },
['socket_notification:dismiss'](context, data){ ["socket_notification:dismiss"](context, data) {
const {channelID} = data; const { channelID } = data;
context.dispatch('dismissNotification', channelID); context.dispatch("dismissNotification", channelID);
}, },
['socket_googleDrive:linked'](context) { ["socket_googleDrive:linked"](context) {
context.dispatch('setPopoutVisibility', {name: 'GDLinkMenu', visibility: false}) context.dispatch("setPopoutVisibility", {
context.dispatch('settingsModule/setGDriveLinked', true) name: "GDLinkMenu",
visibility: false
});
context.dispatch("settingsModule/setGDriveLinked", true);
}, },
['socket_customEmoji:uploaded'](context, emoji) { ["socket_customEmoji:uploaded"](context, emoji) {
context.dispatch('settingsModule/addCustomEmoji', emoji) context.dispatch("settingsModule/addCustomEmoji", emoji);
}, },
['socket_customEmoji:remove'](context, emoji) { ["socket_customEmoji:remove"](context, emoji) {
context.dispatch('settingsModule/removeCustomEmoji', emoji) context.dispatch("settingsModule/removeCustomEmoji", emoji);
}, },
['socket_customEmoji:rename'](context, emoji) { ["socket_customEmoji:rename"](context, emoji) {
context.dispatch('settingsModule/renameCustomEmoji', emoji) context.dispatch("settingsModule/renameCustomEmoji", emoji);
}, },
['socket_survey:completed'](context) { ["socket_survey:completed"](context) {
context.dispatch('surveyCompleted'); context.dispatch("surveyCompleted");
}, },
['socket_server:joined'](context, server) { ["socket_server:joined"](context, server) {
context.dispatch('servers/setServer', server) context.dispatch("servers/setServer", server);
const channels = server.channels; const channels = server.channels;
for (let index = 0; index < channels.length; index++) { for (let index = 0; index < channels.length; index++) {
const element = channels[index]; const element = channels[index];
element.server = undefined; element.server = undefined;
element.server_id = server.server_id; element.server_id = server.server_id;
context.dispatch('channel', element) context.dispatch("channel", element);
context.dispatch("servers/AddChannelsIDs", { context.dispatch("servers/AddChannelsIDs", {
serverID: server.server_id, serverID: server.server_id,
channelsIDs: [element.channelID] channelsIDs: [element.channelID]
@ -269,18 +292,25 @@ const actions = {
if (!server.socketID) return; if (!server.socketID) return;
if (this._vm.$socket.id !== server.socketID) return; if (this._vm.$socket.id !== server.socketID) return;
const defaultChannel = channels.find(c => c.channelID === server.default_channel_id) const defaultChannel = channels.find(
context.dispatch('setCurrentTab', 2, {root: true}) c => c.channelID === server.default_channel_id
context.dispatch('servers/setSelectedServerID', server.server_id, {root: true}) );
context.dispatch('openChannel', defaultChannel, {root: true}) 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}) { ["socket_server:leave"](context, { server_id }) {
const lastSelectedChannel = JSON.parse(localStorage.getItem('selectedChannels') || '{}') const lastSelectedChannel = JSON.parse(
localStorage.getItem("selectedChannels") || "{}"
);
if (lastSelectedChannel[server_id]) { if (lastSelectedChannel[server_id]) {
delete lastSelectedChannel[server_id]; delete lastSelectedChannel[server_id];
localStorage.setItem('selectedChannels', JSON.stringify(lastSelectedChannel)); localStorage.setItem(
"selectedChannels",
JSON.stringify(lastSelectedChannel)
);
} }
// check if server channel selected // check if server channel selected
const serverChannelIDs = context.rootState.servers.channelsIDs[server_id]; const serverChannelIDs = context.rootState.servers.channelsIDs[server_id];
@ -289,31 +319,37 @@ const actions = {
const serverChannelID = context.rootState.channelModule.serverChannelID; const serverChannelID = context.rootState.channelModule.serverChannelID;
if (serverChannelIDs.includes(selectedChannelID)) { if (serverChannelIDs.includes(selectedChannelID)) {
context.dispatch('selectedChannelID', null) context.dispatch("selectedChannelID", null);
} }
if (serverChannelIDs.includes(serverChannelID)) { if (serverChannelIDs.includes(serverChannelID)) {
context.dispatch('setServerChannelID', null) context.dispatch("setServerChannelID", null);
} }
context.dispatch('servers/removePresences', server_id); context.dispatch("servers/removePresences", server_id);
context.dispatch('servers/removeServer', server_id) context.dispatch("servers/removeServer", server_id);
context.dispatch('servers/removeNotifications', server_id) context.dispatch("servers/removeNotifications", server_id);
context.dispatch('servers/removeAllServerChannels', server_id) context.dispatch("servers/removeAllServerChannels", server_id);
context.dispatch('deleteAllMessages', serverChannelIDs) 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); let sm = Object.assign({}, serverMember);
const member = sm.member; const member = sm.member;
delete sm.member; delete sm.member;
sm.uniqueID = member.uniqueID; sm.uniqueID = member.uniqueID;
context.dispatch('members/updatePresence', {uniqueID: member.uniqueID, status: presence}) context.dispatch("members/updatePresence", {
context.dispatch('members/addMember', member) uniqueID: member.uniqueID,
context.dispatch('servers/addServerMember', sm) status: presence
});
context.dispatch("members/addMember", member);
context.dispatch("servers/addServerMember", sm);
}, },
['socket_server:memberRemove'](context, {uniqueID, server_id}) { // member_remove ["socket_server:memberRemove"](context, { uniqueID, server_id }) {
context.dispatch('servers/removeServerMember', {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 serverMembersArr = [];
let members = {}; let members = {};
for (let serverMember of serverMembers) { for (let serverMember of serverMembers) {
@ -323,37 +359,49 @@ const actions = {
serverMembersArr.push(serverMember); serverMembersArr.push(serverMember);
members[member.uniqueID] = member; members[member.uniqueID] = member;
} }
context.dispatch('members/addMembers', members); context.dispatch("members/addMembers", members);
context.dispatch('servers/addServerMembers', serverMembers) context.dispatch("servers/addServerMembers", serverMembers);
let presences = {}; let presences = {};
for (const _presence of memberPresences) { for (const _presence of memberPresences) {
presences[_presence[0]] = _presence[1]; presences[_presence[0]] = _presence[1];
} }
context.dispatch('members/addPresences', presences); context.dispatch("members/addPresences", presences);
}, },
['socket_server:addChannel'](context, {channel}) { // add_channel ["socket_server:addChannel"](context, { channel }) {
context.dispatch('channel', channel); // add_channel
context.dispatch('servers/AddChannelsIDs', {serverID: channel.server_id, channelsIDs: [channel.channelID]}) context.dispatch("channel", channel);
context.dispatch("servers/AddChannelsIDs", {
serverID: channel.server_id,
channelsIDs: [channel.channelID]
});
}, },
['socket_server:updateChannel'](context, update) { // update_channel ["socket_server:updateChannel"](context, update) {
context.dispatch('updateChannel', update); // update_channel
context.dispatch("updateChannel", update);
}, },
['socket_server:removeChannel'](context, {server_id, channelID}) { ["socket_server:removeChannel"](context, { server_id, channelID }) {
context.dispatch('servers/removeServerChannel', {server_id, channelID}); context.dispatch("servers/removeServerChannel", { server_id, channelID });
context.dispatch('dismissNotification', channelID); context.dispatch("dismissNotification", channelID);
}, },
['socket_server:updateServer'](context, data) { ["socket_server:updateServer"](context, data) {
context.dispatch('servers/updateServer', {server_id: data.server_id, server: data}); context.dispatch("servers/updateServer", {
server_id: data.server_id,
server: data
});
}, },
['socket_updateMessage'](context, data) { ["socket_updateMessage"](context, data) {
context.dispatch('updateMessage', {channelID: data.channelID, messageID: data.messageID, message: data}); context.dispatch("updateMessage", {
channelID: data.channelID,
messageID: data.messageID,
message: data
});
}, },
['socket_deleteMessage'](context, {channelID, messageID}) { ["socket_deleteMessage"](context, { channelID, messageID }) {
context.dispatch('deleteMessage', {channelID, messageID}) context.dispatch("deleteMessage", { channelID, messageID });
}, }
} };
export default { export default {
namespace: true, namespace: true,
actions actions
} };