From 47a667dee185f83f723409fe4ac5b75ed5fac692 Mon Sep 17 00:00:00 2001 From: SubZeroPL Date: Wed, 19 Nov 2025 23:42:08 +0100 Subject: [PATCH 1/4] feat: added ISO handling --- AssM.csproj | 18 +++++-- Classes/Constants.cs | 10 +++- Classes/Functions.cs | 30 +++++++----- Data/Game.cs | 4 +- Windows/AddFolderProgressWindow.axaml | 8 ++-- Windows/AddFolderProgressWindow.axaml.cs | 45 ++++++++++++++---- Windows/MainWindow.axaml | 2 +- Windows/MainWindow.axaml.cs | 39 ++++++--------- Windows/ProgressWindow.axaml.cs | 60 ++++++++++++++---------- 9 files changed, 134 insertions(+), 82 deletions(-) diff --git a/AssM.csproj b/AssM.csproj index 380857d..90a46c2 100644 --- a/AssM.csproj +++ b/AssM.csproj @@ -5,12 +5,15 @@ enable true app.manifest - 1.6.1 + 1.7.0 SubZeroPL - https://github.com/SubZeroPL/AssM/ - 1.6.1 - 1.6.1 + https://github.com/SubZeroPL/AssM + 1.7.0 + 1.7.0 AssM + https://github.com/SubZeroPL/AssM/blob/master/LICENSE + https://github.com/SubZeroPL/AssM/ + Assets\assm.ico @@ -25,6 +28,7 @@ + @@ -40,6 +44,7 @@ + @@ -53,25 +58,30 @@ + + + + + diff --git a/Classes/Constants.cs b/Classes/Constants.cs index c80e731..844c764 100644 --- a/Classes/Constants.cs +++ b/Classes/Constants.cs @@ -29,7 +29,7 @@ private static bool IsWindows() => [GeneratedRegex(BinFile)] public static partial Regex BinFileRegex(); - private const string BinHash = @"BIN \(TRACK (\d{2})\) MD5\: (.+)"; + private const string BinHash = @"TRACK (\d{2}) MD5\: (.+)"; [GeneratedRegex(BinHash)] public static partial Regex BinHashRegex(); public const string ReadmeGameTitle = "#gameTitle#"; @@ -53,4 +53,12 @@ private static bool IsWindows() => "Generating README", "Process JSON" ]; + + public static readonly string[] AddFolderSteps = + [ + "", + "Aggregating image files (folder {0} of {1})", + "Adding to the list", + "Loading existing data" + ]; } \ No newline at end of file diff --git a/Classes/Functions.cs b/Classes/Functions.cs index 3e79d3a..64ca5fc 100644 --- a/Classes/Functions.cs +++ b/Classes/Functions.cs @@ -19,7 +19,7 @@ public static class Functions public static string GetChdName(Game game, Configuration configuration) => configuration.GameIdAsChdName ? $"{game.Id.ToUpper()}.chd" - : Path.GetFileName(Path.ChangeExtension(game.CuePath, "chd")); + : Path.GetFileName(Path.ChangeExtension(game.ImagePath, "chd")); public static void LoadChdManInfo(string chdPath, Game game) { @@ -174,7 +174,7 @@ private static void LoadTrackInfoFromReadme(string readmePath, Game game) } var endIndex = Array.FindIndex(lines, line => line.Contains("**Description:**")) - 1; - var hashes = lines.Skip(startIndex).Take(endIndex - startIndex).Where(item => item.StartsWith("BIN")); + var hashes = lines.Skip(startIndex).Take(endIndex - startIndex).Where(item => item.StartsWith("TRACK")); foreach (var hashLine in hashes) { var matches = Constants.BinHashRegex().Matches(hashLine); @@ -199,11 +199,12 @@ private static void LoadTrackInfoFromReadme(string readmePath, Game game) } } - public static List GetCueFilesInDirectory(string directory) + public static List GetCueIsoFilesInDirectory(string directory) { - Logger.Debug($"Getting cue files from {directory}"); - var result = Directory.GetFiles(directory).Where(d => Path.GetExtension(d) == ".cue").ToList(); - Directory.GetDirectories(directory).ToList().ForEach(d => result.AddRange(GetCueFilesInDirectory(d))); + Logger.Debug($"Getting cue/iso files from {directory}"); + var result = Directory.GetFiles(directory) + .Where(d => Path.GetExtension(d) == ".cue" || Path.GetExtension(d) == ".iso").ToList(); + Directory.GetDirectories(directory).ToList().ForEach(d => result.AddRange(GetCueIsoFilesInDirectory(d))); return result; } @@ -216,21 +217,22 @@ public static List GetReadmeFilesInDirectory(string directory) return result; } - public static Game? AddGameToList(string cuePath, Configuration configuration, ObservableCollection gameList) + public static Game? AddGameToList(string imagePath, Configuration configuration, ObservableCollection gameList) { - Logger.Debug($"Adding game to list from {cuePath}"); - var di = DiscInspector.ScanDisc(cuePath); + Logger.Debug($"Adding game to list from {imagePath}"); + var di = DiscInspector.ScanDisc(imagePath); // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract - apparently there are games that have no Id in image (like SLPS-00018) if (di.Data.SerialNumber == null) { - Logger.Error($"Failed to add game to list from {cuePath}{Environment.NewLine}Id not present in image"); + Logger.Error($"Failed to add game to list from {imagePath}{Environment.NewLine}Id not present in image"); return null; } - var title = configuration.GetTitleFromCue ? Path.GetFileNameWithoutExtension(cuePath) : di.Data.GameTitle; + + var title = configuration.GetTitleFromCue ? Path.GetFileNameWithoutExtension(imagePath) : di.Data.GameTitle; var game = new Game { Title = title, Id = di.Data.SerialNumber, Platform = di.DetectedDiscType, - CuePath = cuePath + ImagePath = imagePath }; var existingGame = gameList.FirstOrDefault(g => g.Id == game.Id); if (existingGame != null) @@ -238,7 +240,7 @@ public static List GetReadmeFilesInDirectory(string directory) Logger.Debug($"Game already exists: {existingGame.Title}, updating"); existingGame.Title = game.Title; existingGame.Platform = game.Platform; - existingGame.CuePath = game.CuePath; + existingGame.ImagePath = game.ImagePath; existingGame.Id = game.Id; } else @@ -273,4 +275,6 @@ public static void ProcessJson(Configuration configuration, Game game, Action game.ImagePath.EndsWith(".iso", StringComparison.OrdinalIgnoreCase); } \ No newline at end of file diff --git a/Data/Game.cs b/Data/Game.cs index c02e62f..d77c9f1 100644 --- a/Data/Game.cs +++ b/Data/Game.cs @@ -9,7 +9,7 @@ public class Game { public string Title { get; set; } = string.Empty; public string Id { get; set; } = string.Empty; - public string CuePath { get; set; } = string.Empty; + public string ImagePath { get; set; } = string.Empty; public DetectedDiscType Platform { get; set; } = DetectedDiscType.UnknownFormat; public bool ReadmeCreated { get; set; } public bool ChdCreated { get; set; } @@ -29,6 +29,6 @@ public class ChdData public string GetTrackInfo() { return string.Join(Environment.NewLine, - TrackInfo.Select(ti => $"BIN (TRACK {ti.TrackNo,2:D2}) MD5: {ti.TrackMD5}{Environment.NewLine}")).Trim(); + TrackInfo.Select(ti => $"TRACK {ti.TrackNo,2:D2} MD5: {ti.TrackMD5}{Environment.NewLine}")).Trim(); } } \ No newline at end of file diff --git a/Windows/AddFolderProgressWindow.axaml b/Windows/AddFolderProgressWindow.axaml index 0ecd337..42e5e7d 100644 --- a/Windows/AddFolderProgressWindow.axaml +++ b/Windows/AddFolderProgressWindow.axaml @@ -3,16 +3,16 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:gif="clr-namespace:Avalonia.Labs.Gif;assembly=Avalonia.Labs.Gif" - mc:Ignorable="d" d:DesignWidth="300" + mc:Ignorable="d" d:DesignWidth="400" x:Class="AssM.Windows.AddFolderProgressWindow" Closing="Window_OnClosing" - Width="300" WindowStartupLocation="CenterOwner" SizeToContent="Height" ShowInTaskbar="False" CanResize="False" + Width="400" WindowStartupLocation="CenterOwner" SizeToContent="Height" ShowInTaskbar="False" CanResize="False" Title="Adding folder contents"> - - + + diff --git a/Windows/AddFolderProgressWindow.axaml.cs b/Windows/AddFolderProgressWindow.axaml.cs index dbbfa92..d24fb08 100644 --- a/Windows/AddFolderProgressWindow.axaml.cs +++ b/Windows/AddFolderProgressWindow.axaml.cs @@ -9,6 +9,14 @@ namespace AssM.Windows; +internal class AddFolderProgressUpdateObject +{ + public string? Dir { get; init; } + public int? Count { get; init; } + public int? Index { get; init; } + public int Step { get; init; } +} + public partial class AddFolderProgressWindow : Window { private readonly BackgroundWorker _worker; @@ -24,43 +32,64 @@ public AddFolderProgressWindow() private void WorkerOnProgressChanged(object? sender, ProgressChangedEventArgs e) { - if (e.UserState is string dir) - LabelFolderName.Content = dir; + if (e.UserState is not AddFolderProgressUpdateObject updateObject) return; + LabelStep.Content = Constants.AddFolderSteps[updateObject.Step]; + if (updateObject.Step == 1) + { + LabelStep.Content = string.Format(Constants.AddFolderSteps[updateObject.Step], updateObject.Index, + updateObject.Count); + LabelFolderName.Content = updateObject.Dir; + } } - public void Process(List dirs, ObservableCollection gameList, Configuration configuration, Action> finishedCallback) + public void Process(List dirs, ObservableCollection gameList, Configuration configuration, + Action> finishedCallback) { var cueFiles = new List(); var errors = new List(); _worker.DoWork += (_, _) => { + var index = 0; foreach (var dir in dirs) { if (_worker.CancellationPending) return; - _worker.ReportProgress(0, dir); - cueFiles.AddRange(Functions.GetCueFilesInDirectory(dir)); + var progress = index / dirs.Count * 100; + _worker.ReportProgress(progress, + new AddFolderProgressUpdateObject { Dir = dir, Index = index++, Count = dirs.Count, Step = 1 }); + cueFiles.AddRange(Functions.GetCueIsoFilesInDirectory(dir)); } + index = 0; foreach (var cueFile in cueFiles) { if (_worker.CancellationPending) return; + var progress = index / cueFiles.Count * 100; + _worker.ReportProgress(progress, + new AddFolderProgressUpdateObject + { Dir = cueFile, Index = index++, Count = cueFiles.Count, Step = 2 }); var game = Functions.AddGameToList(cueFile, configuration, gameList); if (game == null) { - errors.Add($"Failed to add game to list from {cueFile}{Environment.NewLine}Id not present in image"); + errors.Add( + $"Failed to add game to list from {cueFile}{Environment.NewLine}Id not present in image"); } } + index = 0; if (string.IsNullOrWhiteSpace(configuration.OutputDirectory)) return; foreach (var game in gameList) { if (_worker.CancellationPending) return; + var progress = index / gameList.Count * 100; + _worker.ReportProgress(progress, + new AddFolderProgressUpdateObject + { Dir = game.Title, Index = index++, Count = gameList.Count, Step = 3 }); Functions.LoadExistingData(game, configuration); } }; - + _worker.RunWorkerCompleted += (_, _) => finishedCallback.Invoke(errors); - + _worker.RunWorkerAsync(); } diff --git a/Windows/MainWindow.axaml b/Windows/MainWindow.axaml index c53f6c0..5f65285 100644 --- a/Windows/MainWindow.axaml +++ b/Windows/MainWindow.axaml @@ -39,7 +39,7 @@ Process only modified enties Overwrite existing READMEs - Get game title from CUE file name + Get game title from file name Use Game ID as name for CHD file diff --git a/Windows/MainWindow.axaml.cs b/Windows/MainWindow.axaml.cs index 3eab7c6..d968ff2 100644 --- a/Windows/MainWindow.axaml.cs +++ b/Windows/MainWindow.axaml.cs @@ -20,6 +20,8 @@ using MsBox.Avalonia; using MsBox.Avalonia.Enums; using NLog; +using Octokit; +using ProductHeaderValue = Octokit.ProductHeaderValue; namespace AssM.Windows; @@ -86,30 +88,15 @@ private async Task CheckForNewVersion() { _logger.Debug("Checking for new version"); var currentVer = GetVersion(); - var client = new HttpClient(); - var request = new HttpRequestMessage - { - RequestUri = new Uri(Constants.LatestReleaseLink), - Method = HttpMethod.Get, - Headers = - { - Accept = { new MediaTypeWithQualityHeaderValue("application/vnd.github+json") } - } - }; - request.Headers.UserAgent.Add(new ProductInfoHeaderValue(Assembly.GetExecutingAssembly().GetName().Name!, - Assembly.GetExecutingAssembly().GetName().Version!.ToString())); - var response = await client.SendAsync(request); - if (response.StatusCode != HttpStatusCode.OK) return; - var json = await response.Content.ReadAsStringAsync(); - var jsonDoc = JsonDocument.Parse(json); - if (!jsonDoc.RootElement.TryGetProperty("tag_name", out var tagName)) return; - var tag = tagName.GetString()?.Replace("v", string.Empty); + var ghClient = new GitHubClient(new ProductHeaderValue(Assembly.GetEntryAssembly()?.GetName().Name)); + var latestRelease = await ghClient.Repository.Release.GetLatest("SubZeroPL", "AssM"); + var tag = latestRelease.TagName.Replace("v", string.Empty); var versionPresent = Version.TryParse(tag, out var version); if (!versionPresent || version <= currentVer) return; _logger.Debug($"New version detected: {tag}"); TextBlockUpdate.Text = $"New version: {version!.Major}.{version.Minor}.{version.Build}"; ButtonUpdate.IsVisible = true; - ButtonUpdate.Tag = jsonDoc.RootElement.GetProperty("html_url").GetString(); + ButtonUpdate.Tag = latestRelease.Url; } private void AddButton_OnClick(object? sender, RoutedEventArgs e) @@ -118,7 +105,9 @@ private void AddButton_OnClick(object? sender, RoutedEventArgs e) { AllowMultiple = true, Title = "Select images", - FileTypeFilter = [new FilePickerFileType("CUE file") { Patterns = ["*.cue"] }] + FileTypeFilter = [ new FilePickerFileType("All supported formats (*.cue, *.iso)") { Patterns = ["*.cue", "*.iso"] }, + new FilePickerFileType("CUE file (*.cue)") { Patterns = ["*.cue"] }, + new FilePickerFileType("ISO file (*.iso)") { Patterns = ["*.iso"] }] }; var files = GetTopLevel(this)?.StorageProvider.OpenFilePickerAsync(fpo).GetAwaiter().GetResult() ?? new List(); @@ -130,14 +119,14 @@ private void AddButton_OnClick(object? sender, RoutedEventArgs e) DataGridGameList.CollectionView.Refresh(); } - private void AddGame(string cuePath) + private void AddGame(string imagePath) { - if (string.IsNullOrWhiteSpace(cuePath)) return; - var game = Functions.AddGameToList(cuePath, Configuration, GameList); + if (string.IsNullOrWhiteSpace(imagePath)) return; + var game = Functions.AddGameToList(imagePath, Configuration, GameList); if (game == null) { MessageBoxManager.GetMessageBoxStandard("Error", - $"Failed to add game to list from {cuePath}{Environment.NewLine}Id not present in image", + $"Failed to add game to list from {imagePath}{Environment.NewLine}Id not present in image", ButtonEnum.Ok, MsBox.Avalonia.Enums.Icon.Error, WindowStartupLocation.CenterOwner) .ShowWindowDialogAsync(this); return; @@ -172,7 +161,7 @@ private void AddFolderButton_OnClick(object? sender, RoutedEventArgs e) .ToList() ?? []; var progress = new AddFolderProgressWindow(); _ = progress.ShowDialog(this); - progress.Process(dirs, GameList, Configuration, (errors) => + progress.Process(dirs, GameList, Configuration, errors => { progress.Close(); DataGridGameList.CollectionView.Refresh(); diff --git a/Windows/ProgressWindow.axaml.cs b/Windows/ProgressWindow.axaml.cs index 55298a2..a091f9a 100644 --- a/Windows/ProgressWindow.axaml.cs +++ b/Windows/ProgressWindow.axaml.cs @@ -52,7 +52,8 @@ public void Process(List gameList, Configuration configuration, Action fin { for (var i = 0; i < gameList.Count; i++) { - _worker.ReportProgress(0); + var progress = i / gameList.Count * 100; + _worker.ReportProgress(progress); if (_worker.CancellationPending) break; var game = gameList.ElementAt(i); @@ -64,17 +65,18 @@ public void Process(List gameList, Configuration configuration, Action fin } var step = 1; - _worker.ReportProgress(0, + _worker.ReportProgress(progress, new ProgressUpdateObject - { Title = game.Title, Count = gameList.Count, Step = step, Index = i + 1 }); + { Title = game.Title, Count = gameList.Count, Step = step++, Index = i + 1 }); ConvertSingleChd(game); - _worker.ReportProgress(0, new ProgressUpdateObject { Step = step++ }); + _worker.ReportProgress(progress, + new ProgressUpdateObject { Step = step++, BinNo = 1, BinCount = game.ChdData.TrackInfo.Count }); CalculateTracksMd5(game); - _worker.ReportProgress(0, new ProgressUpdateObject { Step = step++ }); + _worker.ReportProgress(progress, new ProgressUpdateObject { Step = step++ }); GetChdManInfo(game); - _worker.ReportProgress(0, new ProgressUpdateObject { Step = step++ }); + _worker.ReportProgress(progress, new ProgressUpdateObject { Step = step++ }); GenerateReadme(game); - _worker.ReportProgress(0, new ProgressUpdateObject { Step = step }); + _worker.ReportProgress(progress, new ProgressUpdateObject { Step = step }); Functions.ProcessJson(_configuration, game, d => { _worker.ReportProgress((int)d); }); game.Modified = false; _logger.Debug($"Finished processing game {i + 1}: {game.Title}"); @@ -114,7 +116,7 @@ private void ConvertSingleChd(Game game) var chdPath = Path.Combine(_configuration.OutputDirectory, Functions.OutputPath(game), chdFile); _logger.Debug($"CHD path: {chdPath}"); if (File.Exists(chdPath) && _configuration.ChdProcessing != ChdProcessing.GenerateAll) return; - if (string.IsNullOrWhiteSpace(game.CuePath)) return; + if (string.IsNullOrWhiteSpace(game.ImagePath)) return; Directory.CreateDirectory(Path.GetDirectoryName(chdPath) ?? string.Empty); var chdmanConvert = new Process @@ -122,7 +124,7 @@ private void ConvertSingleChd(Game game) StartInfo = new ProcessStartInfo { FileName = Constants.ChdMan, - Arguments = string.Format(Constants.ChdManConvert, game.CuePath, chdPath), + Arguments = string.Format(Constants.ChdManConvert, game.ImagePath, chdPath), RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, @@ -200,20 +202,30 @@ private void CalculateTracksMd5(Game game) var readmePath = Path.Combine(_configuration.OutputDirectory, Functions.OutputPath(game), Constants.ReadmeFile); _logger.Debug($"Readme path: {readmePath}"); if (File.Exists(readmePath) && !_configuration.OverwriteExistingReadmes) return; - var cuefile = game.CuePath; - _logger.Debug($"Cue path: {cuefile}"); - if (string.IsNullOrWhiteSpace(cuefile)) return; - _logger.Debug("Adding bin files from cue"); - var lines = File.ReadLines(cuefile); + var imagefile = game.ImagePath; List bins = []; - bins.AddRange(from line in lines - where line.StartsWith("FILE") - select Constants.BinFileRegex().Matches(line) - into matches - select matches[0].Groups[1].Value - into bin - select Path.Combine(Path.GetDirectoryName(cuefile)!, bin)); - _logger.Debug($"Bin files from cue: {string.Join(',', bins)}"); + if (Functions.IsIso(game)) + { + _logger.Debug($"Iso path: {imagefile}"); + if (string.IsNullOrWhiteSpace(imagefile)) return; + bins.Add(imagefile); + _logger.Debug($"Iso file: {string.Join(',', bins)}"); + } + else + { + _logger.Debug($"Cue path: {imagefile}"); + if (string.IsNullOrWhiteSpace(imagefile)) return; + _logger.Debug("Adding bin files from cue"); + var lines = File.ReadLines(imagefile); + bins.AddRange(from line in lines + where line.StartsWith("FILE") + select Constants.BinFileRegex().Matches(line) + into matches + select matches[0].Groups[1].Value + into bin + select Path.Combine(Path.GetDirectoryName(imagefile)!, bin)); + _logger.Debug($"Bin files from cue: {string.Join(',', bins)}"); + } if (_worker.CancellationPending) return; if (game.ChdData.TrackInfo.Count != 0) game.ChdData.TrackInfo.Clear(); @@ -225,7 +237,7 @@ into bin using var fs = File.OpenRead(bin); var hash = CalculateMd5HashFromStream(fs); game.ChdData.TrackInfo.Add((i + 1, hash)); - _worker.ReportProgress((int)Math.Round((double)i / bins.Count * 100.0), + _worker.ReportProgress(i / bins.Count * 100, new ProgressUpdateObject { Step = 2, BinNo = i + 1, BinCount = bins.Count }); _logger.Debug("Done"); } @@ -255,7 +267,7 @@ private string CalculateMd5HashFromStream(Stream inputStream) sb.Append(t.ToString("x2")); } - return sb.ToString(); + return sb.ToString().ToUpperInvariant(); } private void GetChdManInfo(Game game) From d977d6cf53c271c9f68fb7025d8e6859204cd0b2 Mon Sep 17 00:00:00 2001 From: SubZeroPL Date: Wed, 19 Nov 2025 23:42:33 +0100 Subject: [PATCH 2/4] feat: added icon --- Assets/assm.ico | Bin 0 -> 1397210 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Assets/assm.ico diff --git a/Assets/assm.ico b/Assets/assm.ico new file mode 100644 index 0000000000000000000000000000000000000000..3405810b09cb59e8977d47b505a8c08daeee46c8 GIT binary patch literal 1397210 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 Date: Wed, 19 Nov 2025 23:42:42 +0100 Subject: [PATCH 3/4] docs: updated README --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3555395..1177e5f 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ It is a piece of software that assists in creating entries for [Arkadyzja savestates repository](https://github.com/ActionPL/duckstation_openbios_savestates). It allows creating and editing README files for games that will have savestates uploaded to the repository. Those savestates will then be available for [Arkadyzja](https://arkadyzja.honmaru.pl/). ## ⚠️ Requirements -For the application to work [.NET framework 8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) is required. +For the application to work, [.NET Framework 8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) is required. -Application is developed and tested on Windows 11 OS. In theory should also work on Linux/Mac hovewer it was not tested on those platforms (only a bit on Linux and not at all on Mac) and currently only Win and Linux builds are released (see below). +Application is developed and tested on Windows 11 OS. It should also work on Linux/Mac hovewer it was not tested (extensively) on those platforms (only a bit on Linux and not at all on Mac) and currently only Win and Linux builds are released (see below). ## 📦 Releases Each release starting with 1.4.0 has four variants: @@ -23,12 +23,12 @@ Clicking it will open default browser on the latest release page. ## 🪧 Usage [![Last Release](https://img.shields.io/github/v/release/SubZeroPL/AssM?logo=github&label=latest)](https://github.com/SubZeroPL/AssM/releases) -- get latest version of the application from [Releases](https://github.com/SubZeroPL/AssM/releases) page +- get the latest version of the application from the [Releases](https://github.com/SubZeroPL/AssM/releases) page - unpack to some empty directory - run the `AssM.exe` file (or `AssM` for Linux) ![Application main window](.github/assets/app.png "Application main window") -First you should select Output directory, where the created README files will be stored. The files are created in a specific directory structure: +First, you should select the Output directory, where the created README files will be stored. The files are created in a specific directory structure: `OutputPath\Platform\GameID`.\ The output directory is saved between sessions, so when you start the application next time it will be automatically read and existing entries inserted into the table.\ **You should not modify existing directory structure if you plan to use the output directory again later!** @@ -40,8 +40,8 @@ When you click `Start processing` the application will go through the list and p ## ⚙️ Configuration ![Configuration options](.github/assets/config.png "Configuration options") -- Get game title from CUE file name - by default game name is extracted from cue/bin image, this option uses CUE file name instead -- Use Game ID as name for CHD file - by default game title (as set by previous option) is used for CHD file name, this option uses Game ID instead +- Get game title from CUE file name - by default, game name is extracted from cue/bin image; this option uses CUE file name instead +- Use Game ID as the name for CHD file – by default, game title (as set by a previous option) is used for CHD file name; this option uses Game ID instead Other configuration options should be self-explanatory. From 1bd3c24d5645db35eefa1b7529ad700079ff32dc Mon Sep 17 00:00:00 2001 From: SubZeroPL Date: Wed, 19 Nov 2025 23:46:19 +0100 Subject: [PATCH 4/4] ci: updated dependencies --- AssM.csproj | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/AssM.csproj b/AssM.csproj index 90a46c2..559ab34 100644 --- a/AssM.csproj +++ b/AssM.csproj @@ -17,17 +17,17 @@ - - - - - + + + + + - - + + - - + +