diff --git a/QuickLook/App.xaml.cs b/QuickLook/App.xaml.cs index 3f62cf5..08f8ee9 100644 --- a/QuickLook/App.xaml.cs +++ b/QuickLook/App.xaml.cs @@ -94,6 +94,8 @@ namespace QuickLook if (!Settings.Default.Upgraded) return; + Updater.CollectAndShowReleaseNotes(); + Settings.Default.Upgrade(); Settings.Default.Upgraded = false; Settings.Default.Save(); diff --git a/QuickLook/Helpers/Updater.cs b/QuickLook/Helpers/Updater.cs index aaca0b1..9aacabe 100644 --- a/QuickLook/Helpers/Updater.cs +++ b/QuickLook/Helpers/Updater.cs @@ -38,15 +38,10 @@ namespace QuickLook.Helpers { try { - var web = new WebClientEx(15 * 1000); - web.Headers.Add(HttpRequestHeader.UserAgent, "Wget/1.9.1"); + var json = DownloadJson("https://api.github.com/repos/xupefei/QuickLook/releases/latest"); - var response = web.DownloadDataStream("https://api.github.com/repos/xupefei/QuickLook/releases"); - - var json = JsonConvert.DeserializeObject(new StreamReader(response).ReadToEnd()); - - var nVersion = (string) json[0]["tag_name"]; - //nVersion = "0.2.1"; + var nVersion = (string) json["tag_name"]; + //nVersion = "9.2.1"; if (new Version(nVersion) <= Assembly.GetExecutingAssembly().GetName().Version) { @@ -57,15 +52,11 @@ namespace QuickLook.Helpers return; } - string notes = CollectReleaseNotes(json); - - var changeLogPath = Path.GetTempFileName() + ".md"; - File.WriteAllText(changeLogPath, notes); + CollectAndShowReleaseNotes(); Application.Current.Dispatcher.Invoke( () => { - ViewWindowManager.GetInstance().InvokeViewer(changeLogPath); TrayIconManager.GetInstance().ShowNotification("", string.Format(TranslationHelper.GetString("Update_Found"), nVersion), timeout: 20000, @@ -84,17 +75,48 @@ namespace QuickLook.Helpers }); } - private static string CollectReleaseNotes(dynamic json) + public static void CollectAndShowReleaseNotes() { - var notes = string.Empty; - - foreach (var item in json) + Task.Run(() => { - notes += $"# {item["name"]}\r\n\r\n"; - notes += item["body"] + "\r\n\r\n"; - } + try + { + var json = DownloadJson("https://api.github.com/repos/xupefei/QuickLook/releases"); - return notes; + var notes = string.Empty; + + foreach (var item in json) + { + notes += $"# {item["name"]}\r\n\r\n"; + notes += item["body"] + "\r\n\r\n"; + } + + var changeLogPath = Path.GetTempFileName() + ".md"; + File.WriteAllText(changeLogPath, notes); + + Application.Current.Dispatcher.Invoke(() => ViewWindowManager.GetInstance() + .InvokeViewer(changeLogPath)); + } + catch (Exception e) + { + Debug.WriteLine(e.Message); + Application.Current.Dispatcher.Invoke( + () => TrayIconManager.GetInstance().ShowNotification("", + string.Format(TranslationHelper.GetString("Update_Error"), e.Message))); + } + }); + } + + private static dynamic DownloadJson(string url) + { + var web = new WebClientEx(15 * 1000); + web.Headers.Add(HttpRequestHeader.UserAgent, "Wget/1.9.1"); + + var response = + web.DownloadDataStream(url); + + var json = JsonConvert.DeserializeObject(new StreamReader(response).ReadToEnd()); + return json; } } } \ No newline at end of file diff --git a/QuickLook/ViewWindowManager.cs b/QuickLook/ViewWindowManager.cs index 4c2e6f9..4918ce8 100644 --- a/QuickLook/ViewWindowManager.cs +++ b/QuickLook/ViewWindowManager.cs @@ -30,13 +30,13 @@ namespace QuickLook internal class ViewWindowManager : IDisposable { private static ViewWindowManager _instance; - - private MainWindowNoTransparent _viewWindowNoTransparent; - private MainWindowTransparent _viewWindowTransparent; private MainWindowTransparent _currentMainWindow; private string _path = string.Empty; + private MainWindowNoTransparent _viewWindowNoTransparent; + private MainWindowTransparent _viewWindowTransparent; + internal ViewWindowManager() { _viewWindowTransparent = new MainWindowTransparent(); @@ -148,11 +148,11 @@ namespace QuickLook if (e.FocusedFile == _path) return; - Debug.WriteLine($"SwitchPreviewRemoteInvoke: {e.FocusedFile}"); - if (string.IsNullOrEmpty(e.FocusedFile)) return; + Debug.WriteLine($"SwitchPreviewRemoteInvoke: {e.FocusedFile}"); + _currentMainWindow?.Dispatcher.BeginInvoke(new Action(SwitchPreview), DispatcherPriority.ApplicationIdle); } @@ -173,13 +173,13 @@ namespace QuickLook FocusMonitor.GetInstance().Heartbeat -= SwitchPreviewRemoteInvoke; } } - + internal void ForgetCurrentWindow() { StopFocusMonitor(); if (ReferenceEquals(_currentMainWindow, _viewWindowTransparent)) - _viewWindowTransparent=new MainWindowTransparent(); + _viewWindowTransparent = new MainWindowTransparent(); else _viewWindowNoTransparent = new MainWindowNoTransparent(); @@ -188,7 +188,7 @@ namespace QuickLook internal bool InvokeViewer(string path = null, bool closeIfSame = false) { - if(closeIfSame) + if (closeIfSame) if (_currentMainWindow.Visibility == Visibility.Visible && path == _path) { ClosePreview(); @@ -223,7 +223,7 @@ namespace QuickLook : _viewWindowNoTransparent; if (!ReferenceEquals(oldWindow, _currentMainWindow)) oldWindow.BeginHide(); - + _currentMainWindow.BeginShow(matchedPlugin, _path, CurrentPluginFailed); }