fix album_artist metadata (#674)

This commit is contained in:
Jason Dove
2022-03-04 21:10:55 -06:00
committed by GitHub
parent ea339a1622
commit a3260b2316
7 changed files with 3948 additions and 2 deletions
+2
View File
@@ -9,11 +9,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fix watermark on scaled and/or padded video with NVIDIA acceleration - Fix watermark on scaled and/or padded video with NVIDIA acceleration
- Fix playback of interlaced mpeg2video content with NVIDIA acceleration - Fix playback of interlaced mpeg2video content with NVIDIA acceleration
- Fix playback of all interlaced content with QSV acceleration - Fix playback of all interlaced content with QSV acceleration
- Fix adding songs to collections from search results page
### Added ### Added
- Add automated error reporting via Bugsnag - Add automated error reporting via Bugsnag
- This can be disabled by editing the `appsettings.json` file or by setting the `Bugsnag:Enable` environment variable to `false` - This can be disabled by editing the `appsettings.json` file or by setting the `Bugsnag:Enable` environment variable to `false`
- Add `album_artist` to song metadata and to search index - Add `album_artist` to song metadata and to search index
- Display `album_artist` on some song videos when it's different than the `artist`
### Changed ### Changed
- Framerate normalization will never normalize framerate below 24fps - Framerate normalization will never normalize framerate below 24fps
@@ -102,6 +102,14 @@ public class SongVideoGenerator : ISongVideoGenerator
sb.Append($"\\N\"{metadata.Title}\""); sb.Append($"\\N\"{metadata.Title}\"");
} }
if (!string.IsNullOrWhiteSpace(metadata.AlbumArtist) && !string.Equals(
metadata.Artist,
metadata.AlbumArtist,
StringComparison.Ordinal))
{
sb.Append($"\\N{metadata.AlbumArtist}");
}
if (!string.IsNullOrWhiteSpace(metadata.Album)) if (!string.IsNullOrWhiteSpace(metadata.Album))
{ {
sb.Append($"\\N{metadata.Album}"); sb.Append($"\\N{metadata.Album}");
@@ -377,7 +377,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
public record FFprobeFormatTags( public record FFprobeFormatTags(
string title, string title,
string artist, string artist,
[property: JsonProperty(PropertyName = "album artist")] [property: JsonProperty(PropertyName = "album_artist")]
string albumArtist, string albumArtist,
string album, string album,
string track, string track,
@@ -25,7 +25,6 @@ namespace ErsatzTV.Infrastructure.Migrations
protected override void Down(MigrationBuilder migrationBuilder) protected override void Down(MigrationBuilder migrationBuilder)
{ {
} }
} }
} }
@@ -0,0 +1,30 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ErsatzTV.Infrastructure.Migrations
{
public partial class Reset_SongMetadataAlbumArtistAgain : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(
@"UPDATE LibraryPath SET LastScan = '0001-01-01 00:00:00' WHERE Id IN
(SELECT LP.Id FROM LibraryPath LP INNER JOIN Library L on L.Id = LP.LibraryId WHERE MediaKind = 5)");
migrationBuilder.Sql(
@"UPDATE Library SET LastScan = '0001-01-01 00:00:00' WHERE MediaKind = 5");
migrationBuilder.Sql(
@"UPDATE SongMetadata SET DateUpdated = '0001-01-01 00:00:00'");
migrationBuilder.Sql(
@"UPDATE LibraryFolder SET Etag = NULL WHERE Id IN
(SELECT LF.Id FROM LibraryFolder LF INNER JOIN LibraryPath LP on LF.LibraryPathId = LP.Id INNER JOIN Library L on LP.LibraryId = L.Id WHERE MediaKind = 5)");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}
+21
View File
@@ -486,6 +486,27 @@
Right: _ => Snackbar.Add($"Added {otherVideo.Title} to collection {collection.Name}", Severity.Success)); Right: _ => Snackbar.Add($"Added {otherVideo.Title} to collection {collection.Name}", Severity.Success));
} }
} }
if (card is SongCardViewModel song)
{
var parameters = new DialogParameters { { "EntityType", "song" }, { "EntityName", song.Title } };
var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall };
IDialogReference dialog = Dialog.Show<AddToCollectionDialog>("Add To Collection", parameters, options);
DialogResult result = await dialog.Result;
if (!result.Cancelled && result.Data is MediaCollectionViewModel collection)
{
var request = new AddSongToCollection(collection.Id, song.SongId);
Either<BaseError, Unit> addResult = await Mediator.Send(request, CancellationToken);
addResult.Match(
Left: error =>
{
Snackbar.Add($"Unexpected error adding song to collection: {error.Value}");
Logger.LogError("Unexpected error adding song to collection: {Error}", error.Value);
},
Right: _ => Snackbar.Add($"Added {song.Title} to collection {collection.Name}", Severity.Success));
}
}
} }
private string GetMoviesLink() private string GetMoviesLink()