aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Controller/Providers/BaseItemXmlParser.cs1
-rw-r--r--MediaBrowser.Controller/Providers/BaseMetadataProvider.cs10
-rw-r--r--MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs5
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs28
-rw-r--r--MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs32
-rw-r--r--MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs29
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs18
-rw-r--r--MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs54
-rw-r--r--MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs2
13 files changed, 91 insertions, 96 deletions
diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
index d5df769a9..7e266a928 100644
--- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
+++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
@@ -54,7 +54,6 @@ namespace MediaBrowser.Controller.Providers
CheckCharacters = false,
IgnoreProcessingInstructions = true,
IgnoreComments = true,
- IgnoreWhitespace = true,
ValidationType = ValidationType.None
};
diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
index b69ece418..dd03c88de 100644
--- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
@@ -31,6 +31,12 @@ namespace MediaBrowser.Controller.Providers
/// </summary>
protected readonly Guid Id;
+ /// <summary>
+ /// The true task result
+ /// </summary>
+ protected static readonly Task<bool> TrueTaskResult = Task.FromResult(true);
+ protected static readonly Task<bool> FalseTaskResult = Task.FromResult(false);
+
protected static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(5, 5);
/// <summary>
@@ -207,7 +213,7 @@ namespace MediaBrowser.Controller.Providers
return true;
}
- if (RefreshOnVersionChange && !string.Equals(ProviderVersion, providerInfo.ProviderVersion))
+ if (RefreshOnVersionChange && !String.Equals(ProviderVersion, providerInfo.ProviderVersion))
{
return true;
}
@@ -223,7 +229,7 @@ namespace MediaBrowser.Controller.Providers
/// <returns><c>true</c> if [has file system stamp changed] [the specified item]; otherwise, <c>false</c>.</returns>
protected bool HasFileSystemStampChanged(BaseItem item, BaseProviderInfo providerInfo)
{
- return !string.Equals(GetCurrentFileSystemStamp(item), providerInfo.FileSystemStamp);
+ return !String.Equals(GetCurrentFileSystemStamp(item), providerInfo.FileSystemStamp);
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
index 465cfec92..f11ba8f97 100644
--- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
+++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
@@ -53,11 +53,6 @@ namespace MediaBrowser.Controller.Providers
}
/// <summary>
- /// The true task result
- /// </summary>
- protected static readonly Task<bool> TrueTaskResult = Task.FromResult(true);
-
- /// <summary>
/// Fetches metadata and returns true or false indicating if any work that requires persistence was done
/// </summary>
/// <param name="item">The item.</param>
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
index b81e0c51d..4529e4890 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs
@@ -81,26 +81,22 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <returns>Task{System.Boolean}.</returns>
public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken)
{
- // Since we don't have anything truly async, and since deserializing can be expensive, create a task to force parallelism
- return Task.Run(() =>
+ cancellationToken.ThrowIfCancellationRequested();
+
+ var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LOCAL_META_FILE_NAME));
+ if (entry.HasValue)
{
- cancellationToken.ThrowIfCancellationRequested();
-
- var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LOCAL_META_FILE_NAME));
- if (entry.HasValue)
- {
- // read in our saved meta and pass to processing function
- var movieData = JsonSerializer.DeserializeFromFile<CompleteMovieData>(entry.Value.Path);
+ // read in our saved meta and pass to processing function
+ var movieData = JsonSerializer.DeserializeFromFile<CompleteMovieData>(entry.Value.Path);
- cancellationToken.ThrowIfCancellationRequested();
+ cancellationToken.ThrowIfCancellationRequested();
- ProcessMainInfo(item, movieData);
+ ProcessMainInfo(item, movieData);
- SetLastRefreshed(item, DateTime.UtcNow);
- return true;
- }
- return false;
- });
+ SetLastRefreshed(item, DateTime.UtcNow);
+ return TrueTaskResult;
+ }
+ return FalseTaskResult;
}
}
}
diff --git a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
index e89f1a044..1860f16c2 100644
--- a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs
@@ -92,28 +92,24 @@ namespace MediaBrowser.Controller.Providers.Movies
/// <returns>Task{System.Boolean}.</returns>
public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken)
{
- return Task.Run(() =>
- {
- cancellationToken.ThrowIfCancellationRequested();
+ cancellationToken.ThrowIfCancellationRequested();
- try
- {
- var personInfo = JsonSerializer.DeserializeFromFile<PersonResult>(Path.Combine(item.MetaLocation, MetaFileName));
+ try
+ {
+ var personInfo = JsonSerializer.DeserializeFromFile<PersonResult>(Path.Combine(item.MetaLocation, MetaFileName));
- cancellationToken.ThrowIfCancellationRequested();
-
- ProcessInfo((Person)item, personInfo);
+ cancellationToken.ThrowIfCancellationRequested();
- SetLastRefreshed(item, DateTime.UtcNow);
- return true;
- }
- catch (FileNotFoundException)
- {
- // This is okay - just means we force refreshed and there isn't a json file
- return false;
- }
+ ProcessInfo((Person)item, personInfo);
- });
+ SetLastRefreshed(item, DateTime.UtcNow);
+ return TrueTaskResult;
+ }
+ catch (FileNotFoundException)
+ {
+ // This is okay - just means we force refreshed and there isn't a json file
+ return FalseTaskResult;
+ }
}
}
}
diff --git a/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs b/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs
index 6ff6a5182..ce96cd107 100644
--- a/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs
+++ b/MediaBrowser.Controller/Providers/Music/MusicArtistProviderFromJson.cs
@@ -32,27 +32,24 @@ namespace MediaBrowser.Controller.Providers.Music
public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken)
{
- return Task.Run(() =>
- {
- cancellationToken.ThrowIfCancellationRequested();
+ cancellationToken.ThrowIfCancellationRequested();
- var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LastfmHelper.LocalArtistMetaFileName));
- if (entry.HasValue)
- {
- // read in our saved meta and pass to processing function
- var data = JsonSerializer.DeserializeFromFile<LastfmArtist>(entry.Value.Path);
+ var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LastfmHelper.LocalArtistMetaFileName));
+ if (entry.HasValue)
+ {
+ // read in our saved meta and pass to processing function
+ var data = JsonSerializer.DeserializeFromFile<LastfmArtist>(entry.Value.Path);
- cancellationToken.ThrowIfCancellationRequested();
+ cancellationToken.ThrowIfCancellationRequested();
- LastfmHelper.ProcessArtistData(item, data);
+ LastfmHelper.ProcessArtistData(item, data);
- item.SetProviderId(MetadataProviders.Musicbrainz, data.mbid);
+ item.SetProviderId(MetadataProviders.Musicbrainz, data.mbid);
- SetLastRefreshed(item, DateTime.UtcNow);
- return true;
- }
- return false;
- });
+ SetLastRefreshed(item, DateTime.UtcNow);
+ return TrueTaskResult;
+ }
+ return FalseTaskResult;
}
public override MetadataProviderPriority Priority
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 6436e7716..eccaf2da4 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -574,7 +574,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <summary>
/// The images by name item cache
/// </summary>
- private readonly ConcurrentDictionary<string, object> _imagesByNameItemCache = new ConcurrentDictionary<string, object>(StringComparer.OrdinalIgnoreCase);
+ private readonly ConcurrentDictionary<string, BaseItem> _imagesByNameItemCache = new ConcurrentDictionary<string, BaseItem>(StringComparer.OrdinalIgnoreCase);
/// <summary>
/// Generically retrieves an IBN item
@@ -588,7 +588,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <returns>Task{``0}.</returns>
/// <exception cref="System.ArgumentNullException">
/// </exception>
- private Task<T> GetImagesByNameItem<T>(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true, bool forceCreation = false)
+ private async Task<T> GetImagesByNameItem<T>(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true, bool forceCreation = false)
where T : BaseItem, new()
{
if (string.IsNullOrEmpty(path))
@@ -603,18 +603,16 @@ namespace MediaBrowser.Server.Implementations.Library
var key = Path.Combine(path, FileSystem.GetValidFilename(name));
- if (forceCreation)
- {
- var task = CreateImagesByNameItem<T>(path, name, cancellationToken, allowSlowProviders);
+ BaseItem obj;
- _imagesByNameItemCache.AddOrUpdate(key, task, (keyName, oldValue) => task);
+ if (forceCreation || !_imagesByNameItemCache.TryGetValue(key, out obj))
+ {
+ obj = await CreateImagesByNameItem<T>(path, name, cancellationToken, allowSlowProviders).ConfigureAwait(false);
- return task;
+ _imagesByNameItemCache.AddOrUpdate(key, obj, (keyName, oldValue) => obj);
}
- var obj = _imagesByNameItemCache.GetOrAdd(key, keyname => CreateImagesByNameItem<T>(path, name, cancellationToken, allowSlowProviders));
-
- return obj as Task<T>;
+ return obj as T;
}
/// <summary>
diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs
index a995f1a47..a5c2f28b7 100644
--- a/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs
+++ b/MediaBrowser.Server.Implementations/ScheduledTasks/VideoImagesTask.cs
@@ -3,6 +3,7 @@ using MediaBrowser.Common.MediaInfo;
using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers.MediaInfo;
using MediaBrowser.Model.Entities;
@@ -95,33 +96,40 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks
/// <returns>Task.</returns>
public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
{
- var items = _libraryManager.RootFolder.RecursiveChildren
- .OfType<Video>()
- .Where(i =>
- {
- if (!string.IsNullOrEmpty(i.PrimaryImagePath))
- {
- return false;
- }
+ var allItems = _libraryManager.RootFolder.RecursiveChildren.ToList();
- if (i.LocationType != LocationType.FileSystem)
- {
- return false;
- }
+ var localTrailers = allItems.SelectMany(i => i.LocalTrailers);
- if (i.VideoType == VideoType.HdDvd)
- {
- return false;
- }
+ var videos = allItems.OfType<Video>().ToList();
- if (i.VideoType == VideoType.Iso && !i.IsoType.HasValue)
- {
- return false;
- }
+ var items = videos;
+ items.AddRange(localTrailers);
+ items.AddRange(videos.OfType<Movie>().SelectMany(i => i.SpecialFeatures).ToList());
+
+ items = items.Where(i =>
+ {
+ if (!string.IsNullOrEmpty(i.PrimaryImagePath))
+ {
+ return false;
+ }
+
+ if (i.LocationType != LocationType.FileSystem)
+ {
+ return false;
+ }
+
+ if (i.VideoType == VideoType.HdDvd)
+ {
+ return false;
+ }
+
+ if (i.VideoType == VideoType.Iso && !i.IsoType.HasValue)
+ {
+ return false;
+ }
- return i.MediaStreams != null && i.MediaStreams.Any(m => m.Type == MediaStreamType.Video);
- })
- .ToList();
+ return i.MediaStreams != null && i.MediaStreams.Any(m => m.Type == MediaStreamType.Video);
+ }).ToList();
progress.Report(0);
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs
index fbb0e4f8c..64a48c54d 100644
--- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs
@@ -86,7 +86,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
var dbFile = Path.Combine(_appPaths.DataPath, "displaypreferences.db");
- await ConnectToDB(dbFile).ConfigureAwait(false);
+ await ConnectToDb(dbFile).ConfigureAwait(false);
string[] queries = {
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs
index 3403cf79f..a3d184888 100644
--- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs
@@ -82,7 +82,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
var dbFile = Path.Combine(_appPaths.DataPath, "library.db");
- await ConnectToDB(dbFile).ConfigureAwait(false);
+ await ConnectToDb(dbFile).ConfigureAwait(false);
string[] queries = {
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs
index baeb0b1a7..6824442f1 100644
--- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs
@@ -76,7 +76,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
/// <param name="dbPath">The db path.</param>
/// <returns>Task{System.Boolean}.</returns>
/// <exception cref="System.ArgumentNullException">dbPath</exception>
- protected async Task ConnectToDB(string dbPath)
+ protected async Task ConnectToDb(string dbPath)
{
if (string.IsNullOrEmpty(dbPath))
{
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs
index 8124733e5..6a7207d37 100644
--- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs
@@ -86,7 +86,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
var dbFile = Path.Combine(_appPaths.DataPath, "userdata.db");
- await ConnectToDB(dbFile).ConfigureAwait(false);
+ await ConnectToDb(dbFile).ConfigureAwait(false);
string[] queries = {
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs
index 75bb42774..b95a54156 100644
--- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs
@@ -88,7 +88,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
var dbFile = Path.Combine(_appPaths.DataPath, "users.db");
- await ConnectToDB(dbFile).ConfigureAwait(false);
+ await ConnectToDb(dbFile).ConfigureAwait(false);
string[] queries = {