diff options
| author | Cody Robibero <cody@robibe.ro> | 2024-02-26 05:09:40 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-26 05:09:40 -0700 |
| commit | 0bc41c015f4ec907de75fe215589b7e30a819b54 (patch) | |
| tree | aade0ceab41e63b2f4833032dc380471166fc343 /MediaBrowser.Model/Lyrics | |
| parent | 59f50ae8b2555b8caa19e743c3ba612e999f75bf (diff) | |
Store lyrics in the database as media streams (#9951)
Diffstat (limited to 'MediaBrowser.Model/Lyrics')
| -rw-r--r-- | MediaBrowser.Model/Lyrics/LyricDto.cs | 19 | ||||
| -rw-r--r-- | MediaBrowser.Model/Lyrics/LyricFile.cs | 28 | ||||
| -rw-r--r-- | MediaBrowser.Model/Lyrics/LyricLine.cs | 28 | ||||
| -rw-r--r-- | MediaBrowser.Model/Lyrics/LyricMetadata.cs | 57 | ||||
| -rw-r--r-- | MediaBrowser.Model/Lyrics/LyricResponse.cs | 19 | ||||
| -rw-r--r-- | MediaBrowser.Model/Lyrics/LyricSearchRequest.cs | 59 | ||||
| -rw-r--r-- | MediaBrowser.Model/Lyrics/RemoteLyricInfoDto.cs | 22 | ||||
| -rw-r--r-- | MediaBrowser.Model/Lyrics/UploadLyricDto.cs | 16 |
8 files changed, 248 insertions, 0 deletions
diff --git a/MediaBrowser.Model/Lyrics/LyricDto.cs b/MediaBrowser.Model/Lyrics/LyricDto.cs new file mode 100644 index 000000000..7a9bffc99 --- /dev/null +++ b/MediaBrowser.Model/Lyrics/LyricDto.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Model.Lyrics; + +/// <summary> +/// LyricResponse model. +/// </summary> +public class LyricDto +{ + /// <summary> + /// Gets or sets Metadata for the lyrics. + /// </summary> + public LyricMetadata Metadata { get; set; } = new(); + + /// <summary> + /// Gets or sets a collection of individual lyric lines. + /// </summary> + public IReadOnlyList<LyricLine> Lyrics { get; set; } = []; +} diff --git a/MediaBrowser.Model/Lyrics/LyricFile.cs b/MediaBrowser.Model/Lyrics/LyricFile.cs new file mode 100644 index 000000000..3912b037e --- /dev/null +++ b/MediaBrowser.Model/Lyrics/LyricFile.cs @@ -0,0 +1,28 @@ +namespace MediaBrowser.Model.Lyrics; + +/// <summary> +/// The information for a raw lyrics file before parsing. +/// </summary> +public class LyricFile +{ + /// <summary> + /// Initializes a new instance of the <see cref="LyricFile"/> class. + /// </summary> + /// <param name="name">The name.</param> + /// <param name="content">The content, must not be empty.</param> + public LyricFile(string name, string content) + { + Name = name; + Content = content; + } + + /// <summary> + /// Gets or sets the name of the lyrics file. This must include the file extension. + /// </summary> + public string Name { get; set; } + + /// <summary> + /// Gets or sets the contents of the file. + /// </summary> + public string Content { get; set; } +} diff --git a/MediaBrowser.Model/Lyrics/LyricLine.cs b/MediaBrowser.Model/Lyrics/LyricLine.cs new file mode 100644 index 000000000..64d1f64c2 --- /dev/null +++ b/MediaBrowser.Model/Lyrics/LyricLine.cs @@ -0,0 +1,28 @@ +namespace MediaBrowser.Model.Lyrics; + +/// <summary> +/// Lyric model. +/// </summary> +public class LyricLine +{ + /// <summary> + /// Initializes a new instance of the <see cref="LyricLine"/> class. + /// </summary> + /// <param name="text">The lyric text.</param> + /// <param name="start">The lyric start time in ticks.</param> + public LyricLine(string text, long? start = null) + { + Text = text; + Start = start; + } + + /// <summary> + /// Gets the text of this lyric line. + /// </summary> + public string Text { get; } + + /// <summary> + /// Gets the start time in ticks. + /// </summary> + public long? Start { get; } +} diff --git a/MediaBrowser.Model/Lyrics/LyricMetadata.cs b/MediaBrowser.Model/Lyrics/LyricMetadata.cs new file mode 100644 index 000000000..4f819d6c9 --- /dev/null +++ b/MediaBrowser.Model/Lyrics/LyricMetadata.cs @@ -0,0 +1,57 @@ +namespace MediaBrowser.Model.Lyrics; + +/// <summary> +/// LyricMetadata model. +/// </summary> +public class LyricMetadata +{ + /// <summary> + /// Gets or sets the song artist. + /// </summary> + public string? Artist { get; set; } + + /// <summary> + /// Gets or sets the album this song is on. + /// </summary> + public string? Album { get; set; } + + /// <summary> + /// Gets or sets the title of the song. + /// </summary> + public string? Title { get; set; } + + /// <summary> + /// Gets or sets the author of the lyric data. + /// </summary> + public string? Author { get; set; } + + /// <summary> + /// Gets or sets the length of the song in ticks. + /// </summary> + public long? Length { get; set; } + + /// <summary> + /// Gets or sets who the LRC file was created by. + /// </summary> + public string? By { get; set; } + + /// <summary> + /// Gets or sets the lyric offset compared to audio in ticks. + /// </summary> + public long? Offset { get; set; } + + /// <summary> + /// Gets or sets the software used to create the LRC file. + /// </summary> + public string? Creator { get; set; } + + /// <summary> + /// Gets or sets the version of the creator used. + /// </summary> + public string? Version { get; set; } + + /// <summary> + /// Gets or sets a value indicating whether this lyric is synced. + /// </summary> + public bool? IsSynced { get; set; } +} diff --git a/MediaBrowser.Model/Lyrics/LyricResponse.cs b/MediaBrowser.Model/Lyrics/LyricResponse.cs new file mode 100644 index 000000000..b04adeb7b --- /dev/null +++ b/MediaBrowser.Model/Lyrics/LyricResponse.cs @@ -0,0 +1,19 @@ +using System.IO; + +namespace MediaBrowser.Model.Lyrics; + +/// <summary> +/// LyricResponse model. +/// </summary> +public class LyricResponse +{ + /// <summary> + /// Gets or sets the lyric stream. + /// </summary> + public required Stream Stream { get; set; } + + /// <summary> + /// Gets or sets the lyric format. + /// </summary> + public required string Format { get; set; } +} diff --git a/MediaBrowser.Model/Lyrics/LyricSearchRequest.cs b/MediaBrowser.Model/Lyrics/LyricSearchRequest.cs new file mode 100644 index 000000000..48c442a55 --- /dev/null +++ b/MediaBrowser.Model/Lyrics/LyricSearchRequest.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Model.Lyrics; + +/// <summary> +/// Lyric search request. +/// </summary> +public class LyricSearchRequest : IHasProviderIds +{ + /// <summary> + /// Gets or sets the media path. + /// </summary> + public string? MediaPath { get; set; } + + /// <summary> + /// Gets or sets the artist name. + /// </summary> + public IReadOnlyList<string>? ArtistNames { get; set; } + + /// <summary> + /// Gets or sets the album name. + /// </summary> + public string? AlbumName { get; set; } + + /// <summary> + /// Gets or sets the song name. + /// </summary> + public string? SongName { get; set; } + + /// <summary> + /// Gets or sets the track duration in ticks. + /// </summary> + public long? Duration { get; set; } + + /// <inheritdoc /> + public Dictionary<string, string> ProviderIds { get; set; } = new(StringComparer.OrdinalIgnoreCase); + + /// <summary> + /// Gets or sets a value indicating whether to search all providers. + /// </summary> + public bool SearchAllProviders { get; set; } = true; + + /// <summary> + /// Gets or sets the list of disabled lyric fetcher names. + /// </summary> + public IReadOnlyList<string> DisabledLyricFetchers { get; set; } = []; + + /// <summary> + /// Gets or sets the order of lyric fetchers. + /// </summary> + public IReadOnlyList<string> LyricFetcherOrder { get; set; } = []; + + /// <summary> + /// Gets or sets a value indicating whether this request is automated. + /// </summary> + public bool IsAutomated { get; set; } +} diff --git a/MediaBrowser.Model/Lyrics/RemoteLyricInfoDto.cs b/MediaBrowser.Model/Lyrics/RemoteLyricInfoDto.cs new file mode 100644 index 000000000..dda56d198 --- /dev/null +++ b/MediaBrowser.Model/Lyrics/RemoteLyricInfoDto.cs @@ -0,0 +1,22 @@ +namespace MediaBrowser.Model.Lyrics; + +/// <summary> +/// The remote lyric info dto. +/// </summary> +public class RemoteLyricInfoDto +{ + /// <summary> + /// Gets or sets the id for the lyric. + /// </summary> + public required string Id { get; set; } + + /// <summary> + /// Gets the provider name. + /// </summary> + public required string ProviderName { get; init; } + + /// <summary> + /// Gets the lyrics. + /// </summary> + public required LyricDto Lyrics { get; init; } +} diff --git a/MediaBrowser.Model/Lyrics/UploadLyricDto.cs b/MediaBrowser.Model/Lyrics/UploadLyricDto.cs new file mode 100644 index 000000000..0ea8a4c63 --- /dev/null +++ b/MediaBrowser.Model/Lyrics/UploadLyricDto.cs @@ -0,0 +1,16 @@ +using System.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Http; + +namespace MediaBrowser.Model.Lyrics; + +/// <summary> +/// Upload lyric dto. +/// </summary> +public class UploadLyricDto +{ + /// <summary> + /// Gets or sets the lyrics file. + /// </summary> + [Required] + public IFormFile Lyrics { get; set; } = null!; +} |
