Bläddra i källkod

Consolidate parser check into single function

warrengalyen 1 år sedan
förälder
incheckning
a7e62fed9e

+ 26 - 1
src/PixiEditor/Helpers/PaletteHelpers.cs

@@ -1,4 +1,6 @@
-using PixiEditor.Extensions.Palettes.Parsers;
+using System.IO;
+using PixiEditor.Extensions.Palettes.Parsers;
+using PixiEditor.Models.AppExtensions.Services;
 using PixiEditor.Models.IO;
 
 namespace PixiEditor.Helpers;
@@ -28,4 +30,27 @@ internal static class PaletteHelpers
 
         return filter.Remove(filter.Length - 1);
     }
+
+    public static async Task<PaletteFileData> GetValidParser(IList<PaletteFileParser> parsers, string fileName)
+    {
+        // check all parsers for formats with same file extension
+        var parserList = parsers.Where(x => x.SupportedFileExtensions.Contains(Path.GetExtension(fileName).ToLower())).ToList();
+
+        if (parserList != null)
+        {
+            int index = 0;
+            foreach (var parser in parserList)
+            {
+                var data = await parser.Parse(fileName);
+                index++;
+
+                if ((data.IsCorrupted || data.Colors.Length == 0) && index == parserList.Count) return null; // fail if none of the parsers in our list can read the file
+                if (data.IsCorrupted) continue; // skip to next parser if unable to read
+
+                return data;
+            }
+        }
+
+        return null;
+    }
 }

+ 5 - 16
src/PixiEditor/Views/Dialogs/PalettesBrowser.xaml.cs

@@ -647,23 +647,12 @@ internal partial class PalettesBrowser : Window, IPopupWindow
 
     private async Task ImportPalette(string fileName, IList<PaletteFileParser> parsers)
     {
-        // check all parsers for formats with same file extension
-        var parserList = parsers.Where(x => x.SupportedFileExtensions.Contains(Path.GetExtension(fileName).ToLower())).ToList();
-
-        if (parserList != null)
+        // check if valid parser found
+        var parser = await PaletteHelpers.GetValidParser(parsers, fileName);
+        if (parser != null)
         {
-            int index = 0;
-            foreach (var parser in parserList)
-            {
-                var data = await parser.Parse(fileName);
-                index++;
-
-                if (data.IsCorrupted && index == parserList.Count) return; // fail if none of the parsers in our list can read the file
-                if (data.IsCorrupted) continue; // skip to next parser if unable to read
-
-                string name = LocalPalettesFetcher.GetNonExistingName(Path.GetFileName(fileName), true);
-                await LocalPalettesFetcher.SavePalette(name, data.Colors.ToArray());
-            }
+            string name = LocalPalettesFetcher.GetNonExistingName(Path.GetFileName(fileName), true);
+            await LocalPalettesFetcher.SavePalette(name, parser.Colors.ToArray());
         }
     }
 

+ 5 - 16
src/PixiEditor/Views/UserControls/Palettes/PaletteViewer.xaml.cs

@@ -109,23 +109,12 @@ internal partial class PaletteViewer : UserControl
 
     private async Task ImportPalette(string fileName)
     {
-        // check all parsers for formats with same file extension
-        var parserList = PaletteProvider.AvailableParsers.Where(x => x.SupportedFileExtensions.Contains(Path.GetExtension(fileName).ToLower())).ToList();
-
-        if (parserList != null)
+        // check if valid parser found
+        var parser = await PaletteHelpers.GetValidParser(PaletteProvider.AvailableParsers, fileName);
+        if (parser != null)
         {
-            int index = 0;
-            foreach (var parser in parserList)
-            {
-                var data = await parser.Parse(fileName);
-                index++;
-
-                if ((data.IsCorrupted || data.Colors.Length == 0) && index == parserList.Count) return; // fail if none of the parsers in our list can read the file
-                if (data.IsCorrupted) continue; // skip to next parser if unable to read
-
-                Colors.Clear();
-                Colors.AddRange(data.Colors);
-            }
+            Colors.Clear();
+            Colors.AddRange(parser.Colors);
         }
     }