CreatorViewModel.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Avalonia.Media.Imaging;
  2. using ReactiveUI;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using VeloeAvaloniaKemonoPartyApp.Models;
  9. namespace VeloeAvaloniaKemonoPartyApp.ViewModels
  10. {
  11. public class CreatorViewModel : ViewModelBase
  12. {
  13. private readonly Creator _creator;
  14. public CreatorViewModel(Creator creator)
  15. {
  16. _creator = creator;
  17. }
  18. public string Artist => _creator.name;
  19. public string Title => _creator.updated.ToString();
  20. private Bitmap? _cover;
  21. public Bitmap? Cover
  22. {
  23. get => _cover;
  24. private set => this.RaiseAndSetIfChanged(ref _cover, value);
  25. }
  26. public async Task LoadCover()
  27. {
  28. await using (var imageStream = await _creator.LoadCoverBitmapAsync())
  29. {
  30. Cover = await Task.Run(() =>
  31. {
  32. Bitmap? bitmap;
  33. try
  34. {
  35. bitmap = new Bitmap(imageStream);
  36. }
  37. catch (Exception ex)
  38. {
  39. bitmap = null;
  40. }
  41. return bitmap;
  42. });
  43. }
  44. }
  45. public async Task SaveToDiskAsync()
  46. {
  47. await _creator.SaveAsync();
  48. if (Cover != null)
  49. {
  50. var bitmap = Cover;
  51. await Task.Run(() =>
  52. {
  53. using (var fs = _creator.SaveCoverBitmapStream())
  54. {
  55. bitmap.Save(fs);
  56. }
  57. });
  58. }
  59. }
  60. }
  61. }