Преглед изворни кода

Check for edge case error in image drop

Ruben пре 4 месеци
родитељ
комит
7c1abac297

+ 11 - 3
src/PicView.Avalonia/DragAndDrop/DragAndDropHelper.cs

@@ -56,9 +56,17 @@ public static class DragAndDropHelper
                 
                 if (_preLoadValue.ImageModel.FileInfo.DirectoryName == Path.GetDirectoryName(path))
                 {
-                    NavigationManager.AddToPreloader(path, _preLoadValue.ImageModel);
-                    NavigationManager.ImageIterator.Resynchronize();
-                    await NavigationManager.LoadPicFromFile(path, vm, _preLoadValue.ImageModel.FileInfo);
+                    // Check for edge case error
+                    var isAddedToPreloader = NavigationManager.AddToPreloader(path, _preLoadValue.ImageModel);
+                    if (isAddedToPreloader)
+                    {
+                        NavigationManager.ImageIterator.Resynchronize();
+                        await NavigationManager.LoadPicFromFile(path, vm, _preLoadValue.ImageModel.FileInfo);
+                    }
+                    else
+                    {
+                        await NavigationManager.LoadPicFromStringAsync(path, vm).ConfigureAwait(false);
+                    }
                 }
                 else
                 {

+ 2 - 2
src/PicView.Avalonia/Navigation/ImageIterator.cs

@@ -385,10 +385,10 @@ public class ImageIterator : IAsyncDisposable
     public void Add(int index, ImageModel imageModel) =>
         PreLoader.Add(index, ImagePaths, imageModel);
     
-    public void Add(string file, ImageModel imageModel)
+    public bool Add(string file, ImageModel imageModel)
     {
         file = file.Replace('/', '\\');
-        PreLoader.Add(ImagePaths.IndexOf(file), ImagePaths, imageModel);
+        return PreLoader.Add(ImagePaths.IndexOf(file), ImagePaths, imageModel);
     }
 
     public PreLoadValue? GetPreLoadValue(int index)

+ 2 - 2
src/PicView.Avalonia/Navigation/NavigationManager.cs

@@ -441,8 +441,8 @@ public static class NavigationManager
     public static void AddToPreloader(int index, ImageModel imageModel) =>
         ImageIterator?.Add(index, imageModel);
     
-    public static void AddToPreloader(string file, ImageModel imageModel) =>
-        ImageIterator?.Add(file, imageModel);
+    public static bool AddToPreloader(string file, ImageModel imageModel) =>
+        ImageIterator?.Add(file, imageModel) ?? false;
     public static async Task PreloadAsync() => 
         await ImageIterator?.PreloadAsync();