using octo_fiesta.Models.Domain; using octo_fiesta.Models.Settings; using octo_fiesta.Models.Download; using octo_fiesta.Models.Search; using octo_fiesta.Models.Subsonic; namespace octo_fiesta.Services.Local; /// /// Interface for local music library management /// public interface ILocalLibraryService { /// /// Checks if an external song already exists locally /// Task GetLocalPathForExternalSongAsync(string externalProvider, string externalId); /// /// Registers a downloaded song in the local library /// Task RegisterDownloadedSongAsync(Song song, string localPath); /// /// Gets the mapping between external ID and local ID /// Task GetLocalIdForExternalSongAsync(string externalProvider, string externalId); /// /// Parses a song ID to determine if it is external or local /// (bool isExternal, string? provider, string? externalId) ParseSongId(string songId); /// /// Parses an external ID to extract the provider, type and ID /// Format: ext-{provider}-{type}-{id} (e.g., ext-deezer-artist-259, ext-deezer-album-96126, ext-deezer-song-12345) /// Also supports legacy format: ext-{provider}-{id} (assumes song type) /// (bool isExternal, string? provider, string? type, string? externalId) ParseExternalId(string id); /// /// Triggers a Subsonic library scan /// Task TriggerLibraryScanAsync(); /// /// Gets the current scan status /// Task GetScanStatusAsync(); }