|
|
|
@ -710,10 +710,10 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Creates the root media folder
|
|
|
|
|
/// Creates the root media folder.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>AggregateFolder.</returns>
|
|
|
|
|
/// <exception cref="InvalidOperationException">Cannot create the root folder until plugins have loaded</exception>
|
|
|
|
|
/// <exception cref="InvalidOperationException">Cannot create the root folder until plugins have loaded.</exception>
|
|
|
|
|
public AggregateFolder CreateRootFolder()
|
|
|
|
|
{
|
|
|
|
|
var rootFolderPath = ConfigurationManager.ApplicationPaths.RootFolderPath;
|
|
|
|
@ -824,7 +824,6 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
{
|
|
|
|
|
// If this returns multiple items it could be tricky figuring out which one is correct.
|
|
|
|
|
// In most cases, the newest one will be and the others obsolete but not yet cleaned up
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(path))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException(nameof(path));
|
|
|
|
@ -844,7 +843,7 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a Person
|
|
|
|
|
/// Gets the person.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name">The name.</param>
|
|
|
|
|
/// <returns>Task{Person}.</returns>
|
|
|
|
@ -854,7 +853,7 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a Studio
|
|
|
|
|
/// Gets the studio.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name">The name.</param>
|
|
|
|
|
/// <returns>Task{Studio}.</returns>
|
|
|
|
@ -879,7 +878,7 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a Genre
|
|
|
|
|
/// Gets the genre.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name">The name.</param>
|
|
|
|
|
/// <returns>Task{Genre}.</returns>
|
|
|
|
@ -889,7 +888,7 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the genre.
|
|
|
|
|
/// Gets the music genre.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name">The name.</param>
|
|
|
|
|
/// <returns>Task{MusicGenre}.</returns>
|
|
|
|
@ -899,7 +898,7 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a Year
|
|
|
|
|
/// Gets the year.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="value">The value.</param>
|
|
|
|
|
/// <returns>Task{Year}.</returns>
|
|
|
|
@ -1076,9 +1075,9 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
|
|
|
|
|
var innerProgress = new ActionableProgress<double>();
|
|
|
|
|
|
|
|
|
|
innerProgress.RegisterAction(pct => progress.Report(pct * .96));
|
|
|
|
|
innerProgress.RegisterAction(pct => progress.Report(pct * pct * 0.96));
|
|
|
|
|
|
|
|
|
|
// Now validate the entire media library
|
|
|
|
|
// validate the entire media library
|
|
|
|
|
await RootFolder.ValidateChildren(innerProgress, cancellationToken, new MetadataRefreshOptions(new DirectoryService(_fileSystem)), recursive: true).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
progress.Report(96);
|
|
|
|
@ -1087,7 +1086,6 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
|
|
|
|
|
innerProgress.RegisterAction(pct => progress.Report(96 + (pct * .04)));
|
|
|
|
|
|
|
|
|
|
// Run post-scan tasks
|
|
|
|
|
await RunPostScanTasks(innerProgress, cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
progress.Report(100);
|
|
|
|
@ -1138,7 +1136,7 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
_logger.LogError(ex, "Error running postscan task");
|
|
|
|
|
_logger.LogError(ex, "Error running post-scan task");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
numComplete++;
|
|
|
|
|