mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-21 17:44:43 +01:00
added movie, series, folder and episode xml saving support
This commit is contained in:
@@ -73,12 +73,6 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <value>The comparers.</value>
|
||||
private IEnumerable<IBaseItemComparer> Comparers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the savers.
|
||||
/// </summary>
|
||||
/// <value>The savers.</value>
|
||||
private IEnumerable<IMetadataSaver> Savers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the active item repository
|
||||
/// </summary>
|
||||
@@ -197,15 +191,13 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <param name="itemComparers">The item comparers.</param>
|
||||
/// <param name="prescanTasks">The prescan tasks.</param>
|
||||
/// <param name="postscanTasks">The postscan tasks.</param>
|
||||
/// <param name="savers">The savers.</param>
|
||||
public void AddParts(IEnumerable<IResolverIgnoreRule> rules,
|
||||
IEnumerable<IVirtualFolderCreator> pluginFolders,
|
||||
IEnumerable<IItemResolver> resolvers,
|
||||
IEnumerable<IIntroProvider> introProviders,
|
||||
IEnumerable<IBaseItemComparer> itemComparers,
|
||||
IEnumerable<ILibraryPrescanTask> prescanTasks,
|
||||
IEnumerable<ILibraryPostScanTask> postscanTasks,
|
||||
IEnumerable<IMetadataSaver> savers)
|
||||
IEnumerable<ILibraryPostScanTask> postscanTasks)
|
||||
{
|
||||
EntityResolutionIgnoreRules = rules;
|
||||
PluginFolderCreators = pluginFolders;
|
||||
@@ -214,7 +206,6 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
Comparers = itemComparers;
|
||||
PrescanTasks = prescanTasks;
|
||||
PostscanTasks = postscanTasks;
|
||||
Savers = savers;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -589,7 +580,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <returns>UserRootFolder.</returns>
|
||||
public UserRootFolder GetUserRootFolder(string userRootPath)
|
||||
{
|
||||
return _userRootFolders.GetOrAdd(userRootPath, key => RetrieveItem(userRootPath.GetMBId(typeof(UserRootFolder)), typeof(UserRootFolder)) as UserRootFolder ??
|
||||
return _userRootFolders.GetOrAdd(userRootPath, key => RetrieveItem(userRootPath.GetMBId(typeof(UserRootFolder)), typeof(UserRootFolder)) as UserRootFolder ??
|
||||
(UserRootFolder)ResolvePath(new DirectoryInfo(userRootPath)));
|
||||
}
|
||||
|
||||
@@ -649,7 +640,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
return GetItemByName<MusicGenre>(ConfigurationManager.ApplicationPaths.MusicGenrePath, name, CancellationToken.None, allowSlowProviders);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Genre
|
||||
/// </summary>
|
||||
@@ -1001,7 +992,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
await RunPrescanTasks(progress, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
progress.Report(15);
|
||||
|
||||
|
||||
var innerProgress = new ActionableProgress<double>();
|
||||
|
||||
innerProgress.RegisterAction(pct => progress.Report(15 + pct * .65));
|
||||
@@ -1010,7 +1001,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
await RootFolder.ValidateChildren(innerProgress, cancellationToken, recursive: true).ConfigureAwait(false);
|
||||
|
||||
progress.Report(80);
|
||||
|
||||
|
||||
// Run post-scan tasks
|
||||
await RunPostScanTasks(progress, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
@@ -1044,7 +1035,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
progress.Report(2 + percent * .13);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
await i.Run(innerProgress, cancellationToken);
|
||||
@@ -1301,11 +1292,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
foreach (var item in list)
|
||||
{
|
||||
UpdateItemInLibraryCache(item);
|
||||
}
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
await OnItemUpdated(item, CancellationToken.None).ConfigureAwait(false);
|
||||
OnItemUpdated(item);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1354,25 +1341,9 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// Called when [item updated].
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task.</returns>
|
||||
private async Task OnItemUpdated(BaseItem item, CancellationToken cancellationToken)
|
||||
private void OnItemUpdated(BaseItem item)
|
||||
{
|
||||
if (ConfigurationManager.Configuration.SaveLocalMeta && item.LocationType == LocationType.FileSystem)
|
||||
{
|
||||
foreach (var saver in Savers.Where(i => i.Supports(item)))
|
||||
{
|
||||
try
|
||||
{
|
||||
await saver.Save(item, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("Error in metadata saver", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ItemUpdated != null)
|
||||
{
|
||||
try
|
||||
|
||||
@@ -3,7 +3,9 @@ using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
@@ -58,6 +60,8 @@ namespace MediaBrowser.Server.Implementations.Providers
|
||||
/// <value>The metadata providers enumerable.</value>
|
||||
private BaseMetadataProvider[] MetadataProviders { get; set; }
|
||||
|
||||
private IEnumerable<IMetadataSaver> _savers;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ProviderManager" /> class.
|
||||
/// </summary>
|
||||
@@ -65,7 +69,8 @@ namespace MediaBrowser.Server.Implementations.Providers
|
||||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
/// <param name="directoryWatchers">The directory watchers.</param>
|
||||
/// <param name="logManager">The log manager.</param>
|
||||
public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, IDirectoryWatchers directoryWatchers, ILogManager logManager)
|
||||
/// <param name="libraryManager">The library manager.</param>
|
||||
public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, IDirectoryWatchers directoryWatchers, ILogManager logManager, ILibraryManager libraryManager)
|
||||
{
|
||||
_logger = logManager.GetLogger("ProviderManager");
|
||||
_httpClient = httpClient;
|
||||
@@ -74,6 +79,37 @@ namespace MediaBrowser.Server.Implementations.Providers
|
||||
_remoteImageCache = new FileSystemRepository(configurationManager.ApplicationPaths.DownloadedImagesDataPath);
|
||||
|
||||
configurationManager.ConfigurationUpdated += configurationManager_ConfigurationUpdated;
|
||||
|
||||
libraryManager.ItemUpdated += libraryManager_ItemUpdated;
|
||||
}
|
||||
|
||||
void libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e)
|
||||
{
|
||||
var item = e.Item;
|
||||
|
||||
if (ConfigurationManager.Configuration.SaveLocalMeta && item.LocationType == LocationType.FileSystem)
|
||||
{
|
||||
foreach (var saver in _savers.Where(i => i.Supports(item)))
|
||||
{
|
||||
var path = saver.GetSavePath(item);
|
||||
|
||||
_directoryWatchers.TemporarilyIgnore(path);
|
||||
|
||||
try
|
||||
{
|
||||
saver.Save(item, CancellationToken.None);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("Error in metadata saver", ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_directoryWatchers.RemoveTempIgnore(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -91,9 +127,12 @@ namespace MediaBrowser.Server.Implementations.Providers
|
||||
/// Adds the metadata providers.
|
||||
/// </summary>
|
||||
/// <param name="providers">The providers.</param>
|
||||
public void AddMetadataProviders(IEnumerable<BaseMetadataProvider> providers)
|
||||
/// <param name="savers">The savers.</param>
|
||||
public void AddParts(IEnumerable<BaseMetadataProvider> providers,
|
||||
IEnumerable<IMetadataSaver> savers)
|
||||
{
|
||||
MetadataProviders = providers.OrderBy(e => e.Priority).ToArray();
|
||||
_savers = savers;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user