diff --git a/Core/Bridge/TweetDeckBridge.cs b/Core/Bridge/TweetDeckBridge.cs index 397b5846..8df6c000 100644 --- a/Core/Bridge/TweetDeckBridge.cs +++ b/Core/Bridge/TweetDeckBridge.cs @@ -117,8 +117,8 @@ public void ScreenshotTweet(string html, int width, int height){ form.InvokeAsyncSafe(() => form.OnTweetScreenshotReady(html, width, height)); } - public void PlayVideo(string url){ - form.InvokeAsyncSafe(() => form.PlayVideo(url)); + public void PlayVideo(string url, string username){ + form.InvokeAsyncSafe(() => form.PlayVideo(url, username)); } public void FixClipboard(){ diff --git a/Core/FormBrowser.cs b/Core/FormBrowser.cs index 4195b859..4fe77f9d 100644 --- a/Core/FormBrowser.cs +++ b/Core/FormBrowser.cs @@ -541,7 +541,7 @@ public void PlayNotificationSound(){ soundNotification.Play(Config.NotificationSoundPath); } - public void PlayVideo(string url){ + public void PlayVideo(string url, string username){ if (string.IsNullOrEmpty(url)){ videoPlayer?.Close(); return; @@ -556,7 +556,7 @@ public void PlayVideo(string url){ }; } - videoPlayer.Launch(url); + videoPlayer.Launch(url, username); } public void HideVideoOverlay(){ diff --git a/Core/Handling/ContextMenuBase.cs b/Core/Handling/ContextMenuBase.cs index b266ffb6..93c02541 100644 --- a/Core/Handling/ContextMenuBase.cs +++ b/Core/Handling/ContextMenuBase.cs @@ -116,7 +116,7 @@ public virtual bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser br case MenuSaveMedia: if (IsVideo){ - TwitterUtils.DownloadVideo(GetMediaLink(parameters)); + TwitterUtils.DownloadVideo(GetMediaLink(parameters), lastHighlightedTweetAuthors.LastOrDefault()); } else{ TwitterUtils.DownloadImage(GetMediaLink(parameters), lastHighlightedTweetAuthors.LastOrDefault(), ImageQuality); diff --git a/Core/Other/Management/VideoPlayer.cs b/Core/Other/Management/VideoPlayer.cs index c18e1acb..50150bb0 100644 --- a/Core/Other/Management/VideoPlayer.cs +++ b/Core/Other/Management/VideoPlayer.cs @@ -25,6 +25,7 @@ public bool Running{ private readonly Form owner; private string lastUrl; + private string lastUsername; private Process currentProcess; private DuplexPipe.Server currentPipe; @@ -35,14 +36,15 @@ public VideoPlayer(Form owner){ this.owner.FormClosing += owner_FormClosing; } - public void Launch(string url){ + public void Launch(string url, string username){ if (Running){ Destroy(); isClosing = false; } lastUrl = url; - + lastUsername = username; + try{ currentPipe = DuplexPipe.CreateServer(); currentPipe.DataIn += currentPipe_DataIn; @@ -84,7 +86,7 @@ private void currentPipe_DataIn(object sender, DuplexPipe.PipeReadEventArgs e){ break; case "download": - TwitterUtils.DownloadVideo(lastUrl); + TwitterUtils.DownloadVideo(lastUrl, lastUsername); break; case "rip": @@ -157,14 +159,14 @@ private void process_Exited(object sender, EventArgs e){ switch(exitCode){ case 3: // CODE_LAUNCH_FAIL - if (FormMessage.Error("Video Playback Error", "Error launching video player, this may be caused by missing Windows Media Player. Do you want to open the video in a browser?", FormMessage.Yes, FormMessage.No)){ + if (FormMessage.Error("Video Playback Error", "Error launching video player, this may be caused by missing Windows Media Player. Do you want to open the video in your browser?", FormMessage.Yes, FormMessage.No)){ BrowserUtils.OpenExternalBrowser(lastUrl); } break; case 4: // CODE_MEDIA_ERROR - if (FormMessage.Error("Video Playback Error", "The video could not be loaded, most likely due to unknown format. Do you want to open the video in a browser?", FormMessage.Yes, FormMessage.No)){ + if (FormMessage.Error("Video Playback Error", "The video could not be loaded, most likely due to unknown format. Do you want to open the video in your browser?", FormMessage.Yes, FormMessage.No)){ BrowserUtils.OpenExternalBrowser(lastUrl); } diff --git a/Core/Utils/TwitterUtils.cs b/Core/Utils/TwitterUtils.cs index 986972db..701682f0 100644 --- a/Core/Utils/TwitterUtils.cs +++ b/Core/Utils/TwitterUtils.cs @@ -103,7 +103,7 @@ void OnFailure(Exception ex){ } } - public static void DownloadVideo(string url){ + public static void DownloadVideo(string url, string username){ string filename = BrowserUtils.GetFileNameFromUrl(url); string ext = Path.GetExtension(filename); @@ -111,7 +111,7 @@ public static void DownloadVideo(string url){ AutoUpgradeEnabled = true, OverwritePrompt = true, Title = "Save video", - FileName = filename, + FileName = string.IsNullOrEmpty(username) ? filename : $"{username} {filename}", Filter = "Video"+(string.IsNullOrEmpty(ext) ? " (unknown)|*.*" : $" (*{ext})|*{ext}") }){ if (dialog.ShowDialog() == DialogResult.OK){ diff --git a/Resources/Scripts/code.js b/Resources/Scripts/code.js index d3a19753..d56c65d4 100644 --- a/Resources/Scripts/code.js +++ b/Resources/Scripts/code.js @@ -928,12 +928,12 @@ // Block: Setup video player hooks. // (function(){ - window.TDGF_playVideo = function(url){ + window.TDGF_playVideo = function(url, username){ $('<div id="td-video-player-overlay" class="ovl" style="display:block"></div>').on("click contextmenu", function(){ $TD.playVideo(null, null); }).appendTo(app); - $TD.playVideo(url); + $TD.playVideo(url, username || null); }; var getVideoTweetLink = function(obj){ @@ -942,12 +942,16 @@ return link.attr("href"); } + var getUsername = function(tweet){ + return tweet && (tweet.quotedTweet || tweet).getMainUser().screenName; + } + app.delegate(".js-gif-play", { click: function(e){ let src = !e.ctrlKey && $(this).closest(".js-media-gif-container").find("video").attr("src"); if (src){ - window.TDGF_playVideo(src); + window.TDGF_playVideo(src, getUsername(highlightedTweetObj)); } else{ $TD.openBrowser(getVideoTweetLink($(this))); @@ -981,9 +985,9 @@ TD.components.MediaGallery.prototype._loadTweet = appendToFunction(TD.components.MediaGallery.prototype._loadTweet, function(){ let media = this.chirp.getMedia().find(media => media.mediaId === this.clickedMediaEntityId); - + if (media && media.isVideo && media.service === "twitter"){ - window.TDGF_playVideo(media.chooseVideoVariant().url); + window.TDGF_playVideo(media.chooseVideoVariant().url, getUsername(this.chirp)); cancelModal = true; } });