diff --git a/Core/FormBrowser.cs b/Core/FormBrowser.cs index ccfe7435..bb43c0e2 100644 --- a/Core/FormBrowser.cs +++ b/Core/FormBrowser.cs @@ -35,7 +35,7 @@ private static UserConfig Config{ private FormWindowState prevState; - public FormBrowser(PluginManager pluginManager){ + public FormBrowser(PluginManager pluginManager, UpdaterSettings updaterSettings){ InitializeComponent(); Text = Program.BrandName; @@ -73,7 +73,7 @@ public FormBrowser(PluginManager pluginManager){ UpdateTrayIcon(); - this.updates = new UpdateHandler(browser, this); + this.updates = new UpdateHandler(browser, this, updaterSettings); this.updates.UpdateAccepted += updates_UpdateAccepted; } diff --git a/Program.cs b/Program.cs index a91d1afc..80ae3554 100644 --- a/Program.cs +++ b/Program.cs @@ -13,6 +13,7 @@ using TweetDck.Core.Other.Settings.Export; using TweetDck.Core.Handling; using TweetDck.Core.Other; +using TweetDck.Updates; [assembly: CLSCompliant(true)] namespace TweetDck{ @@ -153,7 +154,10 @@ private static void Main(){ plugins.PluginChangedState += (sender, args) => UserConfig.Save(); plugins.Reload(); - FormBrowser mainForm = new FormBrowser(plugins); + FormBrowser mainForm = new FormBrowser(plugins, new UpdaterSettings{ + AllowPreReleases = Args.HasFlag("-debugupdates") + }); + Application.Run(mainForm); if (mainForm.UpdateInstallerPath != null){ diff --git a/Resources/Scripts/update.js b/Resources/Scripts/update.js index 5c76cd79..abbee842 100644 --- a/Resources/Scripts/update.js +++ b/Resources/Scripts/update.js @@ -12,7 +12,12 @@ // // Constant: Url that returns JSON data about latest version. // - const updateCheckUrl = "https://api.github.com/repos/chylex/"+$TDU.brandName+"/releases/latest"; + const updateCheckUrlLatest = "https://api.github.com/repos/chylex/"+$TDU.brandName+"/releases/latest"; + + // + // Constant: Url that returns JSON data about all versions, including prereleases. + // + const updateCheckUrlAll = "https://api.github.com/repos/chylex/"+$TDU.brandName+"/releases"; // // Function: Creates the update notification element. Removes the old one if already exists. @@ -135,14 +140,20 @@ clearTimeout(updateCheckTimeoutID); updateCheckTimeoutID = setTimeout(runUpdateCheck, 1000*60*60); // 1 hour - if (!$TDU.updateCheckEnabled && !force)return; + if (!$TDU.updateCheckEnabled && !force){ + return; + } - $.getJSON(updateCheckUrl, function(response){ - var tagName = response.tag_name; - var hasUpdate = tagName !== $TDU.versionTag && tagName !== $TDU.dismissedVersionTag && response.assets.length > 0; + var allowPre = $TDU.allowPreReleases; + + $.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; if (hasUpdate){ - var obj = response.assets.find(asset => asset.name === updateFileName) || response.assets[0]; + var obj = release.assets.find(asset => asset.name === updateFileName) || release.assets[0]; createUpdateNotificationElement(tagName, obj.browser_download_url); } diff --git a/TweetDck.csproj b/TweetDck.csproj index cb9b90a3..66572848 100644 --- a/TweetDck.csproj +++ b/TweetDck.csproj @@ -238,6 +238,7 @@ <DependentUpon>Resources.resx</DependentUpon> </Compile> <Compile Include="Resources\ScriptLoader.cs" /> + <Compile Include="Updates\UpdaterSettings.cs" /> <None Include="Configuration\app.config" /> <None Include="Configuration\packages.config" /> </ItemGroup> diff --git a/Updates/UpdateHandler.cs b/Updates/UpdateHandler.cs index 34d16e2e..5e32520e 100644 --- a/Updates/UpdateHandler.cs +++ b/Updates/UpdateHandler.cs @@ -10,15 +10,18 @@ namespace TweetDck.Updates{ class UpdateHandler{ private readonly ChromiumWebBrowser browser; private readonly FormBrowser form; + private readonly UpdaterSettings settings; public event EventHandler<UpdateAcceptedEventArgs> UpdateAccepted; public event EventHandler<UpdateCheckEventArgs> CheckFinished; private int lastEventId; - public UpdateHandler(ChromiumWebBrowser browser, FormBrowser form){ + public UpdateHandler(ChromiumWebBrowser browser, FormBrowser form, UpdaterSettings settings){ this.browser = browser; this.form = form; + this.settings = settings; + browser.FrameLoadEnd += browser_FrameLoadEnd; browser.RegisterJsObject("$TDU", new Bridge(this)); } @@ -71,6 +74,12 @@ public string DismissedVersionTag{ } } + public bool AllowPreReleases{ + get{ + return owner.settings.AllowPreReleases; + } + } + public bool IsSystemSupported{ get{ return Environment.OSVersion.Version >= new Version("6.1"); // 6.1 NT version = Windows 7 diff --git a/Updates/UpdaterSettings.cs b/Updates/UpdaterSettings.cs new file mode 100644 index 00000000..4fe7ea06 --- /dev/null +++ b/Updates/UpdaterSettings.cs @@ -0,0 +1,5 @@ +namespace TweetDck.Updates{ + class UpdaterSettings{ + public bool AllowPreReleases { get; set; } + } +}