aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTSRBerry <20988865+TSRBerry@users.noreply.github.com>2024-08-03 19:46:59 +0200
committerGitHub <noreply@github.com>2024-08-03 19:46:59 +0200
commit83fda10f6ef68950de395b5f9f6ab0bf58adced4 (patch)
treea429edeeaec12b0c1b76d8604221b5cbb222cacd
parentd97e995e5943aaddd8de88837b2dbfdf4d1616f4 (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.cs28
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)