mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Merge Wabbajack.Lib into Wabbajack
This commit is contained in:
parent
a9de61dc9f
commit
cc8c40f803
@ -4,7 +4,7 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Services.OSIntegrated;
|
||||
using Wabbajack.Util;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using Wabbajack.Paths;
|
||||
|
||||
namespace Wabbajack.Lib;
|
||||
namespace Wabbajack;
|
||||
|
||||
public static class Consts
|
||||
{
|
@ -9,8 +9,8 @@ using System.Threading.Tasks;
|
||||
using DynamicData;
|
||||
using DynamicData.Kernel;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Extensions;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
@ -5,7 +5,7 @@ using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Wabbajack.Lib.Extensions
|
||||
namespace Wabbajack.Extensions
|
||||
{
|
||||
public static class RxExt
|
||||
{
|
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace Wabbajack.Lib.Interventions
|
||||
namespace Wabbajack.Interventions
|
||||
{
|
||||
public abstract class AErrorMessage : Exception, IException
|
||||
{
|
@ -6,9 +6,9 @@ using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack.Interventions;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public abstract class AUserIntervention : ReactiveObject, IUserIntervention
|
||||
{
|
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public abstract class ConfirmationIntervention : AUserIntervention
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace Wabbajack.Lib.Interventions
|
||||
namespace Wabbajack.Interventions
|
||||
{
|
||||
public interface IError : IStatusMessage
|
||||
{
|
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace Wabbajack.Lib.Interventions
|
||||
namespace Wabbajack.Interventions
|
||||
{
|
||||
public interface IException : IError
|
||||
{
|
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace Wabbajack.Lib.Interventions
|
||||
namespace Wabbajack.Interventions
|
||||
{
|
||||
public interface IStatusMessage
|
||||
{
|
@ -1,6 +1,6 @@
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Wabbajack.Lib.Interventions
|
||||
namespace Wabbajack.Interventions
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines a message that requires user interaction. The user must perform some action
|
@ -19,7 +19,7 @@ using Wabbajack.Paths;
|
||||
using Wabbajack.Paths.IO;
|
||||
using Wabbajack.RateLimiter;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public class LauncherUpdater
|
||||
{
|
@ -12,7 +12,7 @@ using Wabbajack.Common;
|
||||
using Wabbajack.DTOs.JsonConverters;
|
||||
using Cookie = CefSharp.Cookie;
|
||||
|
||||
namespace Wabbajack.Lib.LibCefHelpers
|
||||
namespace Wabbajack.LibCefHelpers
|
||||
{
|
||||
public static class Helpers
|
||||
{
|
@ -1,5 +1,5 @@
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
|
||||
namespace Wabbajack.Messages;
|
||||
|
||||
|
@ -6,9 +6,9 @@ using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using Wabbajack.Compiler;
|
||||
using Wabbajack.DTOs.JsonConverters;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Paths;
|
||||
using Consts = Wabbajack.Lib.Consts;
|
||||
using Consts = Wabbajack.Consts;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
using Wabbajack.Paths;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public class ConfirmUpdateOfExistingInstall : ConfirmationIntervention
|
||||
{
|
@ -1,8 +1,8 @@
|
||||
using System.Threading.Tasks;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack.Interventions;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
/// <summary>
|
||||
/// This should probably be replaced with an error, but this is just to get messageboxes out of the .Lib library
|
@ -3,7 +3,7 @@ using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Wabbajack.DTOs.DownloadStates;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public class ManuallyDownloadFile : AUserIntervention
|
||||
{
|
@ -2,7 +2,7 @@
|
||||
using System.Threading.Tasks;
|
||||
using Wabbajack.DTOs.DownloadStates;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public class ManuallyDownloadNexusFile : AUserIntervention
|
||||
{
|
@ -1,6 +1,6 @@
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack.Interventions;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public class NexusAPIQuotaExceeded : AErrorMessage
|
||||
{
|
@ -1,6 +1,6 @@
|
||||
using Wabbajack.Common;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public class YesNoIntervention : ConfirmationIntervention
|
||||
{
|
@ -3,14 +3,11 @@ using Microsoft.WindowsAPICodePack.Dialogs;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows.Input;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Extensions;
|
||||
using Wabbajack.Paths;
|
||||
using Wabbajack.Paths.IO;
|
||||
|
||||
|
@ -10,7 +10,7 @@ using Silk.NET.Core.Native;
|
||||
using Silk.NET.DXGI;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Installer;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using static PInvoke.User32;
|
||||
using UnmanagedType = System.Runtime.InteropServices.UnmanagedType;
|
||||
|
||||
|
@ -15,7 +15,8 @@ using System.Windows.Forms;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Hashing.xxHash64;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack.Extensions;
|
||||
using Wabbajack.Models;
|
||||
using Wabbajack.Paths;
|
||||
using Wabbajack.Paths.IO;
|
||||
|
||||
@ -83,16 +84,18 @@ namespace Wabbajack
|
||||
return default;
|
||||
}
|
||||
|
||||
public static IObservable<BitmapImage> DownloadBitmapImage(this IObservable<string> obs, Action<Exception> exceptionHandler)
|
||||
public static IObservable<BitmapImage> DownloadBitmapImage(this IObservable<string> obs, Action<Exception> exceptionHandler,
|
||||
LoadingLock loadingLock)
|
||||
{
|
||||
return obs
|
||||
.ObserveOn(RxApp.TaskpoolScheduler)
|
||||
.SelectTask(async url =>
|
||||
{
|
||||
var ll = loadingLock.WithLoading();
|
||||
try
|
||||
{
|
||||
var (found, mstream) = await FindCachedImage(url);
|
||||
if (found) return mstream;
|
||||
if (found) return (ll, mstream);
|
||||
|
||||
var ret = new MemoryStream();
|
||||
using (var client = new HttpClient())
|
||||
@ -104,16 +107,17 @@ namespace Wabbajack
|
||||
ret.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
await WriteCachedImage(url, ret.ToArray());
|
||||
return ret;
|
||||
return (ll, ret);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
exceptionHandler(ex);
|
||||
return default;
|
||||
return (ll, default);
|
||||
}
|
||||
})
|
||||
.Select(memStream =>
|
||||
.Select(x =>
|
||||
{
|
||||
var (ll, memStream) = x;
|
||||
if (memStream == null) return default;
|
||||
try
|
||||
{
|
||||
@ -126,6 +130,7 @@ namespace Wabbajack
|
||||
}
|
||||
finally
|
||||
{
|
||||
ll.Dispose();
|
||||
memStream.Dispose();
|
||||
}
|
||||
})
|
||||
|
@ -7,7 +7,7 @@ using Microsoft.Extensions.Logging;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Messages;
|
||||
|
||||
namespace Wabbajack
|
||||
|
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using Wabbajack.RateLimiter;
|
||||
|
||||
namespace Wabbajack
|
||||
|
@ -1,20 +1,16 @@
|
||||
using DynamicData.Binding;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows.Media.Imaging;
|
||||
using DynamicData;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Wabbajack.Compiler;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack.Extensions;
|
||||
using Wabbajack.Interventions;
|
||||
using Wabbajack.Messages;
|
||||
using Wabbajack.RateLimiter;
|
||||
using ReactiveUI;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using DynamicData.Binding;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -10,11 +10,11 @@ using Wabbajack.Common;
|
||||
using Wabbajack.Compiler;
|
||||
using Wabbajack.DTOs;
|
||||
using Wabbajack.DTOs.GitHub;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Extensions;
|
||||
using Wabbajack.Paths;
|
||||
using Wabbajack.Paths.IO;
|
||||
using Consts = Wabbajack.Lib.Consts;
|
||||
using Consts = Wabbajack.Consts;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -6,7 +6,7 @@ using Microsoft.WindowsAPICodePack.Dialogs;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -4,22 +4,18 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using DynamicData;
|
||||
using DynamicData.Binding;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Downloaders.GameFile;
|
||||
using Wabbajack.DTOs;
|
||||
using Wabbajack.Hashing.xxHash64;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack.Messages;
|
||||
using Wabbajack.Networking.WabbajackClientApi;
|
||||
using Wabbajack.Services.OSIntegrated;
|
||||
using Wabbajack.Services.OSIntegrated.Services;
|
||||
@ -55,11 +51,9 @@ namespace Wabbajack
|
||||
private readonly ILogger<ModListGalleryVM> _logger;
|
||||
private readonly GameLocator _locator;
|
||||
private readonly ModListDownloadMaintainer _maintainer;
|
||||
private readonly SettingsManager _settingsManager;
|
||||
|
||||
private FiltersSettings settings { get; set; } = new();
|
||||
|
||||
public bool Loaded => _Loaded.Value;
|
||||
|
||||
public ICommand ClearFiltersCommand { get; set; }
|
||||
|
||||
public ModListGalleryVM(ILogger<ModListGalleryVM> logger, Client wjClient,
|
||||
@ -70,6 +64,7 @@ namespace Wabbajack
|
||||
_logger = logger;
|
||||
_locator = locator;
|
||||
_maintainer = maintainer;
|
||||
_settingsManager = settingsManager;
|
||||
|
||||
ClearFiltersCommand = ReactiveCommand.Create(
|
||||
() =>
|
||||
@ -80,11 +75,21 @@ namespace Wabbajack
|
||||
Search = string.Empty;
|
||||
GameType = ALL_GAME_TYPE;
|
||||
});
|
||||
|
||||
BackCommand = ReactiveCommand.Create(
|
||||
() =>
|
||||
{
|
||||
NavigateToGlobal.Send(NavigateToGlobal.ScreenType.ModeSelectionView);
|
||||
});
|
||||
|
||||
|
||||
this.WhenActivated(disposables =>
|
||||
{
|
||||
var _ = LoadModLists();
|
||||
{
|
||||
LoadModLists().FireAndForget();
|
||||
LoadSettings().FireAndForget();
|
||||
|
||||
Disposable.Create(() => SaveSettings().FireAndForget())
|
||||
.DisposeWith(disposables);
|
||||
|
||||
var searchTextPredicates = this.ObservableForProperty(vm => vm.Search)
|
||||
.Select(change => change.Value)
|
||||
@ -141,11 +146,47 @@ namespace Wabbajack
|
||||
});
|
||||
}
|
||||
|
||||
private class FilterSettings
|
||||
{
|
||||
public string GameType { get; set; }
|
||||
public bool ShowNSFW { get; set; }
|
||||
public bool ShowUtilityLists { get; set; }
|
||||
public bool OnlyInstalled { get; set; }
|
||||
public string Search { get; set; }
|
||||
}
|
||||
|
||||
public override void Unload()
|
||||
{
|
||||
Error = null;
|
||||
}
|
||||
|
||||
private async Task SaveSettings()
|
||||
{
|
||||
await _settingsManager.Save("modlist_gallery", new FilterSettings
|
||||
{
|
||||
GameType = GameType,
|
||||
ShowNSFW = ShowNSFW,
|
||||
ShowUtilityLists = ShowUtilityLists,
|
||||
Search = Search,
|
||||
OnlyInstalled = OnlyInstalled,
|
||||
});
|
||||
}
|
||||
|
||||
private async Task LoadSettings()
|
||||
{
|
||||
using var ll = LoadingLock.WithLoading();
|
||||
RxApp.MainThreadScheduler.Schedule(await _settingsManager.Load<FilterSettings>("modlist_gallery"),
|
||||
(_, s) =>
|
||||
{
|
||||
GameType = s.GameType;
|
||||
ShowNSFW = s.ShowNSFW;
|
||||
ShowUtilityLists = s.ShowUtilityLists;
|
||||
Search = s.Search;
|
||||
OnlyInstalled = s.OnlyInstalled;
|
||||
return Disposable.Empty;
|
||||
});
|
||||
}
|
||||
|
||||
private async Task LoadModLists()
|
||||
{
|
||||
using var ll = LoadingLock.WithLoading();
|
||||
@ -175,13 +216,5 @@ namespace Wabbajack
|
||||
return gameEntries;
|
||||
}
|
||||
|
||||
private void UpdateFiltersSettings()
|
||||
{
|
||||
settings.Game = GameType;
|
||||
settings.Search = Search;
|
||||
settings.ShowNSFW = ShowNSFW;
|
||||
settings.ShowUtilityLists = ShowUtilityLists;
|
||||
settings.OnlyInstalled = OnlyInstalled;
|
||||
}
|
||||
}
|
||||
}
|
@ -14,9 +14,10 @@ using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.DTOs;
|
||||
using Wabbajack.DTOs.ServerResponses;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Extensions;
|
||||
using Wabbajack.Messages;
|
||||
using Wabbajack.Models;
|
||||
using Wabbajack.Networking.WabbajackClientApi;
|
||||
using Wabbajack.Paths;
|
||||
using Wabbajack.Paths.IO;
|
||||
@ -51,6 +52,8 @@ namespace Wabbajack
|
||||
|
||||
public AbsolutePath Location { get; }
|
||||
|
||||
public LoadingLock LoadingImageLock { get; } = new();
|
||||
|
||||
[Reactive]
|
||||
public List<ModListTag> ModListTagList { get; private set; }
|
||||
|
||||
@ -97,7 +100,7 @@ namespace Wabbajack
|
||||
Location = LauncherUpdater.CommonFolder.Value.Combine("downloaded_mod_lists", Metadata.Links.MachineURL).WithExtension(Ext.Wabbajack);
|
||||
ModListTagList = new List<ModListTag>();
|
||||
|
||||
Metadata.tags.ForEach(tag =>
|
||||
Metadata.Tags.ForEach(tag =>
|
||||
{
|
||||
ModListTagList.Add(new ModListTag(tag));
|
||||
});
|
||||
@ -166,7 +169,8 @@ namespace Wabbajack
|
||||
.ObserveOnGuiThread()
|
||||
.Select(_ =>
|
||||
{
|
||||
_parent.MWVM.OpenInstaller(Location);
|
||||
// TODO
|
||||
//_parent.MWVM.OpenInstaller(Location);
|
||||
|
||||
// Wait for modlist member to be filled, then open its readme
|
||||
return _parent.MWVM.Installer.Value.WhenAny(x => x.ModList)
|
||||
@ -195,7 +199,7 @@ namespace Wabbajack
|
||||
{
|
||||
try
|
||||
{
|
||||
return !IsDownloading && !(await maintainer.HaveModList(metadata));
|
||||
return !IsDownloading && await maintainer.HaveModList(metadata);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
@ -205,7 +209,7 @@ namespace Wabbajack
|
||||
.ToGuiProperty(this, nameof(Exists));
|
||||
|
||||
var imageObs = Observable.Return(Metadata.Links.ImageUri)
|
||||
.DownloadBitmapImage((ex) => _logger.LogError("Error downloading modlist image {Title}", Metadata.Title));
|
||||
.DownloadBitmapImage((ex) => _logger.LogError("Error downloading modlist image {Title}", Metadata.Title), LoadingImageLock);
|
||||
|
||||
_Image = imageObs
|
||||
.ToGuiProperty(this, nameof(Image));
|
||||
@ -221,7 +225,8 @@ namespace Wabbajack
|
||||
private async Task Download()
|
||||
{
|
||||
var (progress, task) = _maintainer.DownloadModlist(Metadata);
|
||||
var dispose = progress.Subscribe(p => ProgressPercent = p);
|
||||
var dispose = progress
|
||||
.BindToStrict(this, vm => vm.ProgressPercent);
|
||||
|
||||
await task;
|
||||
|
||||
|
@ -6,8 +6,8 @@ using System.Threading.Tasks;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Installer;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Interventions;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -13,13 +13,13 @@ using Microsoft.Extensions.Logging;
|
||||
using Microsoft.WindowsAPICodePack.Dialogs;
|
||||
using Microsoft.WindowsAPICodePack.Shell;
|
||||
using Wabbajack.DTOs.JsonConverters;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack.Extensions;
|
||||
using Wabbajack.Interventions;
|
||||
using Wabbajack.Messages;
|
||||
using Wabbajack.RateLimiter;
|
||||
using Wabbajack.View_Models;
|
||||
using Wabbajack.Paths.IO;
|
||||
using Consts = Wabbajack.Lib.Consts;
|
||||
using Consts = Wabbajack.Consts;
|
||||
using KnownFolders = Wabbajack.Paths.IO.KnownFolders;
|
||||
|
||||
namespace Wabbajack;
|
||||
|
@ -11,8 +11,8 @@ using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Installer;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Interventions;
|
||||
using Wabbajack.Util;
|
||||
|
||||
namespace Wabbajack
|
||||
|
@ -13,8 +13,8 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Downloaders.GameFile;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Interventions;
|
||||
using Wabbajack.Messages;
|
||||
using Wabbajack.Networking.WabbajackClientApi;
|
||||
using Wabbajack.Paths;
|
||||
|
@ -12,10 +12,10 @@ using Wabbajack.Common;
|
||||
using Wabbajack.DTOs;
|
||||
using Wabbajack.DTOs.JsonConverters;
|
||||
using Wabbajack.Installer;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Paths;
|
||||
using Wabbajack.Paths.IO;
|
||||
using Consts = Wabbajack.Lib.Consts;
|
||||
using Consts = Wabbajack.Consts;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Reactive.Linq;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Wabbajack.DTOs.DownloadStates;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
@ -25,7 +25,7 @@ namespace Wabbajack
|
||||
|
||||
ImageObservable = Observable.Return(State.ImageURL?.ToString())
|
||||
.ObserveOn(RxApp.TaskpoolScheduler)
|
||||
.DownloadBitmapImage(ex => _logger.LogError(ex, "Skipping slide for mod {Name}", State.Name))
|
||||
.DownloadBitmapImage(ex => _logger.LogError(ex, "Skipping slide for mod {Name}", State.Name), LoadingLock)
|
||||
.Replay(1)
|
||||
.RefCount(TimeSpan.FromMilliseconds(5000));
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ using System.Reactive;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows.Input;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Messages;
|
||||
using Wabbajack.Paths.IO;
|
||||
|
||||
|
@ -7,7 +7,7 @@ using System.Windows.Input;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Networking.WabbajackClientApi;
|
||||
using Wabbajack.Services.OSIntegrated.TokenProviders;
|
||||
|
||||
|
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Downloaders.Interfaces;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -10,7 +10,7 @@ using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -10,7 +10,7 @@ using System.Windows.Input;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Networking.WabbajackClientApi;
|
||||
using Wabbajack.Services.OSIntegrated.TokenProviders;
|
||||
using Wabbajack.View_Models.Settings;
|
||||
|
@ -10,8 +10,8 @@ using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.DTOs.DownloadStates;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Extensions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Extensions;
|
||||
|
||||
namespace Wabbajack.View_Models
|
||||
{
|
||||
|
@ -4,8 +4,8 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Interventions;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -5,8 +5,8 @@ using System.Windows;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.Interventions;
|
||||
using Wabbajack;
|
||||
using Wabbajack.Interventions;
|
||||
using Wabbajack.Messages;
|
||||
|
||||
namespace Wabbajack
|
||||
|
@ -11,9 +11,9 @@ using CefSharp.Wpf;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.LibCefHelpers;
|
||||
using Wabbajack.Lib.WebAutomation;
|
||||
using Wabbajack;
|
||||
using Wabbajack.LibCefHelpers;
|
||||
using Wabbajack.WebAutomation;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -6,7 +6,7 @@ using System.Reactive.Disposables;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Wabbajack.Models;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
namespace Wabbajack
|
||||
{
|
||||
public class ViewModel : ReactiveObject, IDisposable, IActivatableViewModel
|
||||
{
|
@ -15,7 +15,7 @@ using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Reactive.Linq;
|
||||
using Wabbajack.Common;
|
||||
|
@ -3,13 +3,11 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
|
||||
xmlns:lib="clr-namespace:Wabbajack.Lib;assembly=Wabbajack.Lib"
|
||||
xmlns:local="clr-namespace:Wabbajack"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
d:DesignHeight="450"
|
||||
d:DesignWidth="800"
|
||||
x:TypeArguments="lib:ViewModel"
|
||||
x:TypeArguments="local:ViewModel"
|
||||
ClipToBounds="True"
|
||||
mc:Ignorable="d">
|
||||
<UserControl.Resources>
|
||||
|
@ -7,7 +7,7 @@ using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
namespace Wabbajack
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -3,13 +3,12 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:lib="clr-namespace:Wabbajack.Lib;assembly=Wabbajack.Lib"
|
||||
xmlns:local="clr-namespace:Wabbajack"
|
||||
xmlns:mahapps="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
d:DesignHeight="450"
|
||||
d:DesignWidth="800"
|
||||
x:TypeArguments="lib:ViewModel"
|
||||
x:TypeArguments="local:ViewModel"
|
||||
BorderThickness="0"
|
||||
mc:Ignorable="d">
|
||||
<Grid>
|
||||
|
@ -4,7 +4,7 @@ using System.Windows.Controls;
|
||||
using ReactiveUI;
|
||||
using System;
|
||||
using ReactiveUI.Fody.Helpers;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
using System.Reactive.Disposables;
|
||||
|
||||
namespace Wabbajack
|
||||
|
@ -2,7 +2,7 @@
|
||||
x:Class="Wabbajack.CompilerView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:lib="clr-namespace:Wabbajack.Lib;assembly=Wabbajack.Lib"
|
||||
xmlns:lib="clr-namespace:Wabbajack;assembly=Wabbajack"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
|
||||
xmlns:local="clr-namespace:Wabbajack"
|
||||
|
@ -5,11 +5,12 @@
|
||||
xmlns:common="clr-namespace:Wabbajack.Common;assembly=Wabbajack.Common"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
|
||||
xmlns:lib="clr-namespace:Wabbajack.Lib;assembly=Wabbajack.Lib"
|
||||
xmlns:lib="clr-namespace:Wabbajack;assembly=Wabbajack"
|
||||
xmlns:local="clr-namespace:Wabbajack"
|
||||
xmlns:mahapps="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:rxui="http://reactiveui.net"
|
||||
xmlns:lib1="clr-namespace:Wabbajack"
|
||||
d:DataContext="{d:DesignInstance local:InstallerVM}"
|
||||
d:DesignHeight="500"
|
||||
d:DesignWidth="800"
|
||||
@ -304,7 +305,7 @@
|
||||
x:Name="UserInterventionsControl"
|
||||
Content="{Binding ActiveGlobalUserIntervention}">
|
||||
<local:AttentionBorder.Resources>
|
||||
<DataTemplate DataType="{x:Type lib:ConfirmationIntervention}">
|
||||
<DataTemplate DataType="{x:Type lib1:ConfirmationIntervention}">
|
||||
<local:ConfirmationInterventionView ViewModel="{Binding}" />
|
||||
</DataTemplate>
|
||||
<DataTemplate DataType="{x:Type local:ConfirmUpdateOfExistingInstallVM}">
|
||||
|
@ -3,7 +3,7 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:lib="clr-namespace:Wabbajack.Lib;assembly=Wabbajack.Lib"
|
||||
xmlns:lib="clr-namespace:Wabbajack;assembly=Wabbajack"
|
||||
xmlns:local="clr-namespace:Wabbajack"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:rxui="http://reactiveui.net"
|
||||
|
@ -14,7 +14,7 @@ using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -3,13 +3,12 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:Wabbajack"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:lib="clr-namespace:Wabbajack.Lib;assembly=Wabbajack.Lib"
|
||||
xmlns:rxui="http://reactiveui.net"
|
||||
xmlns:lib1="clr-namespace:Wabbajack"
|
||||
d:DesignHeight="450"
|
||||
d:DesignWidth="800"
|
||||
x:TypeArguments="lib:ConfirmationIntervention"
|
||||
x:TypeArguments="lib1:ConfirmationIntervention"
|
||||
mc:Ignorable="d">
|
||||
<Grid Margin="10">
|
||||
<Grid.ColumnDefinitions>
|
||||
|
@ -14,7 +14,7 @@ using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -4,8 +4,8 @@ using System.Threading.Tasks;
|
||||
using MahApps.Metro.Controls;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib;
|
||||
using Wabbajack.Lib.LibCefHelpers;
|
||||
using Wabbajack;
|
||||
using Wabbajack.LibCefHelpers;
|
||||
using Wabbajack.Paths;
|
||||
using Wabbajack.Paths.IO;
|
||||
using Wabbajack.Util;
|
||||
|
@ -31,15 +31,10 @@ namespace Wabbajack
|
||||
.StartWith(Visibility.Collapsed)
|
||||
.BindToStrict(this, x => x.ErrorIcon.Visibility)
|
||||
.DisposeWith(dispose);
|
||||
|
||||
Observable.CombineLatest(
|
||||
this.WhenAny(x => x.ViewModel.ModLists.Count)
|
||||
.Select(x => x > 0),
|
||||
this.WhenAny(x => x.ViewModel.Loaded),
|
||||
resultSelector: (hasContent, loaded) =>
|
||||
{
|
||||
return !hasContent && loaded;
|
||||
})
|
||||
|
||||
this.WhenAny(x => x.ViewModel.ModLists.Count)
|
||||
.CombineLatest(this.WhenAnyValue(x => x.ViewModel.LoadingLock.IsLoading))
|
||||
.Select(x => x.First == 0 && !x.Second)
|
||||
.DistinctUntilChanged()
|
||||
.Select(x => x ? Visibility.Visible : Visibility.Collapsed)
|
||||
.StartWith(Visibility.Collapsed)
|
||||
|
@ -90,7 +90,7 @@
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Stretch="UniformToFill">
|
||||
<Image x:Name="ModListImage" Source="{Binding Metadata.Links.ImageUriFast}">
|
||||
<Image x:Name="ModListImage">
|
||||
<Image.Style>
|
||||
<Style TargetType="Image">
|
||||
<Style.Triggers>
|
||||
@ -255,7 +255,7 @@
|
||||
x:Name="Overlay"
|
||||
Visibility="Collapsed" />
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
|
||||
x:Name="DescriptionTextShadow"
|
||||
x:Name="ModListTitleShadow"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Bottom"
|
||||
@ -269,7 +269,7 @@
|
||||
</TextBlock.Effect>
|
||||
</TextBlock>
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
|
||||
x:Name="ModListTitleShadow"
|
||||
x:Name="ModListTitle"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Bottom"
|
||||
@ -297,7 +297,7 @@
|
||||
FontSize="14"
|
||||
TextWrapping="Wrap" />
|
||||
</ScrollViewer>
|
||||
<ItemsControl Grid.Row="2" ItemsSource="{Binding ModListTagList}">
|
||||
<ItemsControl Grid.Row="2" Name="TagsList">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<WrapPanel/>
|
||||
|
@ -1,21 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Common;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
@ -27,8 +13,59 @@ namespace Wabbajack
|
||||
public ModListTileView()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.WhenActivated(dispose =>
|
||||
this.WhenActivated(disposables =>
|
||||
{
|
||||
ViewModel.WhenAnyValue(vm => vm.Image)
|
||||
.BindToStrict(this, view => view.ModListImage.Source)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
var textXformed = ViewModel.WhenAnyValue(vm => vm.Metadata.Title)
|
||||
.CombineLatest(ViewModel.WhenAnyValue(vm => vm.Metadata.ImageContainsTitle),
|
||||
ViewModel.WhenAnyValue(vm => vm.IsBroken))
|
||||
.Select(x => x.Second && !x.Third ? "" : x.First);
|
||||
|
||||
textXformed
|
||||
.BindToStrict(this, view => view.ModListTitle.Text)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
textXformed
|
||||
.BindToStrict(this, view => view.ModListTitleShadow.Text)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
ViewModel.WhenAnyValue(x => x.Metadata.Description)
|
||||
.BindToStrict(this, x => x.MetadataDescription.Text)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
ViewModel.WhenAnyValue(x => x.ModListTagList)
|
||||
.BindToStrict(this, x => x.TagsList.ItemsSource)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
ViewModel.WhenAnyValue(x => x.LoadingImageLock.IsLoading)
|
||||
.Select(x => x ? Visibility.Visible : Visibility.Collapsed)
|
||||
.BindToStrict(this, x => x.LoadingProgress.Visibility)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
ViewModel.WhenAnyValue(x => x.IsBroken)
|
||||
.Select(x => x ? Visibility.Visible : Visibility.Collapsed)
|
||||
.BindToStrict(this, view => view.Overlay.Visibility)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
ViewModel.WhenAnyValue(x => x.OpenWebsiteCommand)
|
||||
.BindToStrict(this, x => x.OpenWebsiteButton.Command)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
ViewModel.WhenAnyValue(x => x.ExecuteCommand)
|
||||
.BindToStrict(this, x => x.ExecuteButton.Command)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
|
||||
ViewModel.WhenAnyValue(x => x.ProgressPercent)
|
||||
.ObserveOnDispatcher()
|
||||
.Select(p => p.Value)
|
||||
.BindTo(this, x => x.DownloadProgressBar.Value)
|
||||
.DisposeWith(disposables);
|
||||
|
||||
/*
|
||||
this.MarkAsNeeded<ModListTileView, ModListMetadataVM, bool>(this.ViewModel, x => x.IsBroken);
|
||||
this.MarkAsNeeded<ModListTileView, ModListMetadataVM, bool>(this.ViewModel, x => x.Exists);
|
||||
this.MarkAsNeeded<ModListTileView, ModListMetadataVM, string>(this.ViewModel, x => x.Metadata.Links.ImageUri);
|
||||
@ -36,35 +73,12 @@ namespace Wabbajack
|
||||
.Select(p => p.Value)
|
||||
.BindToStrict(this, x => x.DownloadProgressBar.Value)
|
||||
.DisposeWith(dispose);
|
||||
this.WhenAny(x => x.ViewModel.Metadata)
|
||||
.CombineLatest(this.WhenAny(x => x.ViewModel.IsBroken))
|
||||
.Where(x => !x.First.ImageContainsTitle || x.Second)
|
||||
.Select(x => x.First.Title)
|
||||
.BindToStrict(this, x => x.DescriptionTextShadow.Text)
|
||||
.DisposeWith(dispose);
|
||||
this.WhenAny(x => x.ViewModel.Metadata)
|
||||
.CombineLatest(this.WhenAny(x => x.ViewModel.IsBroken))
|
||||
.Where(x => !x.First.ImageContainsTitle || x.Second)
|
||||
.Select(x => x.First.Title)
|
||||
.BindToStrict(this, x => x.ModListTitleShadow.Text)
|
||||
.DisposeWith(dispose);
|
||||
|
||||
this.WhenAny(x => x.ViewModel.IsBroken)
|
||||
.Select(x => x ? Visibility.Visible : Visibility.Collapsed)
|
||||
.BindToStrict(this, x => x.Overlay.Visibility)
|
||||
.DisposeWith(dispose);
|
||||
this.WhenAny(x => x.ViewModel.Metadata.Description)
|
||||
.BindToStrict(this, x => x.MetadataDescription.Text)
|
||||
.DisposeWith(dispose);
|
||||
this.WhenAny(x => x.ViewModel.OpenWebsiteCommand)
|
||||
.BindToStrict(this, x => x.OpenWebsiteButton.Command)
|
||||
.DisposeWith(dispose);
|
||||
|
||||
this.WhenAny(x => x.ViewModel.ModListContentsCommend)
|
||||
.BindToStrict(this, x => x.ModListContentsButton.Command)
|
||||
.DisposeWith(dispose);
|
||||
this.WhenAny(x => x.ViewModel.ExecuteCommand)
|
||||
.BindToStrict(this, x => x.ExecuteButton.Command)
|
||||
.DisposeWith(dispose);
|
||||
|
||||
this.WhenAny(x => x.ViewModel.Image)
|
||||
.BindToStrict(this, x => x.ModListImage.Source)
|
||||
.DisposeWith(dispose);
|
||||
@ -72,6 +86,7 @@ namespace Wabbajack
|
||||
.Select(x => x ? Visibility.Visible : Visibility.Collapsed)
|
||||
.BindToStrict(this, x => x.LoadingProgress.Visibility)
|
||||
.DisposeWith(dispose);
|
||||
*/
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using ReactiveUI;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib.WebAutomation;
|
||||
using Wabbajack.WebAutomation;
|
||||
|
||||
namespace Wabbajack
|
||||
{
|
||||
|
@ -37,6 +37,9 @@
|
||||
<Reference Update="CefSharp.Wpf">
|
||||
<Private>true</Private>
|
||||
</Reference>
|
||||
<Reference Include="MahApps.Metro.IconPacks.Octicons, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0c0d510f9915137a">
|
||||
<HintPath>..\..\..\Users\tbald\.nuget\packages\mahapps.metro.iconpacks\4.8.0\lib\netcoreapp3.1\MahApps.Metro.IconPacks.Octicons.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@ -82,11 +85,15 @@
|
||||
<PackageReference Include="ReactiveUI.Fody" Version="16.2.6" />
|
||||
<PackageReference Include="ReactiveUI.WPF" Version="16.2.6" />
|
||||
<PackageReference Include="Silk.NET.DXGI" Version="2.6.0" />
|
||||
<PackageReference Include="System.Reactive" Version="5.0.0" />
|
||||
<PackageReference Include="WPFThemes.DarkBlend" Version="1.0.8" />
|
||||
<PackageReference Include="CefSharp.OffScreen">
|
||||
<Version>91.1.230</Version>
|
||||
<NoWarn>NU1701</NoWarn>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Wabbajack.Lib\Wabbajack.Lib.csproj" />
|
||||
<ProjectReference Include="..\Wabbajack.Services.OSIntegrated\Wabbajack.Services.OSIntegrated.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@ -4,11 +4,11 @@ using System.Threading.Tasks;
|
||||
using CefSharp;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.VisualBasic.CompilerServices;
|
||||
using Wabbajack.Lib.LibCefHelpers;
|
||||
using Wabbajack.LibCefHelpers;
|
||||
using Wabbajack.Networking.Http;
|
||||
using Wabbajack.Paths;
|
||||
|
||||
namespace Wabbajack.Lib.WebAutomation
|
||||
namespace Wabbajack.WebAutomation
|
||||
{
|
||||
public class CefSharpWrapper : IWebDriver
|
||||
{
|
@ -5,9 +5,9 @@ using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Wabbajack.Lib.LibCefHelpers;
|
||||
using Wabbajack.LibCefHelpers;
|
||||
|
||||
namespace Wabbajack.Lib.WebAutomation
|
||||
namespace Wabbajack.WebAutomation
|
||||
{
|
||||
public interface IWebDriver
|
||||
{
|
@ -8,11 +8,11 @@ using CefSharp.OffScreen;
|
||||
using HtmlAgilityPack;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Wabbajack.Common;
|
||||
using Wabbajack.Lib.LibCefHelpers;
|
||||
using Wabbajack.LibCefHelpers;
|
||||
using Wabbajack.Paths;
|
||||
using Wabbajack.Paths.IO;
|
||||
|
||||
namespace Wabbajack.Lib.WebAutomation
|
||||
namespace Wabbajack.WebAutomation
|
||||
{
|
||||
public class Driver : IDisposable
|
||||
{
|
@ -67,7 +67,7 @@ public class BrowseItemViewModel : ViewModelBase, IActivatableViewModel
|
||||
_dtos = dtos;
|
||||
|
||||
var haveGame = gameLocator.IsInstalled(_metadata.Game);
|
||||
Tags = metadata.tags
|
||||
Tags = metadata.Tags
|
||||
.Select(t => new TagViewModel(t, "ModList"))
|
||||
.Prepend(new TagViewModel(_metadata.Game.MetaData().HumanFriendlyGameName,
|
||||
haveGame ? "Game" : "GameNotInstalled"))
|
||||
|
@ -21,7 +21,7 @@ public class ModlistMetadata
|
||||
|
||||
[JsonPropertyName("official")] public bool Official { get; set; }
|
||||
|
||||
[JsonPropertyName("tags")] public List<string> tags { get; set; } = new();
|
||||
[JsonPropertyName("tags")] public List<string> Tags { get; set; } = new();
|
||||
|
||||
[JsonPropertyName("nsfw")] public bool NSFW { get; set; }
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
|
||||
<ReactiveUI />
|
||||
</Weavers>
|
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
|
||||
<xs:element name="Weavers">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="ReactiveUI" minOccurs="0" maxOccurs="1" type="xs:anyType" />
|
||||
<xs:element name="ModuleInit" minOccurs="0" maxOccurs="1" type="xs:anyType" />
|
||||
</xs:all>
|
||||
<xs:attribute name="VerifyAssembly" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="GenerateXsd" type="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
@ -1,3 +0,0 @@
|
||||
# Wabbajack.Lib
|
||||
|
||||
While `Wabbajack` is the front end, `Wabbajack.Lib` is the back end and contains all functionality from the Compilers, the Installers to our NexusAPI and Downloaders.
|
@ -1,90 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<Platforms>x64</Platforms>
|
||||
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CefSharp.Common">
|
||||
<Version>91.1.230</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="CefSharp.OffScreen">
|
||||
<Version>91.1.230</Version>
|
||||
<NoWarn>NU1701</NoWarn>
|
||||
</PackageReference>
|
||||
<PackageReference Include="F23.StringSimilarity">
|
||||
<Version>4.1.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Fody">
|
||||
<Version>6.5.2</Version>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Genbox.AlphaFS">
|
||||
<Version>2.2.2.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.CSharp">
|
||||
<Version>4.7.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="ModuleInit.Fody">
|
||||
<Version>2.1.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Octokit">
|
||||
<Version>0.50.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="ReactiveUI">
|
||||
<Version>16.2.6</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="ReactiveUI.Fody">
|
||||
<Version>16.2.6</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="SharpCompress">
|
||||
<Version>0.28.3</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Collections.Immutable">
|
||||
<Version>5.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Drawing.Common">
|
||||
<Version>5.0.2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Net.Http">
|
||||
<Version>4.3.4</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.ServiceModel.Syndication">
|
||||
<Version>5.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="YamlDotNet.NetCore">
|
||||
<Version>1.0.0</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Wabbajack.Downloaders.Dispatcher\Wabbajack.Downloaders.Dispatcher.csproj" />
|
||||
<ProjectReference Include="..\Wabbajack.Networking.WabbajackClientApi\Wabbajack.Networking.WabbajackClientApi.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Remove="LibCefHelpers\cefsharp.7z" />
|
||||
<None Update="Downloaders\BethesdaNet\bethnetlogin.exe">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Downloaders\Converters\ffmpeg.exe">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Downloaders\Converters\xWMAEncode.exe">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="vcruntime140.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="vccorlib140.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="msvcp140.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="concrt140.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0"/>
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0"/>
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -20,6 +20,7 @@ public class ModListDownloadMaintainer
|
||||
private readonly DownloadDispatcher _dispatcher;
|
||||
private readonly FileHashCache _hashCache;
|
||||
private readonly IResource<DownloadDispatcher> _rateLimiter;
|
||||
private int _downloadingCount;
|
||||
|
||||
public ModListDownloadMaintainer(ILogger<ModListDownloadMaintainer> logger, Configuration configuration,
|
||||
DownloadDispatcher dispatcher, FileHashCache hashCache, IResource<DownloadDispatcher> rateLimiter)
|
||||
@ -29,6 +30,7 @@ public class ModListDownloadMaintainer
|
||||
_dispatcher = dispatcher;
|
||||
_hashCache = hashCache;
|
||||
_rateLimiter = rateLimiter;
|
||||
_downloadingCount = 0;
|
||||
}
|
||||
|
||||
public AbsolutePath ModListPath(ModlistMetadata metadata)
|
||||
@ -42,6 +44,9 @@ public class ModListDownloadMaintainer
|
||||
var path = ModListPath(metadata);
|
||||
if (!path.FileExists()) return false;
|
||||
|
||||
if (_hashCache.TryGetHashCache(path, out var hash) && hash == metadata.DownloadMetadata!.Hash) return true;
|
||||
if (_downloadingCount > 0) return false;
|
||||
|
||||
return await _hashCache.FileHashCachedAsync(path, token.Value) == metadata.DownloadMetadata!.Hash;
|
||||
}
|
||||
|
||||
@ -58,6 +63,7 @@ public class ModListDownloadMaintainer
|
||||
{
|
||||
try
|
||||
{
|
||||
Interlocked.Increment(ref _downloadingCount);
|
||||
var job = await _rateLimiter.Begin($"Downloading {metadata.Title}", metadata.DownloadMetadata!.Size,
|
||||
token.Value);
|
||||
|
||||
@ -75,6 +81,7 @@ public class ModListDownloadMaintainer
|
||||
finally
|
||||
{
|
||||
progress.OnCompleted();
|
||||
Interlocked.Decrement(ref _downloadingCount);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -120,8 +120,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App", "App", "{54F8D14A-61F
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack", "Wabbajack.App.Wpf\Wabbajack.csproj", "{372B2DD2-EAA3-4E18-98A7-B9838C7B41F4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack.Lib", "Wabbajack.Lib\Wabbajack.Lib.csproj", "{2BB49509-4C65-4687-90D7-C410A2EEEEFE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -332,10 +330,6 @@ Global
|
||||
{372B2DD2-EAA3-4E18-98A7-B9838C7B41F4}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{372B2DD2-EAA3-4E18-98A7-B9838C7B41F4}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{372B2DD2-EAA3-4E18-98A7-B9838C7B41F4}.Release|Any CPU.Build.0 = Release|x64
|
||||
{2BB49509-4C65-4687-90D7-C410A2EEEEFE}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{2BB49509-4C65-4687-90D7-C410A2EEEEFE}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{2BB49509-4C65-4687-90D7-C410A2EEEEFE}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{2BB49509-4C65-4687-90D7-C410A2EEEEFE}.Release|Any CPU.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{4057B668-8595-44FE-9805-007B284A838F} = {98B731EE-4FC0-4482-A069-BCBA25497871}
|
||||
@ -373,6 +367,5 @@ Global
|
||||
{DEB4B073-4EAA-49FD-9D43-F0F8CB930E7A} = {F01F8595-5FD7-4506-8469-F4A5522DACC1}
|
||||
{4F252332-CA77-41DE-95A8-9DF38A81D675} = {98B731EE-4FC0-4482-A069-BCBA25497871}
|
||||
{372B2DD2-EAA3-4E18-98A7-B9838C7B41F4} = {54F8D14A-61F1-4B70-A012-974323F9B05F}
|
||||
{2BB49509-4C65-4687-90D7-C410A2EEEEFE} = {54F8D14A-61F1-4B70-A012-974323F9B05F}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
Loading…
Reference in New Issue
Block a user