|
|
|
|
@@ -102,7 +102,12 @@ using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using CommonIO;
|
|
|
|
|
using MediaBrowser.Api.Playback;
|
|
|
|
|
using MediaBrowser.Common.Implementations.Serialization;
|
|
|
|
|
using MediaBrowser.Common.Implementations.Updates;
|
|
|
|
|
using MediaBrowser.Controller.Entities.Audio;
|
|
|
|
|
using MediaBrowser.Controller.Entities.Movies;
|
|
|
|
|
using MediaBrowser.Controller.Entities.TV;
|
|
|
|
|
using MediaBrowser.Model.Serialization;
|
|
|
|
|
|
|
|
|
|
namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
{
|
|
|
|
|
@@ -366,6 +371,195 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
LogManager.RemoveConsoleOutput();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override IJsonSerializer CreateJsonSerializer()
|
|
|
|
|
{
|
|
|
|
|
var result = base.CreateJsonSerializer();
|
|
|
|
|
|
|
|
|
|
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" };
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override Task Init(IProgress<double> progress)
|
|
|
|
|
{
|
|
|
|
|
HttpPort = ServerConfigurationManager.Configuration.HttpServerPortNumber;
|
|
|
|
|
@@ -438,13 +632,12 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
RegisterSingleInstance(UserDataManager);
|
|
|
|
|
|
|
|
|
|
UserRepository = await GetUserRepository().ConfigureAwait(false);
|
|
|
|
|
RegisterSingleInstance(UserRepository);
|
|
|
|
|
|
|
|
|
|
var displayPreferencesRepo = new SqliteDisplayPreferencesRepository(LogManager, JsonSerializer, ApplicationPaths, NativeApp.GetDbConnector());
|
|
|
|
|
var displayPreferencesRepo = new SqliteDisplayPreferencesRepository(LogManager, JsonSerializer, ApplicationPaths, NativeApp.GetDbConnector(), MemoryStreamProvider);
|
|
|
|
|
DisplayPreferencesRepository = displayPreferencesRepo;
|
|
|
|
|
RegisterSingleInstance(DisplayPreferencesRepository);
|
|
|
|
|
|
|
|
|
|
var itemRepo = new SqliteItemRepository(ServerConfigurationManager, JsonSerializer, LogManager, NativeApp.GetDbConnector());
|
|
|
|
|
var itemRepo = new SqliteItemRepository(ServerConfigurationManager, JsonSerializer, LogManager, NativeApp.GetDbConnector(), MemoryStreamProvider);
|
|
|
|
|
ItemRepository = itemRepo;
|
|
|
|
|
RegisterSingleInstance(ItemRepository);
|
|
|
|
|
|
|
|
|
|
@@ -469,17 +662,17 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
LibraryMonitor = new LibraryMonitor(LogManager, TaskManager, LibraryManager, ServerConfigurationManager, FileSystemManager, this);
|
|
|
|
|
RegisterSingleInstance(LibraryMonitor);
|
|
|
|
|
|
|
|
|
|
ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, LibraryMonitor, LogManager, FileSystemManager, ApplicationPaths, () => LibraryManager, JsonSerializer);
|
|
|
|
|
ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, LibraryMonitor, LogManager, FileSystemManager, ApplicationPaths, () => LibraryManager, JsonSerializer, MemoryStreamProvider);
|
|
|
|
|
RegisterSingleInstance(ProviderManager);
|
|
|
|
|
|
|
|
|
|
RegisterSingleInstance<ISearchEngine>(() => new SearchEngine(LogManager, LibraryManager, UserManager));
|
|
|
|
|
|
|
|
|
|
HttpServer = ServerFactory.CreateServer(this, LogManager, ServerConfigurationManager, NetworkManager, "Emby", "web/index.html");
|
|
|
|
|
HttpServer = ServerFactory.CreateServer(this, LogManager, ServerConfigurationManager, NetworkManager, MemoryStreamProvider, "Emby", "web/index.html");
|
|
|
|
|
HttpServer.GlobalResponse = LocalizationManager.GetLocalizedString("StartupEmbyServerIsLoading");
|
|
|
|
|
RegisterSingleInstance(HttpServer, false);
|
|
|
|
|
progress.Report(10);
|
|
|
|
|
|
|
|
|
|
ServerManager = new ServerManager(this, JsonSerializer, LogManager.GetLogger("ServerManager"), ServerConfigurationManager);
|
|
|
|
|
ServerManager = new ServerManager(this, JsonSerializer, LogManager.GetLogger("ServerManager"), ServerConfigurationManager, MemoryStreamProvider);
|
|
|
|
|
RegisterSingleInstance(ServerManager);
|
|
|
|
|
|
|
|
|
|
var innerProgress = new ActionableProgress<double>();
|
|
|
|
|
@@ -491,7 +684,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
TVSeriesManager = new TVSeriesManager(UserManager, UserDataManager, LibraryManager, ServerConfigurationManager);
|
|
|
|
|
RegisterSingleInstance(TVSeriesManager);
|
|
|
|
|
|
|
|
|
|
SyncManager = new SyncManager(LibraryManager, SyncRepository, ImageProcessor, LogManager.GetLogger("SyncManager"), UserManager, () => DtoService, this, TVSeriesManager, () => MediaEncoder, FileSystemManager, () => SubtitleEncoder, ServerConfigurationManager, UserDataManager, () => MediaSourceManager, JsonSerializer, TaskManager);
|
|
|
|
|
SyncManager = new SyncManager(LibraryManager, SyncRepository, ImageProcessor, LogManager.GetLogger("SyncManager"), UserManager, () => DtoService, this, TVSeriesManager, () => MediaEncoder, FileSystemManager, () => SubtitleEncoder, ServerConfigurationManager, UserDataManager, () => MediaSourceManager, JsonSerializer, TaskManager, MemoryStreamProvider);
|
|
|
|
|
RegisterSingleInstance(SyncManager);
|
|
|
|
|
|
|
|
|
|
DtoService = new DtoService(LogManager.GetLogger("DtoService"), LibraryManager, UserDataManager, ItemRepository, ImageProcessor, ServerConfigurationManager, FileSystemManager, ProviderManager, () => ChannelManager, SyncManager, this, () => DeviceManager, () => MediaSourceManager, () => LiveTvManager);
|
|
|
|
|
@@ -520,7 +713,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
MediaSourceManager = new MediaSourceManager(ItemRepository, UserManager, LibraryManager, LogManager.GetLogger("MediaSourceManager"), JsonSerializer, FileSystemManager, UserDataManager);
|
|
|
|
|
RegisterSingleInstance(MediaSourceManager);
|
|
|
|
|
|
|
|
|
|
SessionManager = new SessionManager(UserDataManager, LogManager.GetLogger("SessionManager"), UserRepository, LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager, MediaSourceManager);
|
|
|
|
|
SessionManager = new SessionManager(UserDataManager, LogManager.GetLogger("SessionManager"), LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager, MediaSourceManager);
|
|
|
|
|
RegisterSingleInstance(SessionManager);
|
|
|
|
|
|
|
|
|
|
var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, ApplicationPaths, LogManager.GetLogger("Dlna"), JsonSerializer, this);
|
|
|
|
|
@@ -553,7 +746,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
SubtitleManager = new SubtitleManager(LogManager.GetLogger("SubtitleManager"), FileSystemManager, LibraryMonitor, LibraryManager, MediaSourceManager);
|
|
|
|
|
RegisterSingleInstance(SubtitleManager);
|
|
|
|
|
|
|
|
|
|
RegisterSingleInstance<IDeviceDiscovery>(new DeviceDiscovery(LogManager.GetLogger("IDeviceDiscovery"), ServerConfigurationManager, this, NetworkManager));
|
|
|
|
|
RegisterSingleInstance<IDeviceDiscovery>(new DeviceDiscovery(LogManager.GetLogger("IDeviceDiscovery"), ServerConfigurationManager));
|
|
|
|
|
|
|
|
|
|
ChapterManager = new ChapterManager(LibraryManager, LogManager.GetLogger("ChapterManager"), ServerConfigurationManager, ItemRepository);
|
|
|
|
|
RegisterSingleInstance(ChapterManager);
|
|
|
|
|
@@ -564,14 +757,10 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
EncodingManager = new EncodingManager(FileSystemManager, Logger, MediaEncoder, ChapterManager, LibraryManager);
|
|
|
|
|
RegisterSingleInstance(EncodingManager);
|
|
|
|
|
|
|
|
|
|
RegisterSingleInstance(NativeApp.GetPowerManagement());
|
|
|
|
|
|
|
|
|
|
var sharingRepo = new SharingRepository(LogManager, ApplicationPaths, NativeApp.GetDbConnector());
|
|
|
|
|
await sharingRepo.Initialize().ConfigureAwait(false);
|
|
|
|
|
RegisterSingleInstance<ISharingManager>(new SharingManager(sharingRepo, ServerConfigurationManager, LibraryManager, this));
|
|
|
|
|
|
|
|
|
|
RegisterSingleInstance<ISsdpHandler>(new SsdpHandler(LogManager.GetLogger("SsdpHandler"), ServerConfigurationManager, this));
|
|
|
|
|
|
|
|
|
|
var activityLogRepo = await GetActivityLogRepository().ConfigureAwait(false);
|
|
|
|
|
RegisterSingleInstance(activityLogRepo);
|
|
|
|
|
RegisterSingleInstance<IActivityManager>(new ActivityManager(LogManager.GetLogger("ActivityManager"), activityLogRepo, UserManager));
|
|
|
|
|
@@ -581,7 +770,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
RegisterSingleInstance<ISessionContext>(new SessionContext(UserManager, authContext, SessionManager));
|
|
|
|
|
RegisterSingleInstance<IAuthService>(new AuthService(UserManager, authContext, ServerConfigurationManager, ConnectManager, SessionManager, DeviceManager));
|
|
|
|
|
|
|
|
|
|
SubtitleEncoder = new SubtitleEncoder(LibraryManager, LogManager.GetLogger("SubtitleEncoder"), ApplicationPaths, FileSystemManager, MediaEncoder, JsonSerializer, HttpClient, MediaSourceManager);
|
|
|
|
|
SubtitleEncoder = new SubtitleEncoder(LibraryManager, LogManager.GetLogger("SubtitleEncoder"), ApplicationPaths, FileSystemManager, MediaEncoder, JsonSerializer, HttpClient, MediaSourceManager, MemoryStreamProvider);
|
|
|
|
|
RegisterSingleInstance(SubtitleEncoder);
|
|
|
|
|
|
|
|
|
|
await displayPreferencesRepo.Initialize().ConfigureAwait(false);
|
|
|
|
|
@@ -673,7 +862,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
() => SubtitleEncoder,
|
|
|
|
|
() => MediaSourceManager,
|
|
|
|
|
HttpClient,
|
|
|
|
|
ZipClient);
|
|
|
|
|
ZipClient, MemoryStreamProvider);
|
|
|
|
|
|
|
|
|
|
MediaEncoder = mediaEncoder;
|
|
|
|
|
RegisterSingleInstance(MediaEncoder);
|
|
|
|
|
@@ -685,19 +874,11 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
/// <returns>Task{IUserRepository}.</returns>
|
|
|
|
|
private async Task<IUserRepository> GetUserRepository()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var repo = new SqliteUserRepository(LogManager, ApplicationPaths, JsonSerializer, NativeApp.GetDbConnector());
|
|
|
|
|
var repo = new SqliteUserRepository(LogManager, ApplicationPaths, JsonSerializer, NativeApp.GetDbConnector(), MemoryStreamProvider);
|
|
|
|
|
|
|
|
|
|
await repo.Initialize().ConfigureAwait(false);
|
|
|
|
|
await repo.Initialize().ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
return repo;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Logger.ErrorException("Error opening user db", ex);
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
return repo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
@@ -788,19 +969,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
/// </summary>
|
|
|
|
|
protected override void FindParts()
|
|
|
|
|
{
|
|
|
|
|
var isAuthorized = ServerConfigurationManager.Configuration.IsPortAuthorized;
|
|
|
|
|
if (isAuthorized)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
isAuthorized = !NativeApp.PortsRequireAuthorization(ConfigurationManager.CommonApplicationPaths.ApplicationPath);
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!isAuthorized)
|
|
|
|
|
if (!ServerConfigurationManager.Configuration.IsPortAuthorized)
|
|
|
|
|
{
|
|
|
|
|
RegisterServerWithAdministratorAccess();
|
|
|
|
|
ServerConfigurationManager.Configuration.IsPortAuthorized = true;
|
|
|
|
|
@@ -826,7 +995,6 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
GetExports<IMetadataService>(),
|
|
|
|
|
GetExports<IMetadataProvider>(),
|
|
|
|
|
GetExports<IMetadataSaver>(),
|
|
|
|
|
GetExports<IImageSaver>(),
|
|
|
|
|
GetExports<IExternalId>());
|
|
|
|
|
|
|
|
|
|
ImageProcessor.AddParts(GetExports<IImageEnhancer>());
|
|
|
|
|
@@ -834,7 +1002,6 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
LiveTvManager.AddParts(GetExports<ILiveTvService>(), GetExports<ITunerHost>(), GetExports<IListingsProvider>());
|
|
|
|
|
|
|
|
|
|
SubtitleManager.AddParts(GetExports<ISubtitleProvider>());
|
|
|
|
|
ChapterManager.AddParts(GetExports<IChapterProvider>());
|
|
|
|
|
|
|
|
|
|
SessionManager.AddParts(GetExports<ISessionControllerFactory>());
|
|
|
|
|
|
|
|
|
|
@@ -858,12 +1025,12 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
{
|
|
|
|
|
var prefixes = new List<string>
|
|
|
|
|
{
|
|
|
|
|
"http://"+i+":" + ServerConfigurationManager.Configuration.HttpServerPortNumber + "/"
|
|
|
|
|
"http://"+i+":" + HttpPort + "/"
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(CertificatePath))
|
|
|
|
|
{
|
|
|
|
|
prefixes.Add("https://" + i + ":" + ServerConfigurationManager.Configuration.HttpsPortNumber + "/");
|
|
|
|
|
prefixes.Add("https://" + i + ":" + HttpsPort + "/");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return prefixes;
|
|
|
|
|
@@ -877,6 +1044,23 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
{
|
|
|
|
|
CertificatePath = GetCertificatePath(true);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
ServerManager.Start(GetUrlPrefixes(), CertificatePath);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Logger.ErrorException("Error starting http server", ex);
|
|
|
|
|
|
|
|
|
|
if (HttpPort == 8096)
|
|
|
|
|
{
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HttpPort = 8096;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
ServerManager.Start(GetUrlPrefixes(), CertificatePath);
|
|
|
|
|
@@ -1124,7 +1308,8 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
SupportsLibraryMonitor = SupportsLibraryMonitor,
|
|
|
|
|
EncoderLocationType = MediaEncoder.EncoderLocationType,
|
|
|
|
|
SystemArchitecture = NativeApp.Environment.SystemArchitecture,
|
|
|
|
|
SystemUpdateLevel = ConfigurationManager.CommonConfiguration.SystemUpdateLevel
|
|
|
|
|
SystemUpdateLevel = ConfigurationManager.CommonConfiguration.SystemUpdateLevel,
|
|
|
|
|
PackageName = _startupOptions.GetOption("package")
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -1182,20 +1367,24 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
|
|
|
|
|
public async Task<List<IPAddress>> GetLocalIpAddresses()
|
|
|
|
|
{
|
|
|
|
|
var localAddresses = NetworkManager.GetLocalIpAddresses()
|
|
|
|
|
.Where(IsIpAddressValid)
|
|
|
|
|
.ToList();
|
|
|
|
|
var addresses = NetworkManager.GetLocalIpAddresses().ToList();
|
|
|
|
|
var list = new List<IPAddress>();
|
|
|
|
|
|
|
|
|
|
return localAddresses;
|
|
|
|
|
foreach (var address in addresses)
|
|
|
|
|
{
|
|
|
|
|
var valid = await IsIpAddressValidAsync(address).ConfigureAwait(false);
|
|
|
|
|
if (valid)
|
|
|
|
|
{
|
|
|
|
|
list.Add(address);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private readonly ConcurrentDictionary<string, bool> _validAddressResults = new ConcurrentDictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
|
|
|
|
|
private DateTime _lastAddressCacheClear;
|
|
|
|
|
private bool IsIpAddressValid(IPAddress address)
|
|
|
|
|
{
|
|
|
|
|
return IsIpAddressValidInternal(address).Result;
|
|
|
|
|
}
|
|
|
|
|
private async Task<bool> IsIpAddressValidInternal(IPAddress address)
|
|
|
|
|
private async Task<bool> IsIpAddressValidAsync(IPAddress address)
|
|
|
|
|
{
|
|
|
|
|
if (IPAddress.IsLoopback(address))
|
|
|
|
|
{
|
|
|
|
|
@@ -1205,7 +1394,7 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
var apiUrl = GetLocalApiUrl(address);
|
|
|
|
|
apiUrl += "/system/ping";
|
|
|
|
|
|
|
|
|
|
if ((DateTime.UtcNow - _lastAddressCacheClear).TotalMinutes >= 5)
|
|
|
|
|
if ((DateTime.UtcNow - _lastAddressCacheClear).TotalMinutes >= 10)
|
|
|
|
|
{
|
|
|
|
|
_lastAddressCacheClear = DateTime.UtcNow;
|
|
|
|
|
_validAddressResults.Clear();
|
|
|
|
|
@@ -1225,7 +1414,8 @@ namespace MediaBrowser.Server.Startup.Common
|
|
|
|
|
LogErrorResponseBody = false,
|
|
|
|
|
LogErrors = false,
|
|
|
|
|
LogRequest = false,
|
|
|
|
|
TimeoutMs = 30000
|
|
|
|
|
TimeoutMs = 30000,
|
|
|
|
|
BufferContent = false
|
|
|
|
|
|
|
|
|
|
}, "POST").ConfigureAwait(false))
|
|
|
|
|
{
|
|
|
|
|
|