diff --git a/Core/FormBrowser.cs b/Core/FormBrowser.cs index 46a004b6..ecc76acf 100644 --- a/Core/FormBrowser.cs +++ b/Core/FormBrowser.cs @@ -99,6 +99,7 @@ public FormBrowser(PluginManager pluginManager, UpdaterSettings updaterSettings) this.updates = new UpdateHandler(browser, this, updaterSettings); this.updates.UpdateAccepted += updates_UpdateAccepted; + this.updates.UpdateDismissed += updates_UpdateDismissed; } private void ShowChildForm(Form form){ @@ -246,6 +247,11 @@ private void updates_UpdateAccepted(object sender, UpdateAcceptedEventArgs e){ } } + private void updates_UpdateDismissed(object sender, UpdateDismissedEventArgs e){ + Config.DismissedUpdate = e.VersionTag; + Config.Save(); + } + protected override void WndProc(ref Message m){ if (isLoaded && m.Msg == Program.WindowRestoreMessage){ trayIcon_ClickRestore(trayIcon, new EventArgs()); diff --git a/Core/Other/Settings/TabSettingsUpdates.cs b/Core/Other/Settings/TabSettingsUpdates.cs index 39bea95b..d9ebc25e 100644 --- a/Core/Other/Settings/TabSettingsUpdates.cs +++ b/Core/Other/Settings/TabSettingsUpdates.cs @@ -28,12 +28,17 @@ private void checkUpdateNotifications_CheckedChanged(object sender, EventArgs e) private void btnCheckUpdates_Click(object sender, EventArgs e){ if (!Ready)return; - Config.DismissedUpdate = string.Empty; - Config.Save(); - updateCheckEventId = updates.Check(true); - btnCheckUpdates.Enabled = false; + if (updateCheckEventId == -1){ + MessageBox.Show("Sorry, your system is no longer supported.", "Unsupported System", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else{ + btnCheckUpdates.Enabled = false; + + Config.DismissedUpdate = string.Empty; + Config.Save(); + } } private void updates_CheckFinished(object sender, UpdateCheckEventArgs e){ diff --git a/Program.cs b/Program.cs index d58df92a..738c2863 100644 --- a/Program.cs +++ b/Program.cs @@ -155,7 +155,8 @@ private static void Main(){ plugins.Reload(); FormBrowser mainForm = new FormBrowser(plugins, new UpdaterSettings{ - AllowPreReleases = Args.HasFlag("-debugupdates") + AllowPreReleases = Args.HasFlag("-debugupdates"), + DismissedUpdate = UserConfig.DismissedUpdate }); Application.Run(mainForm); diff --git a/Resources/Scripts/update.js b/Resources/Scripts/update.js index abbee842..e24cb14c 100644 --- a/Resources/Scripts/update.js +++ b/Resources/Scripts/update.js @@ -7,25 +7,25 @@ // // Constant: Update exe file name. // - const updateFileName = $TDU.brandName+".Update.exe"; + const updateFileName = "TweetDuck.Update.exe"; // // Constant: Url that returns JSON data about latest version. // - const updateCheckUrlLatest = "https://api.github.com/repos/chylex/"+$TDU.brandName+"/releases/latest"; + const updateCheckUrlLatest = "https://api.github.com/repos/chylex/TweetDuck/releases/latest"; // // Constant: Url that returns JSON data about all versions, including prereleases. // - const updateCheckUrlAll = "https://api.github.com/repos/chylex/"+$TDU.brandName+"/releases"; + const updateCheckUrlAll = "https://api.github.com/repos/chylex/TweetDuck/releases"; // // Function: Creates the update notification element. Removes the old one if already exists. // - var createUpdateNotificationElement = function(version, download){ + var displayNotification = function(version, download){ var outdated = version === "unsupported"; - var ele = $("#tweetdck-update"); + var ele = $("#tweetduck-update"); var existed = ele.length > 0; if (existed > 0){ @@ -33,7 +33,7 @@ } var html = outdated ? [ - "<div id='tweetdck-update'>", + "<div id='tweetduck-update'>", "<p class='tdu-title'>Unsupported System</p>", "<p class='tdu-info'>You will not receive updates.</p>", "<div class='tdu-buttons'>", @@ -42,8 +42,8 @@ "</div>", "</div>" ] : [ - "<div id='tweetdck-update'>", - "<p class='tdu-title'>"+$TDU.brandName+" Update</p>", + "<div id='tweetduck-update'>", + "<p class='tdu-title'>TweetDuck Update</p>", "<p class='tdu-info'>Version "+version+" is now available.</p>", "<div class='tdu-buttons'>", "<button class='btn btn-positive tdu-btn-download'><span class='label'>Download</span></button>", @@ -54,7 +54,7 @@ $(document.body).append(html.join("")); - ele = $("#tweetdck-update"); + ele = $("#tweetduck-update"); var buttonDiv = ele.children("div.tdu-buttons").first(); @@ -128,33 +128,19 @@ // // Function: Runs an update check and updates all DOM elements appropriately. // - var runUpdateCheck = function(force, eventID){ - if (!$TDU.isSystemSupported){ - if ($TDU.dismissedVersionTag !== "unsupported"){ - createUpdateNotificationElement("unsupported"); - } - - return; - } - + var runUpdateCheck = function(eventID, versionTag, dismissedVersionTag, allowPre){ clearTimeout(updateCheckTimeoutID); - updateCheckTimeoutID = setTimeout(runUpdateCheck, 1000*60*60); // 1 hour - - if (!$TDU.updateCheckEnabled && !force){ - return; - } - - var allowPre = $TDU.allowPreReleases; + updateCheckTimeoutID = setTimeout($TDU.triggerUpdateCheck, 1000*60*60); // 1 hour $.getJSON(allowPre ? updateCheckUrlAll : updateCheckUrlLatest, function(response){ var release = allowPre ? response[0] : response; var tagName = release.tag_name; - var hasUpdate = tagName !== $TDU.versionTag && tagName !== $TDU.dismissedVersionTag && release.assets.length > 0; + var hasUpdate = tagName !== versionTag && tagName !== dismissedVersionTag && release.assets.length > 0; if (hasUpdate){ var obj = release.assets.find(asset => asset.name === updateFileName) || release.assets[0]; - createUpdateNotificationElement(tagName, obj.browser_download_url); + displayNotification(tagName, obj.browser_download_url); } if (eventID){ // ignore undefined and 0 @@ -166,6 +152,6 @@ // // Block: Setup global functions. // + window.TDUF_displayNotification = displayNotification; window.TDUF_runUpdateCheck = runUpdateCheck; - runUpdateCheck(); })($, $TDU); diff --git a/TweetDck.csproj b/TweetDck.csproj index 5f813c0d..877cb079 100644 --- a/TweetDck.csproj +++ b/TweetDck.csproj @@ -222,6 +222,7 @@ <Compile Include="Plugins\PluginManager.cs" /> <Compile Include="Plugins\PluginScriptGenerator.cs" /> <Compile Include="Reporter.cs" /> + <Compile Include="Updates\Events\UpdateDismissedEventArgs.cs" /> <Compile Include="Updates\FormUpdateDownload.cs"> <SubType>Form</SubType> </Compile> diff --git a/Updates/Events/UpdateDismissedEventArgs.cs b/Updates/Events/UpdateDismissedEventArgs.cs new file mode 100644 index 00000000..8b5a4331 --- /dev/null +++ b/Updates/Events/UpdateDismissedEventArgs.cs @@ -0,0 +1,11 @@ +using System; + +namespace TweetDck.Updates.Events{ + class UpdateDismissedEventArgs : EventArgs{ + public readonly string VersionTag; + + public UpdateDismissedEventArgs(string versionTag){ + this.VersionTag = versionTag; + } + } +} diff --git a/Updates/UpdateHandler.cs b/Updates/UpdateHandler.cs index bbec1516..8d307c61 100644 --- a/Updates/UpdateHandler.cs +++ b/Updates/UpdateHandler.cs @@ -9,11 +9,18 @@ namespace TweetDck.Updates{ class UpdateHandler{ + private static bool IsSystemSupported{ + get{ + return true; // Environment.OSVersion.Version >= new Version("6.1"); // 6.1 NT version = Windows 7 + } + } + private readonly ChromiumWebBrowser browser; private readonly FormBrowser form; private readonly UpdaterSettings settings; public event EventHandler<UpdateAcceptedEventArgs> UpdateAccepted; + public event EventHandler<UpdateDismissedEventArgs> UpdateDismissed; public event EventHandler<UpdateCheckEventArgs> CheckFinished; private int lastEventId; @@ -24,18 +31,34 @@ public UpdateHandler(ChromiumWebBrowser browser, FormBrowser form, UpdaterSettin this.settings = settings; browser.FrameLoadEnd += browser_FrameLoadEnd; - browser.RegisterJsObject("$TDU", new Bridge(this)); + browser.RegisterAsyncJsObject("$TDU", new Bridge(this)); } private void browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){ if (e.Frame.IsMain && BrowserUtils.IsTweetDeckWebsite(e.Frame)){ ScriptLoader.ExecuteFile(e.Frame, "update.js"); + Check(false); } } public int Check(bool force){ - browser.ExecuteScriptAsync("TDUF_runUpdateCheck", force, ++lastEventId); - return lastEventId; + if (IsSystemSupported){ + if (Program.UserConfig.EnableUpdateCheck || force){ + if (force){ + settings.DismissedUpdate = null; + } + + browser.ExecuteScriptAsync("TDUF_runUpdateCheck", ++lastEventId, Program.VersionTag, settings.DismissedUpdate ?? string.Empty, settings.AllowPreReleases); + return lastEventId; + } + + return 0; + } + else if (settings.DismissedUpdate != "unsupported"){ + browser.ExecuteScriptAsync("TDUF_displayNotification", "unsupported"); + } + + return -1; } private void TriggerUpdateAcceptedEvent(UpdateAcceptedEventArgs args){ @@ -44,6 +67,16 @@ private void TriggerUpdateAcceptedEvent(UpdateAcceptedEventArgs args){ } } + private void TriggerUpdateDismissedEvent(UpdateDismissedEventArgs args){ + form.InvokeSafe(() => { + settings.DismissedUpdate = args.VersionTag; + + if (UpdateDismissed != null){ + UpdateDismissed(this, args); + } + }); + } + private void TriggerCheckFinishedEvent(UpdateCheckEventArgs args){ if (CheckFinished != null){ form.InvokeSafe(() => CheckFinished(this, args)); @@ -51,48 +84,16 @@ private void TriggerCheckFinishedEvent(UpdateCheckEventArgs args){ } public class Bridge{ - public string BrandName{ - get{ - return Program.BrandName; - } - } - - public string VersionTag{ - get{ - return Program.VersionTag; - } - } - - public bool UpdateCheckEnabled{ - get{ - return Program.UserConfig.EnableUpdateCheck; - } - } - - public string DismissedVersionTag{ - get{ - return Program.UserConfig.DismissedUpdate ?? string.Empty; - } - } - - public bool AllowPreReleases{ - get{ - return owner.settings.AllowPreReleases; - } - } - - public bool IsSystemSupported{ - get{ - return true; // Environment.OSVersion.Version >= new Version("6.1"); // 6.1 NT version = Windows 7 - } - } - private readonly UpdateHandler owner; public Bridge(UpdateHandler owner){ this.owner = owner; } + public void TriggerUpdateCheck(){ + owner.Check(false); + } + public void OnUpdateCheckFinished(int eventId, bool isUpdateAvailable, string latestVersion){ owner.TriggerCheckFinishedEvent(new UpdateCheckEventArgs(eventId, isUpdateAvailable, latestVersion)); } @@ -102,10 +103,7 @@ public void OnUpdateAccepted(string versionTag, string downloadUrl){ } public void OnUpdateDismissed(string versionTag){ - owner.form.InvokeSafe(() => { - Program.UserConfig.DismissedUpdate = versionTag; - Program.UserConfig.Save(); - }); + owner.TriggerUpdateDismissedEvent(new UpdateDismissedEventArgs(versionTag)); } public void OpenBrowser(string url){ diff --git a/Updates/UpdaterSettings.cs b/Updates/UpdaterSettings.cs index 4fe7ea06..b972ce10 100644 --- a/Updates/UpdaterSettings.cs +++ b/Updates/UpdaterSettings.cs @@ -1,5 +1,6 @@ namespace TweetDck.Updates{ class UpdaterSettings{ public bool AllowPreReleases { get; set; } + public string DismissedUpdate { get; set; } } }