mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-07-15 10:43:30 +01:00
Merge remote-tracking branch 'jellyfinorigin/master' into feature/pgsql_provider
This commit is contained in:
@@ -755,14 +755,7 @@ namespace Emby.Server.Implementations.Library
|
||||
|
||||
if (folder.Id.IsEmpty())
|
||||
{
|
||||
if (string.IsNullOrEmpty(folder.Path))
|
||||
{
|
||||
folder.Id = GetNewItemId(folder.GetType().Name, folder.GetType());
|
||||
}
|
||||
else
|
||||
{
|
||||
folder.Id = GetNewItemId(folder.Path, folder.GetType());
|
||||
}
|
||||
folder.Id = GetNewItemId(folder.Path, folder.GetType());
|
||||
}
|
||||
|
||||
var dbItem = GetItemById(folder.Id) as BasePluginFolder;
|
||||
@@ -1057,9 +1050,17 @@ namespace Emby.Server.Implementations.Library
|
||||
cancellationToken: cancellationToken).ConfigureAwait(false);
|
||||
|
||||
// Quickly scan CollectionFolders for changes
|
||||
foreach (var folder in GetUserRootFolder().Children.OfType<Folder>())
|
||||
foreach (var child in GetUserRootFolder().Children.OfType<Folder>())
|
||||
{
|
||||
await folder.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||
// If the user has somehow deleted the collection directory, remove the metadata from the database.
|
||||
if (child is CollectionFolder collectionFolder && !Directory.Exists(collectionFolder.Path))
|
||||
{
|
||||
_itemRepository.DeleteItem(collectionFolder.Id);
|
||||
}
|
||||
else
|
||||
{
|
||||
await child.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace Emby.Server.Implementations.Library
|
||||
public class MediaSourceManager : IMediaSourceManager, IDisposable
|
||||
{
|
||||
// Do not use a pipe here because Roku http requests to the server will fail, without any explicit error message.
|
||||
private const char LiveStreamIdDelimeter = '_';
|
||||
private const char LiveStreamIdDelimiter = '_';
|
||||
|
||||
private readonly IServerApplicationHost _appHost;
|
||||
private readonly IItemRepository _itemRepo;
|
||||
@@ -314,7 +314,7 @@ namespace Emby.Server.Implementations.Library
|
||||
|
||||
private static void SetKeyProperties(IMediaSourceProvider provider, MediaSourceInfo mediaSource)
|
||||
{
|
||||
var prefix = provider.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture) + LiveStreamIdDelimeter;
|
||||
var prefix = provider.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture) + LiveStreamIdDelimiter;
|
||||
|
||||
if (!string.IsNullOrEmpty(mediaSource.OpenToken) && !mediaSource.OpenToken.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
@@ -867,11 +867,11 @@ namespace Emby.Server.Implementations.Library
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrEmpty(key);
|
||||
|
||||
var keys = key.Split(LiveStreamIdDelimeter, 2);
|
||||
var keys = key.Split(LiveStreamIdDelimiter, 2);
|
||||
|
||||
var provider = _providers.FirstOrDefault(i => string.Equals(i.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture), keys[0], StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
var splitIndex = key.IndexOf(LiveStreamIdDelimeter, StringComparison.Ordinal);
|
||||
var splitIndex = key.IndexOf(LiveStreamIdDelimiter, StringComparison.Ordinal);
|
||||
var keyId = key.Substring(splitIndex + 1);
|
||||
|
||||
return (provider, keyId);
|
||||
|
||||
@@ -309,39 +309,40 @@ namespace Emby.Server.Implementations.Library
|
||||
}
|
||||
}
|
||||
|
||||
var mediaTypes = new List<MediaType>();
|
||||
MediaType[] mediaTypes = [];
|
||||
|
||||
if (includeItemTypes.Length == 0)
|
||||
{
|
||||
HashSet<MediaType> tmpMediaTypes = [];
|
||||
foreach (var parent in parents.OfType<ICollectionFolder>())
|
||||
{
|
||||
switch (parent.CollectionType)
|
||||
{
|
||||
case CollectionType.books:
|
||||
mediaTypes.Add(MediaType.Book);
|
||||
mediaTypes.Add(MediaType.Audio);
|
||||
tmpMediaTypes.Add(MediaType.Book);
|
||||
tmpMediaTypes.Add(MediaType.Audio);
|
||||
break;
|
||||
case CollectionType.music:
|
||||
mediaTypes.Add(MediaType.Audio);
|
||||
tmpMediaTypes.Add(MediaType.Audio);
|
||||
break;
|
||||
case CollectionType.photos:
|
||||
mediaTypes.Add(MediaType.Photo);
|
||||
mediaTypes.Add(MediaType.Video);
|
||||
tmpMediaTypes.Add(MediaType.Photo);
|
||||
tmpMediaTypes.Add(MediaType.Video);
|
||||
break;
|
||||
case CollectionType.homevideos:
|
||||
mediaTypes.Add(MediaType.Photo);
|
||||
mediaTypes.Add(MediaType.Video);
|
||||
tmpMediaTypes.Add(MediaType.Photo);
|
||||
tmpMediaTypes.Add(MediaType.Video);
|
||||
break;
|
||||
default:
|
||||
mediaTypes.Add(MediaType.Video);
|
||||
tmpMediaTypes.Add(MediaType.Video);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mediaTypes = mediaTypes.Distinct().ToList();
|
||||
mediaTypes = tmpMediaTypes.ToArray();
|
||||
}
|
||||
|
||||
var excludeItemTypes = includeItemTypes.Length == 0 && mediaTypes.Count == 0
|
||||
var excludeItemTypes = includeItemTypes.Length == 0 && mediaTypes.Length == 0
|
||||
? new[]
|
||||
{
|
||||
BaseItemKind.Person,
|
||||
@@ -367,14 +368,9 @@ namespace Emby.Server.Implementations.Library
|
||||
Limit = limit * 5,
|
||||
IsPlayed = isPlayed,
|
||||
DtoOptions = options,
|
||||
MediaTypes = mediaTypes.ToArray()
|
||||
MediaTypes = mediaTypes
|
||||
};
|
||||
|
||||
if (parents.Count == 0)
|
||||
{
|
||||
return _libraryManager.GetItemList(query, false);
|
||||
}
|
||||
|
||||
return _libraryManager.GetItemList(query, parents);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user