Jelajahi Sumber

Tiff navigation improvements and refactor #190

Ruben 8 bulan lalu
induk
melakukan
31e08baa31

+ 39 - 13
src/PicView.Avalonia/Navigation/NavigationHelper.cs

@@ -64,13 +64,19 @@ public static class NavigationHelper
         var navigateTo = next ? NavigateTo.Next : NavigateTo.Previous;
         var nextIteration = vm.ImageIterator.GetIteration(vm.ImageIterator.CurrentIndex, navigateTo);
         var currentFileName = vm.ImageIterator.ImagePaths[vm.ImageIterator.CurrentIndex];
-        if (!TiffManager.IsTiff(currentFileName) || vm.ImageIterator.IsReversed)
+        if (!TiffManager.IsTiff(currentFileName))
         {
             await CheckCancellationAndStartIterateToIndex(nextIteration, vm).ConfigureAwait(false);
-            return;
         }
+        else
+        {
+            await TiffNavigation(vm, currentFileName, nextIteration).ConfigureAwait(false);
+        }
+    }
 
-        if (TiffNavigationInfo is null)
+    private static async Task TiffNavigation(MainViewModel vm, string currentFileName, int nextIteration)
+    {
+        if (TiffNavigationInfo is null && !vm.ImageIterator.IsReversed)
         {
             var tiffPages = await Task.FromResult(TiffManager.LoadTiffPages(currentFileName)).ConfigureAwait(false);
             if (tiffPages.Count < 1)
@@ -80,25 +86,45 @@ public static class NavigationHelper
             }
             TiffNavigationInfo = new TiffManager.TiffNavigationInfo
             {
-                CurrentPage = 1, // Skip first page since it has already been shown
+                CurrentPage = 0,
                 PageCount = tiffPages.Count,
                 Pages = tiffPages
             };
         }
-        else
-        {
-            TiffNavigationInfo.CurrentPage += 1;
-        }
-                
-        if (TiffNavigationInfo.CurrentPage >= TiffNavigationInfo.PageCount)
+
+        if (TiffNavigationInfo is null)
         {
-            TiffNavigationInfo.Dispose();
-            TiffNavigationInfo = null;
             await CheckCancellationAndStartIterateToIndex(nextIteration, vm).ConfigureAwait(false);
         }
         else
         {
-            UpdateImage.SetTiffImage(TiffNavigationInfo, Path.GetFileName(currentFileName), vm);
+            if (vm.ImageIterator.IsReversed)
+            {
+                if (TiffNavigationInfo.CurrentPage - 1 <= 0)
+                {
+                    await CheckCancellationAndStartIterateToIndex(vm.ImageIterator.CurrentIndex, vm).ConfigureAwait(false);
+                    TiffNavigationInfo.Dispose();
+                    TiffNavigationInfo = null;
+                    return;
+                }
+
+                TiffNavigationInfo.CurrentPage -= 1;
+            }
+            else
+            {
+                TiffNavigationInfo.CurrentPage += 1;
+            }
+                
+            if (TiffNavigationInfo.CurrentPage >= TiffNavigationInfo.PageCount || TiffNavigationInfo.CurrentPage <= 0)
+            {
+                await CheckCancellationAndStartIterateToIndex(nextIteration, vm).ConfigureAwait(false);
+                TiffNavigationInfo.Dispose();
+                TiffNavigationInfo = null;
+            }
+            else
+            {
+                UpdateImage.SetTiffImage(TiffNavigationInfo, Path.GetFileName(currentFileName), vm);
+            }
         }
     }
 

+ 1 - 1
src/PicView.Avalonia/Navigation/UpdateImage.cs

@@ -200,7 +200,7 @@ public static class UpdateImage
         var width = source?.PixelSize.Width ?? 0;
         var height = source?.PixelSize.Height ?? 0;
         
-        name = name.Insert(name.LastIndexOf('.'), $" [{tiffNavigationInfo.CurrentPage}/{tiffNavigationInfo.PageCount - 1}]");
+        name = name.Insert(name.LastIndexOf('.'), $" [{tiffNavigationInfo.CurrentPage + 1}/{tiffNavigationInfo.PageCount}]");
 
         Dispatcher.UIThread.Invoke(() =>
         {