Browse Source

'Fixed wrong error being passed when PixiEditor has no right to write to a file'

Equbuxu 1 year ago
parent
commit
00177726c6
1 changed files with 37 additions and 21 deletions
  1. 37 21
      src/PixiEditor/Models/IO/Exporter.cs

+ 37 - 21
src/PixiEditor/Models/IO/Exporter.cs

@@ -92,33 +92,23 @@ internal class Exporter
 
 
         var typeFromPath = SupportedFilesHelper.ParseImageFormat(Path.GetExtension(pathWithExtension));
         var typeFromPath = SupportedFilesHelper.ParseImageFormat(Path.GetExtension(pathWithExtension));
 
 
-        if (typeFromPath != FileType.Pixi)
+        if (typeFromPath == FileType.Pixi)
         {
         {
-            var maybeBitmap = document.MaybeRenderWholeImage();
-            if (maybeBitmap.IsT0)
-                return SaveResult.ConcurrencyError;
-            var bitmap = maybeBitmap.AsT1;
+            return TrySaveAsPixi(document, pathWithExtension);
+        }
 
 
-            if (!encodersFactory.ContainsKey(typeFromPath))
-            {
-                return SaveResult.UnknownError;
-            }
+        var maybeBitmap = document.MaybeRenderWholeImage();
+        if (maybeBitmap.IsT0)
+            return SaveResult.ConcurrencyError;
+        var bitmap = maybeBitmap.AsT1;
 
 
-            return TrySaveAs(encodersFactory[typeFromPath](), pathWithExtension, bitmap, exportSize);
-        }
-        else
+        if (!encodersFactory.ContainsKey(typeFromPath))
         {
         {
-            try
-            {
-                Parser.PixiParser.Serialize(document.ToSerializable(), pathWithExtension);
-            }
-            catch (UnauthorizedAccessException)
-            {
-                return SaveResult.SecurityError;
-            }
+            return SaveResult.UnknownError;
         }
         }
 
 
-        return SaveResult.Success;
+        return TrySaveAs(encodersFactory[typeFromPath](), pathWithExtension, bitmap, exportSize);
+
     }
     }
 
 
     static Dictionary<FileType, Func<BitmapEncoder>> encodersFactory = new Dictionary<FileType, Func<BitmapEncoder>>();
     static Dictionary<FileType, Func<BitmapEncoder>> encodersFactory = new Dictionary<FileType, Func<BitmapEncoder>>();
@@ -179,6 +169,10 @@ internal class Exporter
         {
         {
             return SaveResult.SecurityError;
             return SaveResult.SecurityError;
         }
         }
+        catch (UnauthorizedAccessException e)
+        {
+            return SaveResult.SecurityError;
+        }
         catch (IOException)
         catch (IOException)
         {
         {
             return SaveResult.IoError;
             return SaveResult.IoError;
@@ -189,4 +183,26 @@ internal class Exporter
         }
         }
         return SaveResult.Success;
         return SaveResult.Success;
     }
     }
+
+    private static SaveResult TrySaveAsPixi(DocumentViewModel document, string pathWithExtension)
+    {
+        try
+        {
+            Parser.PixiParser.Serialize(document.ToSerializable(), pathWithExtension);
+        }
+        catch (UnauthorizedAccessException e)
+        {
+            return SaveResult.SecurityError;
+        }
+        catch (IOException)
+        {
+            return SaveResult.IoError;
+        }
+        catch
+        {
+            return SaveResult.UnknownError;
+        }
+
+        return SaveResult.Success;
+    }
 }
 }