mirror of
				https://github.com/ryujinx-mirror/ryujinx.git
				synced 2025-11-04 08:59:04 -06:00 
			
		
		
		
	Fix FileNotFoundException in TryGetApplicationsFromFile() and improve loading applications (#7145)
* Don't load files from hidden subdirectories * Catch FileNotFoundException in TryGetApplicationsFromFile() * Skip non-existent files and bad symlinks when loading applications
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user