diff options
Diffstat (limited to 'MediaBrowser.Providers')
| -rw-r--r-- | MediaBrowser.Providers/Manager/MetadataService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 24 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Savers/ArtistXmlSaver.cs | 1 | ||||
| -rw-r--r-- | MediaBrowser.Providers/TV/MissingEpisodeProvider.cs | 18 |
4 files changed, 38 insertions, 7 deletions
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 2b1bcb81b2..b2e23682b3 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -174,7 +174,7 @@ namespace MediaBrowser.Providers.Manager if (string.IsNullOrEmpty(item.Name) && !string.IsNullOrEmpty(item.Path)) { item.Name = Path.GetFileNameWithoutExtension(item.Path); - updateType = updateType | ItemUpdateType.MetadataEdit; + updateType = updateType | ItemUpdateType.MetadataDownload; } return updateType; diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 5f6702e745..414d7f064d 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -613,14 +613,30 @@ namespace MediaBrowser.Providers.Manager { if (!includeDisabled) { - if (!item.IsSaveLocalMetadataEnabled()) + if (options.DisabledMetadataSavers.Contains(saver.Name, StringComparer.OrdinalIgnoreCase)) { return false; } - - if (options.DisabledMetadataSavers.Contains(saver.Name, StringComparer.OrdinalIgnoreCase)) + + if (!item.IsSaveLocalMetadataEnabled()) { - return false; + if (updateType >= ItemUpdateType.MetadataEdit) + { + var fileSaver = saver as IMetadataFileSaver; + + // Manual edit occurred + // Even if save local is off, save locally anyway if the metadata file already exists + if (fileSaver == null || !File.Exists(fileSaver.GetSavePath(item))) + { + return false; + } + } + else + { + // Manual edit did not occur + // Since local metadata saving is disabled, consider it disabled + return false; + } } } diff --git a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs index 3e98e6225e..5f9c06d257 100644 --- a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.IO; using System.Text; diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs index c33b9d5496..171a5af5f4 100644 --- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs @@ -91,6 +91,8 @@ namespace MediaBrowser.Providers.TV .Where(i => i.Item1 != -1 && i.Item2 != -1) .ToList(); + var hasBadData = HasInvalidContent(group); + var anySeasonsRemoved = await RemoveObsoleteOrMissingSeasons(group, episodeLookup, cancellationToken) .ConfigureAwait(false); @@ -105,7 +107,7 @@ namespace MediaBrowser.Providers.TV hasNewSeasons = await AddDummySeasonFolders(series, cancellationToken).ConfigureAwait(false); } - if (_config.Configuration.EnableInternetProviders) + if (!hasBadData && _config.Configuration.EnableInternetProviders) { var seriesConfig = _config.Configuration.MetadataOptions.FirstOrDefault(i => string.Equals(i.ItemType, typeof(Series).Name, StringComparison.OrdinalIgnoreCase)); @@ -131,6 +133,20 @@ namespace MediaBrowser.Providers.TV } /// <summary> + /// Returns true if a series has any seasons or episodes without season or episode numbers + /// If this data is missing no virtual items will be added in order to prevent possible duplicates + /// </summary> + /// <param name="group"></param> + /// <returns></returns> + private bool HasInvalidContent(IEnumerable<Series> group) + { + var allItems = group.ToList().SelectMany(i => i.RecursiveChildren).ToList(); + + return allItems.OfType<Season>().Any(i => !i.IndexNumber.HasValue) || + allItems.OfType<Episode>().Any(i => !i.IndexNumber.HasValue || !i.ParentIndexNumber.HasValue); + } + + /// <summary> /// For series with episodes directly under the series folder, this adds dummy seasons to enable regular browsing and metadata /// </summary> /// <param name="series"></param> |
