diff --git a/Core/Handling/RequestHandlerBase.cs b/Core/Handling/RequestHandlerBase.cs index cf650121..9b4235a2 100644 --- a/Core/Handling/RequestHandlerBase.cs +++ b/Core/Handling/RequestHandlerBase.cs @@ -1,9 +1,18 @@ -using System.Collections.Specialized; +// Uncomment to force TweetDeck to load a predefined version of the vendor/bundle scripts and stylesheets +// #define FREEZE_TWEETDECK_RESOURCES + +using System.Collections.Specialized; using CefSharp; using CefSharp.Handler; using TweetDuck.Core.Handling.General; using TweetDuck.Core.Utils; +#if FREEZE_TWEETDECK_RESOURCES +using System.Collections.Generic; +using System.Diagnostics; +using System.Text.RegularExpressions; +#endif + namespace TweetDuck.Core.Handling{ class RequestHandlerBase : DefaultRequestHandler{ private readonly bool autoReload; @@ -31,5 +40,36 @@ public override void OnRenderProcessTerminated(IWebBrowser browserControl, IBrow browser.Reload(); } } + + #if FREEZE_TWEETDECK_RESOURCES + private static readonly Regex TweetDeckResourceUrl = new Regex(@"/dist/(.*?)\.(.*?)\.(css|js)$", RegexOptions.Compiled); + + private static readonly SortedList<string, string> TweetDeckHashes = new SortedList<string, string>(2){ + { "vendor.js", "d897f6b9ed" }, + { "bundle.js", "851d3877b9" }, + { "vendor.css", "ce7cdd10b6" }, + { "bundle.css", "c339f07047" } + }; + + public override bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response){ + if (request.ResourceType == ResourceType.Script || request.ResourceType == ResourceType.Stylesheet){ + string url = request.Url; + Match match = TweetDeckResourceUrl.Match(url); + + if (match.Success && TweetDeckHashes.TryGetValue($"{match.Groups[1]}.{match.Groups[3]}", out string hash)){ + if (match.Groups[2].Value == hash){ + Debug.WriteLine($"Accepting {url}"); + } + else{ + Debug.WriteLine($"Rewriting {url} hash to {hash}"); + request.Url = TweetDeckResourceUrl.Replace(url, $"/dist/$1.{hash}.$3"); + return true; + } + } + } + + return base.OnResourceResponse(browserControl, browser, frame, request, response); + } + #endif } } diff --git a/Core/Handling/RequestHandlerBrowser.cs b/Core/Handling/RequestHandlerBrowser.cs index 2ba62df4..b8cda481 100644 --- a/Core/Handling/RequestHandlerBrowser.cs +++ b/Core/Handling/RequestHandlerBrowser.cs @@ -1,16 +1,8 @@ -// Uncomment to force TweetDeck to load a predefined version of the vendor/bundle scripts -// #define FREEZE_TWEETDECK_SCRIPTS - -using System.Collections.Specialized; +using System.Collections.Specialized; using CefSharp; using TweetDuck.Core.Handling.Filters; using TweetDuck.Core.Utils; -#if FREEZE_TWEETDECK_SCRIPTS -using System.Collections.Generic; -using System.Text.RegularExpressions; -#endif - namespace TweetDuck.Core.Handling{ sealed class RequestHandlerBrowser : RequestHandlerBase{ public string BlockNextUserNavUrl { get; set; } @@ -36,36 +28,11 @@ public override bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser return base.OnBeforeBrowse(browserControl, browser, frame, request, userGesture, isRedirect); } - #if FREEZE_TWEETDECK_SCRIPTS - private static readonly Regex TweetDeckScriptUrl = new Regex(@"/dist/(.*?)\.(.*?)\.js$", RegexOptions.Compiled); - - private static readonly SortedList<string, string> TweetDeckHashes = new SortedList<string, string>(2){ - { "vendor", "942c0a20e8" }, - { "bundle", "1bd75b5854" } - }; - #endif - public override bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response){ if (request.ResourceType == ResourceType.Image && request.Url.Contains("/backgrounds/spinner_blue")){ request.Url = TwitterUtils.LoadingSpinner.Url; return true; } - #if FREEZE_TWEETDECK_SCRIPTS - else if (request.ResourceType == ResourceType.Script){ - Match match = TweetDeckScriptUrl.Match(request.Url); - - if (match.Success && TweetDeckHashes.TryGetValue(match.Groups[1].Value, out string hash)){ - if (match.Groups[2].Value == hash){ - System.Diagnostics.Debug.WriteLine($"accepting {request.Url}"); - } - else{ - System.Diagnostics.Debug.WriteLine($"rewriting {request.Url} to {hash}"); - request.Url = TweetDeckScriptUrl.Replace(request.Url, "/dist/$1."+hash+".js"); - return true; - } - } - } - #endif return base.OnResourceResponse(browserControl, browser, frame, request, response); }