|
|
@@ -332,7 +332,7 @@ public sealed class ImageIterator : IDisposable
|
|
|
{
|
|
|
_vm.FileInfo = fileInfo;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
SetTitleHelper.SetTitle(_vm);
|
|
|
|
|
|
_isRunning = false;
|
|
|
@@ -365,7 +365,7 @@ public sealed class ImageIterator : IDisposable
|
|
|
{
|
|
|
return PreLoader.Get(index, ImagePaths);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public async Task<PreLoader.PreLoadValue?> GetPreLoadValueAsync(int index)
|
|
|
{
|
|
|
return await PreLoader.GetAsync(index, ImagePaths);
|
|
|
@@ -494,55 +494,25 @@ public sealed class ImageIterator : IDisposable
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- await Task.Run(async () =>
|
|
|
+ try
|
|
|
{
|
|
|
- try
|
|
|
+ lock (_lock)
|
|
|
{
|
|
|
- lock (_lock)
|
|
|
- {
|
|
|
- CurrentIndex = index;
|
|
|
- }
|
|
|
-
|
|
|
- // ReSharper disable once MethodHasAsyncOverload
|
|
|
- var preloadValue = PreLoader.Get(index, ImagePaths);
|
|
|
- if (preloadValue is not null)
|
|
|
- {
|
|
|
- if (preloadValue.IsLoading)
|
|
|
- {
|
|
|
- TryShowPreview(preloadValue);
|
|
|
- }
|
|
|
+ CurrentIndex = index;
|
|
|
+ }
|
|
|
|
|
|
- while (preloadValue.IsLoading)
|
|
|
- {
|
|
|
- await Task.Delay(20).ConfigureAwait(false);
|
|
|
- lock (_lock)
|
|
|
- {
|
|
|
- if (CurrentIndex != index)
|
|
|
- {
|
|
|
- // Skip loading if user went to next value
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
+ // ReSharper disable once MethodHasAsyncOverload
|
|
|
+ var preloadValue = PreLoader.Get(index, ImagePaths);
|
|
|
+ if (preloadValue is not null)
|
|
|
+ {
|
|
|
+ if (preloadValue.IsLoading)
|
|
|
{
|
|
|
TryShowPreview(preloadValue);
|
|
|
- preloadValue = await PreLoader.GetAsync(CurrentIndex, ImagePaths).ConfigureAwait(false);
|
|
|
- }
|
|
|
-
|
|
|
- lock (_lock)
|
|
|
- {
|
|
|
- if (CurrentIndex != index)
|
|
|
- {
|
|
|
- // Skip loading if user went to next value
|
|
|
- return;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
- if (SettingsHelper.Settings.ImageScaling.ShowImageSideBySide)
|
|
|
+ while (preloadValue.IsLoading)
|
|
|
{
|
|
|
- var nextPreloadValue = await GetNextPreLoadValueAsync().ConfigureAwait(false);
|
|
|
+ await Task.Delay(20).ConfigureAwait(false);
|
|
|
lock (_lock)
|
|
|
{
|
|
|
if (CurrentIndex != index)
|
|
|
@@ -551,81 +521,109 @@ public sealed class ImageIterator : IDisposable
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- _vm.SecondaryImageSource = nextPreloadValue.ImageModel.Image;
|
|
|
- await UpdateImage.UpdateSource(_vm, index, ImagePaths, IsReversed, preloadValue, nextPreloadValue).ConfigureAwait(false);
|
|
|
}
|
|
|
- else
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TryShowPreview(preloadValue);
|
|
|
+ preloadValue = await PreLoader.GetAsync(CurrentIndex, ImagePaths).ConfigureAwait(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ lock (_lock)
|
|
|
+ {
|
|
|
+ if (CurrentIndex != index)
|
|
|
{
|
|
|
- await UpdateImage.UpdateSource(_vm, index, ImagePaths, IsReversed, preloadValue).ConfigureAwait(false);
|
|
|
+ // Skip loading if user went to next value
|
|
|
+ return;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- if (ImagePaths.Count > 1)
|
|
|
+ if (SettingsHelper.Settings.ImageScaling.ShowImageSideBySide)
|
|
|
+ {
|
|
|
+ var nextPreloadValue = await GetNextPreLoadValueAsync().ConfigureAwait(false);
|
|
|
+ lock (_lock)
|
|
|
{
|
|
|
- if (SettingsHelper.Settings.UIProperties.IsTaskbarProgressEnabled)
|
|
|
+ if (CurrentIndex != index)
|
|
|
{
|
|
|
- await Dispatcher.UIThread.InvokeAsync(() =>
|
|
|
- {
|
|
|
- _vm.PlatformService.SetTaskbarProgress((ulong)CurrentIndex, (ulong)ImagePaths.Count);
|
|
|
- });
|
|
|
+ // Skip loading if user went to next value
|
|
|
+ return;
|
|
|
}
|
|
|
-
|
|
|
- await PreLoader.PreLoadAsync(CurrentIndex, ImagePaths.Count, IsReversed, ImagePaths)
|
|
|
- .ConfigureAwait(false);
|
|
|
}
|
|
|
|
|
|
- await AddAsync(index, preloadValue.ImageModel).ConfigureAwait(false);
|
|
|
+ _vm.SecondaryImageSource = nextPreloadValue.ImageModel.Image;
|
|
|
+ await UpdateImage.UpdateSource(_vm, index, ImagePaths, IsReversed, preloadValue, nextPreloadValue)
|
|
|
+ .ConfigureAwait(false);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await UpdateImage.UpdateSource(_vm, index, ImagePaths, IsReversed, preloadValue).ConfigureAwait(false);
|
|
|
+ }
|
|
|
|
|
|
- // Add recent files, except when browsing archive
|
|
|
- if (string.IsNullOrWhiteSpace(TempFileHelper.TempFilePath) && ImagePaths.Count > index)
|
|
|
+ if (ImagePaths.Count > 1)
|
|
|
+ {
|
|
|
+ if (SettingsHelper.Settings.UIProperties.IsTaskbarProgressEnabled)
|
|
|
{
|
|
|
- FileHistoryNavigation.Add(ImagePaths[index]);
|
|
|
+ await Dispatcher.UIThread.InvokeAsync(() =>
|
|
|
+ {
|
|
|
+ _vm.PlatformService.SetTaskbarProgress((ulong)CurrentIndex, (ulong)ImagePaths.Count);
|
|
|
+ });
|
|
|
}
|
|
|
+
|
|
|
+ await PreLoader.PreLoadAsync(CurrentIndex, ImagePaths.Count, IsReversed, ImagePaths)
|
|
|
+ .ConfigureAwait(false);
|
|
|
}
|
|
|
- catch (Exception e)
|
|
|
+
|
|
|
+ await AddAsync(index, preloadValue.ImageModel).ConfigureAwait(false);
|
|
|
+
|
|
|
+ // Add recent files, except when browsing archive
|
|
|
+ if (string.IsNullOrWhiteSpace(TempFileHelper.TempFilePath) && ImagePaths.Count > index)
|
|
|
{
|
|
|
+ FileHistoryNavigation.Add(ImagePaths[index]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
#if DEBUG
|
|
|
- Console.WriteLine($"{nameof(IterateToIndex)} exception: \n{e.Message}");
|
|
|
- await TooltipHelper.ShowTooltipMessageAsync(e.Message);
|
|
|
+ Console.WriteLine($"{nameof(IterateToIndex)} exception: \n{e.Message}");
|
|
|
+ await TooltipHelper.ShowTooltipMessageAsync(e.Message);
|
|
|
#endif
|
|
|
- }
|
|
|
- finally
|
|
|
- {
|
|
|
- _vm.IsLoading = false;
|
|
|
- }
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ _vm.IsLoading = false;
|
|
|
+ }
|
|
|
|
|
|
- return;
|
|
|
+ return;
|
|
|
|
|
|
- void TryShowPreview(PreLoader.PreLoadValue preloadValue)
|
|
|
+ void TryShowPreview(PreLoader.PreLoadValue preloadValue)
|
|
|
+ {
|
|
|
+ if (preloadValue is null)
|
|
|
{
|
|
|
- if (preloadValue is null)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- if (!preloadValue.IsLoading)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (!preloadValue.IsLoading)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- if (index != CurrentIndex)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (index != CurrentIndex)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- if (SettingsHelper.Settings.ImageScaling.ShowImageSideBySide)
|
|
|
- {
|
|
|
- SetTitleHelper.SetLoadingTitle(_vm);
|
|
|
- _vm.IsLoading = true;
|
|
|
- _vm.ImageSource = null;
|
|
|
- _vm.SecondaryImageSource = null;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- UpdateImage.LoadingPreview(_vm, index);
|
|
|
- }
|
|
|
+ if (SettingsHelper.Settings.ImageScaling.ShowImageSideBySide)
|
|
|
+ {
|
|
|
+ SetTitleHelper.SetLoadingTitle(_vm);
|
|
|
+ _vm.IsLoading = true;
|
|
|
+ _vm.ImageSource = null;
|
|
|
+ _vm.SecondaryImageSource = null;
|
|
|
}
|
|
|
- });
|
|
|
+ else
|
|
|
+ {
|
|
|
+ UpdateImage.LoadingPreview(_vm, index);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private static Timer? _timer;
|