Bläddra i källkod

Improve support for daily episodes

Luke Pulverenti 9 år sedan
förälder
incheckning
8a3e52bc09

+ 2 - 1
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -1779,7 +1779,8 @@ namespace MediaBrowser.Controller.Entities
                 ProviderIds = ProviderIds,
                 IndexNumber = IndexNumber,
                 ParentIndexNumber = ParentIndexNumber,
-                Year = ProductionYear
+                Year = ProductionYear,
+                PremiereDate = PremiereDate
             };
         }
 

+ 1 - 0
MediaBrowser.Controller/Providers/ItemLookupInfo.cs

@@ -33,6 +33,7 @@ namespace MediaBrowser.Controller.Providers
         public int? Year { get; set; }
         public int? IndexNumber { get; set; }
         public int? ParentIndexNumber { get; set; }
+		public DateTime? PremiereDate { get; set; }
 
         public ItemLookupInfo()
         {

+ 1 - 1
MediaBrowser.Providers/Folders/DefaultImageProvider.cs

@@ -170,4 +170,4 @@ namespace MediaBrowser.Providers.Folders
             return GetSupportedImages(item).Any(i => !item.HasImage(i));
         }
     }
-}
+}

+ 7 - 1
MediaBrowser.Providers/Manager/ItemImageProvider.cs

@@ -359,12 +359,13 @@ namespace MediaBrowser.Providers.Manager
         private void ClearImages(IHasImages item, ImageType type)
         {
             var deleted = false;
+            var deletedImages = new List<ItemImageInfo>();
 
             foreach (var image in item.GetImages(type).ToList())
             {
                 if (!image.IsLocalFile)
                 {
-                    // TODO: Need to get this image removed
+                    deletedImages.Add(image);
                     continue;
                 }
 
@@ -384,6 +385,11 @@ namespace MediaBrowser.Providers.Manager
                 }
             }
 
+            foreach (var image in deletedImages)
+            {
+                item.RemoveImage(image);
+            }
+
             if (deleted)
             {
                 item.ValidateImages(new DirectoryService(_logger, _fileSystem));

+ 1 - 1
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -97,7 +97,7 @@ namespace MediaBrowser.Providers.Manager
             var itemImageProvider = new ItemImageProvider(Logger, ProviderManager, ServerConfigurationManager, FileSystem);
             var localImagesFailed = false;
 
-            var allImageProviders = ((ProviderManager)ProviderManager).GetImageProviders(item).ToList();
+			var allImageProviders = ((ProviderManager)ProviderManager).GetImageProviders(item, refreshOptions).ToList();
 
             // Start by validating images
             try

+ 11 - 8
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -249,17 +249,17 @@ namespace MediaBrowser.Providers.Manager
             });
         }
 
-        public IEnumerable<IImageProvider> GetImageProviders(IHasImages item)
+		public IEnumerable<IImageProvider> GetImageProviders(IHasImages item, ImageRefreshOptions refreshOptions)
         {
-            return GetImageProviders(item, GetMetadataOptions(item), false);
+            return GetImageProviders(item, GetMetadataOptions(item), refreshOptions, false);
         }
 
-        private IEnumerable<IImageProvider> GetImageProviders(IHasImages item, MetadataOptions options, bool includeDisabled)
+		private IEnumerable<IImageProvider> GetImageProviders(IHasImages item, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled)
         {
             // Avoid implicitly captured closure
             var currentOptions = options;
 
-            return ImageProviders.Where(i => CanRefresh(i, item, options, includeDisabled))
+			return ImageProviders.Where(i => CanRefresh(i, item, options, refreshOptions, includeDisabled))
             .OrderBy(i =>
             {
                 // See if there's a user-defined order
@@ -315,7 +315,7 @@ namespace MediaBrowser.Providers.Manager
         {
             var options = GetMetadataOptions(item);
 
-            return GetImageProviders(item, options, includeDisabled).OfType<IRemoteImageProvider>();
+			return GetImageProviders(item, options, new ImageRefreshOptions(new DirectoryService(_fileSystem)), includeDisabled).OfType<IRemoteImageProvider>();
         }
 
         private bool CanRefresh(IMetadataProvider provider, IHasMetadata item, MetadataOptions options, bool includeDisabled, bool checkIsOwnedItem)
@@ -359,14 +359,17 @@ namespace MediaBrowser.Providers.Manager
             return true;
         }
 
-        private bool CanRefresh(IImageProvider provider, IHasImages item, MetadataOptions options, bool includeDisabled)
+		private bool CanRefresh(IImageProvider provider, IHasImages item, MetadataOptions options, ImageRefreshOptions refreshOptions, bool includeDisabled)
         {
             if (!includeDisabled)
             {
                 // If locked only allow local providers
                 if (item.IsLocked && !(provider is ILocalImageProvider))
                 {
-                    return false;
+					if (refreshOptions.ImageRefreshMode != ImageRefreshMode.FullRefresh) 
+					{
+						return false;
+					}
                 }
 
                 if (provider is IRemoteImageProvider || provider is IDynamicImageProvider)
@@ -502,7 +505,7 @@ namespace MediaBrowser.Providers.Manager
                 ItemType = typeof(T).Name
             };
 
-            var imageProviders = GetImageProviders(dummy, options, true).ToList();
+			var imageProviders = GetImageProviders(dummy, options, new ImageRefreshOptions(new DirectoryService(_fileSystem)), true).ToList();
 
             AddMetadataPlugins(summary.Plugins, dummy, options);
             AddImagePlugins(summary.Plugins, dummy, imageProviders);

+ 3 - 0
MediaBrowser.Providers/Subtitles/SubtitleManager.cs

@@ -15,6 +15,7 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using CommonIO;
@@ -130,6 +131,8 @@ namespace MediaBrowser.Providers.Subtitles
 
                     try
                     {
+                        //var isText = MediaStream.IsTextFormat(response.Format);
+
                         using (var fs = _fileSystem.GetFileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.Read, true))
                         {
                             await stream.CopyToAsync(fs).ConfigureAwait(false);

+ 73 - 83
MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs

@@ -63,97 +63,89 @@ namespace MediaBrowser.Providers.TV
                 var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, series.ProviderIds);
                 var indexOffset = TvdbSeriesProvider.GetSeriesOffset(series.ProviderIds) ?? 0;
 
-                var files = TvdbEpisodeProvider.Current.GetEpisodeXmlFiles(episode.ParentIndexNumber + indexOffset, episode.IndexNumber, episode.IndexNumberEnd, seriesDataPath);
+				var nodes = TvdbEpisodeProvider.Current.GetEpisodeXmlNodes(seriesDataPath, episode.GetLookupInfo());
 
-                var result = files.Select(i => GetImageInfo(i, cancellationToken))
-                    .Where(i => i != null);
+                var result = nodes.Select(i => GetImageInfo(i, cancellationToken))
+                    .Where(i => i != null)
+					.ToList();
 
-                return Task.FromResult(result);
+				return Task.FromResult<IEnumerable<RemoteImageInfo>>(result);
             }
 
             return Task.FromResult<IEnumerable<RemoteImageInfo>>(new RemoteImageInfo[] { });
         }
 
-        private RemoteImageInfo GetImageInfo(FileSystemMetadata xmlFile, CancellationToken cancellationToken)
+		private RemoteImageInfo GetImageInfo(XmlReader reader, CancellationToken cancellationToken)
         {
             var height = 225;
             var width = 400;
             var url = string.Empty;
 
-            using (var streamReader = new StreamReader(xmlFile.FullName, Encoding.UTF8))
-            {
-                // Use XmlReader for best performance
-                using (var reader = XmlReader.Create(streamReader, new XmlReaderSettings
-                {
-                    CheckCharacters = false,
-                    IgnoreProcessingInstructions = true,
-                    IgnoreComments = true,
-                    ValidationType = ValidationType.None
-                }))
-                {
-                    reader.MoveToContent();
-
-                    // Loop through each element
-                    while (reader.Read())
-                    {
-                        cancellationToken.ThrowIfCancellationRequested();
-
-                        if (reader.NodeType == XmlNodeType.Element)
-                        {
-                            switch (reader.Name)
-                            {
-                                case "thumb_width":
-                                    {
-                                        var val = reader.ReadElementContentAsString();
-
-                                        if (!string.IsNullOrWhiteSpace(val))
-                                        {
-                                            int rval;
-
-                                            // int.TryParse is local aware, so it can be probamatic, force us culture
-                                            if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
-                                            {
-                                                width = rval;
-                                            }
-                                        }
-                                        break;
-                                    }
-
-                                case "thumb_height":
-                                    {
-                                        var val = reader.ReadElementContentAsString();
-
-                                        if (!string.IsNullOrWhiteSpace(val))
-                                        {
-                                            int rval;
-
-                                            // int.TryParse is local aware, so it can be probamatic, force us culture
-                                            if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
-                                            {
-                                                height = rval;
-                                            }
-                                        }
-                                        break;
-                                    }
-
-                                case "filename":
-                                    {
-                                        var val = reader.ReadElementContentAsString();
-                                        if (!string.IsNullOrWhiteSpace(val))
-                                        {
-                                            url = TVUtils.BannerUrl + val;
-                                        }
-                                        break;
-                                    }
-
-                                default:
-                                    reader.Skip();
-                                    break;
-                            }
-                        }
-                    }
-                }
-            }
+			// Use XmlReader for best performance
+			using (reader)
+			{
+				reader.MoveToContent();
+
+				// Loop through each element
+				while (reader.Read())
+				{
+					cancellationToken.ThrowIfCancellationRequested();
+
+					if (reader.NodeType == XmlNodeType.Element)
+					{
+						switch (reader.Name)
+						{
+						case "thumb_width":
+							{
+								var val = reader.ReadElementContentAsString();
+
+								if (!string.IsNullOrWhiteSpace(val))
+								{
+									int rval;
+
+									// int.TryParse is local aware, so it can be probamatic, force us culture
+									if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
+									{
+										width = rval;
+									}
+								}
+								break;
+							}
+
+						case "thumb_height":
+							{
+								var val = reader.ReadElementContentAsString();
+
+								if (!string.IsNullOrWhiteSpace(val))
+								{
+									int rval;
+
+									// int.TryParse is local aware, so it can be probamatic, force us culture
+									if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
+									{
+										height = rval;
+									}
+								}
+								break;
+							}
+
+						case "filename":
+							{
+								var val = reader.ReadElementContentAsString();
+								if (!string.IsNullOrWhiteSpace(val))
+								{
+									url = TVUtils.BannerUrl + val;
+								}
+								break;
+							}
+
+						default:
+							reader.Skip();
+							break;
+						}
+					}
+				}
+			}
 
             if (string.IsNullOrEmpty(url))
             {
@@ -205,11 +197,9 @@ namespace MediaBrowser.Providers.TV
                 if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds))
                 {
                     // Process images
-                    var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, series.ProviderIds);
-
-                    var files = TvdbEpisodeProvider.Current.GetEpisodeXmlFiles(episode.ParentIndexNumber, episode.IndexNumber, episode.IndexNumberEnd, seriesDataPath);
+					var seriesXmlPath = TvdbSeriesProvider.Current.GetSeriesXmlPath(series.ProviderIds, series.GetPreferredMetadataLanguage());
 
-                    return files.Any(i => _fileSystem.GetLastWriteTimeUtc(i) > date);
+					return _fileSystem.GetLastWriteTimeUtc(seriesXmlPath) > date;
                 }
             }
 

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 536 - 428
MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs


+ 10 - 3
MediaBrowser.Providers/TV/TvdbSeriesProvider.cs

@@ -161,9 +161,7 @@ namespace MediaBrowser.Providers.TV
 
             var seriesDataPath = GetSeriesDataPath(_config.ApplicationPaths, seriesProviderIds);
 
-            var seriesXmlFilename = metadataLanguage.ToLower() + ".xml";
-
-            var seriesXmlPath = Path.Combine(seriesDataPath, seriesXmlFilename);
+			var seriesXmlPath = GetSeriesXmlPath (seriesProviderIds, metadataLanguage);
             var actorsXmlPath = Path.Combine(seriesDataPath, "actors.xml");
 
             FetchSeriesInfo(series, seriesXmlPath, cancellationToken);
@@ -1278,6 +1276,15 @@ namespace MediaBrowser.Providers.TV
             return null;
         }
 
+		public string GetSeriesXmlPath(Dictionary<string, string> seriesProviderIds, string language)
+		{
+			var seriesDataPath = GetSeriesDataPath(_config.ApplicationPaths, seriesProviderIds);
+
+			var seriesXmlFilename = language.ToLower() + ".xml";
+
+			return Path.Combine (seriesDataPath, seriesXmlFilename);
+		}
+
         /// <summary>
         /// Gets the series data path.
         /// </summary>

Vissa filer visades inte eftersom för många filer har ändrats