Fix size slider not working correctly with rounding

This commit is contained in:
trawzified 2023-12-31 00:23:43 +01:00
parent 95ff0dac6d
commit 58d0fdc9c3
2 changed files with 21 additions and 29 deletions

View File

@ -72,8 +72,6 @@ namespace Wabbajack
[Reactive] public List<GameTypeEntry> GameTypeEntries { get; set; } [Reactive] public List<GameTypeEntry> GameTypeEntries { get; set; }
private bool _filteringOnGame; private bool _filteringOnGame;
private bool _filteringOnMinSize;
private bool _filteringOnMaxSize;
private GameTypeEntry _selectedGameTypeEntry = null; private GameTypeEntry _selectedGameTypeEntry = null;
public GameTypeEntry SelectedGameTypeEntry public GameTypeEntry SelectedGameTypeEntry
@ -181,16 +179,20 @@ namespace Wabbajack
.Select(v => v.Value) .Select(v => v.Value)
.Select<double, Func<ModListMetadataVM, bool>>(minSize => .Select<double, Func<ModListMetadataVM, bool>>(minSize =>
{ {
_filteringOnMinSize = true; return item =>
return item => item.Metadata.DownloadMetadata.TotalSize > (minSize * Math.Pow(1024, 3)); {
return item.Metadata.DownloadMetadata.TotalSize >= minSize;
};
}); });
var maxSizeFilter = this.ObservableForProperty(vm => vm.MaxSizeFilter) var maxSizeFilter = this.ObservableForProperty(vm => vm.MaxSizeFilter)
.Select(v => v.Value) .Select(v => v.Value)
.Select<double, Func<ModListMetadataVM, bool>>(maxSize => .Select<double, Func<ModListMetadataVM, bool>>(maxSize =>
{ {
_filteringOnMaxSize = true; return item =>
return item => item.Metadata.DownloadMetadata.TotalSize < (maxSize * Math.Pow(1024, 3)); {
return item.Metadata.DownloadMetadata.TotalSize <= maxSize;
};
}); });
@ -222,16 +224,8 @@ namespace Wabbajack
var nextEntry = GameTypeEntries.FirstOrDefault(gte => previousGameType == gte.GameIdentifier); var nextEntry = GameTypeEntries.FirstOrDefault(gte => previousGameType == gte.GameIdentifier);
SelectedGameTypeEntry = nextEntry != default ? nextEntry : GameTypeEntries.FirstOrDefault(gte => GameType == ALL_GAME_IDENTIFIER); SelectedGameTypeEntry = nextEntry != default ? nextEntry : GameTypeEntries.FirstOrDefault(gte => GameType == ALL_GAME_IDENTIFIER);
} }
/*
if (!_filteringOnMinSize)
MinSizeModlist = ModLists.MinBy(ml => ml.Metadata.DownloadMetadata.TotalSize);
if(!_filteringOnMaxSize)
MaxSizeModlist = ModLists.MaxBy(ml => ml.Metadata.DownloadMetadata.TotalSize);
*/
_filteringOnGame = false; _filteringOnGame = false;
_filteringOnMinSize = false;
_filteringOnMaxSize = false;
}) })
.DisposeWith(disposables); .DisposeWith(disposables);
}); });

View File

@ -15,24 +15,19 @@ namespace Wabbajack
this.WhenActivated(dispose => this.WhenActivated(dispose =>
{ {
/*
this.WhenAny(x => x.ViewModel.BackCommand)
.BindToStrict(this, x => x.BackButton.Command)
.DisposeWith(dispose);
*/
this.WhenAny(x => x.ViewModel.ModLists) this.WhenAny(x => x.ViewModel.ModLists)
.BindToStrict(this, x => x.ModListGalleryControl.ItemsSource) .BindToStrict(this, x => x.ModListGalleryControl.ItemsSource)
.DisposeWith(dispose); .DisposeWith(dispose);
this.WhenAny(x => x.ViewModel.MinSizeModlist) this.WhenAny(x => x.ViewModel.MinSizeModlist)
.Where(x => x != null) .Where(x => x != null)
.Select(modlist => Math.Round(modlist.Metadata.DownloadMetadata.TotalSize / Math.Pow(1024, 3), 1)) .Select(x => x.Metadata.DownloadMetadata.TotalSize / Math.Pow(1024, 3))
.BindToStrict(this, x => x.SizeSliderFilter.Minimum) .BindToStrict(this, x => x.SizeSliderFilter.Minimum)
.DisposeWith(dispose); .DisposeWith(dispose);
this.WhenAny(x => x.ViewModel.MaxSizeModlist) this.WhenAny(x => x.ViewModel.MaxSizeModlist)
.Where(x => x != null) .Where(x => x != null)
.Select(modlist => Math.Round(modlist.Metadata.DownloadMetadata.TotalSize / Math.Pow(1024, 3), 1)) .Select(x => x.Metadata.DownloadMetadata.TotalSize / Math.Pow(1024, 3))
.BindToStrict(this, x => x.SizeSliderFilter.Maximum) .BindToStrict(this, x => x.SizeSliderFilter.Maximum)
.DisposeWith(dispose); .DisposeWith(dispose);
@ -59,14 +54,6 @@ namespace Wabbajack
.DisposeWith(dispose); .DisposeWith(dispose);
/*
this.WhenAnyValue(x => x.ViewModel.Search)
.Throttle(TimeSpan.FromSeconds(0.25), RxApp.TaskpoolScheduler)
.Select(x => x?.Trim())
.BindToStrict(this, x => x.SearchBox.Text)
.DisposeWith(dispose);
*/
this.BindStrict(ViewModel, vm => vm.Search, x => x.SearchBox.Text) this.BindStrict(ViewModel, vm => vm.Search, x => x.SearchBox.Text)
.DisposeWith(dispose); .DisposeWith(dispose);
this.BindStrict(ViewModel, vm => vm.OnlyInstalled, x => x.OnlyInstalledCheckbox.IsChecked) this.BindStrict(ViewModel, vm => vm.OnlyInstalled, x => x.OnlyInstalledCheckbox.IsChecked)
@ -75,10 +62,21 @@ namespace Wabbajack
.DisposeWith(dispose); .DisposeWith(dispose);
this.BindStrict(ViewModel, vm => vm.ShowUnofficialLists, x => x.ShowUnofficialLists.IsChecked) this.BindStrict(ViewModel, vm => vm.ShowUnofficialLists, x => x.ShowUnofficialLists.IsChecked)
.DisposeWith(dispose); .DisposeWith(dispose);
this.WhenAny(x => x.SizeSliderFilter.LowerValue)
.Select(x => x * Math.Pow(1024, 3))
.BindToStrict(ViewModel, vm => vm.MinSizeFilter)
.DisposeWith(dispose);
this.WhenAny(x => x.SizeSliderFilter.UpperValue)
.Select(x => x * Math.Pow(1024, 3))
.BindToStrict(ViewModel, vm => vm.MaxSizeFilter)
.DisposeWith(dispose);
/*
this.BindStrict(ViewModel, vm => vm.MinSizeFilter, x => x.SizeSliderFilter.LowerValue) this.BindStrict(ViewModel, vm => vm.MinSizeFilter, x => x.SizeSliderFilter.LowerValue)
.DisposeWith(dispose); .DisposeWith(dispose);
this.BindStrict(ViewModel, vm => vm.MaxSizeFilter, x => x.SizeSliderFilter.UpperValue) this.BindStrict(ViewModel, vm => vm.MaxSizeFilter, x => x.SizeSliderFilter.UpperValue)
.DisposeWith(dispose); .DisposeWith(dispose);
*/
this.WhenAny(x => x.ViewModel.ClearFiltersCommand) this.WhenAny(x => x.ViewModel.ClearFiltersCommand)
.BindToStrict(this, x => x.ClearFiltersButton.Command) .BindToStrict(this, x => x.ClearFiltersButton.Command)