Browse Source

update audio queries

Luke Pulverenti 8 years ago
parent
commit
b91dcdbff4

+ 9 - 2
Emby.Common.Implementations/Serialization/XmlSerializer.cs

@@ -51,7 +51,6 @@ namespace Emby.Common.Implementations.Serialization
         /// <param name="writer">The writer.</param>
         /// <param name="writer">The writer.</param>
         private void SerializeToWriter(object obj, XmlWriter writer)
         private void SerializeToWriter(object obj, XmlWriter writer)
         {
         {
-            //writer.Formatting = Formatting.Indented;
             var netSerializer = GetSerializer(obj.GetType());
             var netSerializer = GetSerializer(obj.GetType());
             netSerializer.Serialize(writer, obj);
             netSerializer.Serialize(writer, obj);
         }
         }
@@ -78,10 +77,18 @@ namespace Emby.Common.Implementations.Serialization
         /// <param name="stream">The stream.</param>
         /// <param name="stream">The stream.</param>
         public void SerializeToStream(object obj, Stream stream)
         public void SerializeToStream(object obj, Stream stream)
         {
         {
-            using (var writer =  XmlWriter.Create(stream))
+#if NET46
+            using (var writer = new XmlTextWriter(stream, null))            
             {
             {
+                writer.Formatting = System.Xml.Formatting.Indented;
                 SerializeToWriter(obj, writer);
                 SerializeToWriter(obj, writer);
             }
             }
+#else
+            using (var writer = XmlWriter.Create(stream))
+            {
+                SerializeToWriter(obj, writer);
+            }
+#endif
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 12 - 5
Emby.Common.Implementations/project.fragment.lock.json

@@ -5,23 +5,30 @@
       "type": "project",
       "type": "project",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "compile": {
       "compile": {
-        "bin/Release/MediaBrowser.Common.dll": {}
+        "bin/Debug/MediaBrowser.Common.dll": {}
       },
       },
       "runtime": {
       "runtime": {
-        "bin/Release/MediaBrowser.Common.dll": {}
+        "bin/Debug/MediaBrowser.Common.dll": {}
+      },
+      "contentFiles": {
+        "bin/Debug/MediaBrowser.Common.pdb": {
+          "buildAction": "None",
+          "codeLanguage": "any",
+          "copyToOutput": true
+        }
       }
       }
     },
     },
     "MediaBrowser.Model/1.0.0": {
     "MediaBrowser.Model/1.0.0": {
       "type": "project",
       "type": "project",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "compile": {
       "compile": {
-        "bin/Release/MediaBrowser.Model.dll": {}
+        "bin/Debug/MediaBrowser.Model.dll": {}
       },
       },
       "runtime": {
       "runtime": {
-        "bin/Release/MediaBrowser.Model.dll": {}
+        "bin/Debug/MediaBrowser.Model.dll": {}
       },
       },
       "contentFiles": {
       "contentFiles": {
-        "bin/Release/MediaBrowser.Model.pdb": {
+        "bin/Debug/MediaBrowser.Model.pdb": {
           "buildAction": "None",
           "buildAction": "None",
           "codeLanguage": "any",
           "codeLanguage": "any",
           "copyToOutput": true
           "copyToOutput": true

+ 21 - 7
Emby.Dlna/project.fragment.lock.json

@@ -5,33 +5,47 @@
       "type": "project",
       "type": "project",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "compile": {
       "compile": {
-        "bin/Release/MediaBrowser.Common.dll": {}
+        "bin/Debug/MediaBrowser.Common.dll": {}
       },
       },
       "runtime": {
       "runtime": {
-        "bin/Release/MediaBrowser.Common.dll": {}
+        "bin/Debug/MediaBrowser.Common.dll": {}
+      },
+      "contentFiles": {
+        "bin/Debug/MediaBrowser.Common.pdb": {
+          "buildAction": "None",
+          "codeLanguage": "any",
+          "copyToOutput": true
+        }
       }
       }
     },
     },
     "MediaBrowser.Controller/1.0.0": {
     "MediaBrowser.Controller/1.0.0": {
       "type": "project",
       "type": "project",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "compile": {
       "compile": {
-        "bin/Release/MediaBrowser.Controller.dll": {}
+        "bin/Debug/MediaBrowser.Controller.dll": {}
       },
       },
       "runtime": {
       "runtime": {
-        "bin/Release/MediaBrowser.Controller.dll": {}
+        "bin/Debug/MediaBrowser.Controller.dll": {}
+      },
+      "contentFiles": {
+        "bin/Debug/MediaBrowser.Controller.pdb": {
+          "buildAction": "None",
+          "codeLanguage": "any",
+          "copyToOutput": true
+        }
       }
       }
     },
     },
     "MediaBrowser.Model/1.0.0": {
     "MediaBrowser.Model/1.0.0": {
       "type": "project",
       "type": "project",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "compile": {
       "compile": {
-        "bin/Release/MediaBrowser.Model.dll": {}
+        "bin/Debug/MediaBrowser.Model.dll": {}
       },
       },
       "runtime": {
       "runtime": {
-        "bin/Release/MediaBrowser.Model.dll": {}
+        "bin/Debug/MediaBrowser.Model.dll": {}
       },
       },
       "contentFiles": {
       "contentFiles": {
-        "bin/Release/MediaBrowser.Model.pdb": {
+        "bin/Debug/MediaBrowser.Model.pdb": {
           "buildAction": "None",
           "buildAction": "None",
           "codeLanguage": "any",
           "codeLanguage": "any",
           "copyToOutput": true
           "copyToOutput": true

+ 1 - 0
MediaBrowser.Api/StartupWizardService.cs

@@ -119,6 +119,7 @@ namespace MediaBrowser.Api
             config.EnableSimpleArtistDetection = true;
             config.EnableSimpleArtistDetection = true;
             config.SkipDeserializationForBasicTypes = true;
             config.SkipDeserializationForBasicTypes = true;
             config.SkipDeserializationForPrograms = true;
             config.SkipDeserializationForPrograms = true;
+            config.SkipDeserializationForAudio = true;
         }
         }
 
 
         public void Post(UpdateStartupConfiguration request)
         public void Post(UpdateStartupConfiguration request)

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

@@ -26,9 +26,6 @@ namespace MediaBrowser.Controller.Entities.Audio
     {
     {
         public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
         public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
 
 
-        public int? TotalBitrate { get; set; }
-        public ExtraType? ExtraType { get; set; }
-
         /// <summary>
         /// <summary>
         /// Gets or sets the artist.
         /// Gets or sets the artist.
         /// </summary>
         /// </summary>
@@ -37,15 +34,6 @@ namespace MediaBrowser.Controller.Entities.Audio
 
 
         public List<string> AlbumArtists { get; set; }
         public List<string> AlbumArtists { get; set; }
 
 
-        [IgnoreDataMember]
-        public override bool IsThemeMedia
-        {
-            get
-            {
-                return ExtraType.HasValue && ExtraType.Value == Model.Entities.ExtraType.ThemeSong;
-            }
-        }
-
         [IgnoreDataMember]
         [IgnoreDataMember]
         public override bool EnableRefreshOnDateModifiedChange
         public override bool EnableRefreshOnDateModifiedChange
         {
         {

+ 9 - 6
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -203,12 +203,15 @@ namespace MediaBrowser.Controller.Entities
             get { return PremiereDate.HasValue && PremiereDate.Value.ToLocalTime().Date >= DateTime.Now.Date; }
             get { return PremiereDate.HasValue && PremiereDate.Value.ToLocalTime().Date >= DateTime.Now.Date; }
         }
         }
 
 
+        public int? TotalBitrate { get; set; }
+        public ExtraType? ExtraType { get; set; }
+
         [IgnoreDataMember]
         [IgnoreDataMember]
-        public virtual bool IsThemeMedia
+        public bool IsThemeMedia
         {
         {
             get
             get
             {
             {
-                return false;
+                return ExtraType.HasValue && (ExtraType.Value == Model.Entities.ExtraType.ThemeSong || ExtraType.Value == Model.Entities.ExtraType.ThemeVideo);
             }
             }
         }
         }
 
 
@@ -1045,7 +1048,7 @@ namespace MediaBrowser.Controller.Entities
                         audio = dbItem;
                         audio = dbItem;
                     }
                     }
 
 
-                    audio.ExtraType = ExtraType.ThemeSong;
+                    audio.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeSong;
 
 
                     return audio;
                     return audio;
 
 
@@ -1075,7 +1078,7 @@ namespace MediaBrowser.Controller.Entities
                         item = dbItem;
                         item = dbItem;
                     }
                     }
 
 
-                    item.ExtraType = ExtraType.ThemeVideo;
+                    item.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeVideo;
 
 
                     return item;
                     return item;
 
 
@@ -1225,7 +1228,7 @@ namespace MediaBrowser.Controller.Entities
 
 
                 if (!i.IsThemeMedia)
                 if (!i.IsThemeMedia)
                 {
                 {
-                    i.ExtraType = ExtraType.ThemeVideo;
+                    i.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeVideo;
                     subOptions.ForceSave = true;
                     subOptions.ForceSave = true;
                 }
                 }
 
 
@@ -1255,7 +1258,7 @@ namespace MediaBrowser.Controller.Entities
 
 
                 if (!i.IsThemeMedia)
                 if (!i.IsThemeMedia)
                 {
                 {
-                    i.ExtraType = ExtraType.ThemeSong;
+                    i.ExtraType = MediaBrowser.Model.Entities.ExtraType.ThemeSong;
                     subOptions.ForceSave = true;
                     subOptions.ForceSave = true;
                 }
                 }
 
 

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

@@ -35,15 +35,6 @@ namespace MediaBrowser.Controller.Entities
         public List<LinkedChild> LinkedAlternateVersions { get; set; }
         public List<LinkedChild> LinkedAlternateVersions { get; set; }
         public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
         public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
 
 
-        [IgnoreDataMember]
-        public override bool IsThemeMedia
-        {
-            get
-            {
-                return ExtraType.HasValue && ExtraType.Value == Model.Entities.ExtraType.ThemeVideo;
-            }
-        }
-
         [IgnoreDataMember]
         [IgnoreDataMember]
         public override bool SupportsPlayedStatus
         public override bool SupportsPlayedStatus
         {
         {
@@ -87,9 +78,6 @@ namespace MediaBrowser.Controller.Entities
             get { return true; }
             get { return true; }
         }
         }
 
 
-        public int? TotalBitrate { get; set; }
-        public ExtraType? ExtraType { get; set; }
-
         /// <summary>
         /// <summary>
         /// Gets or sets the timestamp.
         /// Gets or sets the timestamp.
         /// </summary>
         /// </summary>

+ 1 - 0
MediaBrowser.Model/Configuration/ServerConfiguration.cs

@@ -170,6 +170,7 @@ namespace MediaBrowser.Model.Configuration
         public bool EnableAutomaticRestart { get; set; }
         public bool EnableAutomaticRestart { get; set; }
         public bool SkipDeserializationForBasicTypes { get; set; }
         public bool SkipDeserializationForBasicTypes { get; set; }
         public bool SkipDeserializationForPrograms { get; set; }
         public bool SkipDeserializationForPrograms { get; set; }
+        public bool SkipDeserializationForAudio { get; set; }
 
 
         public PathSubstitution[] PathSubstitutions { get; set; }
         public PathSubstitution[] PathSubstitutions { get; set; }
 
 

+ 39 - 2
MediaBrowser.Server.Implementations/Channels/ChannelManager.cs

@@ -252,6 +252,42 @@ namespace MediaBrowser.Server.Implementations.Channels
             return item;
             return item;
         }
         }
 
 
+        private List<ChannelMediaInfo> GetSavedMediaSources(BaseItem item)
+        {
+            var path = Path.Combine(item.GetInternalMetadataPath(), "channelmediasources.json");
+
+            try
+            {
+                return _jsonSerializer.DeserializeFromFile<List<ChannelMediaInfo>>(path) ?? new List<ChannelMediaInfo>();
+            }
+            catch
+            {
+                return new List<ChannelMediaInfo>();
+            }
+        }
+
+        private void SaveMediaSources(BaseItem item, List<ChannelMediaInfo> mediaSources)
+        {
+            var path = Path.Combine(item.GetInternalMetadataPath(), "channelmediasources.json");
+
+            if (mediaSources == null || mediaSources.Count == 0)
+            {
+                try
+                {
+                    _fileSystem.DeleteFile(path);
+                }
+                catch
+                {
+                    
+                }
+                return;
+            }
+
+            _fileSystem.CreateDirectory(Path.GetDirectoryName(path));
+
+            _jsonSerializer.SerializeToFile(mediaSources, path);
+        }
+
         public async Task<IEnumerable<MediaSourceInfo>> GetStaticMediaSources(BaseItem item, bool includeCachedVersions, CancellationToken cancellationToken)
         public async Task<IEnumerable<MediaSourceInfo>> GetStaticMediaSources(BaseItem item, bool includeCachedVersions, CancellationToken cancellationToken)
         {
         {
             IEnumerable<ChannelMediaInfo> results = new List<ChannelMediaInfo>();
             IEnumerable<ChannelMediaInfo> results = new List<ChannelMediaInfo>();
@@ -263,7 +299,7 @@ namespace MediaBrowser.Server.Implementations.Channels
             var audio = item as Audio;
             var audio = item as Audio;
             if (audio != null)
             if (audio != null)
             {
             {
-                results = audio.ChannelMediaSources ?? new List<ChannelMediaInfo>();
+                results = audio.ChannelMediaSources ?? GetSavedMediaSources(audio);
             }
             }
 
 
             var sources = SortMediaInfoResults(results)
             var sources = SortMediaInfoResults(results)
@@ -1385,7 +1421,6 @@ namespace MediaBrowser.Server.Implementations.Channels
             if (channelAudioItem != null)
             if (channelAudioItem != null)
             {
             {
                 channelAudioItem.ExtraType = info.ExtraType;
                 channelAudioItem.ExtraType = info.ExtraType;
-                channelAudioItem.ChannelMediaSources = info.MediaSources;
 
 
                 var mediaSource = info.MediaSources.FirstOrDefault();
                 var mediaSource = info.MediaSources.FirstOrDefault();
                 item.Path = mediaSource == null ? null : mediaSource.Path;
                 item.Path = mediaSource == null ? null : mediaSource.Path;
@@ -1426,6 +1461,8 @@ namespace MediaBrowser.Server.Implementations.Channels
                 await item.UpdateToRepository(ItemUpdateType.None, cancellationToken).ConfigureAwait(false);
                 await item.UpdateToRepository(ItemUpdateType.None, cancellationToken).ConfigureAwait(false);
             }
             }
 
 
+            SaveMediaSources(item, info.MediaSources);
+
             return item;
             return item;
         }
         }
 
 

+ 88 - 2
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

@@ -285,6 +285,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
             _connection.AddColumn(Logger, "TypedBaseItems", "ProductionLocations", "Text");
             _connection.AddColumn(Logger, "TypedBaseItems", "ProductionLocations", "Text");
             _connection.AddColumn(Logger, "TypedBaseItems", "ThemeSongIds", "Text");
             _connection.AddColumn(Logger, "TypedBaseItems", "ThemeSongIds", "Text");
             _connection.AddColumn(Logger, "TypedBaseItems", "ThemeVideoIds", "Text");
             _connection.AddColumn(Logger, "TypedBaseItems", "ThemeVideoIds", "Text");
+            _connection.AddColumn(Logger, "TypedBaseItems", "TotalBitrate", "INT");
+            _connection.AddColumn(Logger, "TypedBaseItems", "ExtraType", "Text");
+            _connection.AddColumn(Logger, "TypedBaseItems", "Artists", "Text");
+            _connection.AddColumn(Logger, "TypedBaseItems", "AlbumArtists", "Text");
 
 
             _connection.AddColumn(Logger, "ItemValues", "CleanValue", "Text");
             _connection.AddColumn(Logger, "ItemValues", "CleanValue", "Text");
 
 
@@ -435,7 +439,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
             "Images",
             "Images",
             "ProductionLocations",
             "ProductionLocations",
             "ThemeSongIds",
             "ThemeSongIds",
-            "ThemeVideoIds"
+            "ThemeVideoIds",
+            "TotalBitrate",
+            "ExtraType",
+            "Artists",
+            "AlbumArtists"
         };
         };
 
 
         private readonly string[] _mediaStreamSaveColumns =
         private readonly string[] _mediaStreamSaveColumns =
@@ -566,7 +574,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 "Images",
                 "Images",
                 "ProductionLocations",
                 "ProductionLocations",
                 "ThemeSongIds",
                 "ThemeSongIds",
-                "ThemeVideoIds"
+                "ThemeVideoIds",
+                "TotalBitrate",
+                "ExtraType",
+                "Artists",
+                "AlbumArtists"
             };
             };
             _saveItemCommand = _connection.CreateCommand();
             _saveItemCommand = _connection.CreateCommand();
             _saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
             _saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
@@ -1046,6 +1058,35 @@ namespace MediaBrowser.Server.Implementations.Persistence
                         _saveItemCommand.GetParameter(index++).Value = null;
                         _saveItemCommand.GetParameter(index++).Value = null;
                     }
                     }
 
 
+                    _saveItemCommand.GetParameter(index++).Value = item.TotalBitrate;
+                    _saveItemCommand.GetParameter(index++).Value = item.ExtraType;
+
+                    var hasArtists = item as IHasArtist;
+                    if (hasArtists != null)
+                    {
+                        if (hasArtists.Artists.Count > 0)
+                        {
+                            _saveItemCommand.GetParameter(index++).Value = string.Join("|", hasArtists.Artists.ToArray());
+                        }
+                        else
+                        {
+                            _saveItemCommand.GetParameter(index++).Value = null;
+                        }
+                    }
+
+                    var hasAlbumArtists = item as IHasAlbumArtist;
+                    if (hasAlbumArtists != null)
+                    {
+                        if (hasAlbumArtists.AlbumArtists.Count > 0)
+                        {
+                            _saveItemCommand.GetParameter(index++).Value = string.Join("|", hasAlbumArtists.AlbumArtists.ToArray());
+                        }
+                        else
+                        {
+                            _saveItemCommand.GetParameter(index++).Value = null;
+                        }
+                    }
+
                     _saveItemCommand.Transaction = transaction;
                     _saveItemCommand.Transaction = transaction;
 
 
                     _saveItemCommand.ExecuteNonQuery();
                     _saveItemCommand.ExecuteNonQuery();
@@ -1305,6 +1346,25 @@ namespace MediaBrowser.Server.Implementations.Persistence
                     return false;
                     return false;
                 }
                 }
             }
             }
+            if (_config.Configuration.SkipDeserializationForAudio)
+            {
+                if (type == typeof(Audio))
+                {
+                    return false;
+                }
+                if (type == typeof(LiveTvAudioRecording))
+                {
+                    return false;
+                }
+                if (type == typeof(AudioPodcast))
+                {
+                    return false;
+                }
+                if (type == typeof(MusicAlbum))
+                {
+                    return false;
+                }
+            }
 
 
             return true;
             return true;
         }
         }
@@ -1884,6 +1944,32 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 index++;
                 index++;
             }
             }
 
 
+            if (!reader.IsDBNull(index))
+            {
+                item.TotalBitrate = reader.GetInt32(index);
+            }
+            index++;
+
+            if (!reader.IsDBNull(index))
+            {
+                item.ExtraType = (ExtraType)Enum.Parse(typeof(ExtraType), reader.GetString(index), true);
+            }
+            index++;
+
+            var hasArtists = item as IHasArtist;
+            if (hasArtists != null && !reader.IsDBNull(index))
+            {
+                hasArtists.Artists = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+            }
+            index++;
+
+            var hasAlbumArtists = item as IHasAlbumArtist;
+            if (hasAlbumArtists != null && !reader.IsDBNull(index))
+            {
+                hasAlbumArtists.AlbumArtists = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+            }
+            index++;
+
             if (string.IsNullOrWhiteSpace(item.Tagline))
             if (string.IsNullOrWhiteSpace(item.Tagline))
             {
             {
                 var movie = item as Movie;
                 var movie = item as Movie;

+ 34 - 181
MediaBrowser.Server.Startup.Common/ApplicationHost.cs

@@ -434,187 +434,40 @@ namespace MediaBrowser.Server.Startup.Common
 
 
             var result = new JsonSerializer(FileSystemManager, LogManager.GetLogger("JsonSerializer"));
             var result = new JsonSerializer(FileSystemManager, LogManager.GetLogger("JsonSerializer"));
 
 
-            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ShortOverview" };
-            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "Taglines" };
-            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "Keywords" };
-            ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ShortOverview" };
-            ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ShortOverview" };
-            ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "PlaceOfBirth" };
-
-            ServiceStack.Text.JsConfig<LiveTvProgram>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<LiveTvChannel>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<LiveTvVideoRecording>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<LiveTvAudioRecording>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Audio>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<MusicAlbum>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<MusicArtist>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<MusicGenre>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<MusicVideo>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Playlist>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<AudioPodcast>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<BoxSet>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Episode>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Season>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Book>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<CollectionFolder>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Folder>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Game>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<GameGenre>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<GameSystem>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Genre>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Photo>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<PhotoAlbum>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Studio>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<UserRootFolder>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<UserView>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Video>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Year>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<Channel>.ExcludePropertyNames = new[] { "ProviderIds" };
-            ServiceStack.Text.JsConfig<AggregateFolder>.ExcludePropertyNames = new[] { "ProviderIds" };
-
-            ServiceStack.Text.JsConfig<LiveTvProgram>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<LiveTvChannel>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<LiveTvVideoRecording>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<LiveTvAudioRecording>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Audio>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<MusicAlbum>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<MusicArtist>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<MusicGenre>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<MusicVideo>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Playlist>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<AudioPodcast>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<BoxSet>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Episode>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Season>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Book>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<CollectionFolder>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Folder>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Game>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<GameGenre>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<GameSystem>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Genre>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Photo>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<PhotoAlbum>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Studio>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<UserRootFolder>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<UserView>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Video>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Year>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<Channel>.ExcludePropertyNames = new[] { "ImageInfos" };
-            ServiceStack.Text.JsConfig<AggregateFolder>.ExcludePropertyNames = new[] { "ImageInfos" };
-
-            ServiceStack.Text.JsConfig<LiveTvProgram>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<LiveTvChannel>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<LiveTvVideoRecording>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<LiveTvAudioRecording>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Audio>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<MusicAlbum>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<MusicArtist>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<MusicGenre>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<MusicVideo>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Playlist>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<AudioPodcast>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<BoxSet>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Episode>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Season>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Book>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<CollectionFolder>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Folder>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Game>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<GameGenre>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<GameSystem>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Genre>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Photo>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<PhotoAlbum>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Studio>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<UserRootFolder>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<UserView>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Video>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Year>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<Channel>.ExcludePropertyNames = new[] { "ProductionLocations" };
-            ServiceStack.Text.JsConfig<AggregateFolder>.ExcludePropertyNames = new[] { "ProductionLocations" };
-
-            ServiceStack.Text.JsConfig<LiveTvProgram>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<LiveTvChannel>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<LiveTvVideoRecording>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<LiveTvAudioRecording>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Audio>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<MusicAlbum>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<MusicArtist>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<MusicGenre>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<MusicVideo>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Playlist>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<AudioPodcast>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<BoxSet>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Episode>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Season>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Book>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<CollectionFolder>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Folder>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Game>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<GameGenre>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<GameSystem>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Genre>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Photo>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<PhotoAlbum>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Studio>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<UserRootFolder>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<UserView>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Video>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Year>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<Channel>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-            ServiceStack.Text.JsConfig<AggregateFolder>.ExcludePropertyNames = new[] { "ThemeSongIds" };
-
-            ServiceStack.Text.JsConfig<LiveTvProgram>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<LiveTvChannel>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<LiveTvVideoRecording>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<LiveTvAudioRecording>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Audio>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<MusicAlbum>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<MusicArtist>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<MusicGenre>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<MusicVideo>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Playlist>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<AudioPodcast>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<BoxSet>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Episode>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Season>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Book>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<CollectionFolder>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Folder>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Game>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<GameGenre>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<GameSystem>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Genre>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Photo>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<PhotoAlbum>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Studio>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<UserRootFolder>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<UserView>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Video>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Year>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<Channel>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
-            ServiceStack.Text.JsConfig<AggregateFolder>.ExcludePropertyNames = new[] { "ThemeVideoIds" };
+            ServiceStack.Text.JsConfig<LiveTvProgram>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<LiveTvChannel>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<LiveTvVideoRecording>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<LiveTvAudioRecording>.ExcludePropertyNames = new[] { "Artists", "AlbumArtists", "ChannelMediaSources", "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Series>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Audio>.ExcludePropertyNames = new[] { "Artists", "AlbumArtists", "ChannelMediaSources", "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<MusicAlbum>.ExcludePropertyNames = new[] { "Artists", "AlbumArtists", "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<MusicArtist>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<MusicGenre>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<MusicVideo>.ExcludePropertyNames = new[] { "Artists", "AlbumArtists", "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Movie>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Playlist>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<AudioPodcast>.ExcludePropertyNames = new[] { "Artists", "AlbumArtists", "ChannelMediaSources", "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Trailer>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<BoxSet>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Episode>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Season>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Book>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<CollectionFolder>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Folder>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Game>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<GameGenre>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<GameSystem>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Genre>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Person>.ExcludePropertyNames = new[] { "PlaceOfBirth", "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Photo>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<PhotoAlbum>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Studio>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<UserRootFolder>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<UserView>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Video>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Year>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<Channel>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
+            ServiceStack.Text.JsConfig<AggregateFolder>.ExcludePropertyNames = new[] { "ProviderIds", "ImageInfos", "ProductionLocations", "ThemeSongIds", "ThemeVideoIds", "TotalBitrate", "ShortOverview", "Taglines", "Keywords", "ExtraType" };
 
 
             return result;
             return result;
         }
         }

+ 12 - 5
Mono.Nat/project.fragment.lock.json

@@ -5,23 +5,30 @@
       "type": "project",
       "type": "project",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "compile": {
       "compile": {
-        "bin/Release/MediaBrowser.Common.dll": {}
+        "bin/Debug/MediaBrowser.Common.dll": {}
       },
       },
       "runtime": {
       "runtime": {
-        "bin/Release/MediaBrowser.Common.dll": {}
+        "bin/Debug/MediaBrowser.Common.dll": {}
+      },
+      "contentFiles": {
+        "bin/Debug/MediaBrowser.Common.pdb": {
+          "buildAction": "None",
+          "codeLanguage": "any",
+          "copyToOutput": true
+        }
       }
       }
     },
     },
     "MediaBrowser.Model/1.0.0": {
     "MediaBrowser.Model/1.0.0": {
       "type": "project",
       "type": "project",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "framework": ".NETPortable,Version=v4.5,Profile=Profile7",
       "compile": {
       "compile": {
-        "bin/Release/MediaBrowser.Model.dll": {}
+        "bin/Debug/MediaBrowser.Model.dll": {}
       },
       },
       "runtime": {
       "runtime": {
-        "bin/Release/MediaBrowser.Model.dll": {}
+        "bin/Debug/MediaBrowser.Model.dll": {}
       },
       },
       "contentFiles": {
       "contentFiles": {
-        "bin/Release/MediaBrowser.Model.pdb": {
+        "bin/Debug/MediaBrowser.Model.pdb": {
           "buildAction": "None",
           "buildAction": "None",
           "codeLanguage": "any",
           "codeLanguage": "any",
           "copyToOutput": true
           "copyToOutput": true