diff --git a/CHANGELOG.md b/CHANGELOG.md index d3a833ee..dc6efe35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ### Changelog +* Auto update functionality added client-side. +* Slideshow now moves to next slide when users clicks, even if paused +* Installer now prints to log what modlist it is installing + ======= #### Version - 1.0 beta 17 - 1/22/2020 diff --git a/Wabbajack.Lib/Downloaders/DropboxDownloader.cs b/Wabbajack.Lib/Downloaders/DropboxDownloader.cs index dfcab85f..0986193a 100644 --- a/Wabbajack.Lib/Downloaders/DropboxDownloader.cs +++ b/Wabbajack.Lib/Downloaders/DropboxDownloader.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using System.Web; +using Wabbajack.Common; namespace Wabbajack.Lib.Downloaders { @@ -14,22 +15,30 @@ namespace Wabbajack.Lib.Downloaders public AbstractDownloadState GetDownloaderState(string url) { - if (url == null) return null; - var uri = new UriBuilder(url); - if (uri.Host != "www.dropbox.com") return null; - var query = HttpUtility.ParseQueryString(uri.Query); - - if (query.GetValues("dl").Length > 0) - query.Remove("dl"); - - query.Set("dl", "1"); - - uri.Query = query.ToString(); - - return new HTTPDownloader.State() + try { - Url = uri.ToString().Replace("dropbox.com:443/", "dropbox.com/") - }; + if (url == null) return null; + var uri = new UriBuilder(url); + if (uri.Host != "www.dropbox.com") return null; + var query = HttpUtility.ParseQueryString(uri.Query); + + if (query.GetValues("dl")?.Length > 0) + query.Remove("dl"); + + query.Set("dl", "1"); + + uri.Query = query.ToString(); + + return new HTTPDownloader.State() + { + Url = uri.ToString().Replace("dropbox.com:443/", "dropbox.com/") + }; + } + catch (Exception) + { + Utils.Error($"Error downloading Dropbox link: {url}"); + throw; + } } public async Task Prepare() diff --git a/Wabbajack.Lib/Downloaders/NexusDownloader.cs b/Wabbajack.Lib/Downloaders/NexusDownloader.cs index a8f62d55..ff0c71a1 100644 --- a/Wabbajack.Lib/Downloaders/NexusDownloader.cs +++ b/Wabbajack.Lib/Downloaders/NexusDownloader.cs @@ -59,7 +59,16 @@ namespace Wabbajack.Lib.Downloaders var gameMeta = GameRegistry.GetByMO2ArchiveName(name); var game = gameMeta != null ? GameRegistry.GetByMO2ArchiveName(name).Game : GameRegistry.GetByNexusName(name).Game; var client = await NexusApiClient.Get(); - var info = await client.GetModInfo(game, general.modID); + dynamic info; + try + { + info = await client.GetModInfo(game, general.modID); + } + catch (Exception) + { + Utils.Error($"Error getting mod info for Nexus mod with {general.modID}"); + throw; + } return new State { GameName = general.gameName, diff --git a/Wabbajack.Lib/NexusApi/NexusApi.cs b/Wabbajack.Lib/NexusApi/NexusApi.cs index e37ff9df..51834da4 100644 --- a/Wabbajack.Lib/NexusApi/NexusApi.cs +++ b/Wabbajack.Lib/NexusApi/NexusApi.cs @@ -249,7 +249,7 @@ namespace Wabbajack.Lib.NexusApi var builder = new UriBuilder(url) { Host = Consts.WabbajackCacheHostname, Port = Consts.WabbajackCachePort, Scheme = "http" }; return await Get(builder.ToString()); } - catch (Exception ex) + catch (Exception) { return await Get(url); } diff --git a/Wabbajack/View Models/Installers/InstallerVM.cs b/Wabbajack/View Models/Installers/InstallerVM.cs index d697421b..779f0695 100644 --- a/Wabbajack/View Models/Installers/InstallerVM.cs +++ b/Wabbajack/View Models/Installers/InstallerVM.cs @@ -362,6 +362,7 @@ namespace Wabbajack { try { + Utils.Log($"Starting to install {ModList.Name}"); var success = await this.Installer.Install(); Completed = ErrorResponse.Create(success); try diff --git a/Wabbajack/View Models/MainWindowVM.cs b/Wabbajack/View Models/MainWindowVM.cs index 6b0f6dde..9c92851a 100644 --- a/Wabbajack/View Models/MainWindowVM.cs +++ b/Wabbajack/View Models/MainWindowVM.cs @@ -138,7 +138,7 @@ namespace Wabbajack // Latch onto update events and update GUI AutoUpdater.CheckForUpdateEvent += (args) => { - UpdateAvailable = args.IsUpdateAvailable; + UpdateAvailable = args?.IsUpdateAvailable ?? false; }; // Trigger a query for updates soon after starting diff --git a/Wabbajack/View Models/SlideShow.cs b/Wabbajack/View Models/SlideShow.cs index 4a915515..9ff1fb22 100644 --- a/Wabbajack/View Models/SlideShow.cs +++ b/Wabbajack/View Models/SlideShow.cs @@ -56,15 +56,17 @@ namespace Wabbajack .Select(_ => Observable.Interval(TimeSpan.FromSeconds(intervalSeconds)))) // When a new timer comes in, swap to it .Switch() - .Unit()) + .Unit() + // Only subscribe to timer if enabled and installing + .FlowSwitch( + Observable.CombineLatest( + this.WhenAny(x => x.Enable), + this.WhenAny(x => x.Installer.Installing), + resultSelector: (enabled, installing) => enabled && installing))) // When filter switch enabled, fire an initial signal .StartWith(Unit.Default) - // Only subscribe to slideshow triggers if enabled and installing - .FlowSwitch( - Observable.CombineLatest( - this.WhenAny(x => x.Enable), - this.WhenAny(x => x.Installer.Installing), - resultSelector: (enabled, installing) => enabled && installing)) + // Only subscribe to slideshow triggers if started + .FlowSwitch(this.WhenAny(x => x.Installer.StartedInstallation)) // Block spam .Debounce(TimeSpan.FromMilliseconds(250), RxApp.MainThreadScheduler) .Scan( diff --git a/Wabbajack/Views/ModListGalleryView.xaml b/Wabbajack/Views/ModListGalleryView.xaml index 853455d2..531d6129 100644 --- a/Wabbajack/Views/ModListGalleryView.xaml +++ b/Wabbajack/Views/ModListGalleryView.xaml @@ -51,7 +51,7 @@ - + + ToolTip="Error loading modlist gallery" + Visibility="Collapsed" /> x ? Visibility.Visible : Visibility.Collapsed) + .StartWith(Visibility.Collapsed) .BindToStrict(this, x => x.LoadingRing.Visibility) .DisposeWith(dispose); this.WhenAny(x => x.ViewModel.Error) .Select(e => (e?.Succeeded ?? true) ? Visibility.Collapsed : Visibility.Visible) + .StartWith(Visibility.Collapsed) .BindToStrict(this, x => x.ErrorIcon.Visibility) .DisposeWith(dispose); });