Просмотр исходного кода

Merge pull request #2804 from MediaBrowser/dev

Dev
Luke 8 лет назад
Родитель
Сommit
aff4fc649b
27 измененных файлов с 103 добавлено и 414 удалено
  1. 20 22
      Emby.Dlna/PlayTo/Device.cs
  2. 59 33
      Emby.Server.Implementations/Data/SqliteItemRepository.cs
  3. 10 41
      Emby.Server.Implementations/Dto/DtoService.cs
  4. 0 1
      Emby.Server.Implementations/Emby.Server.Implementations.csproj
  5. 2 0
      Emby.Server.Implementations/Library/LibraryManager.cs
  6. 0 1
      Emby.Server.Implementations/Session/SessionManager.cs
  7. 0 71
      Emby.Server.Implementations/Sorting/AirTimeComparer.cs
  8. 0 9
      MediaBrowser.Api/ItemUpdateService.cs
  9. 0 1
      MediaBrowser.Api/StartupWizardService.cs
  10. 0 12
      MediaBrowser.Controller/Entities/AggregateFolder.cs
  11. 0 9
      MediaBrowser.Controller/Entities/CollectionFolder.cs
  12. 0 12
      MediaBrowser.Controller/Entities/TV/Series.cs
  13. 0 9
      MediaBrowser.Controller/Entities/UserViewBuilder.cs
  14. 5 3
      MediaBrowser.Model/Configuration/ServerConfiguration.cs
  15. 2 56
      MediaBrowser.Model/Dto/BaseItemDto.cs
  16. 0 29
      MediaBrowser.Model/Dto/StudioDto.cs
  17. 0 1
      MediaBrowser.Model/MediaBrowser.Model.csproj
  18. 0 5
      MediaBrowser.Model/Querying/ItemFields.cs
  19. 0 10
      MediaBrowser.Providers/TV/SeriesMetadataService.cs
  20. 0 22
      MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
  21. 0 23
      MediaBrowser.Providers/TV/TvExternalIds.cs
  22. 0 16
      MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs
  23. 0 7
      MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs
  24. 1 17
      MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs
  25. 1 1
      Nuget/MediaBrowser.Common.nuspec
  26. 2 2
      Nuget/MediaBrowser.Server.Core.nuspec
  27. 1 1
      SharedVersion.cs

+ 20 - 22
Emby.Dlna/PlayTo/Device.cs

@@ -113,7 +113,7 @@ namespace Emby.Dlna.PlayTo
 
         private int GetInactiveTimerIntervalMs()
         {
-            return 30000;
+            return Timeout.Infinite;
         }
 
         public void Start()
@@ -161,18 +161,15 @@ namespace Emby.Dlna.PlayTo
             if (_disposed)
                 return;
 
-            if (!_timerActive)
+            lock (_timerLock)
             {
-                lock (_timerLock)
+                if (!_timerActive)
                 {
-                    if (!_timerActive)
-                    {
-                        _logger.Debug("RestartTimer");
-                        _timer.Change(10, GetPlaybackTimerIntervalMs());
-                    }
-
-                    _timerActive = true;
+                    _logger.Debug("RestartTimer");
+                    _timer.Change(10, GetPlaybackTimerIntervalMs());
                 }
+
+                _timerActive = true;
             }
         }
 
@@ -184,23 +181,20 @@ namespace Emby.Dlna.PlayTo
             if (_disposed)
                 return;
 
-            if (_timerActive)
+            lock (_timerLock)
             {
-                lock (_timerLock)
+                if (_timerActive)
                 {
-                    if (_timerActive)
-                    {
-                        _logger.Debug("RestartTimerInactive");
-                        var interval = GetInactiveTimerIntervalMs();
+                    _logger.Debug("RestartTimerInactive");
+                    var interval = GetInactiveTimerIntervalMs();
 
-                        if (_timer != null)
-                        {
-                            _timer.Change(interval, interval);
-                        }
+                    if (_timer != null)
+                    {
+                        _timer.Change(interval, interval);
                     }
-
-                    _timerActive = false;
                 }
+
+                _timerActive = false;
             }
         }
 
@@ -493,6 +487,10 @@ namespace Emby.Dlna.PlayTo
                         RestartTimer();
                     }
                 }
+                else
+                {
+                    RestartTimerInactive();
+                }
             }
             catch (HttpException ex)
             {

+ 59 - 33
Emby.Server.Implementations/Data/SqliteItemRepository.cs

@@ -345,7 +345,10 @@ namespace Emby.Server.Implementations.Data
 
                 // items by name
                 "create index if not exists idx_ItemValues6 on ItemValues(ItemId,Type,CleanValue)",
-                "create index if not exists idx_ItemValues7 on ItemValues(Type,CleanValue,ItemId)"
+                "create index if not exists idx_ItemValues7 on ItemValues(Type,CleanValue,ItemId)",
+
+                // Used to update inherited tags
+                "create index if not exists idx_ItemValues8 on ItemValues(Type, ItemId, Value)",
                 };
 
                 connection.RunQueries(postQueries);
@@ -1293,16 +1296,13 @@ namespace Emby.Server.Implementations.Data
                 return false;
             }
 
-            if (_config.Configuration.SkipDeserializationForAudio)
+            if (type == typeof(Audio))
             {
-                if (type == typeof(Audio))
-                {
-                    return false;
-                }
-                if (type == typeof(MusicAlbum))
-                {
-                    return false;
-                }
+                return false;
+            }
+            if (type == typeof(MusicAlbum))
+            {
+                return false;
             }
 
             return true;
@@ -4695,41 +4695,65 @@ namespace Emby.Server.Implementations.Data
 
         private async Task UpdateInheritedTags(CancellationToken cancellationToken)
         {
-            var newValues = new List<Tuple<Guid, string>>();
+            var newValues = new List<Tuple<Guid, string[]>>();
 
-            var commandText = "select Guid,(select group_concat(Tags, '|') from TypedBaseItems where (guid=outer.guid) OR (guid in (Select AncestorId from AncestorIds where ItemId=Outer.guid))) as NewInheritedTags from typedbaseitems as Outer";
+            var commandText = @"select guid, 
+(select group_concat(Value, '|') from ItemValues where (ItemValues.ItemId = Outer.Guid OR ItemValues.ItemId in ((Select AncestorId from AncestorIds where AncestorIds.ItemId=Outer.guid))) and ItemValues.Type = 4) NewInheritedTags,
+(select group_concat(Value, '|') from ItemValues where ItemValues.ItemId = Outer.Guid and ItemValues.Type = 6) CurrentInheritedTags
+from typedbaseitems as Outer
+where (NewInheritedTags <> CurrentInheritedTags or (NewInheritedTags is null) <> (CurrentInheritedTags is null))
+limit 100";
 
             using (WriteLock.Write())
             {
                 using (var connection = CreateConnection())
                 {
-                    foreach (var row in connection.Query(commandText))
+                    connection.RunInTransaction(db =>
                     {
-                        var id = row.GetGuid(0);
-                        string value = row.IsDBNull(2) ? null : row.GetString(2);
+                        foreach (var row in connection.Query(commandText))
+                        {
+                            var id = row.GetGuid(0);
+                            string value = row.IsDBNull(1) ? null : row.GetString(1);
 
-                        newValues.Add(new Tuple<Guid, string>(id, value));
-                    }
+                            var valuesArray = string.IsNullOrWhiteSpace(value) ? new string[] { } : value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
 
-                    Logger.Debug("UpdateInheritedTags - {0} rows", newValues.Count);
-                    if (newValues.Count == 0)
-                    {
-                        return;
-                    }
+                            newValues.Add(new Tuple<Guid, string[]>(id, valuesArray));
+                        }
 
-                    // write lock here
-                    using (var statement = PrepareStatement(connection, "Update TypedBaseItems set InheritedTags=@InheritedTags where Guid=@Guid"))
-                    {
-                        foreach (var item in newValues)
+                        Logger.Debug("UpdateInheritedTags - {0} rows", newValues.Count);
+                        if (newValues.Count == 0)
                         {
-                            var paramList = new List<object>();
+                            return;
+                        }
+
+                        using (var insertStatement = PrepareStatement(connection, "insert into ItemValues (ItemId, Type, Value, CleanValue) values (@ItemId, 6, @Value, @CleanValue)"))
+                        {
+                            using (var deleteStatement = PrepareStatement(connection, "delete from ItemValues where ItemId=@ItemId and Type=6"))
+                            {
+                                foreach (var item in newValues)
+                                {
+                                    var guidBlob = item.Item1.ToGuidBlob();
 
-                            paramList.Add(item.Item1);
-                            paramList.Add(item.Item2);
+                                    deleteStatement.Reset();
+                                    deleteStatement.TryBind("@ItemId", guidBlob);
+                                    deleteStatement.MoveNext();
 
-                            statement.Execute(paramList.ToArray());
+                                    foreach (var itemValue in item.Item2)
+                                    {
+                                        insertStatement.Reset();
+
+                                        insertStatement.TryBind("@ItemId", guidBlob);
+                                        insertStatement.TryBind("@Value", itemValue);
+
+                                        insertStatement.TryBind("@CleanValue", GetCleanValue(itemValue));
+
+                                        insertStatement.MoveNext();
+                                    }
+                                }
+                            }
                         }
-                    }
+
+                    }, TransactionMode);
                 }
             }
         }
@@ -5458,8 +5482,10 @@ namespace Emby.Server.Implementations.Data
 
             CheckDisposed();
 
+            var guidBlob = itemId.ToGuidBlob();
+
             // First delete 
-            db.Execute("delete from ItemValues where ItemId=@Id", itemId.ToGuidBlob());
+            db.Execute("delete from ItemValues where ItemId=@Id", guidBlob);
 
             using (var statement = PrepareStatement(db, "insert into ItemValues (ItemId, Type, Value, CleanValue) values (@ItemId, @Type, @Value, @CleanValue)"))
             {
@@ -5475,7 +5501,7 @@ namespace Emby.Server.Implementations.Data
 
                     statement.Reset();
 
-                    statement.TryBind("@ItemId", itemId.ToGuidBlob());
+                    statement.TryBind("@ItemId", guidBlob);
                     statement.TryBind("@Type", pair.Item1);
                     statement.TryBind("@Value", itemValue);
 

+ 10 - 41
Emby.Server.Implementations/Dto/DtoService.cs

@@ -639,7 +639,6 @@ namespace Emby.Server.Implementations.Dto
 
         private void SetGameProperties(BaseItemDto dto, Game item)
         {
-            dto.Players = item.PlayersSupported;
             dto.GameSystem = item.GameSystem;
             dto.MultiPartGameFiles = item.MultiPartGameFiles;
         }
@@ -1120,8 +1119,7 @@ namespace Emby.Server.Implementations.Dto
 
                 // Include artists that are not in the database yet, e.g., just added via metadata editor
                 //var foundArtists = artistItems.Items.Select(i => i.Item1.Name).ToList();
-                dto.ArtistItems = new List<NameIdPair>();
-                dto.ArtistItems.AddRange(hasArtist.Artists
+                dto.ArtistItems = hasArtist.Artists
                     //.Except(foundArtists, new DistinctNameComparer())
                     .Select(i =>
                     {
@@ -1146,7 +1144,7 @@ namespace Emby.Server.Implementations.Dto
 
                         return null;
 
-                    }).Where(i => i != null));
+                    }).Where(i => i != null).ToArray();
             }
 
             var hasAlbumArtist = item as IHasAlbumArtist;
@@ -1310,15 +1308,6 @@ namespace Emby.Server.Implementations.Dto
 
                 Series episodeSeries = null;
 
-                if (fields.Contains(ItemFields.SeriesGenres))
-                {
-                    episodeSeries = episodeSeries ?? episode.Series;
-                    if (episodeSeries != null)
-                    {
-                        dto.SeriesGenres = episodeSeries.Genres.ToList();
-                    }
-                }
-
                 //if (fields.Contains(ItemFields.SeriesPrimaryImage))
                 {
                     episodeSeries = episodeSeries ?? episode.Series;
@@ -1334,27 +1323,6 @@ namespace Emby.Server.Implementations.Dto
                     if (episodeSeries != null)
                     {
                         dto.SeriesStudio = episodeSeries.Studios.FirstOrDefault();
-                        if (!string.IsNullOrWhiteSpace(dto.SeriesStudio))
-                        {
-                            try
-                            {
-                                var studio = _libraryManager.GetStudio(dto.SeriesStudio);
-
-                                if (studio != null)
-                                {
-                                    dto.SeriesStudioInfo = new StudioDto
-                                    {
-                                        Name = dto.SeriesStudio,
-                                        Id = studio.Id.ToString("N"),
-                                        PrimaryImageTag = GetImageCacheTag(studio, ImageType.Primary)
-                                    };
-                                }
-                            }
-                            catch (Exception ex)
-                            {
-
-                            }
-                        }
                     }
                 }
             }
@@ -1363,8 +1331,7 @@ namespace Emby.Server.Implementations.Dto
             var series = item as Series;
             if (series != null)
             {
-                dto.AirDays = series.AirDays;
-                dto.AirTime = series.AirTime;
+                dto.AirDays = new DayOfWeek[] {};
                 dto.Status = series.Status.HasValue ? series.Status.Value.ToString() : null;
             }
 
@@ -1498,7 +1465,9 @@ namespace Emby.Server.Implementations.Dto
             BaseItem parent = null;
             var isFirst = true;
 
-            while (((!dto.HasLogo && logoLimit > 0) || (!dto.HasArtImage && artLimit > 0) || (!dto.HasThumb && thumbLimit > 0) || parent is Series) &&
+            var imageTags = dto.ImageTags;
+
+            while (((!(imageTags != null && imageTags.ContainsKey(ImageType.Logo)) && logoLimit > 0) || (!(imageTags != null && imageTags.ContainsKey(ImageType.Art)) && artLimit > 0) || (!(imageTags != null && imageTags.ContainsKey(ImageType.Thumb)) && thumbLimit > 0) || parent is Series) &&
                 (parent = parent ?? (isFirst ? GetImageDisplayParent(item, item) ?? owner : parent)) != null)
             {
                 if (parent == null)
@@ -1508,7 +1477,7 @@ namespace Emby.Server.Implementations.Dto
 
                 var allImages = parent.ImageInfos;
 
-                if (logoLimit > 0 && !dto.HasLogo && dto.ParentLogoItemId == null)
+                if (logoLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Logo)) && dto.ParentLogoItemId == null)
                 {
                     var image = allImages.FirstOrDefault(i => i.Type == ImageType.Logo);
 
@@ -1518,7 +1487,7 @@ namespace Emby.Server.Implementations.Dto
                         dto.ParentLogoImageTag = GetImageCacheTag(parent, image);
                     }
                 }
-                if (artLimit > 0 && !dto.HasArtImage && dto.ParentArtItemId == null)
+                if (artLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Art)) && dto.ParentArtItemId == null)
                 {
                     var image = allImages.FirstOrDefault(i => i.Type == ImageType.Art);
 
@@ -1528,7 +1497,7 @@ namespace Emby.Server.Implementations.Dto
                         dto.ParentArtImageTag = GetImageCacheTag(parent, image);
                     }
                 }
-                if (thumbLimit > 0 && !dto.HasThumb && (dto.ParentThumbItemId == null || parent is Series) && !(parent is ICollectionFolder) && !(parent is UserView))
+                if (thumbLimit > 0 && !(imageTags != null && imageTags.ContainsKey(ImageType.Thumb)) && (dto.ParentThumbItemId == null || parent is Series) && !(parent is ICollectionFolder) && !(parent is UserView))
                 {
                     var image = allImages.FirstOrDefault(i => i.Type == ImageType.Thumb);
 
@@ -1538,7 +1507,7 @@ namespace Emby.Server.Implementations.Dto
                         dto.ParentThumbImageTag = GetImageCacheTag(parent, image);
                     }
                 }
-                if (backdropLimit > 0 && !dto.HasBackdrop)
+                if (backdropLimit > 0 && !((dto.BackdropImageTags != null && dto.BackdropImageTags.Length > 0) || (dto.ParentBackdropImageTags != null && dto.ParentBackdropImageTags.Length > 0)))
                 {
                     var images = allImages.Where(i => i.Type == ImageType.Backdrop).Take(backdropLimit).ToList();
 

+ 0 - 1
Emby.Server.Implementations/Emby.Server.Implementations.csproj

@@ -249,7 +249,6 @@
     <Compile Include="Social\SharingManager.cs" />
     <Compile Include="Social\SharingRepository.cs" />
     <Compile Include="Sorting\AiredEpisodeOrderComparer.cs" />
-    <Compile Include="Sorting\AirTimeComparer.cs" />
     <Compile Include="Sorting\AlbumArtistComparer.cs" />
     <Compile Include="Sorting\AlbumComparer.cs" />
     <Compile Include="Sorting\AlphanumComparator.cs" />

+ 2 - 0
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -1172,6 +1172,8 @@ namespace Emby.Server.Implementations.Library
                 progress.Report(percent * 100);
             }
 
+            await ItemRepository.UpdateInheritedValues(cancellationToken).ConfigureAwait(false);
+
             progress.Report(100);
         }
 

+ 0 - 1
Emby.Server.Implementations/Session/SessionManager.cs

@@ -1686,7 +1686,6 @@ namespace Emby.Server.Implementations.Session
                 dtoOptions.Fields.Remove(ItemFields.RecursiveItemCount);
                 dtoOptions.Fields.Remove(ItemFields.RemoteTrailers);
                 dtoOptions.Fields.Remove(ItemFields.SeasonUserData);
-                dtoOptions.Fields.Remove(ItemFields.SeriesGenres);
                 dtoOptions.Fields.Remove(ItemFields.Settings);
                 dtoOptions.Fields.Remove(ItemFields.SortName);
                 dtoOptions.Fields.Remove(ItemFields.Tags);

+ 0 - 71
Emby.Server.Implementations/Sorting/AirTimeComparer.cs

@@ -1,71 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Sorting;
-using MediaBrowser.Model.Querying;
-using System;
-
-namespace Emby.Server.Implementations.Sorting
-{
-    public class AirTimeComparer : IBaseItemComparer
-    {
-        /// <summary>
-        /// Compares the specified x.
-        /// </summary>
-        /// <param name="x">The x.</param>
-        /// <param name="y">The y.</param>
-        /// <returns>System.Int32.</returns>
-        public int Compare(BaseItem x, BaseItem y)
-        {
-            return DateTime.Compare(GetValue(x), GetValue(y));
-        }
-
-        /// <summary>
-        /// Gets the value.
-        /// </summary>
-        /// <param name="x">The x.</param>
-        /// <returns>System.String.</returns>
-        private DateTime GetValue(BaseItem x)
-        {
-            var series = x as Series;
-
-            if (series == null)
-            {
-                var season = x as Season;
-
-                if (season != null)
-                {
-                    series = season.Series;
-                }
-                else
-                {
-                    var episode = x as Episode;
-
-                    if (episode != null)
-                    {
-                        series = episode.Series;
-                    }
-                }
-            }
-
-            if (series != null)
-            {
-                DateTime result;
-                if (DateTime.TryParse(series.AirTime, out result))
-                {
-                    return result;
-                }
-            }
-
-            return DateTime.MinValue;
-        }
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get { return ItemSortBy.AirTime; }
-        }
-    }
-}

+ 0 - 9
MediaBrowser.Api/ItemUpdateService.cs

@@ -332,13 +332,6 @@ namespace MediaBrowser.Api
                 video.Video3DFormat = request.Video3DFormat;
             }
 
-            var game = item as Game;
-
-            if (game != null)
-            {
-                game.PlayersSupported = request.Players;
-            }
-
             if (request.AlbumArtists != null)
             {
                 var hasAlbumArtists = item as IHasAlbumArtist;
@@ -379,8 +372,6 @@ namespace MediaBrowser.Api
             if (series != null)
             {
                 series.Status = GetSeriesStatus(request);
-                series.AirDays = request.AirDays;
-                series.AirTime = request.AirTime;
             }
         }
 

+ 0 - 1
MediaBrowser.Api/StartupWizardService.cs

@@ -95,7 +95,6 @@ namespace MediaBrowser.Api
             config.EnableStandaloneMusicKeys = true;
             config.EnableCaseSensitiveItemIds = true;
             config.SkipDeserializationForBasicTypes = true;
-            config.SkipDeserializationForAudio = true;
             config.EnableLocalizedGuids = true;
             config.EnableSimpleArtistDetection = true;
             config.EnableNormalizedItemByNameIds = true;

+ 0 - 12
MediaBrowser.Controller/Entities/AggregateFolder.cs

@@ -23,18 +23,6 @@ namespace MediaBrowser.Controller.Entities
             PhysicalLocationsList = new List<string>();
         }
 
-        /// <summary>
-        /// We don't support manual shortcuts
-        /// </summary>
-        [IgnoreDataMember]
-        protected override bool SupportsShortcutChildren
-        {
-            get
-            {
-                return false;
-            }
-        }
-
         [IgnoreDataMember]
         public override bool IsPhysicalRoot
         {

+ 0 - 9
MediaBrowser.Controller/Entities/CollectionFolder.cs

@@ -31,15 +31,6 @@ namespace MediaBrowser.Controller.Entities
             PhysicalFolderIds = new List<Guid>();
         }
 
-        [IgnoreDataMember]
-        protected override bool SupportsShortcutChildren
-        {
-            get
-            {
-                return true;
-            }
-        }
-
         [IgnoreDataMember]
         public override bool SupportsPlayedStatus
         {

+ 0 - 12
MediaBrowser.Controller/Entities/TV/Series.cs

@@ -22,8 +22,6 @@ namespace MediaBrowser.Controller.Entities.TV
     {
         public Series()
         {
-            AirDays = new List<DayOfWeek>();
-
             RemoteTrailers = EmptyMediaUrlArray;
             LocalTrailerIds = EmptyGuidArray;
             RemoteTrailerIds = EmptyGuidArray;
@@ -77,16 +75,6 @@ namespace MediaBrowser.Controller.Entities.TV
         /// </summary>
         /// <value>The status.</value>
         public SeriesStatus? Status { get; set; }
-        /// <summary>
-        /// Gets or sets the air days.
-        /// </summary>
-        /// <value>The air days.</value>
-        public List<DayOfWeek> AirDays { get; set; }
-        /// <summary>
-        /// Gets or sets the air time.
-        /// </summary>
-        /// <value>The air time.</value>
-        public string AirTime { get; set; }
 
         /// <summary>
         /// Gets or sets the date last episode added.

+ 0 - 9
MediaBrowser.Controller/Entities/UserViewBuilder.cs

@@ -1674,15 +1674,6 @@ namespace MediaBrowser.Controller.Entities
                 }
             }
 
-            if (query.AirDays.Length > 0)
-            {
-                var ok = new[] { item }.OfType<Series>().Any(p => p.AirDays != null && query.AirDays.Any(d => p.AirDays.Contains(d)));
-                if (!ok)
-                {
-                    return false;
-                }
-            }
-
             if (query.SeriesStatuses.Length > 0)
             {
                 var ok = new[] { item }.OfType<Series>().Any(p => p.Status.HasValue && query.SeriesStatuses.Contains(p.Status.Value));

+ 5 - 3
MediaBrowser.Model/Configuration/ServerConfiguration.cs

@@ -162,7 +162,6 @@ namespace MediaBrowser.Model.Configuration
 
         public bool EnableAutomaticRestart { get; set; }
         public bool SkipDeserializationForBasicTypes { get; set; }
-        public bool SkipDeserializationForAudio { get; set; }
 
         public string ServerName { get; set; }
         public string WanDdns { get; set; }
@@ -349,7 +348,9 @@ namespace MediaBrowser.Model.Configuration
                             Limit = 1,
                             Type = ImageType.Logo
                         }
-                    }
+                    },
+
+                    DisabledImageFetchers = new [] {"FanArt"}
                 },
 
                 new MetadataOptions(1, 1280)
@@ -539,7 +540,8 @@ namespace MediaBrowser.Model.Configuration
                             Type = ImageType.Thumb
                         }
                     },
-                    DisabledMetadataFetchers = new []{ "TheMovieDb" }
+                    DisabledMetadataFetchers = new []{ "TheMovieDb" },
+                    DisabledImageFetchers = new [] { "FanArt" }
                 },
 
                 new MetadataOptions(0, 1280)

+ 2 - 56
MediaBrowser.Model/Dto/BaseItemDto.cs

@@ -209,12 +209,6 @@ namespace MediaBrowser.Model.Dto
         /// <value>The genres.</value>
         public List<string> Genres { get; set; }
 
-        /// <summary>
-        /// Gets or sets the series genres.
-        /// </summary>
-        /// <value>The series genres.</value>
-        public List<string> SeriesGenres { get; set; }
-
         /// <summary>
         /// Gets or sets the community rating.
         /// </summary>
@@ -257,12 +251,6 @@ namespace MediaBrowser.Model.Dto
         /// <value>The production year.</value>
         public int? ProductionYear { get; set; }
 
-        /// <summary>
-        /// Gets or sets the players supported by a game.
-        /// </summary>
-        /// <value>The players.</value>
-        public int? Players { get; set; }
-
         /// <summary>
         /// Gets or sets a value indicating whether this instance is place holder.
         /// </summary>
@@ -432,7 +420,7 @@ namespace MediaBrowser.Model.Dto
         /// Gets or sets the air days.
         /// </summary>
         /// <value>The air days.</value>
-        public List<DayOfWeek> AirDays { get; set; }
+        public DayOfWeek[] AirDays { get; set; }
 
         /// <summary>
         /// Gets or sets the tags.
@@ -456,7 +444,7 @@ namespace MediaBrowser.Model.Dto
         /// Gets or sets the artist items.
         /// </summary>
         /// <value>The artist items.</value>
-        public List<NameIdPair> ArtistItems { get; set; }
+        public NameIdPair[] ArtistItems { get; set; }
 
         /// <summary>
         /// Gets or sets the album.
@@ -598,8 +586,6 @@ namespace MediaBrowser.Model.Dto
         /// <value>The series studio.</value>
         public string SeriesStudio { get; set; }
 
-        public StudioDto SeriesStudioInfo { get; set; }
-
         /// <summary>
         /// Gets or sets the parent thumb item id.
         /// </summary>
@@ -741,46 +727,6 @@ namespace MediaBrowser.Model.Dto
         /// <value>The series timer identifier.</value>
         public string SeriesTimerId { get; set; }
 
-        /// <summary>
-        /// Gets a value indicating whether this instance has art.
-        /// </summary>
-        /// <value><c>true</c> if this instance has art; otherwise, <c>false</c>.</value>
-        [IgnoreDataMember]
-        public bool HasArtImage
-        {
-            get { return ImageTags != null && ImageTags.ContainsKey(ImageType.Art); }
-        }
-
-        /// <summary>
-        /// Gets a value indicating whether this instance has logo.
-        /// </summary>
-        /// <value><c>true</c> if this instance has logo; otherwise, <c>false</c>.</value>
-        [IgnoreDataMember]
-        public bool HasLogo
-        {
-            get { return ImageTags != null && ImageTags.ContainsKey(ImageType.Logo); }
-        }
-
-        /// <summary>
-        /// Gets a value indicating whether this instance has thumb.
-        /// </summary>
-        /// <value><c>true</c> if this instance has thumb; otherwise, <c>false</c>.</value>
-        [IgnoreDataMember]
-        public bool HasThumb
-        {
-            get { return ImageTags != null && ImageTags.ContainsKey(ImageType.Thumb); }
-        }
-
-        /// <summary>
-        /// Gets a value indicating whether this instance has thumb.
-        /// </summary>
-        /// <value><c>true</c> if this instance has thumb; otherwise, <c>false</c>.</value>
-        [IgnoreDataMember]
-        public bool HasBackdrop
-        {
-            get { return (BackdropImageTags != null && BackdropImageTags.Length > 0) || (ParentBackdropImageTags != null && ParentBackdropImageTags.Length > 0); }
-        }
-
         /// <summary>
         /// Gets or sets the program identifier.
         /// </summary>

+ 0 - 29
MediaBrowser.Model/Dto/StudioDto.cs

@@ -1,29 +0,0 @@
-using System.Diagnostics;
-
-namespace MediaBrowser.Model.Dto
-{
-    /// <summary>
-    /// Class StudioDto
-    /// </summary>
-    [DebuggerDisplay("Name = {Name}")]
-    public class StudioDto
-    {
-        /// <summary>
-        /// Gets or sets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// Gets or sets the identifier.
-        /// </summary>
-        /// <value>The identifier.</value>
-        public string Id { get; set; }
-        
-        /// <summary>
-        /// Gets or sets the primary image tag.
-        /// </summary>
-        /// <value>The primary image tag.</value>
-        public string PrimaryImageTag { get; set; }
-    }
-}

+ 0 - 1
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -284,7 +284,6 @@
     <Compile Include="Providers\ExternalUrl.cs" />
     <Compile Include="Providers\ImageProviderInfo.cs" />
     <Compile Include="Providers\RemoteImageInfo.cs" />
-    <Compile Include="Dto\StudioDto.cs" />
     <Compile Include="Entities\CollectionType.cs" />
     <Compile Include="Entities\ItemReview.cs" />
     <Compile Include="Entities\MediaUrl.cs" />

+ 0 - 5
MediaBrowser.Model/Querying/ItemFields.cs

@@ -153,11 +153,6 @@
         /// </summary>
         ScreenshotImageTags,
 
-        /// <summary>
-        /// The series genres
-        /// </summary>
-        SeriesGenres,
-
         SeriesPrimaryImage,
 
         /// <summary>

+ 0 - 10
MediaBrowser.Providers/TV/SeriesMetadataService.cs

@@ -64,20 +64,10 @@ namespace MediaBrowser.Providers.TV
             var sourceItem = source.Item;
             var targetItem = target.Item;
 
-            if (replaceData || string.IsNullOrEmpty(targetItem.AirTime))
-            {
-                targetItem.AirTime = sourceItem.AirTime;
-            }
-
             if (replaceData || !targetItem.Status.HasValue)
             {
                 targetItem.Status = sourceItem.Status;
             }
-
-            if (replaceData || targetItem.AirDays == null || targetItem.AirDays.Count == 0)
-            {
-                targetItem.AirDays = sourceItem.AirDays;
-            }
         }
     }
 }

+ 0 - 22
MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs

@@ -1090,28 +1090,6 @@ namespace MediaBrowser.Providers.TV
                                 break;
                             }
 
-                        case "Airs_DayOfWeek":
-                            {
-                                var val = reader.ReadElementContentAsString();
-
-                                if (!string.IsNullOrWhiteSpace(val))
-                                {
-                                    item.AirDays = TVUtils.GetAirDays(val);
-                                }
-                                break;
-                            }
-
-                        case "Airs_Time":
-                            {
-                                var val = reader.ReadElementContentAsString();
-
-                                if (!string.IsNullOrWhiteSpace(val))
-                                {
-                                    item.AirTime = val;
-                                }
-                                break;
-                            }
-
                         case "ContentRating":
                             {
                                 var val = reader.ReadElementContentAsString();

+ 0 - 23
MediaBrowser.Providers/TV/TvExternalIds.cs

@@ -96,27 +96,4 @@ namespace MediaBrowser.Providers.TV
             return item is Episode;
         }
     }
-
-    public class TvComSeriesExternalId : IExternalId
-    {
-        public string Name
-        {
-            get { return "TV.com"; }
-        }
-
-        public string Key
-        {
-            get { return MetadataProviders.Tvcom.ToString(); }
-        }
-
-        public string UrlFormatString
-        {
-            get { return null; }
-        }
-
-        public bool Supports(IHasProviderIds item)
-        {
-            return item is Series;
-        }
-    }
 }

+ 0 - 16
MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs

@@ -61,22 +61,6 @@ namespace MediaBrowser.XbmcMetadata.Parsers
                         }
                         break;
                     }
-                case "airs_dayofweek":
-                    {
-                        item.AirDays = TVUtils.GetAirDays(reader.ReadElementContentAsString());
-                        break;
-                    }
-
-                case "airs_time":
-                    {
-                        var val = reader.ReadElementContentAsString();
-
-                        if (!string.IsNullOrWhiteSpace(val))
-                        {
-                            item.AirTime = val;
-                        }
-                        break;
-                    }
 
                 case "status":
                     {

+ 0 - 7
MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs

@@ -611,13 +611,6 @@ namespace MediaBrowser.XbmcMetadata.Savers
                 writtenProviderIds.Add(MetadataProviders.Tmdb.ToString());
             }
 
-            var tvcom = item.GetProviderId(MetadataProviders.Tvcom);
-            if (!string.IsNullOrEmpty(tvcom))
-            {
-                writer.WriteElementString("tvcomid", tvcom);
-                writtenProviderIds.Add(MetadataProviders.Tvcom.ToString());
-            }
-
             if (!string.IsNullOrEmpty(item.PreferredMetadataLanguage))
             {
                 writer.WriteElementString("language", item.PreferredMetadataLanguage);

+ 1 - 17
MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs

@@ -69,20 +69,6 @@ namespace MediaBrowser.XbmcMetadata.Savers
             {
                 writer.WriteElementString("status", series.Status.Value.ToString());
             }
-
-            if (!string.IsNullOrEmpty(series.AirTime))
-            {
-                writer.WriteElementString("airs_time", series.AirTime);
-            }
-
-            if (series.AirDays.Count == 7)
-            {
-                writer.WriteElementString("airs_dayofweek", "Daily");
-            }
-            else if (series.AirDays.Count > 0)
-            {
-                writer.WriteElementString("airs_dayofweek", series.AirDays[0].ToString());
-            }
         }
 
         protected override List<string> GetTagsUsed(IHasMetadata item)
@@ -94,9 +80,7 @@ namespace MediaBrowser.XbmcMetadata.Savers
                 "episodeguide",
                 "season",
                 "episode",
-                "status",
-                "airs_time",
-                "airs_dayofweek"
+                "status"
             });
             return list;
         }

+ 1 - 1
Nuget/MediaBrowser.Common.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Common</id>
-        <version>3.0.717</version>
+        <version>3.0.720</version>
         <title>Emby.Common</title>
         <authors>Emby Team</authors>
         <owners>ebr,Luke,scottisafool</owners>

+ 2 - 2
Nuget/MediaBrowser.Server.Core.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Server.Core</id>
-        <version>3.0.717</version>
+        <version>3.0.720</version>
         <title>Emby.Server.Core</title>
         <authors>Emby Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains core components required to build plugins for Emby Server.</description>
         <copyright>Copyright © Emby 2013</copyright>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.717" />
+            <dependency id="MediaBrowser.Common" version="3.0.720" />
         </dependencies>
     </metadata>
     <files>

+ 1 - 1
SharedVersion.cs

@@ -1,3 +1,3 @@
 using System.Reflection;
 
-[assembly: AssemblyVersion("3.2.26.20")]
+[assembly: AssemblyVersion("3.2.26.21")]