using LANCommander.SDK.Enums; using LANCommander.Server.Services.Models; using System.Runtime.CompilerServices; namespace LANCommander.Server.Services.Abstractions { public interface IMediaGrabberService { string Name { get; } MediaType[] SupportedMediaTypes { get; } Task> SearchAsync(MediaType type, string keywords, int page = 0); Task DownloadAsync(MediaGrabberResult result); Task DownloadAsync(MediaGrabberResult result, IProgress? progress) => DownloadAsync(result); IEnumerable GetGrabberNames() => [Name]; /// /// Whether this grabber can return additional pages of results for a given game/group. /// Grabbers that return their full result set in a single request should leave this false. /// bool SupportsPaging => false; IEnumerable GetPagingGrabberNames() => SupportsPaging ? [Name] : []; async IAsyncEnumerable> SearchStreamAsync( MediaType type, string keywords, int page, [EnumeratorCancellation] CancellationToken cancellationToken = default) { yield return await SearchAsync(type, keywords, page); } IAsyncEnumerable> SearchStreamAsync( MediaType type, string keywords, string? grabberName, int page, [EnumeratorCancellation] CancellationToken cancellationToken = default) => SearchStreamAsync(type, keywords, page, cancellationToken); } }