mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Merge branch 'blocking_fixes' into pre-release
# Conflicts: # CHANGELOG.md
This commit is contained in:
commit
31200dff1e
@ -1,5 +1,8 @@
|
|||||||
### Changelog
|
### Changelog
|
||||||
|
|
||||||
|
### Version - TBA
|
||||||
|
* Fixed some UI issues arising from 3.2.0.0 changes - more informative error text, drive space checking, wiki link button
|
||||||
|
|
||||||
#### Version - 3.2.0.1 - 7/23/2023
|
#### Version - 3.2.0.1 - 7/23/2023
|
||||||
* Code cleanup: re-added some network and diagnostic code missing since 2.5
|
* Code cleanup: re-added some network and diagnostic code missing since 2.5
|
||||||
|
|
||||||
|
@ -140,6 +140,7 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM, ICpuStatusVM
|
|||||||
// Command properties
|
// Command properties
|
||||||
public ReactiveCommand<Unit, Unit> ShowManifestCommand { get; }
|
public ReactiveCommand<Unit, Unit> ShowManifestCommand { get; }
|
||||||
public ReactiveCommand<Unit, Unit> OpenReadmeCommand { get; }
|
public ReactiveCommand<Unit, Unit> OpenReadmeCommand { get; }
|
||||||
|
public ReactiveCommand<Unit, Unit> OpenWikiCommand { get; }
|
||||||
public ReactiveCommand<Unit, Unit> OpenDiscordButton { get; }
|
public ReactiveCommand<Unit, Unit> OpenDiscordButton { get; }
|
||||||
public ReactiveCommand<Unit, Unit> VisitModListWebsiteCommand { get; }
|
public ReactiveCommand<Unit, Unit> VisitModListWebsiteCommand { get; }
|
||||||
|
|
||||||
@ -178,6 +179,11 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM, ICpuStatusVM
|
|||||||
UIUtils.OpenWebsite(new Uri(ModList!.Readme));
|
UIUtils.OpenWebsite(new Uri(ModList!.Readme));
|
||||||
}, this.WhenAnyValue(vm => vm.LoadingLock.IsNotLoading, vm => vm.ModList.Readme, (isNotLoading, readme) => isNotLoading && !string.IsNullOrWhiteSpace(readme)));
|
}, this.WhenAnyValue(vm => vm.LoadingLock.IsNotLoading, vm => vm.ModList.Readme, (isNotLoading, readme) => isNotLoading && !string.IsNullOrWhiteSpace(readme)));
|
||||||
|
|
||||||
|
OpenWikiCommand = ReactiveCommand.Create(() =>
|
||||||
|
{
|
||||||
|
UIUtils.OpenWebsite(new Uri("https://wiki.wabbajack.org/index.html"));
|
||||||
|
}, this.WhenAnyValue(vm => vm.LoadingLock.IsNotLoading));
|
||||||
|
|
||||||
VisitModListWebsiteCommand = ReactiveCommand.Create(() =>
|
VisitModListWebsiteCommand = ReactiveCommand.Create(() =>
|
||||||
{
|
{
|
||||||
UIUtils.OpenWebsite(ModList!.Website);
|
UIUtils.OpenWebsite(ModList!.Website);
|
||||||
@ -280,6 +286,10 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM, ICpuStatusVM
|
|||||||
{
|
{
|
||||||
yield return ErrorResponse.Fail("Can't have identical install and download folders");
|
yield return ErrorResponse.Fail("Can't have identical install and download folders");
|
||||||
}
|
}
|
||||||
|
if (installPath.ToString().Length > 0 && downloadPath.ToString().Length > 0 && KnownFolders.IsSubDirectoryOf(installPath.ToString(), downloadPath.ToString()))
|
||||||
|
{
|
||||||
|
yield return ErrorResponse.Fail("Can't put the install folder inside the download folder");
|
||||||
|
}
|
||||||
foreach (var game in GameRegistry.Games)
|
foreach (var game in GameRegistry.Games)
|
||||||
{
|
{
|
||||||
if (!_gameLocator.TryFindLocation(game.Key, out var location))
|
if (!_gameLocator.TryFindLocation(game.Key, out var location))
|
||||||
@ -305,11 +315,12 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM, ICpuStatusVM
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (installPath.ToString().Length != 0 && installPath != LastInstallPath &&
|
if (installPath.ToString().Length != 0 && installPath != LastInstallPath &&
|
||||||
!Installer.AutomaticallyOverwrite &&
|
|
||||||
Directory.EnumerateFileSystemEntries(installPath.ToString()).Any())
|
Directory.EnumerateFileSystemEntries(installPath.ToString()).Any())
|
||||||
{
|
{
|
||||||
string message =
|
string message =
|
||||||
"There are existing files in the chosen install path, they will be deleted or overwritten (if updating existing modlist), continue?";
|
"There are files already in the chosen install path, if you are updating an existing modlist, this is fine. " + Environment.NewLine +
|
||||||
|
" Otherwise, please ensure you intend for the folder contents to be deleted during the modlist install." + Environment.NewLine +
|
||||||
|
" Continue? ";
|
||||||
string title = "Files found in install folder";
|
string title = "Files found in install folder";
|
||||||
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
|
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
|
||||||
DialogResult result = MessageBox.Show(message, title, buttons);
|
DialogResult result = MessageBox.Show(message, title, buttons);
|
||||||
@ -325,8 +336,41 @@ public class InstallerVM : BackNavigatingVM, IBackNavigatingVM, ICpuStatusVM
|
|||||||
|
|
||||||
if (KnownFolders.IsInSpecialFolder(installPath) || KnownFolders.IsInSpecialFolder(downloadPath))
|
if (KnownFolders.IsInSpecialFolder(installPath) || KnownFolders.IsInSpecialFolder(downloadPath))
|
||||||
{
|
{
|
||||||
yield return ErrorResponse.Fail("Can't install a modlist into Windows protected locations - such as Downloads, Documents etc");
|
yield return ErrorResponse.Fail("Can't install a modlist into Windows protected locations - such as Downloads,Documents etc, please make a new folder for the modlist.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (installPath.ToString().Length > 0 && downloadPath.ToString().Length > 0 && !HasEnoughSpace(installPath, downloadPath)){
|
||||||
|
yield return ErrorResponse.Fail("Can't install modlist due to lack of free hard drive space, please read the modlist Readme to learn more.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool HasEnoughSpace(AbsolutePath inpath, AbsolutePath downpath)
|
||||||
|
{
|
||||||
|
string driveLetterInPath = inpath.ToString().Substring(0,1);
|
||||||
|
string driveLetterDownPath = inpath.ToString().Substring(0,1);
|
||||||
|
DriveInfo driveUsedInPath = new DriveInfo(driveLetterInPath);
|
||||||
|
DriveInfo driveUsedDownPath = new DriveInfo(driveLetterDownPath);
|
||||||
|
long spaceRequiredforInstall = ModlistMetadata.DownloadMetadata.SizeOfInstalledFiles;
|
||||||
|
long spaceRequiredforDownload = ModlistMetadata.DownloadMetadata.SizeOfArchives;
|
||||||
|
long spaceInstRemaining = driveUsedInPath.AvailableFreeSpace;
|
||||||
|
long spaceDownRemaining = driveUsedDownPath.AvailableFreeSpace;
|
||||||
|
if ( driveLetterInPath == driveLetterDownPath)
|
||||||
|
{
|
||||||
|
long totalSpaceRequired = spaceRequiredforInstall + spaceRequiredforDownload;
|
||||||
|
if (spaceInstRemaining < totalSpaceRequired)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if( spaceInstRemaining < spaceRequiredforInstall || spaceDownRemaining < spaceRequiredforDownload)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task BeginSlideShow(CancellationToken token)
|
private async Task BeginSlideShow(CancellationToken token)
|
||||||
|
@ -39,9 +39,6 @@ namespace Wabbajack
|
|||||||
|
|
||||||
public bool SupportsAfterInstallNavigation => true;
|
public bool SupportsAfterInstallNavigation => true;
|
||||||
|
|
||||||
[Reactive]
|
|
||||||
public bool AutomaticallyOverwrite { get; set; }
|
|
||||||
|
|
||||||
public int ConfigVisualVerticalOffset => 25;
|
public int ConfigVisualVerticalOffset => 25;
|
||||||
|
|
||||||
public MO2InstallerVM(InstallerVM installerVM)
|
public MO2InstallerVM(InstallerVM installerVM)
|
||||||
@ -166,7 +163,6 @@ namespace Wabbajack
|
|||||||
if (settings == null) return;
|
if (settings == null) return;
|
||||||
settings.InstallationLocation = Location.TargetPath;
|
settings.InstallationLocation = Location.TargetPath;
|
||||||
settings.DownloadLocation = DownloadLocation.TargetPath;
|
settings.DownloadLocation = DownloadLocation.TargetPath;
|
||||||
settings.AutomaticallyOverrideExistingInstall = AutomaticallyOverwrite;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AfterInstallNavigation()
|
public void AfterInstallNavigation()
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
x:TypeArguments="local:InstallerVM"
|
x:TypeArguments="local:InstallerVM"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<local:AttentionBorder x:Name="AttentionBorder" ClipToBounds="True">
|
<local:AttentionBorder x:Name="AttentionBorder" ClipToBounds="True">
|
||||||
<Grid Margin="5">
|
<Grid Margin="6">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
<RowDefinition Height="3*" />
|
<RowDefinition Height="3*" />
|
||||||
@ -23,6 +23,7 @@
|
|||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="5"
|
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="5"
|
||||||
x:Name="TitleText"
|
x:Name="TitleText"
|
||||||
@ -124,7 +125,7 @@
|
|||||||
<TextBlock Grid.Row="1"
|
<TextBlock Grid.Row="1"
|
||||||
Margin="0,10,0,0"
|
Margin="0,10,0,0"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
Text="Readme" />
|
Text="Modlist Readme" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid Grid.Row="1" Grid.Column="4"
|
<Grid Grid.Row="1" Grid.Column="4"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
@ -133,6 +134,29 @@
|
|||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
<Button
|
||||||
|
x:Name="OpenWikiButton"
|
||||||
|
Width="50"
|
||||||
|
Height="50"
|
||||||
|
Style="{StaticResource CircleButtonStyle}">
|
||||||
|
<icon:PackIconFontAwesome
|
||||||
|
Width="25"
|
||||||
|
Height="25"
|
||||||
|
Foreground="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}"
|
||||||
|
Kind="QuestionSolid" />
|
||||||
|
</Button>
|
||||||
|
<TextBlock Grid.Row="1"
|
||||||
|
Margin="0,10,0,0"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
Text="Help and Wiki" />
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Row="1" Grid.Column="5"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Background="Transparent" Grid.ColumnSpan="2" Margin="0,0,10,0">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
<Button
|
<Button
|
||||||
x:Name="CloseButton"
|
x:Name="CloseButton"
|
||||||
Width="50"
|
Width="50"
|
||||||
|
@ -46,6 +46,9 @@ namespace Wabbajack
|
|||||||
this.WhenAny(x => x.ViewModel.OpenReadmeCommand)
|
this.WhenAny(x => x.ViewModel.OpenReadmeCommand)
|
||||||
.BindToStrict(this, x => x.OpenReadmeButton.Command)
|
.BindToStrict(this, x => x.OpenReadmeButton.Command)
|
||||||
.DisposeWith(dispose);
|
.DisposeWith(dispose);
|
||||||
|
this.WhenAny(x => x.ViewModel.OpenWikiCommand)
|
||||||
|
.BindToStrict(this, x => x.OpenWikiButton.Command)
|
||||||
|
.DisposeWith(dispose);
|
||||||
this.WhenAny(x => x.ViewModel.CloseWhenCompleteCommand)
|
this.WhenAny(x => x.ViewModel.CloseWhenCompleteCommand)
|
||||||
.BindToStrict(this, x => x.CloseButton.Command)
|
.BindToStrict(this, x => x.CloseButton.Command)
|
||||||
.DisposeWith(dispose);
|
.DisposeWith(dispose);
|
||||||
|
@ -39,6 +39,13 @@
|
|||||||
FontSize="14"
|
FontSize="14"
|
||||||
Text="Target Modlist"
|
Text="Target Modlist"
|
||||||
TextAlignment="Center" />
|
TextAlignment="Center" />
|
||||||
|
<TextBlock x:Name="errorTextBox"
|
||||||
|
Grid.Row="3"
|
||||||
|
FontFamily="Verdana" FontSize="10" FontWeight="ExtraBold"
|
||||||
|
Background="{StaticResource WindowBackgroundBrush}"
|
||||||
|
Foreground="Red"
|
||||||
|
Text=""
|
||||||
|
TextAlignment="Left" Margin="0,79,0,-45" Grid.ColumnSpan="3" />
|
||||||
<local:FilePicker Grid.Row="1" Grid.Column="2"
|
<local:FilePicker Grid.Row="1" Grid.Column="2"
|
||||||
x:Name="ModListLocationPicker"
|
x:Name="ModListLocationPicker"
|
||||||
Height="30"
|
Height="30"
|
||||||
|
@ -47,6 +47,11 @@ namespace Wabbajack
|
|||||||
.BindToStrict(this, view => view.BeginButton.IsEnabled)
|
.BindToStrict(this, view => view.BeginButton.IsEnabled)
|
||||||
.DisposeWith(dispose);
|
.DisposeWith(dispose);
|
||||||
|
|
||||||
|
this.WhenAnyValue(x => x.ViewModel.ErrorState)
|
||||||
|
.Select(v => v.Reason)
|
||||||
|
.BindToStrict(this, view => view.errorTextBox.Text)
|
||||||
|
.DisposeWith(dispose);
|
||||||
|
|
||||||
this.WhenAnyValue(x => x.ViewModel.ErrorState)
|
this.WhenAnyValue(x => x.ViewModel.ErrorState)
|
||||||
.Select(v => v.Failed ? Visibility.Visible : Visibility.Hidden)
|
.Select(v => v.Failed ? Visibility.Visible : Visibility.Hidden)
|
||||||
.BindToStrict(this, view => view.ErrorSummaryIcon.Visibility)
|
.BindToStrict(this, view => view.ErrorSummaryIcon.Visibility)
|
||||||
|
@ -46,21 +46,5 @@
|
|||||||
FontSize="14"
|
FontSize="14"
|
||||||
PickerVM="{Binding DownloadLocation}"
|
PickerVM="{Binding DownloadLocation}"
|
||||||
ToolTip="The directory where modlist archives will be downloaded to" />
|
ToolTip="The directory where modlist archives will be downloaded to" />
|
||||||
<CheckBox Grid.Row="2" Grid.Column="2"
|
|
||||||
HorizontalAlignment="Right"
|
|
||||||
Content="Overwrite Installation"
|
|
||||||
IsChecked="{Binding AutomaticallyOverwrite}"
|
|
||||||
ToolTip="If installing over an existing installation, automatically replace it without asking permission.">
|
|
||||||
<CheckBox.Style>
|
|
||||||
<Style TargetType="CheckBox">
|
|
||||||
<Setter Property="Opacity" Value="0.6" />
|
|
||||||
<Style.Triggers>
|
|
||||||
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True">
|
|
||||||
<Setter Property="Opacity" Value="1" />
|
|
||||||
</DataTrigger>
|
|
||||||
</Style.Triggers>
|
|
||||||
</Style>
|
|
||||||
</CheckBox.Style>
|
|
||||||
</CheckBox>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
@ -33,13 +33,6 @@
|
|||||||
<TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3"
|
<TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3"
|
||||||
x:Name="ExtendedDescription"
|
x:Name="ExtendedDescription"
|
||||||
TextWrapping="WrapWithOverflow" />
|
TextWrapping="WrapWithOverflow" />
|
||||||
<CheckBox Grid.Row="2" Grid.Column="2"
|
|
||||||
x:Name="AutoOverwriteCheckbox"
|
|
||||||
Margin="4"
|
|
||||||
HorizontalAlignment="Right"
|
|
||||||
Content="Remember"
|
|
||||||
IsChecked="{Binding Installer.AutomaticallyOverwrite}"
|
|
||||||
ToolTip="If installing over an existing installation next time, automatically replace it without asking permission." />
|
|
||||||
<Button Grid.Row="3" Grid.Column="0"
|
<Button Grid.Row="3" Grid.Column="0"
|
||||||
x:Name="CancelButton"
|
x:Name="CancelButton"
|
||||||
Content="Cancel" />
|
Content="Cancel" />
|
||||||
|
@ -40,11 +40,6 @@ namespace Wabbajack
|
|||||||
this.WhenAny(x => x.ViewModel.Source.CancelCommand)
|
this.WhenAny(x => x.ViewModel.Source.CancelCommand)
|
||||||
.BindToStrict(this, x => x.CancelButton.Command)
|
.BindToStrict(this, x => x.CancelButton.Command)
|
||||||
.DisposeWith(dispose);
|
.DisposeWith(dispose);
|
||||||
|
|
||||||
this.BindStrict(this.ViewModel, x => x.Installer.AutomaticallyOverwrite, x => x.AutoOverwriteCheckbox.IsChecked,
|
|
||||||
vmToViewConverter: x => x,
|
|
||||||
viewToVmConverter: x => x ?? false)
|
|
||||||
.DisposeWith(dispose);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ public class MainWindowViewModel : ViewModelBase
|
|||||||
ShowInCenter = true,
|
ShowInCenter = true,
|
||||||
ContentTitle = "Wabbajack Launcher: Bad startup path",
|
ContentTitle = "Wabbajack Launcher: Bad startup path",
|
||||||
ContentMessage =
|
ContentMessage =
|
||||||
"Cannot start in the root of a drive, or protected folder locations such as Downloads, Desktop etc.\nPlease move Wabbajack to another folder."
|
"Cannot start in the root of a drive, or protected folder locations such as Downloads, Desktop etc.\nPlease move Wabbajack to another folder, creating a new folder if necessary ( example : C:\\Wabbajack\\, outside of these locations."
|
||||||
});
|
});
|
||||||
var result = await msg.Show();
|
var result = await msg.Show();
|
||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user