aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs2
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs24
-rw-r--r--MediaBrowser.Providers/Savers/ArtistXmlSaver.cs1
-rw-r--r--MediaBrowser.Providers/TV/MissingEpisodeProvider.cs18
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>