mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-04 23:08:42 +01:00
update active recordings
This commit is contained in:
@@ -29,7 +29,7 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
/// </summary>
|
||||
/// <value>The artist.</value>
|
||||
[IgnoreDataMember]
|
||||
public List<string> Artists { get; set; }
|
||||
public string[] Artists { get; set; }
|
||||
|
||||
[IgnoreDataMember]
|
||||
public string[] AlbumArtists { get; set; }
|
||||
@@ -42,7 +42,7 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
|
||||
public Audio()
|
||||
{
|
||||
Artists = new List<string>();
|
||||
Artists = EmptyStringArray;
|
||||
AlbumArtists = EmptyStringArray;
|
||||
}
|
||||
|
||||
@@ -98,13 +98,23 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public List<string> AllArtists
|
||||
public string[] AllArtists
|
||||
{
|
||||
get
|
||||
{
|
||||
var list = AlbumArtists.ToList();
|
||||
var list = new string[AlbumArtists.Length + Artists.Length];
|
||||
|
||||
list.AddRange(Artists);
|
||||
var index = 0;
|
||||
foreach (var artist in AlbumArtists)
|
||||
{
|
||||
list[index] = artist;
|
||||
index++;
|
||||
}
|
||||
foreach (var artist in AlbumArtists)
|
||||
{
|
||||
list[index] = artist;
|
||||
index++;
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
@@ -160,7 +170,7 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
songKey = Album + "-" + songKey;
|
||||
}
|
||||
|
||||
var albumArtist = AlbumArtists.FirstOrDefault();
|
||||
var albumArtist = AlbumArtists.Length == 0 ? null : AlbumArtists[0];
|
||||
if (!string.IsNullOrWhiteSpace(albumArtist))
|
||||
{
|
||||
songKey = albumArtist + "-" + songKey;
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using MediaBrowser.Controller.Library;
|
||||
using System.Collections.Generic;
|
||||
|
||||
|
||||
namespace MediaBrowser.Controller.Entities.Audio
|
||||
{
|
||||
public interface IHasAlbumArtist
|
||||
@@ -10,16 +8,8 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
|
||||
public interface IHasArtist
|
||||
{
|
||||
List<string> AllArtists { get; }
|
||||
string[] AllArtists { get; }
|
||||
|
||||
List<string> Artists { get; set; }
|
||||
}
|
||||
|
||||
public static class HasArtistExtensions
|
||||
{
|
||||
public static bool HasAnyArtist(this IHasArtist hasArtist, string artist)
|
||||
{
|
||||
return NameExtensions.EqualsAny(hasArtist.AllArtists, artist);
|
||||
}
|
||||
string[] Artists { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Dto;
|
||||
|
||||
namespace MediaBrowser.Controller.Entities.Audio
|
||||
{
|
||||
@@ -20,11 +19,11 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo<AlbumInfo>, IMetadataContainer
|
||||
{
|
||||
public string[] AlbumArtists { get; set; }
|
||||
public List<string> Artists { get; set; }
|
||||
public string[] Artists { get; set; }
|
||||
|
||||
public MusicAlbum()
|
||||
{
|
||||
Artists = new List<string>();
|
||||
Artists = EmptyStringArray;
|
||||
AlbumArtists = EmptyStringArray;
|
||||
}
|
||||
|
||||
@@ -48,17 +47,22 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
|
||||
public MusicArtist GetMusicArtist(DtoOptions options)
|
||||
{
|
||||
var artist = GetParents().OfType<MusicArtist>().FirstOrDefault();
|
||||
|
||||
if (artist == null)
|
||||
var parents = GetParents();
|
||||
foreach (var parent in parents)
|
||||
{
|
||||
var name = AlbumArtist;
|
||||
if (!string.IsNullOrWhiteSpace(name))
|
||||
var artist = parent as MusicArtist;
|
||||
if (artist != null)
|
||||
{
|
||||
artist = LibraryManager.GetArtist(name, options);
|
||||
return artist;
|
||||
}
|
||||
}
|
||||
return artist;
|
||||
|
||||
var name = AlbumArtist;
|
||||
if (!string.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
return LibraryManager.GetArtist(name, options);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
@@ -80,23 +84,32 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public List<string> AllArtists
|
||||
public string[] AllArtists
|
||||
{
|
||||
get
|
||||
{
|
||||
var list = AlbumArtists.ToList();
|
||||
var list = new string[AlbumArtists.Length + Artists.Length];
|
||||
|
||||
list.AddRange(Artists);
|
||||
var index = 0;
|
||||
foreach (var artist in AlbumArtists)
|
||||
{
|
||||
list[index] = artist;
|
||||
index++;
|
||||
}
|
||||
foreach (var artist in AlbumArtists)
|
||||
{
|
||||
list[index] = artist;
|
||||
index++;
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public string AlbumArtist
|
||||
{
|
||||
get { return AlbumArtists.FirstOrDefault(); }
|
||||
get { return AlbumArtists.Length == 0 ? null : AlbumArtists[0]; }
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
@@ -110,11 +123,11 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
/// </summary>
|
||||
/// <value>The tracks.</value>
|
||||
[IgnoreDataMember]
|
||||
public IEnumerable<Audio> Tracks
|
||||
public IEnumerable<BaseItem> Tracks
|
||||
{
|
||||
get
|
||||
{
|
||||
return GetRecursiveChildren(i => i is Audio).Cast<Audio>();
|
||||
return GetRecursiveChildren(i => i is Audio);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +213,7 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
|
||||
public async Task RefreshAllMetadata(MetadataRefreshOptions refreshOptions, IProgress<double> progress, CancellationToken cancellationToken)
|
||||
{
|
||||
var items = GetRecursiveChildren().ToList();
|
||||
var items = GetRecursiveChildren();
|
||||
|
||||
var totalItems = items.Count;
|
||||
var numComplete = 0;
|
||||
@@ -239,27 +252,22 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
|
||||
private async Task RefreshArtists(MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
||||
{
|
||||
var artists = AllArtists.Select(i =>
|
||||
var all = AllArtists;
|
||||
foreach (var i in all)
|
||||
{
|
||||
// This should not be necessary but we're seeing some cases of it
|
||||
if (string.IsNullOrWhiteSpace(i))
|
||||
{
|
||||
return null;
|
||||
continue;
|
||||
}
|
||||
|
||||
var artist = LibraryManager.GetArtist(i);
|
||||
|
||||
if (!artist.IsAccessedByName)
|
||||
{
|
||||
return null;
|
||||
continue;
|
||||
}
|
||||
|
||||
return artist;
|
||||
|
||||
}).Where(i => i != null).ToList();
|
||||
|
||||
foreach (var artist in artists)
|
||||
{
|
||||
await artist.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,18 +214,19 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
{
|
||||
var items = GetRecursiveChildren();
|
||||
|
||||
var songs = items.OfType<Audio>().ToList();
|
||||
|
||||
var others = items.Except(songs).ToList();
|
||||
|
||||
var totalItems = songs.Count + others.Count;
|
||||
var totalItems = items.Count;
|
||||
var numComplete = 0;
|
||||
|
||||
var childUpdateType = ItemUpdateType.None;
|
||||
|
||||
// Refresh songs
|
||||
foreach (var item in songs)
|
||||
foreach (var item in items)
|
||||
{
|
||||
if (!(item is Audio))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
var updateType = await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||
@@ -248,8 +249,13 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
await RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
// Refresh all non-songs
|
||||
foreach (var item in others)
|
||||
foreach (var item in items)
|
||||
{
|
||||
if (item is Audio)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
var updateType = await item.RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Controller.Extensions;
|
||||
|
||||
Reference in New Issue
Block a user