mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Port ModVM, GameVM, etc
This commit is contained in:
parent
475e44c895
commit
761b5195fb
@ -10,7 +10,7 @@ namespace Wabbajack
|
|||||||
public GameVM(Game game)
|
public GameVM(Game game)
|
||||||
{
|
{
|
||||||
Game = game;
|
Game = game;
|
||||||
DisplayName = game.ToDescriptionString();
|
DisplayName = game.MetaData().HumanFriendlyGameName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,18 @@
|
|||||||
using DynamicData;
|
using DynamicData.Binding;
|
||||||
using DynamicData.Binding;
|
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using ReactiveUI.Fody.Helpers;
|
using ReactiveUI.Fody.Helpers;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
|
||||||
using System.Reactive;
|
|
||||||
using System.Reactive.Disposables;
|
|
||||||
using System.Reactive.Linq;
|
using System.Reactive.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Threading;
|
|
||||||
using Alphaleonis.Win32.Filesystem;
|
|
||||||
using Wabbajack.Common;
|
using Wabbajack.Common;
|
||||||
using Wabbajack.Lib;
|
using Wabbajack.Lib;
|
||||||
using Wabbajack.Lib.Interventions;
|
using Wabbajack.Lib.Interventions;
|
||||||
|
using Wabbajack.Paths;
|
||||||
|
using Wabbajack.View_Models;
|
||||||
|
|
||||||
namespace Wabbajack
|
namespace Wabbajack
|
||||||
{
|
{
|
||||||
|
@ -3,12 +3,13 @@ using System.Collections.ObjectModel;
|
|||||||
using System.Reactive.Disposables;
|
using System.Reactive.Disposables;
|
||||||
using System.Reactive.Linq;
|
using System.Reactive.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using ReactiveUI.Fody.Helpers;
|
|
||||||
using Wabbajack.Lib;
|
|
||||||
using DynamicData;
|
using DynamicData;
|
||||||
using DynamicData.Binding;
|
using DynamicData.Binding;
|
||||||
|
using ReactiveUI.Fody.Helpers;
|
||||||
|
using Wabbajack.Common;
|
||||||
|
using Wabbajack.DTOs;
|
||||||
|
|
||||||
namespace Wabbajack
|
namespace Wabbajack.View_Models
|
||||||
{
|
{
|
||||||
public class ModListContentsVM : BackNavigatingVM
|
public class ModListContentsVM : BackNavigatingVM
|
||||||
{
|
{
|
||||||
|
@ -2,14 +2,15 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Reactive.Linq;
|
using System.Reactive.Linq;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
using Wabbajack.Common;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Wabbajack.DTOs.DownloadStates;
|
||||||
using Wabbajack.Lib;
|
using Wabbajack.Lib;
|
||||||
using Wabbajack.Lib.Downloaders;
|
|
||||||
|
|
||||||
namespace Wabbajack
|
namespace Wabbajack
|
||||||
{
|
{
|
||||||
public class ModVM : ViewModel
|
public class ModVM : ViewModel
|
||||||
{
|
{
|
||||||
|
private readonly ILogger<ModVM> _logger;
|
||||||
public IMetaState State { get; }
|
public IMetaState State { get; }
|
||||||
|
|
||||||
// Image isn't exposed as a direct property, but as an observable.
|
// Image isn't exposed as a direct property, but as an observable.
|
||||||
@ -17,13 +18,14 @@ namespace Wabbajack
|
|||||||
// and the cached image will automatically be released when the last interested party is gone.
|
// and the cached image will automatically be released when the last interested party is gone.
|
||||||
public IObservable<BitmapImage> ImageObservable { get; }
|
public IObservable<BitmapImage> ImageObservable { get; }
|
||||||
|
|
||||||
public ModVM(IMetaState state)
|
public ModVM(ILogger<ModVM> logger, IMetaState state)
|
||||||
{
|
{
|
||||||
|
_logger = logger;
|
||||||
State = state;
|
State = state;
|
||||||
|
|
||||||
ImageObservable = Observable.Return(State.ImageURL.ToString())
|
ImageObservable = Observable.Return(State.ImageURL?.ToString())
|
||||||
.ObserveOn(RxApp.TaskpoolScheduler)
|
.ObserveOn(RxApp.TaskpoolScheduler)
|
||||||
.DownloadBitmapImage((ex) => Utils.Log($"Skipping slide for mod {State.Name}"))
|
.DownloadBitmapImage(ex => _logger.LogError(ex, "Skipping slide for mod {Name}", State.Name))
|
||||||
.Replay(1)
|
.Replay(1)
|
||||||
.RefCount(TimeSpan.FromMilliseconds(5000));
|
.RefCount(TimeSpan.FromMilliseconds(5000));
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ using System.Reactive.Linq;
|
|||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Wabbajack.Common;
|
using Wabbajack.Common;
|
||||||
using Wabbajack.Lib;
|
using Wabbajack.Lib;
|
||||||
|
using Wabbajack.Paths.IO;
|
||||||
|
|
||||||
namespace Wabbajack
|
namespace Wabbajack
|
||||||
{
|
{
|
||||||
@ -27,9 +28,9 @@ namespace Wabbajack
|
|||||||
execute: () =>
|
execute: () =>
|
||||||
{
|
{
|
||||||
var path = mainVM.Settings.Installer.LastInstalledListLocation;
|
var path = mainVM.Settings.Installer.LastInstalledListLocation;
|
||||||
if (path == default || !path.Exists)
|
if (path == default || !path.FileExists())
|
||||||
{
|
{
|
||||||
path = UIUtils.OpenFileDialog($"*{Consts.ModListExtension}|*{Consts.ModListExtension}");
|
path = UIUtils.OpenFileDialog($"*{Ext.Wabbajack}|*{Ext.Wabbajack}");
|
||||||
}
|
}
|
||||||
_mainVM.OpenInstaller(path);
|
_mainVM.OpenInstaller(path);
|
||||||
});
|
});
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
xmlns:local="clr-namespace:Wabbajack"
|
xmlns:local="clr-namespace:Wabbajack"
|
||||||
xmlns:mahapps="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
|
xmlns:mahapps="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:viewModels="clr-namespace:Wabbajack.View_Models"
|
||||||
Title="Wabbajack"
|
Title="Wabbajack"
|
||||||
Width="1280"
|
Width="1280"
|
||||||
Height="960"
|
Height="960"
|
||||||
@ -40,7 +41,7 @@
|
|||||||
<DataTemplate DataType="{x:Type local:SettingsVM}">
|
<DataTemplate DataType="{x:Type local:SettingsVM}">
|
||||||
<local:SettingsView ViewModel="{Binding}" />
|
<local:SettingsView ViewModel="{Binding}" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
<DataTemplate DataType="{x:Type local:ModListContentsVM}">
|
<DataTemplate DataType="{x:Type viewModels:ModListContentsVM}">
|
||||||
<local:ModListContentsView ViewModel="{Binding}" />
|
<local:ModListContentsView ViewModel="{Binding}" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ContentPresenter.Resources>
|
</ContentPresenter.Resources>
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
xmlns:local="clr-namespace:Wabbajack"
|
xmlns:local="clr-namespace:Wabbajack"
|
||||||
xmlns:rxui="http://reactiveui.net"
|
xmlns:rxui="http://reactiveui.net"
|
||||||
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
|
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
|
||||||
x:TypeArguments="local:ModListContentsVM"
|
xmlns:viewModels="clr-namespace:Wabbajack.View_Models"
|
||||||
|
x:TypeArguments="viewModels:ModListContentsVM"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DesignHeight="300" d:DesignWidth="300">
|
d:DesignHeight="300" d:DesignWidth="300">
|
||||||
<Grid>
|
<Grid>
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -18,4 +19,9 @@ public static class StringExtensions
|
|||||||
|
|
||||||
return sha.Hash!.ToHex();
|
return sha.Hash!.ToHex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool ContainsCaseInsensitive(this string src, string contains)
|
||||||
|
{
|
||||||
|
return src.Contains(contains, StringComparison.InvariantCultureIgnoreCase);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user