From dcaa3aab192b843f828c403104e5a4670362d265 Mon Sep 17 00:00:00 2001
From: chylex <contact@chylex.com>
Date: Thu, 10 Aug 2017 00:51:38 +0200
Subject: [PATCH] Work around duplicate DM notifications and rewrite recent
 tweet check

---
 Resources/Scripts/code.js | 41 +++++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/Resources/Scripts/code.js b/Resources/Scripts/code.js
index a2dfe756..37c08c1d 100644
--- a/Resources/Scripts/code.js
+++ b/Resources/Scripts/code.js
@@ -97,30 +97,30 @@
   // Function: Event callback for a new tweet.
   //
   var onNewTweet = (function(){
+    let recentMessages = new Set();
     let recentTweets = new Set();
     let recentTweetTimer = null;
     
-    let startRecentTweetTimer = () => {
-      if (recentTweetTimer){
-        window.clearTimeout(recentTweetTimer);
-      }
-      
-      recentTweetTimer = window.setTimeout(() => {
-        recentTweetTimer = null;
-        recentTweets.clear();
-      }, 20000);
+    let resetRecentTweets = () => {
+      recentTweetTimer = null;
+      recentTweets.clear();
     };
     
-    let checkRecentTweet = id => {
-      if (recentTweets.size > 50){
-        recentTweets.clear();
-      }
-      else if (recentTweets.has(id)){
+    let startRecentTweetTimer = () => {
+      recentTweetTimer && window.clearTimeout(recentTweetTimer);
+      recentTweetTimer = window.setTimeout(resetRecentTweets, 20000);
+    };
+    
+    let checkTweetCache = (set, id) => {
+      if (set.has(id)){
         return true;
       }
       
-      recentTweets.add(id);
-      startRecentTweetTimer();
+      if (set.size > 50){
+        set.clear();
+      }
+      
+      set.add(id);
       return false;
     };
     
@@ -129,10 +129,17 @@
     };
     
     return function(column, tweet){
-      if (checkRecentTweet(tweet.id)){
+      if (tweet instanceof TD.services.TwitterConversation){
+        if (checkTweetCache(recentMessages, tweet.id)){
+          return;
+        }
+      }
+      else if (checkTweetCache(recentTweets, tweet.id)){
         return;
       }
       
+      startRecentTweetTimer();
+      
       if (column.model.getHasNotification()){
         let previews = $TDX.notificationMediaPreviews;