mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-02-10 07:58:39 -05:00
refactor: reorganize Models into subdirectories by context
Split monolithic MusicModels.cs (177 lines) into separate files: - Models/Settings/ (DeezerSettings, QobuzSettings, SubsonicSettings) - Models/Domain/ (Song, Album, Artist) - Models/Search/ (SearchResult) - Models/Download/ (DownloadInfo, DownloadStatus) - Models/Subsonic/ (ScanStatus) Updated namespaces and imports across 22 files. Improves navigation and separates models by business context.
This commit is contained in:
20
octo-fiesta/Models/Domain/Album.cs
Normal file
20
octo-fiesta/Models/Domain/Album.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace octo_fiesta.Models.Domain;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an album
|
||||
/// </summary>
|
||||
public class Album
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public string Title { get; set; } = string.Empty;
|
||||
public string Artist { get; set; } = string.Empty;
|
||||
public string? ArtistId { get; set; }
|
||||
public int? Year { get; set; }
|
||||
public int? SongCount { get; set; }
|
||||
public string? CoverArtUrl { get; set; }
|
||||
public string? Genre { get; set; }
|
||||
public bool IsLocal { get; set; }
|
||||
public string? ExternalProvider { get; set; }
|
||||
public string? ExternalId { get; set; }
|
||||
public List<Song> Songs { get; set; } = new();
|
||||
}
|
||||
15
octo-fiesta/Models/Domain/Artist.cs
Normal file
15
octo-fiesta/Models/Domain/Artist.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace octo_fiesta.Models.Domain;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an artist
|
||||
/// </summary>
|
||||
public class Artist
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string? ImageUrl { get; set; }
|
||||
public int? AlbumCount { get; set; }
|
||||
public bool IsLocal { get; set; }
|
||||
public string? ExternalProvider { get; set; }
|
||||
public string? ExternalId { get; set; }
|
||||
}
|
||||
97
octo-fiesta/Models/Domain/Song.cs
Normal file
97
octo-fiesta/Models/Domain/Song.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
namespace octo_fiesta.Models.Domain;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a song (local or external)
|
||||
/// </summary>
|
||||
public class Song
|
||||
{
|
||||
/// <summary>
|
||||
/// Unique ID. For external songs, prefixed with "ext-" + provider + "-" + external id
|
||||
/// Example: "ext-deezer-123456" or "local-789"
|
||||
/// </summary>
|
||||
public string Id { get; set; } = string.Empty;
|
||||
|
||||
public string Title { get; set; } = string.Empty;
|
||||
public string Artist { get; set; } = string.Empty;
|
||||
public string? ArtistId { get; set; }
|
||||
public string Album { get; set; } = string.Empty;
|
||||
public string? AlbumId { get; set; }
|
||||
public int? Duration { get; set; } // In seconds
|
||||
public int? Track { get; set; }
|
||||
public int? DiscNumber { get; set; }
|
||||
public int? TotalTracks { get; set; }
|
||||
public int? Year { get; set; }
|
||||
public string? Genre { get; set; }
|
||||
public string? CoverArtUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// High-resolution cover art URL (for embedding)
|
||||
/// </summary>
|
||||
public string? CoverArtUrlLarge { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// BPM (beats per minute) if available
|
||||
/// </summary>
|
||||
public int? Bpm { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ISRC (International Standard Recording Code)
|
||||
/// </summary>
|
||||
public string? Isrc { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Full release date (format: YYYY-MM-DD)
|
||||
/// </summary>
|
||||
public string? ReleaseDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Album artist name (may differ from track artist)
|
||||
/// </summary>
|
||||
public string? AlbumArtist { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Composer(s)
|
||||
/// </summary>
|
||||
public string? Composer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Album label
|
||||
/// </summary>
|
||||
public string? Label { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Copyright
|
||||
/// </summary>
|
||||
public string? Copyright { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Contributing artists (features, etc.)
|
||||
/// </summary>
|
||||
public List<string> Contributors { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Indicates whether the song is available locally or needs to be downloaded
|
||||
/// </summary>
|
||||
public bool IsLocal { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// External provider (deezer, spotify, etc.) - null if local
|
||||
/// </summary>
|
||||
public string? ExternalProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ID on the external provider (for downloading)
|
||||
/// </summary>
|
||||
public string? ExternalId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Local file path (if available)
|
||||
/// </summary>
|
||||
public string? LocalPath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Deezer explicit content lyrics value
|
||||
/// 0 = Naturally clean, 1 = Explicit, 2 = Not applicable, 3 = Clean/edited version, 6/7 = Unknown
|
||||
/// </summary>
|
||||
public int? ExplicitContentLyrics { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user