Example #1
0
 public void OnTweetSound()
 {
     form.InvokeAsyncSafe(() => {
         form.OnTweetNotification();
         form.OnTweetSound();
     });
 }
Example #2
0
        public override bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
        {
            if (base.OnContextMenuCommand(browserControl, browser, frame, parameters, commandId, eventFlags))
            {
                return(true);
            }

            switch (commandId)
            {
            case CefMenuCommand.Reload:
                form.InvokeAsyncSafe(form.ReloadToTweetDeck);
                return(true);

            case MenuSettings:
                form.InvokeAsyncSafe(form.OpenSettings);
                return(true);

            case MenuAbout:
                form.InvokeAsyncSafe(form.OpenAbout);
                return(true);

            case MenuPlugins:
                form.InvokeAsyncSafe(form.OpenPlugins);
                return(true);

            case MenuMute:
                form.InvokeAsyncSafe(ToggleMuteNotifications);
                return(true);

            default:
                return(false);
            }
        }
Example #3
0
        public static IResourceHandler CreateFileHandler(string path)
        {
            string mimeType;

            switch (Path.GetExtension(path))
            {
            case ".weba":
            case ".webm": mimeType = "audio/webm"; break;

            case ".wav": mimeType = "audio/wav"; break;

            case ".ogg": mimeType = "audio/ogg"; break;

            case ".mp3": mimeType = "audio/mp3"; break;

            case ".flac": mimeType = "audio/flac"; break;

            case ".opus": mimeType = "audio/ogg; codecs=opus"; break;

            default: mimeType = null; break;
            }

            try{
                return(ResourceHandler.FromFilePath(path, mimeType));
            }catch {
                FormBrowser browser = FormManager.TryFind <FormBrowser>();

                browser?.InvokeAsyncSafe(() => {
                    using (FormMessage form = new FormMessage("Sound Notification Error", "Could not find custom notification sound file:\n" + path, MessageBoxIcon.Error)){
                        form.AddButton(FormMessage.Ignore, ControlType.Cancel | ControlType.Focused);

                        Button btnViewOptions   = form.AddButton("View Options");
                        btnViewOptions.Width   += 16;
                        btnViewOptions.Location = new Point(btnViewOptions.Location.X - 16, btnViewOptions.Location.Y);

                        if (form.ShowDialog() == DialogResult.OK && form.ClickedButton == btnViewOptions)
                        {
                            browser.OpenSettings(typeof(TabSettingsSounds));
                        }
                    }
                });

                return(null);
            }
        }
Example #4
0
        public override bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
        {
            if (base.OnContextMenuCommand(browserControl, browser, frame, parameters, commandId, eventFlags))
            {
                return(true);
            }

            switch ((int)commandId)
            {
            case (int)CefMenuCommand.Reload:
                form.InvokeAsyncSafe(form.ReloadToTweetDeck);
                return(true);

            case MenuSettings:
                form.InvokeAsyncSafe(form.OpenSettings);
                return(true);

            case MenuAbout:
                form.InvokeAsyncSafe(form.OpenAbout);
                return(true);

            case MenuPlugins:
                form.InvokeAsyncSafe(form.OpenPlugins);
                return(true);

            case MenuMute:
                form.InvokeAsyncSafe(ToggleMuteNotifications);
                return(true);

            case MenuOpenTweetUrl:
                BrowserUtils.OpenExternalBrowser(lastHighlightedTweet);
                return(true);

            case MenuCopyTweetUrl:
                SetClipboardText(lastHighlightedTweet);
                return(true);

            case MenuScreenshotTweet:
                form.InvokeAsyncSafe(form.TriggerTweetScreenshot);
                return(true);

            case MenuOpenQuotedTweetUrl:
                BrowserUtils.OpenExternalBrowser(lastHighlightedQuotedTweet);
                return(true);

            case MenuCopyQuotedTweetUrl:
                SetClipboardText(lastHighlightedQuotedTweet);
                return(true);
            }

            return(false);
        }
Example #5
0
        private void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (owner == null || browser == null)
            {
                return;
            }

            if (needsCleanup)
            {
                if (!owner.ContainsFocus)
                {
                    using (IFrame frame = browser.MainFrame){
                        frame.EvaluateScriptAsync(script).ContinueWith(task => {
                            JavascriptResponse response = task.Result;

                            if (response.Success && (response.Result as bool? ?? false))
                            {
                                SetNeedsCleanup(false);
                                owner.InvokeAsyncSafe(() => owner.TriggerAnalyticsEvent(Analytics.AnalyticsFile.Event.GCReload));
                            }
                        });
                    }
                }
            }
            else
            {
                try{
                    using (Process process = BrowserProcesses.FindProcess(browser)){
                        if (process?.PrivateMemorySize64 > threshold)
                        {
                            SetNeedsCleanup(true);
                        }
                    }
                }catch {
                    // ignore I guess?
                }
            }
        }
Example #6
0
        public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
        {
            bool isSelecting = parameters.TypeFlags.HasFlag(ContextMenuType.Selection);
            bool isEditing   = parameters.TypeFlags.HasFlag(ContextMenuType.Editable);

            model.Remove(CefMenuCommand.Back);
            model.Remove(CefMenuCommand.Forward);
            model.Remove(CefMenuCommand.Print);
            model.Remove(CefMenuCommand.ViewSource);
            RemoveSeparatorIfLast(model);

            if (isSelecting)
            {
                if (isEditing)
                {
                    model.AddSeparator();
                    model.AddItem(MenuWriteApplyROT13, "Apply ROT13");
                }

                model.AddSeparator();
            }

            base.OnBeforeContextMenu(browserControl, browser, frame, parameters, model);

            if (isSelecting && !isEditing && TwitterUrls.IsTweetDeck(frame.Url))
            {
                InsertSelectionSearchItem(model, MenuSearchInColumn, "Search in a column");
            }

            if (Context.Types.HasFlag(ContextInfo.ContextType.Chirp) && !isSelecting && !isEditing)
            {
                model.AddItem(MenuOpenTweetUrl, "Open tweet in browser");
                model.AddItem(MenuCopyTweetUrl, "Copy tweet address");
                model.AddItem(MenuScreenshotTweet, "Screenshot tweet to clipboard");

                if (!string.IsNullOrEmpty(Context.Chirp.QuoteUrl))
                {
                    model.AddSeparator();
                    model.AddItem(MenuOpenQuotedTweetUrl, "Open quoted tweet in browser");
                    model.AddItem(MenuCopyQuotedTweetUrl, "Copy quoted tweet address");
                }

                model.AddSeparator();
            }

            if (!isSelecting && !isEditing)
            {
                AddSeparator(model);

                IMenuModel globalMenu = model.Count == 0 ? model : model.AddSubMenu(MenuGlobal, Program.BrandName);

                globalMenu.AddItem(CefMenuCommand.Reload, TitleReloadBrowser);
                globalMenu.AddCheckItem(MenuMute, TitleMuteNotifications);
                globalMenu.SetChecked(MenuMute, Config.MuteNotifications);
                globalMenu.AddSeparator();

                globalMenu.AddItem(MenuSettings, TitleSettings);
                globalMenu.AddItem(MenuPlugins, TitlePlugins);
                globalMenu.AddItem(MenuAbout, TitleAboutProgram);

                AddDebugMenuItems(globalMenu);
            }

            RemoveSeparatorIfLast(model);

            form.InvokeAsyncSafe(form.AnalyticsFile.BrowserContextMenus.Trigger);
        }
Example #7
0
 public void LoadFontSizeClass(string fsClass)
 {
     form.InvokeAsyncSafe(() => {
         TweetNotification.SetFontSizeClass(fsClass);
     });
 }
Example #8
0
 public void OnIntroductionClosed(bool showGuide, bool allowDataCollection)
 {
     form.InvokeAsyncSafe(() => {
         form.OnIntroductionClosed(showGuide, allowDataCollection);
     });
 }
Example #9
0
        public override void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
        {
            model.Remove(CefMenuCommand.Back);
            model.Remove(CefMenuCommand.Forward);
            model.Remove(CefMenuCommand.Print);
            model.Remove(CefMenuCommand.ViewSource);
            RemoveSeparatorIfLast(model);

            if (parameters.TypeFlags.HasFlag(ContextMenuType.Selection))
            {
                if (parameters.TypeFlags.HasFlag(ContextMenuType.Editable))
                {
                    model.AddSeparator();
                    model.AddItem(MenuInputApplyROT13, "Apply ROT13");
                }

                model.AddSeparator();
            }

            base.OnBeforeContextMenu(browserControl, browser, frame, parameters, model);

            lastHighlightedTweetUrl = TweetDeckBridge.LastHighlightedTweetUrl;
            lastHighlightedQuoteUrl = TweetDeckBridge.LastHighlightedQuoteUrl;

            if (!TwitterUtils.IsTweetDeckWebsite(frame) || browser.IsLoading)
            {
                lastHighlightedTweetUrl = string.Empty;
                lastHighlightedQuoteUrl = string.Empty;
            }

            if (!string.IsNullOrEmpty(lastHighlightedTweetUrl) && (parameters.TypeFlags & (ContextMenuType.Editable | ContextMenuType.Selection)) == 0)
            {
                model.AddItem(MenuOpenTweetUrl, "Open tweet in browser");
                model.AddItem(MenuCopyTweetUrl, "Copy tweet address");
                model.AddItem(MenuScreenshotTweet, "Screenshot tweet to clipboard");

                if (!string.IsNullOrEmpty(lastHighlightedQuoteUrl))
                {
                    model.AddSeparator();
                    model.AddItem(MenuOpenQuotedTweetUrl, "Open quoted tweet in browser");
                    model.AddItem(MenuCopyQuotedTweetUrl, "Copy quoted tweet address");
                }

                model.AddSeparator();
            }

            if ((parameters.TypeFlags & (ContextMenuType.Editable | ContextMenuType.Selection)) == 0)
            {
                AddSeparator(model);

                IMenuModel globalMenu = model.Count == 0 ? model : model.AddSubMenu(MenuGlobal, Program.BrandName);

                globalMenu.AddItem(CefMenuCommand.Reload, TitleReloadBrowser);
                globalMenu.AddCheckItem(MenuMute, TitleMuteNotifications);
                globalMenu.SetChecked(MenuMute, Program.UserConfig.MuteNotifications);
                globalMenu.AddSeparator();

                globalMenu.AddItem(MenuSettings, TitleSettings);
                globalMenu.AddItem(MenuPlugins, TitlePlugins);
                globalMenu.AddItem(MenuAbout, TitleAboutProgram);

                if (HasDevTools)
                {
                    globalMenu.AddSeparator();
                    AddDebugMenuItems(globalMenu);
                }
            }

            RemoveSeparatorIfLast(model);

            form.InvokeAsyncSafe(() => form.TriggerAnalyticsEvent(AnalyticsFile.Event.BrowserContextMenu));
        }