From f956f696f439e1051bac405df28546d16630412d Mon Sep 17 00:00:00 2001
From: chylex <contact@chylex.com>
Date: Wed, 10 Jan 2018 23:53:37 +0100
Subject: [PATCH] Limit some $TD functions to browser/notification, change
 displayTooltip params

---
 Core/Bridge/TweetDeckBridge.cs            | 107 ++++++++++++----------
 Core/FormBrowser.cs                       |   2 +-
 Core/Notification/FormNotificationMain.cs |   2 +-
 Resources/Scripts/code.js                 |   6 +-
 Resources/Scripts/notification.js         |   6 +-
 5 files changed, 68 insertions(+), 55 deletions(-)

diff --git a/Core/Bridge/TweetDeckBridge.cs b/Core/Bridge/TweetDeckBridge.cs
index 2831786f..aa376266 100644
--- a/Core/Bridge/TweetDeckBridge.cs
+++ b/Core/Bridge/TweetDeckBridge.cs
@@ -10,7 +10,7 @@
 using TweetDuck.Resources;
 
 namespace TweetDuck.Core.Bridge{
-    sealed class TweetDeckBridge{
+    class TweetDeckBridge{
         public static string FontSize { get; private set; }
         public static string NotificationHeadLayout { get; private set; }
 
@@ -45,41 +45,77 @@ public static void RestoreSessionData(IFrame frame){
         private readonly FormBrowser form;
         private readonly FormNotificationMain notification;
 
-        public TweetDeckBridge(FormBrowser form, FormNotificationMain notification){
+        protected TweetDeckBridge(FormBrowser form, FormNotificationMain notification){
             this.form = form;
             this.notification = notification;
         }
 
-        public void OnIntroductionClosed(bool showGuide, bool allowDataCollection){
-            form.InvokeAsyncSafe(() => {
-                form.OnIntroductionClosed(showGuide, allowDataCollection);
-            });
+        // Browser only
+
+        public sealed class Browser : TweetDeckBridge{
+            public Browser(FormBrowser form, FormNotificationMain notification) : base(form, notification){}
+
+            public void OpenContextMenu(){
+                form.InvokeAsyncSafe(form.OpenContextMenu);
+            }
+            
+            public void OnIntroductionClosed(bool showGuide, bool allowDataCollection){
+                form.InvokeAsyncSafe(() => {
+                    form.OnIntroductionClosed(showGuide, allowDataCollection);
+                });
+            }
+
+            public void LoadNotificationLayout(string fontSize, string headLayout){
+                form.InvokeAsyncSafe(() => {
+                    FontSize = fontSize;
+                    NotificationHeadLayout = headLayout;
+                });
+            }
+
+            public void SetLastHighlightedTweet(string tweetUrl, string quoteUrl, string authors, string imageList){
+                form.InvokeAsyncSafe(() => {
+                    LastHighlightedTweetUrl = tweetUrl;
+                    LastHighlightedQuoteUrl = quoteUrl;
+                    LastHighlightedTweetAuthors = authors;
+                    LastHighlightedTweetImages = imageList;
+                });
+            }
+
+            public void DisplayTooltip(string text){
+                form.InvokeAsyncSafe(() => form.DisplayTooltip(text));
+            }
+
+            public void SetSessionData(string key, string value){
+                form.InvokeSafe(() => { // do not use InvokeAsyncSafe, return only after invocation
+                    SessionData.Add(key, value);
+                });
+            }
         }
 
-        public void LoadNotificationLayout(string fontSize, string headLayout){
-            form.InvokeAsyncSafe(() => {
-                FontSize = fontSize;
-                NotificationHeadLayout = headLayout;
-            });
+        // Notification only
+
+        public sealed class Notification : TweetDeckBridge{
+            public Notification(FormBrowser form, FormNotificationMain notification) : base(form, notification){}
+
+            public void DisplayTooltip(string text){
+                notification.InvokeAsyncSafe(() => notification.DisplayTooltip(text));
+            }
+
+            public void LoadNextNotification(){
+                notification.InvokeAsyncSafe(notification.FinishCurrentNotification);
+            }
+
+            public void ShowTweetDetail(){
+                notification.InvokeAsyncSafe(notification.ShowTweetDetail);
+            }
         }
 
+        // Global
+
         public void SetLastRightClickInfo(string type, string link){
             form.InvokeAsyncSafe(() => ContextMenuBase.SetContextInfo(type, link));
         }
 
-        public void SetLastHighlightedTweet(string tweetUrl, string quoteUrl, string authors, string imageList){
-            form.InvokeAsyncSafe(() => {
-                LastHighlightedTweetUrl = tweetUrl;
-                LastHighlightedQuoteUrl = quoteUrl;
-                LastHighlightedTweetAuthors = authors;
-                LastHighlightedTweetImages = imageList;
-            });
-        }
-
-        public void OpenContextMenu(){
-            form.InvokeAsyncSafe(form.OpenContextMenu);
-        }
-
         public void OnTweetPopup(string columnId, string chirpId, string columnName, string tweetHtml, int tweetCharacters, string tweetUrl, string quoteUrl){
             notification.InvokeAsyncSafe(() => {
                 form.OnTweetNotification();
@@ -94,29 +130,6 @@ public void OnTweetSound(){
             });
         }
 
-        public void DisplayTooltip(string text, bool showInNotification){
-            if (showInNotification){
-                notification.InvokeAsyncSafe(() => notification.DisplayTooltip(text));
-            }
-            else{
-                form.InvokeAsyncSafe(() => form.DisplayTooltip(text));
-            }
-        }
-
-        public void SetSessionData(string key, string value){
-            form.InvokeSafe(() => { // do not use InvokeAsyncSafe, return only after invocation
-                SessionData.Add(key, value);
-            });
-        }
-
-        public void LoadNextNotification(){
-            notification.InvokeAsyncSafe(notification.FinishCurrentNotification);
-        }
-
-        public void ShowNotificationTweetDetail(){
-            notification.InvokeAsyncSafe(notification.ShowTweetDetail);
-        }
-
         public void ScreenshotTweet(string html, int width, int height){
             form.InvokeAsyncSafe(() => form.OnTweetScreenshotReady(html, width, height));
         }
diff --git a/Core/FormBrowser.cs b/Core/FormBrowser.cs
index aecedf65..ed964d6c 100644
--- a/Core/FormBrowser.cs
+++ b/Core/FormBrowser.cs
@@ -67,7 +67,7 @@ public FormBrowser(UpdaterSettings updaterSettings){
             this.notification = new FormNotificationTweet(this, plugins);
             this.notification.Show();
             
-            this.browser = new TweetDeckBrowser(this, plugins, new TweetDeckBridge(this, notification));
+            this.browser = new TweetDeckBrowser(this, plugins, new TweetDeckBridge.Browser(this, notification));
             this.browser.PageLoaded += browser_PageLoaded;
 
             this.contextMenu = ContextMenuBrowser.CreateMenu(this);
diff --git a/Core/Notification/FormNotificationMain.cs b/Core/Notification/FormNotificationMain.cs
index 7e712fed..334acd53 100644
--- a/Core/Notification/FormNotificationMain.cs
+++ b/Core/Notification/FormNotificationMain.cs
@@ -83,7 +83,7 @@ protected FormNotificationMain(FormBrowser owner, PluginManager pluginManager, b
             
             browser.KeyboardHandler = new KeyboardHandlerNotification(this);
             
-            browser.RegisterAsyncJsObject("$TD", new TweetDeckBridge(owner, this));
+            browser.RegisterAsyncJsObject("$TD", new TweetDeckBridge.Notification(owner, this));
             browser.RegisterAsyncJsObject("$TDP", plugins.Bridge);
 
             browser.LoadingStateChanged += Browser_LoadingStateChanged;
diff --git a/Resources/Scripts/code.js b/Resources/Scripts/code.js
index b89d362a..1fd3c43f 100644
--- a/Resources/Scripts/code.js
+++ b/Resources/Scripts/code.js
@@ -395,7 +395,7 @@
         }
         else{
           tooltipTimer = window.setTimeout(function(){
-            $TD.displayTooltip(me.attr("data-full-url"), false);
+            $TD.displayTooltip(me.attr("data-full-url"));
             tooltipDisplayed = true;
           }, 400);
         }
@@ -412,13 +412,13 @@
         
         if (tooltipDisplayed){
           tooltipDisplayed = false;
-          $TD.displayTooltip(null, false);
+          $TD.displayTooltip(null);
         }
       },
       
       mousemove: function(e){
         if (tooltipDisplayed && (prevMouseX !== e.clientX || prevMouseY !== e.clientY)){
-          $TD.displayTooltip($(this).attr("data-full-url"), false);
+          $TD.displayTooltip($(this).attr("data-full-url"));
           prevMouseX = e.clientX;
           prevMouseY = e.clientY;
         }
diff --git a/Resources/Scripts/notification.js b/Resources/Scripts/notification.js
index 125e921d..6c8de5bd 100644
--- a/Resources/Scripts/notification.js
+++ b/Resources/Scripts/notification.js
@@ -62,7 +62,7 @@
       }
       else{
         tooltipTimer = window.setTimeout(function(){
-          $TD.displayTooltip(url, true);
+          $TD.displayTooltip(url);
           tooltipDisplayed = true;
         }, 400);
       }
@@ -83,7 +83,7 @@
       
       if (tooltipDisplayed){
         tooltipDisplayed = false;
-        $TD.displayTooltip(null, true);
+        $TD.displayTooltip(null);
       }
     });
     
@@ -92,7 +92,7 @@
         var url = e.currentTarget.getAttribute("data-full-url");
         return if !url;
         
-        $TD.displayTooltip(url, true);
+        $TD.displayTooltip(url);
         prevMouseX = e.clientX;
         prevMouseY = e.clientY;
       }