Explorar el Código

Fix for saving image as a file, that does not exist

Ruben hace 11 meses
padre
commit
be7162c5a2

+ 21 - 0
src/PicView.Avalonia/FileSystem/FilePicker.cs

@@ -1,11 +1,13 @@
 using System.Runtime.InteropServices;
 using System.Runtime.InteropServices;
 using Avalonia;
 using Avalonia;
 using Avalonia.Controls.ApplicationLifetimes;
 using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Media.Imaging;
 using Avalonia.Platform.Storage;
 using Avalonia.Platform.Storage;
 using PicView.Avalonia.Navigation;
 using PicView.Avalonia.Navigation;
 using PicView.Avalonia.UI;
 using PicView.Avalonia.UI;
 using PicView.Avalonia.ViewModels;
 using PicView.Avalonia.ViewModels;
 using PicView.Core.FileHandling;
 using PicView.Core.FileHandling;
+using PicView.Core.ImageDecoding;
 using PicView.Core.Localization;
 using PicView.Core.Localization;
 
 
 namespace PicView.Avalonia.FileSystem;
 namespace PicView.Avalonia.FileSystem;
@@ -179,6 +181,25 @@ public static class FilePicker
         {
         {
             return;
             return;
         }
         }
+
+        if (!File.Exists(file))
+        {
+            if (vm.ImageSource is not Bitmap bitmap)
+            {
+                return;
+            }
+            bitmap.Save(file);
+            if (!Path.GetExtension(fileName).Equals(".png", StringComparison.OrdinalIgnoreCase)
+                || !Path.GetExtension(fileName).Equals(".jpg", StringComparison.OrdinalIgnoreCase)
+                || !Path.GetExtension(fileName).Equals(".jpeg", StringComparison.OrdinalIgnoreCase)
+                || !Path.GetExtension(fileName).Equals(".jfif", StringComparison.OrdinalIgnoreCase)
+                || !Path.GetExtension(fileName).Equals(".bmp", StringComparison.OrdinalIgnoreCase)
+                || !Path.GetExtension(fileName).Equals(".gif", StringComparison.OrdinalIgnoreCase))
+            {
+                await SaveImageFileHelper.SaveImageAsync(null, file, fileName, null, null, null, Path.GetExtension(fileName), vm.RotationAngle);
+            }
+            return;
+        }
         
         
         await FileSaverHelper.SaveFileAsync(fileName, file, vm);
         await FileSaverHelper.SaveFileAsync(fileName, file, vm);
     }
     }

+ 4 - 9
src/PicView.Avalonia/FileSystem/FileSaverHelper.cs

@@ -16,7 +16,7 @@ public static class FileSaverHelper
         
         
         if (vm.FileInfo is null)
         if (vm.FileInfo is null)
         {
         {
-            await SaveFileAsync(null, vm.FileInfo.FullName, vm);
+            await SaveFileAs(vm);
         }
         }
         else
         else
         {
         {
@@ -33,14 +33,9 @@ public static class FileSaverHelper
             return;
             return;
         }
         }
         
         
-        if (vm.FileInfo is null)
-        {
-            await SaveFileAsync(null, vm.FileInfo.FullName, vm);
-        }
-        else
-        {
-            await FilePicker.PickAndSaveFileAsAsync(vm.FileInfo.FullName, vm);
-        }
+        var fileName = vm.FileInfo is null ? Path.GetTempFileName() : vm.FileInfo.Name;
+
+        await FilePicker.PickAndSaveFileAsAsync(fileName, vm);
     }
     }
 
 
     public static async Task SaveFileAsync(string? filename, string destination, MainViewModel vm)
     public static async Task SaveFileAsync(string? filename, string destination, MainViewModel vm)