More updates.

This commit is contained in:
2025-06-25 10:40:03 -04:00
parent a82eab0ecb
commit 33e521e8bb
28 changed files with 334 additions and 63 deletions

View File

@@ -0,0 +1,24 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using MangaReader.Core.Metadata;
using MangaReader.Core.Pipeline;
using MangaReader.Core.Search;
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Media.Imaging;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Input;
namespace MangaReader.WinUI.ViewModels;
public partial class LibraryViewModel : ViewModelBase
{
}

View File

@@ -1,5 +1,7 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using MangaReader.Core.Metadata;
using MangaReader.Core.Pipeline;
using MangaReader.Core.Search;
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Media.Imaging;
@@ -16,7 +18,10 @@ using System.Windows.Input;
namespace MangaReader.WinUI.ViewModels;
public partial class SearchViewModel(IMangaSearchCoordinator searchCoordinator) : ViewModelBase
public partial class SearchViewModel(
IMangaSearchCoordinator searchCoordinator,
IMangaMetadataCoordinator metadataCoordinator,
IMangaPipeline pipeline) : ViewModelBase
{
private readonly DispatcherQueue _dispatcherQueue = DispatcherQueue.GetForCurrentThread();
@@ -65,6 +70,7 @@ public partial class SearchViewModel(IMangaSearchCoordinator searchCoordinator)
}
public ICommand SearchCommand => new AsyncRelayCommand(SearchAsync);
//public ICommand ImportCommand => new AsyncRelayCommand(ImportAsync);
public async Task SearchAsync()
{
@@ -87,6 +93,8 @@ public partial class SearchViewModel(IMangaSearchCoordinator searchCoordinator)
ObservableMangaSearchResult mangaSearchResult = new()
{
Source = searchResult.Source,
Url = searchResult.Url,
Title = searchResult.Title,
Thumbnail = searchResult.Thumbnail,
Description = searchResult.Description,
@@ -124,10 +132,30 @@ public partial class SearchViewModel(IMangaSearchCoordinator searchCoordinator)
return bitmap;
}
public async Task ImportAsync(ObservableMangaSearchResult searchResult, CancellationToken cancellationToken)
{
IMangaMetadataProvider metadataProvider = metadataCoordinator.GetProvider(searchResult.Source);
SourceManga? sourceManga = await metadataProvider.GetMangaAsync(searchResult.Url, cancellationToken);
if (sourceManga == null)
return;
MangaMetadataPipelineRequest request = new()
{
SourceName = searchResult.Source,
SourceUrl = searchResult.Url,
SourceManga = sourceManga,
};
await pipeline.RunMetadataAsync(request, cancellationToken);
}
}
public partial class ObservableMangaSearchResult : ObservableObject
{
public required string Source { get; init; }
public required string Url { get; init; }
public string? Title { get; init; }
public string? Description { get; init; }
public string? Thumbnail { get; init; }