123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using Avalonia.Controls.ApplicationLifetimes;
- using Avalonia.Media.Imaging;
- using ReactiveUI;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using VeloeAvaloniaKemonoPartyApp.Models;
- namespace VeloeAvaloniaKemonoPartyApp.ViewModels
- {
- public class PostViewModel : ViewModelBase
- {
- private readonly Post _post;
- public PostViewModel(Post post)
- {
- _post = post;
- }
- public string Artist => _post.Content;
- public string Title => _post.Title;
- private Bitmap? _cover;
- public Bitmap? Cover
- {
- get => _cover;
- private set => this.RaiseAndSetIfChanged(ref _cover, value);
- }
- public async Task LoadAvatar()
- {
- if (_post.Attachments.Count == 0) return;
- await using (var imageStream = await _post.LoadCoverBitmapAsync())
- {
- Cover = await Task.Run(() =>
- {
- Bitmap? bitmap;
- try
- {
- bitmap = new Bitmap(imageStream);
- bitmap = bitmap.CreateScaledBitmap(new Avalonia.PixelSize(bitmap.PixelSize.Width / 2, bitmap.PixelSize.Height / 2));
- }
- catch (Exception ex)
- {
- bitmap = null;
- }
- return bitmap;
- });
- }
- }
- public async Task SaveToDiskAsync()
- {
- await _post.SaveAsync();
- if (Cover != null)
- {
- var bitmap = Cover;
- await Task.Run(() =>
- {
- using (var fs = _post.SaveCoverBitmapStream())
- {
- bitmap.Save(fs);
- }
- });
- }
- }
- }
- }
|