diff options
author | TSRBerry <20988865+TSRBerry@users.noreply.github.com> | 2024-08-03 19:46:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-03 19:46:59 +0200 |
commit | 83fda10f6ef68950de395b5f9f6ab0bf58adced4 (patch) | |
tree | a429edeeaec12b0c1b76d8604221b5cbb222cacd | |
parent | d97e995e5943aaddd8de88837b2dbfdf4d1616f4 (diff) |
Fix FileNotFoundException in TryGetApplicationsFromFile() and improve loading applications (#7145)1.1.1365
* Don't load files from hidden subdirectories
* Catch FileNotFoundException in TryGetApplicationsFromFile()
* Skip non-existent files and bad symlinks when loading applications
-rw-r--r-- | src/Ryujinx.UI.Common/App/ApplicationLibrary.cs | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index e7c48162..cd95c4d8 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -266,8 +266,18 @@ namespace Ryujinx.UI.App.Common public bool TryGetApplicationsFromFile(string applicationPath, out List<ApplicationData> applications) { applications = []; + long fileSize; - long fileSize = new FileInfo(applicationPath).Length; + try + { + fileSize = new FileInfo(applicationPath).Length; + } + catch (FileNotFoundException) + { + Logger.Warning?.Print(LogClass.Application, $"The file was not found: '{applicationPath}'"); + + return false; + } BlitStruct<ApplicationControlProperty> controlHolder = new(1); @@ -502,7 +512,13 @@ namespace Ryujinx.UI.App.Common try { - IEnumerable<string> files = Directory.EnumerateFiles(appDir, "*", SearchOption.AllDirectories).Where(file => + EnumerationOptions options = new() + { + RecurseSubdirectories = true, + IgnoreInaccessible = false, + }; + + IEnumerable<string> files = Directory.EnumerateFiles(appDir, "*", options).Where(file => { return (Path.GetExtension(file).ToLower() is ".nsp" && ConfigurationState.Instance.UI.ShownFileTypes.NSP.Value) || @@ -521,14 +537,18 @@ namespace Ryujinx.UI.App.Common } var fileInfo = new FileInfo(app); - string extension = fileInfo.Extension.ToLower(); - if (!fileInfo.Attributes.HasFlag(FileAttributes.Hidden) && extension is ".nsp" or ".pfs0" or ".xci" or ".nca" or ".nro" or ".nso") + try { var fullPath = fileInfo.ResolveLinkTarget(true)?.FullName ?? fileInfo.FullName; + applicationPaths.Add(fullPath); numApplicationsFound++; } + catch (IOException exception) + { + Logger.Warning?.Print(LogClass.Application, $"Failed to resolve the full path to file: \"{app}\" Error: {exception}"); + } } } catch (UnauthorizedAccessException) |