diff --git a/MSURandomizer/MSURandomizer.csproj b/MSURandomizer/MSURandomizer.csproj
index 691d7a3..86c0262 100644
--- a/MSURandomizer/MSURandomizer.csproj
+++ b/MSURandomizer/MSURandomizer.csproj
@@ -6,7 +6,7 @@
true
app.manifest
true
- 3.0.0-rc.3
+ 3.0.0-rc.3a
MSURandomizerIcon.ico
true
MattEqualsCoder.MSURandomizer.Avalonia
diff --git a/MSURandomizer/Services/AppInitializationService.cs b/MSURandomizer/Services/AppInitializationService.cs
index 3e184ef..9d39714 100644
--- a/MSURandomizer/Services/AppInitializationService.cs
+++ b/MSURandomizer/Services/AppInitializationService.cs
@@ -31,7 +31,7 @@ public void Initialize(string[] args)
msuRandomizerInitializationService.Initialize(new MsuRandomizerInitializationRequest()
{
InitializeAppSettings = true,
- InitializeMsuTypes = false,
+ InitializeMsuTypes = true,
InitializeCache = false,
InitializeUserOptions = true,
LookupMsus = false,
@@ -78,7 +78,7 @@ public void FinishInitialization()
InitializeAppSettings = false,
InitializeMsuTypes = true,
InitializeCache = true,
- InitializeUserOptions = true,
+ InitializeUserOptions = false,
LookupMsus = true
});
msuGameService.InstallLuaScripts();
diff --git a/MSURandomizer/Services/MsuDetailsService.cs b/MSURandomizer/Services/MsuDetailsService.cs
index e6cbded..013113d 100644
--- a/MSURandomizer/Services/MsuDetailsService.cs
+++ b/MSURandomizer/Services/MsuDetailsService.cs
@@ -25,10 +25,18 @@ public MsuDetailsWindowViewModel InitilizeModel(MsuViewModel model)
mapper.Map(_parentModel.Msu.Settings, Model);
_originalMsuTypeName = Model.MsuTypeName;
Model.Msu = _parentModel.Msu;
- Model.Tracks =
- _parentModel.Msu.MsuType?.Tracks.OrderBy(x => x.Number)
- .Select(t => new MsuTrackViewModel(t, _parentModel.Msu.Tracks)).ToList() ??
- [];
+
+ if (_parentModel.Msu.MsuType != null)
+ {
+ Model.Tracks = _parentModel.Msu.MsuType.Tracks.OrderBy(x => x.Number)
+ .Select(t => new MsuTrackViewModel(t, _parentModel.Msu.Tracks)).ToList();
+ }
+ else
+ {
+ Model.Tracks = _parentModel.Msu.Tracks.OrderBy(x => x.Number)
+ .Select(t => new MsuTrackViewModel(t, _parentModel.Msu.Tracks)).ToList();
+ }
+
Model.TrackCount = Model.Tracks.Count;
Model.MsuTypeNames = [""];
Model.MsuTypeNames.AddRange(msuTypeService.MsuTypes.Select(x => x.DisplayName).OrderBy(x => x));
diff --git a/MSURandomizer/Services/MsuListService.cs b/MSURandomizer/Services/MsuListService.cs
index 60da3c1..8fc35dd 100644
--- a/MSURandomizer/Services/MsuListService.cs
+++ b/MSURandomizer/Services/MsuListService.cs
@@ -72,11 +72,6 @@ public void FilterMSUs(MsuType msuType, MsuFilter msuFilter)
{
Model.MsuTypeName = msuType.DisplayName;
Model.MsuType = msuType;
- var msuTypePath = Model.HardwareMode ? "" :
- userOptions.MsuUserOptions.MsuTypePaths.TryGetValue(msuType, out var path) ? path :
- userOptions.MsuUserOptions.DefaultMsuPath;
- var rootPath = Model.HardwareMode ? "" : GetMsuTypeBasePath(msuType);
- var useAbsolutePath = string.IsNullOrWhiteSpace(rootPath);
// Hardware MSUs are more limited in compatibility
List? compatibleMsuNames = null;
@@ -94,15 +89,10 @@ public void FilterMSUs(MsuType msuType, MsuFilter msuFilter)
}
var filteredMsus = Model.MsuViewModels
- .Where(x => x.Msu.MatchesFilter(msuFilter, msuType, msuTypePath, compatibleMsuNames) &&
+ .Where(x => x.Msu.MatchesFilter(msuFilter, msuType, compatibleMsuNames) &&
(x.Msu.NumUniqueTracks > x.Msu.MsuType?.RequiredTrackNumbers.Count / 5 || x.Msu.NumUniqueTracks > 10))
.OrderBy(x => x.MsuName)
.ToList();
- foreach (var filteredMsu in filteredMsus)
- {
- filteredMsu.DisplayPath = useAbsolutePath ? filteredMsu.MsuPath : Path.GetRelativePath(rootPath!, filteredMsu.MsuPath);
- }
-
Model.FilteredMsus = filteredMsus;
Model.SelectedMsus = Model.FilteredMsus
.Where(x => Model.SelectedMsus.Select(vm => vm.MsuPath).Contains(x.MsuPath)).ToList();
@@ -189,19 +179,4 @@ public void PopulateMsuViewModels(List? msus)
OnDisplayUnknownMsuWindowRequest?.Invoke(this, EventArgs.Empty);
}
}
-
- private string? GetMsuTypeBasePath(MsuType? msuType)
- {
- if (msuType == null)
- {
- return userOptions.MsuUserOptions.DefaultMsuPath;
- }
-
- if (userOptions.MsuUserOptions.MsuTypeNamePaths.TryGetValue(msuType.DisplayName, out string? path))
- {
- return path;
- }
-
- return userOptions.MsuUserOptions.DefaultMsuPath;
- }
}
\ No newline at end of file
diff --git a/MSURandomizer/Services/SettingsWindowService.cs b/MSURandomizer/Services/SettingsWindowService.cs
index 57b7715..41c873b 100644
--- a/MSURandomizer/Services/SettingsWindowService.cs
+++ b/MSURandomizer/Services/SettingsWindowService.cs
@@ -1,6 +1,6 @@
using System;
using System.Collections.Generic;
-using System.IO;
+using System.Collections.ObjectModel;
using System.Linq;
using AutoMapper;
using AvaloniaControls.Controls;
@@ -16,23 +16,23 @@ public class SettingsWindowService(
IMsuUserOptionsService userOptionsService,
IMsuTypeService msuTypeService,
IMsuLookupService msuLookupService,
+ IMsuCacheService msuCacheService,
IMapper mapper) : ControlService
{
private readonly SettingsWindowViewModel _model = new();
+ private Dictionary _msuTypes = [];
+ private List _msuTypeList = [];
public SettingsWindowViewModel InitializeModel()
{
mapper.Map(userOptionsService.MsuUserOptions, _model);
_model.DefaultDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
- foreach (var msuType in msuTypeService.MsuTypes.OrderBy(x => x.DisplayName))
- {
- _model.MsuTypeNamePathsList.Add(new MsuTypePath()
- {
- MsuType = msuType,
- Path = _model.MsuTypeNamePaths.GetValueOrDefault(msuType.DisplayName, ""),
- DefaultDirectory = _model.DefaultDirectory
- });
- }
+ _msuTypes = msuTypeService.MsuTypes.OrderBy(x => x.DisplayName).ToDictionary(x => x.DisplayName, x => x);
+ _msuTypeList = _msuTypes.Keys.ToList();
+ _model.MsuDirectoryList = new ObservableCollection(
+ userOptionsService.MsuUserOptions.MsuDirectories.Select(x =>
+ new MsuDirectory(x.Key, x.Value, _msuTypeList)));
+ _model.DisplayNoMsuDirectoriesMessage = _model.MsuDirectoryList.Count == 0;
return _model;
}
@@ -41,12 +41,7 @@ public void SaveModel()
var options = userOptionsService.MsuUserOptions;
var hasPathUpdated = HasPathUpdated(options);
mapper.Map(_model, options);
- options.MsuTypePaths = _model.MsuTypeNamePathsList
- .Where(x => !string.IsNullOrWhiteSpace(x.Path) && Directory.Exists(x.Path) && x.MsuType != null)
- .ToDictionary(x => x.MsuType!, x => x.Path);
- options.MsuTypeNamePaths = _model.MsuTypeNamePathsList
- .Where(x => !string.IsNullOrWhiteSpace(x.Path) && Directory.Exists(x.Path) && x.MsuType != null)
- .ToDictionary(x => x.MsuType!.DisplayName, x => x.Path);
+ options.MsuDirectories = _model.MsuDirectoryList.ToDictionary(x => x.Path, x => x.MsuTypeName);
userOptionsService.Save();
ScalableWindow.GlobalScaleFactor = options.UiScaling;
@@ -54,28 +49,42 @@ public void SaveModel()
{
ITaskService.Run(() =>
{
+ msuCacheService.Clear(false);
msuLookupService.LookupMsus();
});
}
}
- private bool HasPathUpdated(MsuUserOptions options)
+ public bool AddDirectory(string directory)
{
- if (_model.DefaultMsuPath != options.DefaultMsuPath)
+ if (_model.MsuDirectoryList.Any(x => x.Path == directory))
{
- return true;
+ return false;
}
-
- foreach (var msuPath in _model.MsuTypeNamePathsList.Where(x => x.MsuType != null))
+ _model.MsuDirectoryList.Add(new MsuDirectory(directory, _msuTypeList.FirstOrDefault() ?? "", _msuTypeList));
+ _model.DisplayNoMsuDirectoriesMessage = false;
+ return true;
+ }
+
+ public void RemoveDirectory(string directory)
+ {
+ var directoryToRemove = _model.MsuDirectoryList.FirstOrDefault(x => x.Path == directory);
+ if (directoryToRemove != null)
{
- var newPath = msuPath.Path.Trim();
- var oldPath = options.MsuTypePaths.GetValueOrDefault(msuPath.MsuType!, "").Trim();
- if (newPath != oldPath)
- {
- return true;
- }
+ _model.MsuDirectoryList.Remove(directoryToRemove);
+ _model.DisplayNoMsuDirectoriesMessage = _model.MsuDirectoryList.Count == 0;
+ }
+ }
+
+ private bool HasPathUpdated(MsuUserOptions options)
+ {
+ if (_model.MsuDirectoryList.Count != options.MsuDirectories.Count)
+ {
+ return true;
}
- return false;
+ var currentDirectories = options.MsuDirectories.Select(x => $"{x.Key}={x.Value}");
+ var newDirectories = _model.MsuDirectoryList.Select(x => $"{x.Path}={x.MsuTypeName}");
+ return !currentDirectories.SequenceEqual(newDirectories);
}
}
\ No newline at end of file
diff --git a/MSURandomizer/ViewModels/MsuTrackViewModel.cs b/MSURandomizer/ViewModels/MsuTrackViewModel.cs
index 6fa57bc..d11995c 100644
--- a/MSURandomizer/ViewModels/MsuTrackViewModel.cs
+++ b/MSURandomizer/ViewModels/MsuTrackViewModel.cs
@@ -21,6 +21,15 @@ public MsuTrackViewModel(MsuTypeTrack msuTypeTrack, ICollection