diff --git a/DiscImageChef.Filters/Filters.cs b/DiscImageChef.Filters/Filters.cs index 273ff4e88..3a9210ca3 100644 --- a/DiscImageChef.Filters/Filters.cs +++ b/DiscImageChef.Filters/Filters.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Reflection; using DiscImageChef.Console; @@ -48,7 +49,7 @@ namespace DiscImageChef.Filters public FiltersList() { Assembly assembly = Assembly.GetAssembly(typeof(IFilter)); - Filters = new SortedDictionary(); + Filters = new SortedDictionary(); foreach(Type type in assembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IFilter)))) try @@ -67,27 +68,31 @@ namespace DiscImageChef.Filters /// The filter that allows reading the specified path public IFilter GetFilter(string path) { - IFilter noFilter = null; + try + { + IFilter noFilter = null; + foreach(IFilter filter in Filters.Values) + if(filter.Id != new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) + { + if(!filter.Identify(path)) continue; - foreach(IFilter filter in Filters.Values) - if(filter.Id != new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) - { - if(!filter.Identify(path)) continue; + IFilter foundFilter = + (IFilter)filter.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { }); - IFilter foundFilter = - (IFilter)filter.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { }); + foundFilter?.Open(path); - foundFilter?.Open(path); + if(foundFilter?.IsOpened() == true) return foundFilter; + } + else + noFilter = filter; - if(foundFilter?.IsOpened() == true) return foundFilter; - } - else noFilter = filter; + if(!noFilter?.Identify(path) == true) return noFilter; - if(!noFilter?.Identify(path) == true) return noFilter; + noFilter?.Open(path); - noFilter?.Open(path); - - return noFilter; + return noFilter; + } + catch(IOException) { return null; } } ///