Browse Source

[Avalonia] Bug fixes when deleting files

Ruben 1 year ago
parent
commit
6c766caf7c

+ 13 - 4
src/PicView.Avalonia/Keybindings/MainKeyboardShortcuts.cs

@@ -55,6 +55,10 @@ public static class MainKeyboardShortcuts
                 await FunctionsHelper.ShowStartUpMenu();
                 return;
 #endif
+            
+            case Key.Escape:
+                await FunctionsHelper.Close().ConfigureAwait(false);
+                return;
 
             case Key.LeftShift:
             case Key.RightShift:
@@ -125,10 +129,7 @@ public static class MainKeyboardShortcuts
 
     private static void Reset()
     {
-        CtrlDown = false;
-        AltDown = false;
-        ShiftDown = false;
-        CurrentKeys = null;
+        ClearKeyDownModifiers();
         IsKeyHeldDown = false;
         _x = 0;
     }
@@ -137,4 +138,12 @@ public static class MainKeyboardShortcuts
     {
         Reset();
     }
+
+    public static void ClearKeyDownModifiers()
+    {
+        CtrlDown = false;
+        AltDown = false;
+        ShiftDown = false;
+        CurrentKeys = null;
+    }
 }

+ 4 - 0
src/PicView.Avalonia/Navigation/ExifHandling.cs

@@ -99,6 +99,10 @@ public static class ExifHandling
         
         try
         {
+            if (!vm.FileInfo.Exists)
+            {
+                return;
+            }
             magick.Ping(vm.FileInfo);
             var profile = magick.GetExifProfile();
 

+ 32 - 3
src/PicView.Avalonia/Navigation/ImageIterator.cs

@@ -180,9 +180,36 @@ public sealed class ImageIterator : IDisposable
             return;
         }
 
-        if (_isRunning) { return; }
+        if (_isRunning)
+        {
+            return;
+        }
         _isRunning = true;
         var index = ImagePaths.IndexOf(e.FullPath);
+        if (index < 0) { return; }
+
+        var nextIndex = index + 1;
+        if (index >= ImagePaths.Count)
+        {
+            nextIndex = 0;
+        }
+        var prevIndex = index - 1;
+        if (prevIndex < 0)
+        {
+            prevIndex = ImagePaths.Count - 1;
+        }
+
+        var cleared = false;
+        if (PreLoader.Contains(index, ImagePaths) || PreLoader.Contains(nextIndex, ImagePaths) || PreLoader.Contains(prevIndex, ImagePaths))
+        {
+            PreLoader.Clear();
+            cleared = true;
+        }
+        else
+        {
+            PreLoader.Remove(index, ImagePaths);
+        }
+        
         var sameFile = CurrentIndex == index;
         if (!ImagePaths.Remove(e.FullPath))
         {
@@ -202,8 +229,6 @@ public sealed class ImageIterator : IDisposable
         {
             SetTitleHelper.SetTitle(_vm);
         }
-        
-        PreLoader.Remove(index, ImagePaths);
 
         var removed = GalleryFunctions.RemoveGalleryItem(index, _vm);
         if (removed)
@@ -226,6 +251,10 @@ public sealed class ImageIterator : IDisposable
         _isRunning = false;
 
         SetTitleHelper.SetTitle(_vm);
+        if (cleared)
+        {
+            await Preload();
+        }
     }
     
     private async Task OnFileRenamed(RenamedEventArgs e)

+ 3 - 0
src/PicView.Avalonia/Views/MainView.axaml.cs

@@ -5,6 +5,7 @@ using Avalonia.Input;
 using Avalonia.Media;
 using Avalonia.Platform.Storage;
 using Avalonia.Styling;
+using PicView.Avalonia.Keybindings;
 using PicView.Avalonia.Navigation;
 using PicView.Avalonia.UI;
 using PicView.Avalonia.ViewModels;
@@ -37,6 +38,8 @@ public partial class MainView : UserControl
         {
             vm.IsEditableTitlebarOpen = false;
         }
+
+        MainKeyboardShortcuts.ClearKeyDownModifiers();
     }
 
     private void OnMainContextMenuOpened(object? sender, EventArgs e)