mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-23 02:24:44 +01:00
resolve mixed folder detection
This commit is contained in:
@@ -53,16 +53,6 @@ namespace MediaBrowser.Controller.Entities
|
||||
public static string ThemeSongFilename = "theme";
|
||||
public static string ThemeVideosFolderName = "backdrops";
|
||||
|
||||
public static List<KeyValuePair<string, ExtraType>> ExtraSuffixes = new List<KeyValuePair<string, ExtraType>>
|
||||
{
|
||||
new KeyValuePair<string,ExtraType>("-trailer", ExtraType.Trailer),
|
||||
new KeyValuePair<string,ExtraType>("-deleted", ExtraType.DeletedScene),
|
||||
new KeyValuePair<string,ExtraType>("-behindthescenes", ExtraType.BehindTheScenes),
|
||||
new KeyValuePair<string,ExtraType>("-interview", ExtraType.Interview),
|
||||
new KeyValuePair<string,ExtraType>("-scene", ExtraType.Scene),
|
||||
new KeyValuePair<string,ExtraType>("-sample", ExtraType.Sample)
|
||||
};
|
||||
|
||||
public List<ItemImageInfo> ImageInfos { get; set; }
|
||||
|
||||
[IgnoreDataMember]
|
||||
@@ -618,7 +608,9 @@ namespace MediaBrowser.Controller.Entities
|
||||
.Where(i => string.Equals(FileSystem.GetFileNameWithoutExtension(i), ThemeSongFilename, StringComparison.OrdinalIgnoreCase))
|
||||
);
|
||||
|
||||
return LibraryManager.ResolvePaths<Audio.Audio>(files, directoryService, null).Select(audio =>
|
||||
return LibraryManager.ResolvePaths(files, directoryService, null)
|
||||
.OfType<Audio.Audio>()
|
||||
.Select(audio =>
|
||||
{
|
||||
// Try to retrieve it from the db. If we don't find it, use the resolved version
|
||||
var dbItem = LibraryManager.GetItemById(audio.Id) as Audio.Audio;
|
||||
@@ -628,10 +620,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
audio = dbItem;
|
||||
}
|
||||
|
||||
if (audio != null)
|
||||
{
|
||||
audio.ExtraType = ExtraType.ThemeSong;
|
||||
}
|
||||
audio.ExtraType = ExtraType.ThemeSong;
|
||||
|
||||
return audio;
|
||||
|
||||
@@ -649,7 +638,9 @@ namespace MediaBrowser.Controller.Entities
|
||||
.Where(i => string.Equals(i.Name, ThemeVideosFolderName, StringComparison.OrdinalIgnoreCase))
|
||||
.SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly));
|
||||
|
||||
return LibraryManager.ResolvePaths<Video>(files, directoryService, null).Select(item =>
|
||||
return LibraryManager.ResolvePaths(files, directoryService, null)
|
||||
.OfType<Video>()
|
||||
.Select(item =>
|
||||
{
|
||||
// Try to retrieve it from the db. If we don't find it, use the resolved version
|
||||
var dbItem = LibraryManager.GetItemById(item.Id) as Video;
|
||||
@@ -659,10 +650,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
item = dbItem;
|
||||
}
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
item.ExtraType = ExtraType.ThemeVideo;
|
||||
}
|
||||
item.ExtraType = ExtraType.ThemeVideo;
|
||||
|
||||
return item;
|
||||
|
||||
|
||||
@@ -696,7 +696,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
{
|
||||
var collectionType = LibraryManager.FindCollectionType(this);
|
||||
|
||||
return LibraryManager.ResolvePaths<BaseItem>(GetFileSystemChildren(directoryService), directoryService, this, collectionType);
|
||||
return LibraryManager.ResolvePaths(GetFileSystemChildren(directoryService), directoryService, this, collectionType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -741,6 +741,12 @@ namespace MediaBrowser.Controller.Entities
|
||||
|
||||
private BaseItem RetrieveChild(BaseItem child)
|
||||
{
|
||||
if (child.Id == Guid.Empty)
|
||||
{
|
||||
Logger.Error("Item found with empty Id: " + (child.Path ?? child.Name));
|
||||
return null;
|
||||
}
|
||||
|
||||
var item = LibraryManager.GetMemoryItemById(child.Id);
|
||||
|
||||
if (item != null)
|
||||
|
||||
@@ -24,7 +24,9 @@ namespace MediaBrowser.Controller.Library
|
||||
/// <param name="parent">The parent.</param>
|
||||
/// <param name="collectionType">Type of the collection.</param>
|
||||
/// <returns>BaseItem.</returns>
|
||||
BaseItem ResolvePath(FileSystemInfo fileInfo, Folder parent = null, string collectionType = null);
|
||||
BaseItem ResolvePath(FileSystemInfo fileInfo,
|
||||
Folder parent = null,
|
||||
string collectionType = null);
|
||||
|
||||
/// <summary>
|
||||
/// Resolves a set of files into a list of BaseItem
|
||||
@@ -35,8 +37,10 @@ namespace MediaBrowser.Controller.Library
|
||||
/// <param name="parent">The parent.</param>
|
||||
/// <param name="collectionType">Type of the collection.</param>
|
||||
/// <returns>List{``0}.</returns>
|
||||
List<T> ResolvePaths<T>(IEnumerable<FileSystemInfo> files, IDirectoryService directoryService, Folder parent, string collectionType = null)
|
||||
where T : BaseItem;
|
||||
IEnumerable<BaseItem> ResolvePaths(IEnumerable<FileSystemInfo> files,
|
||||
IDirectoryService directoryService,
|
||||
Folder parent, string
|
||||
collectionType = null);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the root folder.
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace MediaBrowser.Controller.Resolvers
|
||||
{
|
||||
@@ -20,4 +23,24 @@ namespace MediaBrowser.Controller.Resolvers
|
||||
/// <value>The priority.</value>
|
||||
ResolverPriority Priority { get; }
|
||||
}
|
||||
|
||||
public interface IMultiItemResolver
|
||||
{
|
||||
MultiItemResolverResult ResolveMultiple(Folder parent,
|
||||
List<FileSystemInfo> files,
|
||||
string collectionType,
|
||||
IDirectoryService directoryService);
|
||||
}
|
||||
|
||||
public class MultiItemResolverResult
|
||||
{
|
||||
public List<BaseItem> Items { get; set; }
|
||||
public List<FileSystemInfo> ExtraFiles { get; set; }
|
||||
|
||||
public MultiItemResolverResult()
|
||||
{
|
||||
Items = new List<BaseItem>();
|
||||
ExtraFiles = new List<FileSystemInfo>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user