From 9db11aeda77be5368e2f13cacf1e32bebfcb0bc7 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 18 Sep 2018 16:35:53 -0700 Subject: [PATCH] Bugfixes and new algo for PAL notifs --- scripts/system/pal.js | 77 +++++++++++++++-------------------- scripts/system/tablet-goto.js | 36 ++++++++-------- 2 files changed, 50 insertions(+), 63 deletions(-) diff --git a/scripts/system/pal.js b/scripts/system/pal.js index 38359fbab9..355ed0a504 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -823,46 +823,42 @@ function notificationDataProcessPage(data) { } var shouldShowDot = false; -var storedOnlineUsersArray = []; +var pingPong = false; +var storedOnlineUsers = {}; function notificationPollCallback(connectionsArray) { // // START logic for handling online/offline user changes // - var i, j; - var newlyOnlineConnectionsArray = []; - for (i = 0; i < connectionsArray.length; i++) { - var currentUser = connectionsArray[i]; + pingPong = !pingPong; + var newOnlineUsers = 0; + var message; - if (connectionsArray[i].online) { - var indexOfStoredOnlineUser = -1; - for (j = 0; j < storedOnlineUsersArray.length; j++) { - if (currentUser.username === storedOnlineUsersArray[j].username) { - indexOfStoredOnlineUser = j; - break; - } - } - // If the user record isn't already presesnt inside `storedOnlineUsersArray`... - if (indexOfStoredOnlineUser < 0) { - storedOnlineUsersArray.push(currentUser); - newlyOnlineConnectionsArray.push(currentUser); - } - } else { - var indexOfOfflineUser = -1; - for (j = 0; j < storedOnlineUsersArray.length; j++) { - if (currentUser.username === storedOnlineUsersArray[j].username) { - indexOfOfflineUser = j; - break; - } - } - if (indexOfOfflineUser >= 0) { - storedOnlineUsersArray.splice(indexOfOfflineUser); + connectionsArray.forEach(function (user) { + var stored = storedOnlineUsers[user.username]; + var storedOrNew = stored || user; + storedOrNew.pingPong = pingPong; + if (stored) { + return; + } + + if (user.online) { + newOnlineUsers++; + storedOnlineUsers[user.username] = user; + + if (!ui.isOpen && ui.notificationInitialCallbackMade) { + message = user.username + " is available in " + + user.location.root.name + "! Open PEOPLE to join them."; + ui.notificationDisplayBanner(message); } } + }); + var key; + for (key in storedOnlineUsers) { + if (storedOnlineUsers[key].pingPong !== pingPong) { + delete storedOnlineUsers[key]; + } } - // If there's new data, the light should turn on. - // If the light is already on and you have connections online, the light should stay on. - // In all other cases, the light should turn off or stay off. - shouldShowDot = newlyOnlineConnectionsArray.length > 0 || (storedOnlineUsersArray.length > 0 && shouldShowDot); + shouldShowDot = newOnlineUsers > 0 || (Object.keys(storedOnlineUsers).length > 0 && shouldShowDot); // // END logic for handling online/offline user changes // @@ -874,19 +870,10 @@ function notificationPollCallback(connectionsArray) { shouldShowDot: shouldShowDot }); - if (newlyOnlineConnectionsArray.length > 0) { - var message; - if (!ui.notificationInitialCallbackMade) { - message = newlyOnlineConnectionsArray.length + " of your connections " + - (newlyOnlineConnectionsArray.length === 1 ? "is" : "are") + " online! Open PEOPLE to join them."; - ui.notificationDisplayBanner(message); - } else { - for (i = 0; i < newlyOnlineConnectionsArray.length; i++) { - message = newlyOnlineConnectionsArray[i].username + " is available in " + - newlyOnlineConnectionsArray[i].location.root.name + "! Open PEOPLE to join them."; - ui.notificationDisplayBanner(message); - } - } + if (newOnlineUsers > 0 && !ui.notificationInitialCallbackMade) { + message = newOnlineUsers + " of your connections " + + (newOnlineUsers === 1 ? "is" : "are") + " online! Open PEOPLE to join them."; + ui.notificationDisplayBanner(message); } } } diff --git a/scripts/system/tablet-goto.js b/scripts/system/tablet-goto.js index 26099828dc..972b9d9841 100644 --- a/scripts/system/tablet-goto.js +++ b/scripts/system/tablet-goto.js @@ -29,12 +29,14 @@ var shouldShowDot = false; var pingPong = false; var storedAnnouncements = {}; var storedFeaturedStories = {}; +var message; function notificationPollCallback(userStoriesArray) { // // START logic for keeping track of new info // pingPong = !pingPong; var totalCountedStories = 0; + var shouldNotifyIndividually = !ui.isOpen && ui.notificationInitialCallbackMade; userStoriesArray.forEach(function (story) { if (story.audience !== "for_connections" && story.audience !== "for_feed") { @@ -52,8 +54,20 @@ function notificationPollCallback(userStoriesArray) { if (story.audience === "for_connections") { storedAnnouncements[story.id] = story; + + if (shouldNotifyIndividually) { + message = storedAnnouncements[key].username + " says something is happening in " + + storedAnnouncements[key].place_name + "! Open GOTO to join them."; + ui.notificationDisplayBanner(message); + } } else if (story.audience === "for_feed") { storedFeaturedStories[story.id] = story; + + if (shouldNotifyIndividually) { + message = storedFeaturedStories[key].username + " has invited you to an event in " + + storedFeaturedStories[key].place_name + "! Open GOTO to join them."; + ui.notificationDisplayBanner(message); + } } }); var key; @@ -76,24 +90,10 @@ function notificationPollCallback(userStoriesArray) { shouldShowDot = totalCountedStories > 0 || (notificationCount > 0 && shouldShowDot); ui.messagesWaiting(shouldShowDot && !ui.isOpen); - if (notificationCount > 0 && !ui.isOpen) { - var message; - if (!ui.notificationInitialCallbackMade) { - message = "You have " + userStoriesArray.length + "event invitations pending! " + - "Open GOTO to see them."; - ui.notificationDisplayBanner(message); - } else { - for (key in storedAnnouncements) { - message = storedAnnouncements[key].username + " says something is happening in " + - storedAnnouncements[key].place_name + "! Open GOTO to join them."; - ui.notificationDisplayBanner(message); - } - for (key in storedFeaturedStories) { - message = storedFeaturedStories[key].username + " has invited you to an event in " + - storedFeaturedStories[key].place_name + "! Open GOTO to join them."; - ui.notificationDisplayBanner(message); - } - } + if (notificationCount > 0 && !ui.isOpen && !ui.notificationInitialCallbackMade) { + message = "You have " + notificationCount + "event invitations pending! " + + "Open GOTO to see them."; + ui.notificationDisplayBanner(message); } }