Change how large cover image viewer loads images

This commit is contained in:
Michael Bucari-Tovo 2022-07-15 15:42:34 -06:00
parent 8cd6219bd9
commit d336848ed0
2 changed files with 38 additions and 14 deletions

View File

@ -32,30 +32,42 @@ namespace LibationWinForms.AvaloniaUI.Views.ProductsGrid
} }
} }
public async void Cover_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args) public void Cover_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args)
{ {
if (sender is not Image tblock || tblock.DataContext is not GridEntry2 gEntry) if (sender is not Image tblock || tblock.DataContext is not GridEntry2 gEntry)
return; return;
var picDefinition = new PictureDefinition(gEntry.LibraryBook.Book.PictureLarge ?? gEntry.LibraryBook.Book.PictureId, PictureSize.Native); var picDef = new PictureDefinition(gEntry.LibraryBook.Book.PictureLarge ?? gEntry.LibraryBook.Book.PictureId, PictureSize.Native);
var picDlTask = Task.Run(() => PictureStorage.GetPictureSynchronously(picDefinition));
void PictureCached(object sender, PictureCachedEventArgs e)
{
if (e.Definition.PictureId == picDef.PictureId)
imageDisplay.CoverPicture = e.Picture;
PictureStorage.PictureCached -= PictureCached;
}
PictureStorage.PictureCached += PictureCached;
(bool isDefault, byte[] initialImageBts) = PictureStorage.GetPicture(picDef);
(_, byte[] initialImageBts) = PictureStorage.GetPicture(new PictureDefinition(gEntry.LibraryBook.Book.PictureId, PictureSize._80x80));
var windowTitle = $"{gEntry.Title} - Cover"; var windowTitle = $"{gEntry.Title} - Cover";
if (imageDisplay is null || imageDisplay.IsDisposed || !imageDisplay.Visible) if (imageDisplay is null || imageDisplay.IsDisposed || !imageDisplay.Visible)
{ {
imageDisplay = new GridView.ImageDisplay(); imageDisplay = new GridView.ImageDisplay();
imageDisplay.RestoreSizeAndLocation(Configuration.Instance); imageDisplay.RestoreSizeAndLocation(Configuration.Instance);
imageDisplay.FormClosed += (_, _) => imageDisplay.SaveSizeAndLocation(Configuration.Instance); imageDisplay.FormClosed += (_, _) => imageDisplay.SaveSizeAndLocation(Configuration.Instance);
imageDisplay.Show(null);
} }
imageDisplay.BookSaveDirectory = AudibleFileStorage.Audio.GetDestinationDirectory(gEntry.LibraryBook); imageDisplay.BookSaveDirectory = AudibleFileStorage.Audio.GetDestinationDirectory(gEntry.LibraryBook);
imageDisplay.PictureFileName = System.IO.Path.GetFileName(AudibleFileStorage.Audio.GetBooksDirectoryFilename(gEntry.LibraryBook, ".jpg")); imageDisplay.PictureFileName = System.IO.Path.GetFileName(AudibleFileStorage.Audio.GetBooksDirectoryFilename(gEntry.LibraryBook, ".jpg"));
imageDisplay.Text = windowTitle; imageDisplay.Text = windowTitle;
imageDisplay.CoverPicture = initialImageBts; imageDisplay.CoverPicture = initialImageBts;
imageDisplay.CoverPicture = await picDlTask; if (!isDefault)
PictureStorage.PictureCached -= PictureCached;
if (!imageDisplay.Visible)
imageDisplay.Show(null);
} }
public void Description_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args) public void Description_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args)

View File

@ -31,27 +31,39 @@ namespace LibationWinForms.GridView
#region Button controls #region Button controls
private ImageDisplay imageDisplay; private ImageDisplay imageDisplay;
private async void productsGrid_CoverClicked(GridEntry liveGridEntry) private void productsGrid_CoverClicked(GridEntry liveGridEntry)
{ {
var picDefinition = new PictureDefinition(liveGridEntry.LibraryBook.Book.PictureLarge ?? liveGridEntry.LibraryBook.Book.PictureId, PictureSize.Native); var picDef = new PictureDefinition(liveGridEntry.LibraryBook.Book.PictureLarge ?? liveGridEntry.LibraryBook.Book.PictureId, PictureSize.Native);
var picDlTask = Task.Run(() => PictureStorage.GetPictureSynchronously(picDefinition));
void PictureCached(object sender, PictureCachedEventArgs e)
{
if (e.Definition.PictureId == picDef.PictureId)
imageDisplay.CoverPicture = e.Picture;
PictureStorage.PictureCached -= PictureCached;
}
PictureStorage.PictureCached += PictureCached;
(bool isDefault, byte[] initialImageBts) = PictureStorage.GetPicture(picDef);
(_, byte[] initialImageBts) = PictureStorage.GetPicture(new PictureDefinition(liveGridEntry.LibraryBook.Book.PictureId, PictureSize._80x80));
var windowTitle = $"{liveGridEntry.Title} - Cover"; var windowTitle = $"{liveGridEntry.Title} - Cover";
if (imageDisplay is null || imageDisplay.IsDisposed || !imageDisplay.Visible) if (imageDisplay is null || imageDisplay.IsDisposed || !imageDisplay.Visible)
{ {
imageDisplay = new ImageDisplay(); imageDisplay = new GridView.ImageDisplay();
imageDisplay.RestoreSizeAndLocation(Configuration.Instance); imageDisplay.RestoreSizeAndLocation(Configuration.Instance);
imageDisplay.FormClosed += (_, _) => imageDisplay.SaveSizeAndLocation(Configuration.Instance); imageDisplay.FormClosed += (_, _) => imageDisplay.SaveSizeAndLocation(Configuration.Instance);
imageDisplay.Show(this);
} }
imageDisplay.BookSaveDirectory = AudibleFileStorage.Audio.GetDestinationDirectory(liveGridEntry.LibraryBook); imageDisplay.BookSaveDirectory = AudibleFileStorage.Audio.GetDestinationDirectory(liveGridEntry.LibraryBook);
imageDisplay.PictureFileName = System.IO.Path.GetFileName(AudibleFileStorage.Audio.GetBooksDirectoryFilename(liveGridEntry.LibraryBook, ".jpg")); imageDisplay.PictureFileName = System.IO.Path.GetFileName(AudibleFileStorage.Audio.GetBooksDirectoryFilename(liveGridEntry.LibraryBook, ".jpg"));
imageDisplay.Text = windowTitle; imageDisplay.Text = windowTitle;
imageDisplay.CoverPicture = initialImageBts; imageDisplay.CoverPicture = initialImageBts;
imageDisplay.CoverPicture = await picDlTask; if (!isDefault)
PictureStorage.PictureCached -= PictureCached;
if (!imageDisplay.Visible)
imageDisplay.Show(null);
} }
private void productsGrid_DescriptionClicked(GridEntry liveGridEntry, Rectangle cellRectangle) private void productsGrid_DescriptionClicked(GridEntry liveGridEntry, Rectangle cellRectangle)