Use own update manager, so we can pass proxy #1266

This commit is contained in:
bao-qian
2017-03-07 19:23:42 +00:00
parent ade6c46cca
commit 6f42bcfa4f
4 changed files with 40 additions and 12 deletions

View File

@@ -1,10 +1,13 @@
using System; using System;
using System.Collections.Generic;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Sockets; using System.Net.Sockets;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using Squirrel; using Squirrel;
using Newtonsoft.Json;
using Wox.Core.Resource; using Wox.Core.Resource;
using Wox.Infrastructure; using Wox.Infrastructure;
using Wox.Infrastructure.Http; using Wox.Infrastructure.Http;
@@ -16,14 +19,9 @@ namespace Wox.Core
{ {
public static async Task UpdateApp() public static async Task UpdateApp()
{ {
var c = new WebClient { Proxy = Http.WebProxy() };
var d = new FileDownloader(c);
try try
{ {
const string url = Constant.Github; using (var m = await GitHubUpdateManager(Constant.Repository))
using (var m = await UpdateManager.GitHubUpdateManager(url, urlDownloader: d))
{ {
// UpdateApp CheckForUpdate will return value only if the app is squirrel installed // UpdateApp CheckForUpdate will return value only if the app is squirrel installed
var e = await m.CheckForUpdate().NonNull(); var e = await m.CheckForUpdate().NonNull();
@@ -45,7 +43,6 @@ namespace Wox.Core
catch (Exception e) when (e is HttpRequestException || e is WebException || e is SocketException) catch (Exception e) when (e is HttpRequestException || e is WebException || e is SocketException)
{ {
Log.Exception("|Updater.UpdateApp|Network error", e); Log.Exception("|Updater.UpdateApp|Network error", e);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -68,5 +65,36 @@ namespace Wox.Core
return tips; return tips;
} }
class GithubRelease
{
[JsonProperty("prerelease")]
public bool Prerelease { get; set; }
[JsonProperty("published_at")]
public DateTime PublishedAt { get; set; }
[JsonProperty("html_url")]
public string HtmlUrl { get; set; }
}
/// https://github.com/Squirrel/Squirrel.Windows/blob/master/src/Squirrel/UpdateManager.Factory.cs
private static async Task<UpdateManager> GitHubUpdateManager(string repository)
{
var uri = new Uri(repository);
var api = $"https://api.github.com/{uri.AbsolutePath}/releases";
var json = await Http.Get(api);
var releases = JsonConvert.DeserializeObject<List<GithubRelease>>(json);
var latest = releases.Where(r => r.Prerelease).OrderByDescending(r => r.PublishedAt).First();
var latestUrl = latest.HtmlUrl.Replace("/tag/", "/download/");
var client = new WebClient { Proxy = Http.WebProxy() };
var downloader = new FileDownloader(client);
var manager = new UpdateManager(latestUrl, urlDownloader: downloader);
return manager;
}
} }
} }

View File

@@ -16,7 +16,7 @@ namespace Wox.Infrastructure
public static readonly string DataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Wox); public static readonly string DataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Wox);
public static readonly string PluginsDirectory = Path.Combine(DataDirectory, Plugins); public static readonly string PluginsDirectory = Path.Combine(DataDirectory, Plugins);
public static readonly string PreinstalledDirectory = Path.Combine(ProgramDirectory, Plugins); public static readonly string PreinstalledDirectory = Path.Combine(ProgramDirectory, Plugins);
public const string Github = "https://github.com/Wox-launcher/Wox"; public const string Repository = "https://github.com/Wox-launcher/Wox";
public const string Issue = "https://github.com/Wox-launcher/Wox/issues/new"; public const string Issue = "https://github.com/Wox-launcher/Wox/issues/new";
public static readonly string Version = FileVersionInfo.GetVersionInfo(Assembly.Location).ProductVersion; public static readonly string Version = FileVersionInfo.GetVersionInfo(Assembly.Location).ProductVersion;

View File

@@ -272,7 +272,7 @@ namespace Wox
return; return;
} }
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Infrastructure.Constant.Github); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Infrastructure.Constant.Repository);
if (string.IsNullOrEmpty(_settings.Proxy.UserName) || string.IsNullOrEmpty(_settings.Proxy.Password)) if (string.IsNullOrEmpty(_settings.Proxy.UserName) || string.IsNullOrEmpty(_settings.Proxy.Password))
{ {
request.Proxy = new WebProxy(_settings.Proxy.Server, _settings.Proxy.Port); request.Proxy = new WebProxy(_settings.Proxy.Server, _settings.Proxy.Port);

View File

@@ -206,7 +206,7 @@ namespace Wox.ViewModel
}, },
new Result new Result
{ {
Title = $"Open Source: {Constant.Github}", Title = $"Open Source: {Constant.Repository}",
SubTitle = "Please star it!" SubTitle = "Please star it!"
} }
}; };
@@ -316,7 +316,7 @@ namespace Wox.ViewModel
#region about #region about
public static string Github => Constant.Github; public static string Github => Constant.Repository;
public static string ReleaseNotes => @"https://github.com/Wox-launcher/Wox/releases/latest"; public static string ReleaseNotes => @"https://github.com/Wox-launcher/Wox/releases/latest";
public static string Version => Constant.Version; public static string Version => Constant.Version;
public string ActivatedTimes => string.Format(_translater.GetTranslation("about_activate_times"), Settings.ActivateTimes); public string ActivatedTimes => string.Format(_translater.GetTranslation("about_activate_times"), Settings.ActivateTimes);