diff options
author | Kurochi51 <andrei5125@gmail.com> | 2023-06-05 15:19:17 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-05 14:19:17 +0200 |
commit | 5813b2e354e072d43eb30c51083e737cf6bc1ee2 (patch) | |
tree | fef8a2ff00bb37e3d466044eb0374443333263f9 | |
parent | af1906ea04dad5972a6a2771a44f353c97dec326 (diff) |
Updater: Ignore files introduced by the user in base directory (#5092)1.1.869
* Updater: Ignore files introduced by the user in base directory
* Replicate logic in Avalonia version.
* Address requested changes
* Updater: Ignore files introduced by the user in base directory
* Replicate logic in Avalonia version.
* Address requested changes
* Address requested changes
* Address requested changes
* Comment cleanup
* Address feedback
* Forgot comment, tehe
-rw-r--r-- | src/Ryujinx.Ava/Modules/Updater/Updater.cs | 12 | ||||
-rw-r--r-- | src/Ryujinx/Modules/Updater/Updater.cs | 12 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/Ryujinx.Ava/Modules/Updater/Updater.cs b/src/Ryujinx.Ava/Modules/Updater/Updater.cs index 77d77d79..839526c4 100644 --- a/src/Ryujinx.Ava/Modules/Updater/Updater.cs +++ b/src/Ryujinx.Ava/Modules/Updater/Updater.cs @@ -740,6 +740,18 @@ namespace Ryujinx.Modules { var files = Directory.EnumerateFiles(HomeDir); // All files directly in base dir. + // Determine and exclude user files only when the updater is running, not when cleaning old files + if (_running) + { + // Compare the loose files in base directory against the loose files from the incoming update, and store foreign ones in a user list. + var oldFiles = Directory.EnumerateFiles(HomeDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); + var newFiles = Directory.EnumerateFiles(UpdatePublishDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); + var userFiles = oldFiles.Except(newFiles).Select(filename => Path.Combine(HomeDir, filename)); + + // Remove user files from the paths in files. + files = files.Except(userFiles); + } + if (OperatingSystem.IsWindows()) { foreach (string dir in WindowsDependencyDirs) diff --git a/src/Ryujinx/Modules/Updater/Updater.cs b/src/Ryujinx/Modules/Updater/Updater.cs index 3e0dc99b..344edf9e 100644 --- a/src/Ryujinx/Modules/Updater/Updater.cs +++ b/src/Ryujinx/Modules/Updater/Updater.cs @@ -565,6 +565,18 @@ namespace Ryujinx.Modules { var files = Directory.EnumerateFiles(HomeDir); // All files directly in base dir. + // Determine and exclude user files only when the updater is running, not when cleaning old files + if (Running) + { + // Compare the loose files in base directory against the loose files from the incoming update, and store foreign ones in a user list. + var oldFiles = Directory.EnumerateFiles(HomeDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); + var newFiles = Directory.EnumerateFiles(UpdatePublishDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); + var userFiles = oldFiles.Except(newFiles).Select(filename => Path.Combine(HomeDir, filename)); + + // Remove user files from the paths in files. + files = files.Except(userFiles); + } + if (OperatingSystem.IsWindows()) { foreach (string dir in WindowsDependencyDirs) |