Просмотр исходного кода

[Avalonia] Archive extraction fixes, image iteration fixes, refactor, misc

Ruben 1 год назад
Родитель
Сommit
8bca87ebfa

+ 2 - 5
src/PicView.Avalonia/Gallery/GalleryLoad.cs

@@ -1,13 +1,10 @@
-
-using Avalonia.Threading;
+using Avalonia.Threading;
 using PicView.Avalonia.ImageHandling;
 using PicView.Avalonia.UI;
+using PicView.Avalonia.ViewModels;
 using PicView.Avalonia.Views.UC;
 using PicView.Core.Gallery;
 using PicView.Core.Localization;
-#if DEBUG
-using PicView.Avalonia.ViewModels;
-#endif
 
 namespace PicView.Avalonia.Gallery;
 

+ 11 - 2
src/PicView.Avalonia/Gallery/GalleryNavigation.cs

@@ -3,6 +3,7 @@ using Avalonia.Threading;
 using PicView.Avalonia.UI;
 using PicView.Avalonia.ViewModels;
 using PicView.Avalonia.Views.UC;
+using PicView.Core.Config;
 using PicView.Core.Gallery;
 
 namespace PicView.Avalonia.Gallery;
@@ -47,8 +48,16 @@ public static class GalleryNavigation
 
     public static void CenterScrollToSelectedItem(MainViewModel vm)
     {
-        // Use post to ensure the UI update takes place after resize
-        Dispatcher.UIThread.Post(ScrollToSelected, DispatcherPriority.Background);;
+        if (SettingsHelper.Settings.WindowProperties.AutoFit)
+        {
+            // Use post to ensure the UI update takes place after resize
+            Dispatcher.UIThread.Post(ScrollToSelected);;
+        }
+        else
+        {
+            Dispatcher.UIThread.Invoke(ScrollToSelected);
+        }
+
         return;
         void ScrollToSelected()
         {

+ 5 - 0
src/PicView.Avalonia/Navigation/ImageIterator.cs

@@ -601,6 +601,11 @@ public sealed class ImageIterator : IDisposable
             return;
         }
         SetTitleHelper.SetLoadingTitle(_vm);
+        _vm.SelectedGalleryItemIndex = index;
+        if (SettingsHelper.Settings.Gallery.IsBottomGalleryShown)
+        {
+            GalleryNavigation.CenterScrollToSelectedItem(_vm);
+        }
         using var image = new MagickImage();
         image.Ping(_vm.ImageIterator.ImagePaths[index]);
         var thumb = image.GetExifProfile()?.CreateThumbnail();

+ 20 - 2
src/PicView.Avalonia/Navigation/NavigationHelper.cs

@@ -5,6 +5,7 @@ using Avalonia.Threading;
 using ImageMagick;
 using PicView.Avalonia.Gallery;
 using PicView.Avalonia.ImageHandling;
+using PicView.Avalonia.Keybindings;
 using PicView.Avalonia.UI;
 using PicView.Avalonia.ViewModels;
 using PicView.Core.ArchiveHandling;
@@ -276,7 +277,18 @@ public static class NavigationHelper
 
         if (Directory.Exists(ArchiveExtraction.TempZipDirectory))
         {
-            await LoadPicFromDirectoryAsync(ArchiveExtraction.TempZipDirectory, vm);
+            var dirInfo = new DirectoryInfo(ArchiveExtraction.TempZipDirectory);
+            if (dirInfo.EnumerateDirectories().Any())
+            {
+                var firstDir = dirInfo.EnumerateDirectories().First();
+                var fileInfo = firstDir.EnumerateFiles().First();
+                await LoadPicFromFile(fileInfo.FullName, vm, fileInfo);
+            }
+            else
+            {
+                await LoadPicFromDirectoryAsync(ArchiveExtraction.TempZipDirectory, vm);
+            }
+            MainKeyboardShortcuts.ClearKeyDownModifiers(); // Fix possible modifier key state issue
         }
         else
         {
@@ -401,12 +413,18 @@ public static class NavigationHelper
     {
         fileInfo ??= new FileInfo(file);
         var imageModel = await ImageHelper.GetImageModelAsync(fileInfo).ConfigureAwait(false);
+        if (imageModel is null)
+        {
+            await ErrorHandling.ReloadAsync(vm);
+            return;
+        }
         ExifHandling.SetImageModel(imageModel, vm);
         vm.ImageSource = imageModel;
         vm.ImageType = imageModel.ImageType;
         WindowHelper.SetSize(imageModel.PixelWidth, imageModel.PixelHeight, imageModel.Rotation, vm);
+        vm.ImageIterator.Dispose();
         vm.ImageIterator = new ImageIterator(fileInfo, vm);
-        await vm.ImageIterator.IterateToIndex(vm.ImageIterator.CurrentIndex);
+        await vm.ImageIterator.IterateToIndex(0);
         await CheckAndReloadGallery(fileInfo, vm);
     }