From eab030df7ff0f3a78b1aa01f06eb30f71df5a391 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 26 Sep 2014 22:28:13 -0400 Subject: [PATCH] fixes #916 - Support reading playstate data from nfo's --- MediaBrowser.Api/Images/ImageService.cs | 24 ++ .../Providers/ILocalMetadataProvider.cs | 2 + .../Providers/IProviderManager.cs | 20 ++ .../Entities/UserDataSaveReason.cs | 14 +- .../AdultVideos/AdultVideoMetadataService.cs | 8 +- .../Books/BookMetadataService.cs | 6 +- .../BoxSets/BoxSetMetadataService.cs | 5 +- .../AudioChannelItemMetadataService.cs | 4 +- .../Channels/ChannelMetadataService.cs | 4 +- .../VideoChannelItemMetadataService.cs | 4 +- .../Folders/FolderMetadataService.cs | 6 +- .../GameGenres/GameGenreMetadataService.cs | 6 +- .../Games/GameMetadataService.cs | 4 +- .../Games/GameSystemMetadataService.cs | 6 +- .../Genres/GenreMetadataService.cs | 4 +- .../LiveTv/AudioRecordingService.cs | 6 +- .../LiveTv/ChannelMetadataService.cs | 6 +- .../LiveTv/ProgramMetadataService.cs | 6 +- .../LiveTv/VideoRecordingService.cs | 6 +- .../Manager/MetadataService.cs | 33 ++- .../Manager/ProviderManager.cs | 36 ++- .../Movies/MovieMetadataService.cs | 6 +- .../Movies/TrailerMetadataService.cs | 6 +- .../Music/AlbumMetadataService.cs | 6 +- .../Music/ArtistMetadataService.cs | 6 +- .../Music/AudioMetadataService.cs | 6 +- .../Music/MusicVideoMetadataService.cs | 6 +- .../MusicGenres/MusicGenreMetadataService.cs | 6 +- .../People/PersonMetadataService.cs | 6 +- .../Photos/PhotoMetadataService.cs | 4 +- .../Playlists/PlaylistMetadataService.cs | 4 +- .../Studios/StudioMetadataService.cs | 6 +- .../TV/EpisodeMetadataService.cs | 4 +- .../TV/SeasonMetadataService.cs | 4 +- .../TV/SeriesMetadataService.cs | 6 +- .../Users/UserMetadataService.cs | 6 +- .../Videos/VideoMetadataService.cs | 6 +- .../Years/YearMetadataService.cs | 6 +- .../Localization/JavaScript/es_MX.json | 28 +- .../Localization/JavaScript/kk.json | 28 +- .../Localization/JavaScript/nb.json | 18 +- .../Localization/JavaScript/nl.json | 18 +- .../Localization/JavaScript/pt_BR.json | 10 +- .../Localization/JavaScript/ru.json | 12 +- .../Localization/JavaScript/sv.json | 258 +++++++++--------- .../Localization/Server/es_MX.json | 8 +- .../Localization/Server/kk.json | 2 +- .../Localization/Server/nb.json | 44 +-- .../Localization/Server/ru.json | 6 +- .../Localization/Server/sv.json | 172 ++++++------ MediaBrowser.XbmcMetadata/EntryPoint.cs | 33 +-- .../Parsers/BaseNfoParser.cs | 187 ++++++++++++- .../Parsers/EpisodeNfoParser.cs | 11 +- .../Parsers/MovieNfoParser.cs | 10 +- .../Parsers/SeasonNfoParser.cs | 7 +- .../Parsers/SeriesNfoParser.cs | 7 +- .../Providers/AlbumNfoProvider.cs | 2 +- .../Providers/ArtistNfoProvider.cs | 2 +- .../Providers/BaseNfoProvider.cs | 9 +- .../Providers/BaseVideoNfoProvider.cs | 2 +- .../Providers/EpisodeNfoProvider.cs | 2 +- .../Providers/SeasonNfoProvider.cs | 2 +- .../Providers/SeriesNfoProvider.cs | 2 +- .../Savers/BaseNfoSaver.cs | 44 ++- 64 files changed, 709 insertions(+), 519 deletions(-) diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 89ee18265a..7f945ce483 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -108,6 +108,20 @@ namespace MediaBrowser.Api.Images [Route("/Studios/{Name}/Images/{Type}/{Index}", "GET")] [Route("/Years/{Year}/Images/{Type}", "GET")] [Route("/Years/{Year}/Images/{Type}/{Index}", "GET")] + [Route("/Artists/{Name}/Images/{Type}", "HEAD")] + [Route("/Artists/{Name}/Images/{Type}/{Index}", "HEAD")] + [Route("/Genres/{Name}/Images/{Type}", "HEAD")] + [Route("/Genres/{Name}/Images/{Type}/{Index}", "HEAD")] + [Route("/GameGenres/{Name}/Images/{Type}", "HEAD")] + [Route("/GameGenres/{Name}/Images/{Type}/{Index}", "HEAD")] + [Route("/MusicGenres/{Name}/Images/{Type}", "HEAD")] + [Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "HEAD")] + [Route("/Persons/{Name}/Images/{Type}", "HEAD")] + [Route("/Persons/{Name}/Images/{Type}/{Index}", "HEAD")] + [Route("/Studios/{Name}/Images/{Type}", "HEAD")] + [Route("/Studios/{Name}/Images/{Type}/{Index}", "HEAD")] + [Route("/Years/{Year}/Images/{Type}", "HEAD")] + [Route("/Years/{Year}/Images/{Type}/{Index}", "HEAD")] [Api(Description = "Gets an item by name image")] public class GetItemByNameImage : ImageRequest { @@ -406,6 +420,16 @@ namespace MediaBrowser.Api.Images return GetImage(request, item, false); } + public object Head(GetItemByNameImage request) + { + var pathInfo = PathInfo.Parse(Request.PathInfo); + var type = pathInfo.GetArgumentValue(0); + + var item = GetItemByName(request.Name, type, _libraryManager); + + return GetImage(request, item, true); + } + /// /// Posts the specified request. /// diff --git a/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs b/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs index 1320db67a0..75aad4063c 100644 --- a/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/ILocalMetadataProvider.cs @@ -37,11 +37,13 @@ namespace MediaBrowser.Controller.Providers public List Images { get; set; } public List Chapters { get; set; } + public List UserDataLIst { get; set; } public LocalMetadataResult() { Images = new List(); Chapters = new List(); + UserDataLIst = new List(); } } } diff --git a/MediaBrowser.Controller/Providers/IProviderManager.cs b/MediaBrowser.Controller/Providers/IProviderManager.cs index 883fa12b41..b17b6f112a 100644 --- a/MediaBrowser.Controller/Providers/IProviderManager.cs +++ b/MediaBrowser.Controller/Providers/IProviderManager.cs @@ -109,6 +109,15 @@ namespace MediaBrowser.Controller.Providers /// Task. Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType); + /// + /// Saves the metadata. + /// + /// The item. + /// Type of the update. + /// The savers. + /// Task. + Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable savers); + /// /// Gets the metadata options. /// @@ -139,10 +148,21 @@ namespace MediaBrowser.Controller.Providers /// Task{HttpResponseInfo}. Task GetSearchImage(string providerName, string url, CancellationToken cancellationToken); + /// + /// Gets the item identity providers. + /// + /// The type of the t lookup information. + /// The type of the t identity. + /// IEnumerable<IItemIdentityProvider<TLookupInfo, TIdentity>>. IEnumerable> GetItemIdentityProviders() where TLookupInfo : ItemLookupInfo where TIdentity : IItemIdentity; + /// + /// Gets the item identity converters. + /// + /// The type of the t identity. + /// IEnumerable<IItemIdentityConverter<TIdentity>>. IEnumerable> GetItemIdentityConverters() where TIdentity : IItemIdentity; } diff --git a/MediaBrowser.Model/Entities/UserDataSaveReason.cs b/MediaBrowser.Model/Entities/UserDataSaveReason.cs index f65cc7acce..d9691f3953 100644 --- a/MediaBrowser.Model/Entities/UserDataSaveReason.cs +++ b/MediaBrowser.Model/Entities/UserDataSaveReason.cs @@ -9,22 +9,26 @@ namespace MediaBrowser.Model.Entities /// /// The playback start /// - PlaybackStart, + PlaybackStart = 1, /// /// The playback progress /// - PlaybackProgress, + PlaybackProgress = 2, /// /// The playback finished /// - PlaybackFinished, + PlaybackFinished = 3, /// /// The toggle played /// - TogglePlayed, + TogglePlayed = 4, /// /// The update user rating /// - UpdateUserRating + UpdateUserRating = 5, + /// + /// The import + /// + Import = 6 } } diff --git a/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs b/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs index b0d6af8872..3351139dc0 100644 --- a/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs +++ b/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs @@ -7,19 +7,13 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Providers.Manager; using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; namespace MediaBrowser.Providers.AdultVideos { class AdultVideoMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public AdultVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public AdultVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Books/BookMetadataService.cs b/MediaBrowser.Providers/Books/BookMetadataService.cs index 6e070fec96..53e2af3a55 100644 --- a/MediaBrowser.Providers/Books/BookMetadataService.cs +++ b/MediaBrowser.Providers/Books/BookMetadataService.cs @@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.Books { public class BookMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public BookMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public BookMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs index 49e616d1a2..76d5d7dd71 100644 --- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs +++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs @@ -17,13 +17,10 @@ namespace MediaBrowser.Providers.BoxSets { public class BoxSetMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; private readonly ILocalizationManager _iLocalizationManager; - public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager, ILocalizationManager iLocalizationManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILocalizationManager iLocalizationManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; _iLocalizationManager = iLocalizationManager; } diff --git a/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs b/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs index 42b1ea4ded..70a72fba58 100644 --- a/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs +++ b/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Channels { public class AudioChannelItemMetadataService : MetadataService { - public AudioChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public AudioChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs index 3b87dcdd4d..957fc2d934 100644 --- a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs +++ b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Channels { public class ChannelMetadataService : MetadataService { - public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs b/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs index 0b3f5a8145..b815f3ccd4 100644 --- a/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs +++ b/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Channels { public class VideoChannelItemMetadataService : MetadataService { - public VideoChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public VideoChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/Folders/FolderMetadataService.cs b/MediaBrowser.Providers/Folders/FolderMetadataService.cs index c9e44177e2..3f4691aa08 100644 --- a/MediaBrowser.Providers/Folders/FolderMetadataService.cs +++ b/MediaBrowser.Providers/Folders/FolderMetadataService.cs @@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.Folders { public class FolderMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public FolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public FolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs index f5659f2d9a..3e94de95ad 100644 --- a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs +++ b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs @@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.GameGenres { public class GameGenreMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public GameGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public GameGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Games/GameMetadataService.cs b/MediaBrowser.Providers/Games/GameMetadataService.cs index 1e184bb063..46715fcbd6 100644 --- a/MediaBrowser.Providers/Games/GameMetadataService.cs +++ b/MediaBrowser.Providers/Games/GameMetadataService.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Games { public class GameMetadataService : MetadataService { - public GameMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public GameMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs index ae1ee1993b..963b2e49f7 100644 --- a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs +++ b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Games { public class GameSystemMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public GameSystemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public GameSystemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs index f408d026b1..abe0255778 100644 --- a/MediaBrowser.Providers/Genres/GenreMetadataService.cs +++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Genres { public class GenreMetadataService : MetadataService { - public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs index 7ae27f4c9a..4fc5ba40d1 100644 --- a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs +++ b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.LiveTv { public class AudioRecordingService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public AudioRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public AudioRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs index 57bc701565..37bfe41079 100644 --- a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs +++ b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.LiveTv { public class ChannelMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs index 3172e01349..5a7ae75947 100644 --- a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs +++ b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.LiveTv { public class ProgramMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public ProgramMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public ProgramMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs index f526db7759..c47297d9c7 100644 --- a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs +++ b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.LiveTv { public class VideoRecordingService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public VideoRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public VideoRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 8657d568f2..af1e69c1a9 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -24,14 +24,16 @@ namespace MediaBrowser.Providers.Manager protected readonly IProviderManager ProviderManager; protected readonly IProviderRepository ProviderRepo; protected readonly IFileSystem FileSystem; + protected readonly IUserDataManager UserDataManager; - protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) + protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) { ServerConfigurationManager = serverConfigurationManager; Logger = logger; ProviderManager = providerManager; ProviderRepo = providerRepo; FileSystem = fileSystem; + UserDataManager = userDataManager; } /// @@ -304,7 +306,7 @@ namespace MediaBrowser.Providers.Manager { return HasChanged(item, hasFileChangeMonitor, status, options.DirectoryService); } - + return false; }) .ToList(); @@ -356,6 +358,7 @@ namespace MediaBrowser.Providers.Manager } var hasLocalMetadata = false; + var userDataList = new List(); foreach (var provider in providers.OfType>()) { @@ -375,6 +378,8 @@ namespace MediaBrowser.Providers.Manager refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.ImageUpdate; } + userDataList = localItem.UserDataLIst; + MergeData(localItem.Item, temp, new List(), !options.ReplaceAllMetadata, true); refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport; @@ -393,9 +398,9 @@ namespace MediaBrowser.Providers.Manager catch (Exception ex) { failedProviderCount++; - + Logger.ErrorException("Error in {0}", ex, provider.Name); - + // If a local provider fails, consider that a failure refreshResult.Status = ProviderRefreshStatus.Failure; refreshResult.ErrorMessage = ex.Message; @@ -441,9 +446,25 @@ namespace MediaBrowser.Providers.Manager await RunCustomProvider(provider, item, options, refreshResult, cancellationToken).ConfigureAwait(false); } + await ImportUserData(item, userDataList, cancellationToken).ConfigureAwait(false); + return refreshResult; } + private async Task ImportUserData(TItemType item, List userDataList, CancellationToken cancellationToken) + { + var hasUserData = item as IHasUserData; + + if (hasUserData != null) + { + foreach (var userData in userDataList) + { + await UserDataManager.SaveUserData(userData.UserId, hasUserData, userData, UserDataSaveReason.Import, cancellationToken) + .ConfigureAwait(false); + } + } + } + private async Task RunCustomProvider(ICustomMetadataProvider provider, TItemType item, MetadataRefreshOptions options, RefreshResult refreshResult, CancellationToken cancellationToken) { Logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name); @@ -539,13 +560,13 @@ namespace MediaBrowser.Providers.Manager protected virtual void AfterRemoteRefresh(TItemType item) { - + } private async Task CreateInitialLookupInfo(TItemType item, CancellationToken cancellationToken) { var info = item.GetLookupInfo(); - + var hasIdentity = info as IHasIdentities; if (hasIdentity != null) { diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index f2ec85cfac..6cdfef1433 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -570,9 +570,33 @@ namespace MediaBrowser.Providers.Manager /// The item. /// Type of the update. /// Task. - public async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType) + public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType) { - foreach (var saver in _savers.Where(i => IsSaverEnabledForItem(i, item, updateType, false))) + return SaveMetadata(item, updateType, _savers); + } + + /// + /// Saves the metadata. + /// + /// The item. + /// Type of the update. + /// The savers. + /// Task. + public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable savers) + { + return SaveMetadata(item, updateType, _savers.Where(i => savers.Contains(i.Name, StringComparer.OrdinalIgnoreCase))); + } + + /// + /// Saves the metadata. + /// + /// The item. + /// Type of the update. + /// The savers. + /// Task. + private async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable savers) + { + foreach (var saver in savers.Where(i => IsSaverEnabledForItem(i, item, updateType, false))) { _logger.Debug("Saving {0} to {1}.", item.Path ?? item.Name, saver.Name); @@ -625,6 +649,14 @@ namespace MediaBrowser.Providers.Manager } } + /// + /// Determines whether [is saver enabled for item] [the specified saver]. + /// + /// The saver. + /// The item. + /// Type of the update. + /// if set to true [include disabled]. + /// true if [is saver enabled for item] [the specified saver]; otherwise, false. private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType, bool includeDisabled) { var options = GetMetadataOptions(item); diff --git a/MediaBrowser.Providers/Movies/MovieMetadataService.cs b/MediaBrowser.Providers/Movies/MovieMetadataService.cs index 9ea43786eb..abddb5f165 100644 --- a/MediaBrowser.Providers/Movies/MovieMetadataService.cs +++ b/MediaBrowser.Providers/Movies/MovieMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Movies { public class MovieMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public MovieMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public MovieMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs index 9c937db846..07abac67ce 100644 --- a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs +++ b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Movies { public class TrailerMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public TrailerMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public TrailerMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index a3d9b5642c..79fab2f704 100644 --- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs +++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Music { public class AlbumMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public AlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public AlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs index 1b7f229e47..939bd2b3be 100644 --- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs +++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Music { public class ArtistMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public ArtistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public ArtistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Music/AudioMetadataService.cs b/MediaBrowser.Providers/Music/AudioMetadataService.cs index 93be8d2e60..9089139107 100644 --- a/MediaBrowser.Providers/Music/AudioMetadataService.cs +++ b/MediaBrowser.Providers/Music/AudioMetadataService.cs @@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.Music { public class AudioMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public AudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public AudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs index e30f93af9c..1fa0ed05e0 100644 --- a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs +++ b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs @@ -15,12 +15,8 @@ namespace MediaBrowser.Providers.Music { class MusicVideoMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public MusicVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public MusicVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs index 2e85e54011..b3c0427bf0 100644 --- a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs +++ b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs @@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.MusicGenres { public class MusicGenreMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public MusicGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public MusicGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/People/PersonMetadataService.cs b/MediaBrowser.Providers/People/PersonMetadataService.cs index faf606f3e4..dff5a7e61d 100644 --- a/MediaBrowser.Providers/People/PersonMetadataService.cs +++ b/MediaBrowser.Providers/People/PersonMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.People { public class PersonMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public PersonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public PersonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs index 2a7895e16f..5e903bdc3d 100644 --- a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs +++ b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Photos { class PhotoMetadataService : MetadataService { - public PhotoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public PhotoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs index 41c4dcb0de..4101827ccf 100644 --- a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs +++ b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Playlists; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; @@ -13,8 +14,7 @@ namespace MediaBrowser.Providers.Playlists { class PlaylistMetadataService : MetadataService { - public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/Studios/StudioMetadataService.cs b/MediaBrowser.Providers/Studios/StudioMetadataService.cs index 014ff33401..dcd90ecf6b 100644 --- a/MediaBrowser.Providers/Studios/StudioMetadataService.cs +++ b/MediaBrowser.Providers/Studios/StudioMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Studios { public class StudioMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public StudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public StudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs index 4b6ac04bc2..616db8d862 100644 --- a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs +++ b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.TV { public class EpisodeMetadataService : MetadataService { - public EpisodeMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public EpisodeMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/TV/SeasonMetadataService.cs b/MediaBrowser.Providers/TV/SeasonMetadataService.cs index 5e7570ad15..2510d4785d 100644 --- a/MediaBrowser.Providers/TV/SeasonMetadataService.cs +++ b/MediaBrowser.Providers/TV/SeasonMetadataService.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.TV { public class SeasonMetadataService : MetadataService { - public SeasonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public SeasonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { } diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs index 72bc242f7b..a7571f7ad0 100644 --- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs +++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs @@ -13,12 +13,8 @@ namespace MediaBrowser.Providers.TV { public class SeriesMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Users/UserMetadataService.cs b/MediaBrowser.Providers/Users/UserMetadataService.cs index 5b49033a92..4062c5b9f8 100644 --- a/MediaBrowser.Providers/Users/UserMetadataService.cs +++ b/MediaBrowser.Providers/Users/UserMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Users { public class UserMetadataService : MetadataService { - private readonly IUserManager _userManager; - - public UserMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserManager userManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public UserMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _userManager = userManager; } /// diff --git a/MediaBrowser.Providers/Videos/VideoMetadataService.cs b/MediaBrowser.Providers/Videos/VideoMetadataService.cs index de8bd44e66..4fed9cff44 100644 --- a/MediaBrowser.Providers/Videos/VideoMetadataService.cs +++ b/MediaBrowser.Providers/Videos/VideoMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Videos { public class VideoMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public VideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public VideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Providers/Years/YearMetadataService.cs b/MediaBrowser.Providers/Years/YearMetadataService.cs index 621ea96cec..057434db06 100644 --- a/MediaBrowser.Providers/Years/YearMetadataService.cs +++ b/MediaBrowser.Providers/Years/YearMetadataService.cs @@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Years { public class YearMetadataService : MetadataService { - private readonly ILibraryManager _libraryManager; - - public YearMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem) + public YearMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager) { - _libraryManager = libraryManager; } /// diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json index d47ce5329e..c8ca53ba3e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -571,18 +571,18 @@ "LabelFullReview": "Rese\u00f1a completa:", "LabelShortRatingDescription": "Res\u00famen corto de clasificaci\u00f3n:", "OptionIRecommendThisItem": "Yo recomiendo este \u00edtem", - "WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", - "WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", - "WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", - "WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", - "WebClientTourMetadataManager": "Click edit to open the metadata manager", - "WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", - "WebClientTourCollections": "Create movie collections to group box sets together", - "WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", - "WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app", - "WebClientTourUserPreferences3": "Design the web client home page to your liking", - "WebClientTourUserPreferences4": "Configure backdrops, theme songs and external players", - "WebClientTourMobile1": "The web client works great on smartphones and tablets...", - "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", - "MessageEnjoyYourStay": "Enjoy your stay" + "WebClientTourContent": "Vea sus medios recientemente a\u00f1adidos, siguientes ep\u00ecsodios y m\u00e1s. Los c\u00edrculos verdes indican cuantos medios sin reproducir tiene.", + "WebClientTourMovies": "Reproduzca pel\u00edculas, avances y m\u00e1s desde cualquier dispositivo con un navegador web.", + "WebClientTourMouseOver": "Mantgenga el rat\u00f3n sobre cualquier cartel para un acceso r\u00e1pido a informaci\u00f3n importante.", + "WebClientTourTapHold": "Presione y mantenga o haga click derecho en cualquier cartel para mostrar un men\u00fa contextual", + "WebClientTourMetadataManager": "Haga click en editar para abrir el administrador de metadatos", + "WebClientTourPlaylists": "Cree f\u00e1cilmente listas de reproducci\u00f3n y mezclas instant\u00e1neas, y reprod\u00fazcalas en cualquier dispositivo", + "WebClientTourCollections": "Cree colecciones de pel\u00edculas para agruparlas en sets de pel\u00edculas", + "WebClientTourUserPreferences1": "Las preferencias de usuario le permiten personalizar la manera en que su biblioteca es presentada en todos sus apps de Media Browser", + "WebClientTourUserPreferences2": "Configure las preferencias de lenguaje de audio y subt\u00edtulos una sola vez, para todas las app de Media Browser", + "WebClientTourUserPreferences3": "Dise\u00f1e a su gusto la p\u00e1gina principal del cliente web", + "WebClientTourUserPreferences4": "Configure im\u00e1genes de fondo, canciones de tema y reproductores externos", + "WebClientTourMobile1": "El cliente web funciona de maravilla en tel\u00e9fonos inteligentes y tabletas...", + "WebClientTourMobile2": "y controla f\u00e1cilmente otros dispositivos y apps de Media Browser", + "MessageEnjoyYourStay": "Disfrute su visita" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json index c5d3fca33a..767f6d89fb 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json @@ -571,18 +571,18 @@ "LabelFullReview": "\u041f\u0456\u043a\u0456\u0440 \u0442\u043e\u043b\u044b\u0493\u044b\u043c\u0435\u043d:", "LabelShortRatingDescription": "\u0411\u0430\u0493\u0430\u043b\u0430\u0443\u0434\u044b\u04a3 \u049b\u044b\u0441\u049b\u0430 \u0430\u049b\u043f\u0430\u0440\u044b:", "OptionIRecommendThisItem": "\u041e\u0441\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0456 \u04b1\u0441\u044b\u043d\u0430\u043c\u044b\u043d", - "WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", - "WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", - "WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", - "WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", - "WebClientTourMetadataManager": "Click edit to open the metadata manager", - "WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", - "WebClientTourCollections": "Create movie collections to group box sets together", - "WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", - "WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app", - "WebClientTourUserPreferences3": "Design the web client home page to your liking", - "WebClientTourUserPreferences4": "Configure backdrops, theme songs and external players", - "WebClientTourMobile1": "The web client works great on smartphones and tablets...", - "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", - "MessageEnjoyYourStay": "Enjoy your stay" + "WebClientTourContent": "\u0416\u0430\u049b\u044b\u043d\u0434\u0430 \u04af\u0441\u0442\u0435\u043b\u0433\u0435\u043d \u0442\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456, \u043a\u0435\u043b\u0435\u0441\u0456 \u044d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 \u0442.\u0431. \u049b\u0430\u0440\u0430\u04a3\u044b\u0437. \u0416\u0430\u0441\u044b\u043b \u0448\u0435\u043d\u0431\u0435\u0440\u043b\u0435\u0440 \u0441\u0456\u0437\u0434\u0435 \u049b\u0430\u043d\u0448\u0430 \u043e\u0439\u043d\u0430\u0442\u044b\u043b\u043c\u0430\u0493\u0430\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440 \u0431\u0430\u0440\u044b\u043d \u043a\u04e9\u0440\u0441\u0435\u0442\u0435\u0434\u0456.", + "WebClientTourMovies": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456 \u0431\u0430\u0440 \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430\u0440 \u0430\u0440\u049b\u044b\u043b\u044b \u0444\u0438\u043b\u044c\u043c\u0434\u0435\u0440\u0434\u0456, \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0442.\u0431. \u043e\u0439\u043d\u0430\u0442\u044b\u04a3\u044b\u0437.", + "WebClientTourMouseOver": "\u041c\u0430\u04a3\u044b\u0437\u0434\u044b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u049b\u0430 \u0436\u044b\u043b\u0434\u0430\u043c \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443 \u04af\u0448\u0456\u043d \u049b\u0430\u0439\u0441\u044b\u0431\u0456\u0440 \u043f\u043e\u0441\u0442\u0435\u0440\u0434\u0456\u04a3 \u04b1\u0441\u0442\u0456\u043d\u0434\u0435 \u0442\u0456\u043d\u0442\u0443\u0440\u0434\u0456\u04a3 \u043a\u04e9\u0440\u0441\u0435\u0442\u043a\u0456\u0448\u0456\u043d \u04b1\u0441\u0442\u0430\u043f \u0442\u04b1\u0440\u044b\u04a3\u044b\u0437", + "WebClientTourTapHold": "\u041c\u04d9\u0442\u0456\u043d\u043c\u04d9\u043d\u0434\u0456\u043a \u043c\u04d9\u0437\u0456\u0440 \u04af\u0448\u0456\u043d \u049b\u0430\u0439\u0441\u044b\u0431\u0456\u0440 \u043f\u043e\u0441\u0442\u0435\u0440\u0434\u0456 \u0442\u04af\u0440\u0442\u0456\u043f \u04b1\u0441\u0442\u0430\u043f \u0442\u04b1\u0440\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0442\u0456\u043d\u0442\u0443\u0456\u0440\u0434\u0456\u04a3 \u043e\u04a3 \u0436\u0430\u049b \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u0433\u0456\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437", + "WebClientTourMetadataManager": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u0431\u0430\u0441\u049b\u0430\u0440\u0443\u0448\u044b\u0441\u044b\u043d\u0438 \u0430\u0448\u0443 \u04af\u0448\u0456\u043d \u04e8\u04a3\u0434\u0435\u0443 \u0434\u0435\u0433\u0435\u043d\u0434\u0456 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437", + "WebClientTourPlaylists": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0456\u043d \u0436\u04d9\u043d\u0435 \u043b\u0435\u0437\u0434\u0456\u043a \u049b\u043e\u0441\u043f\u0430\u043b\u0430\u0440\u0434\u044b \u0436\u0435\u04a3\u0456\u043b \u0436\u0430\u0441\u0430\u04a3\u044b\u0437, \u0436\u04d9\u043d\u0435 \u043e\u043b\u0430\u0440\u0434\u044b \u04d9\u0440\u049b\u0430\u0439\u0441\u044b \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430 \u043e\u0439\u043d\u0430\u0442\u044b\u04a3\u044b\u0437", + "WebClientTourCollections": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440\u0434\u0456 \u0431\u0456\u0440\u0433\u0435 \u0442\u043e\u043f\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \u0444\u0438\u043b\u044c\u043c \u0436\u0438\u044b\u043d\u0442\u044b\u049b\u0442\u0430\u0440\u044b\u043d \u0436\u0430\u0441\u0430\u04a3\u044b\u0437", + "WebClientTourUserPreferences1": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0456 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d\u0434\u0430 \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u04a3\u044b\u0437\u0434\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0456\u043b\u0443 \u0436\u043e\u043b\u044b\u043d \u0442\u0435\u04a3\u0448\u0435\u0443\u0456\u043d\u0435 \u0441\u0456\u0437\u0433\u0435 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456", + "WebClientTourUserPreferences2": "\u04d8\u0440\u0431\u0456\u0440 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u0441\u044b \u04af\u0448\u0456\u043d, \u0434\u044b\u0431\u044b\u0441 \u043f\u0435\u043d \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043b\u0435\u0440 \u0442\u0456\u043b\u0434\u0456\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440\u0456\u043d \u0431\u0456\u0440 \u0440\u0435\u0442 \u0442\u0435\u04a3\u0448\u0435\u04a3\u0456\u0437", + "WebClientTourUserPreferences3": "\u04b0\u043d\u0430\u0442\u0443\u044b\u04a3\u044b\u0437 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0493\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0456\u043d\u0456\u04a3 \u0431\u0430\u0441\u0442\u044b \u0431\u0435\u0442\u0456\u043d \u049b\u0430\u0439\u0442\u0430 \u0440\u0435\u0441\u0456\u043c\u0434\u0435\u04a3\u0456\u0437", + "WebClientTourUserPreferences4": "\u0410\u0440\u0442\u049b\u044b \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456, \u0442\u0430\u049b\u044b\u0440\u044b\u043f\u0442\u044b\u049b \u04d9\u0443\u0435\u043d\u0434\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0441\u044b\u0440\u0442\u049b\u044b \u043e\u0439\u043d\u0430\u0442\u049b\u044b\u0448\u0442\u0430\u0440\u0434\u044b \u0442\u0435\u04a3\u0448\u0435\u04a3\u0456\u0437", + "WebClientTourMobile1": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0456 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0434\u0430\u0440\u0434\u0430 \u0436\u04d9\u043d\u0435 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0442\u0435\u0440\u0434\u0435 \u0442\u0430\u043c\u0430\u0448\u0430 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456", + "WebClientTourMobile2": "\u0441\u043e\u043d\u044b\u043c\u0435\u043d \u049b\u0430\u0442\u0430\u0440 \u0431\u0430\u0441\u049b\u0430 \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0430\u0434\u044b", + "MessageEnjoyYourStay": "\u0416\u0430\u0493\u044b\u043c\u0434\u044b \u0435\u0440\u043c\u0435\u043a \u0435\u0442\u0456\u04a3\u0456\u0437" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json index d2bb8f65e0..ed2c4d7208 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json @@ -198,7 +198,7 @@ "ButtonOpen": "\u00c5pne", "ButtonOpenInNewTab": "\u00c5pne i ny fane", "ButtonShuffle": "Shuffle", - "ButtonInstantMix": "Instant mix", + "ButtonInstantMix": "Direktemiks", "ButtonResume": "Fortsett", "HeaderScenes": "Scener", "HeaderAudioTracks": "Lydspor", @@ -334,12 +334,12 @@ "ButtonRemoveFromPlaylist": "Fjern fra spilleliste", "HeaderSpecials": "Spescials", "HeaderTrailers": "Trailere", - "HeaderAudio": "Audio", + "HeaderAudio": "Lyd", "HeaderResolution": "Oppl\u00f8sning", "HeaderVideo": "Video", "HeaderRuntime": "Spilletid", - "HeaderCommunityRating": "Community rating", - "HeaderParentalRating": "Parental rating", + "HeaderCommunityRating": "Fellesskap anmeldelse", + "HeaderParentalRating": "Foreldresensur:", "HeaderReleaseDate": "Utgivelsesdato", "HeaderDateAdded": "Dato lagt til", "HeaderSeries": "Serier", @@ -347,9 +347,9 @@ "HeaderSeasonNumber": "Sesong nummer", "HeaderNetwork": "Nettverk", "HeaderYear": "\u00c5r", - "HeaderGameSystem": "Game system", + "HeaderGameSystem": "Spill system", "HeaderPlayers": "Spillere", - "HeaderEmbeddedImage": "Embedded image", + "HeaderEmbeddedImage": "innebygd bilde", "HeaderTrack": "Spor", "HeaderDisc": "Disk", "OptionMovies": "Filmer", @@ -358,7 +358,7 @@ "OptionSeasons": "Sesonger", "OptionEpisodes": "Episoder", "OptionGames": "Spill", - "OptionGameSystems": "Game systems", + "OptionGameSystems": "Spill systemer", "OptionMusicArtists": "Musikk artist", "OptionMusicAlbums": "Musikk album", "OptionMusicVideos": "Musikk videoer", @@ -520,7 +520,7 @@ "MediaInfoShutterSpeed": "Shutter speed", "MediaInfoSoftware": "Programvare", "HeaderIfYouLikeCheckTheseOut": "If you like {0}, check these out...", - "HeaderPlotKeywords": "Plot Keywords", + "HeaderPlotKeywords": "Plott n\u00f8kkelord", "HeaderMovies": "Movies", "HeaderAlbums": "Albums", "HeaderGames": "Games", @@ -576,7 +576,7 @@ "WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", "WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", "WebClientTourMetadataManager": "Click edit to open the metadata manager", - "WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", + "WebClientTourPlaylists": "Du kan enkelt lage spillelister og direktemikser, og spille dem p\u00e5 hvilken som helst enhet", "WebClientTourCollections": "Create movie collections to group box sets together", "WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", "WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json index 30ee785d7a..35430a68ac 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json @@ -564,15 +564,15 @@ "MediaInfoRefFrames": "Ref frames", "TabPlayback": "Afspelen", "HeaderSelectCustomIntrosPath": "Selecteer eigen pad naar intro's", - "HeaderRateAndReview": "Rate and Review", - "HeaderThankYou": "Thank You", - "MessageThankYouForYourReview": "Thank you for your review.", - "LabelYourRating": "Your rating:", - "LabelFullReview": "Full review:", - "LabelShortRatingDescription": "Short rating summary:", - "OptionIRecommendThisItem": "I recommend this item", - "WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", - "WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", + "HeaderRateAndReview": "Beoordelen", + "HeaderThankYou": "Bedankt", + "MessageThankYouForYourReview": "Bedankt voor de beoordeling", + "LabelYourRating": "Jouw beoordeling:", + "LabelFullReview": "Volledige beoordeling:", + "LabelShortRatingDescription": "Korte beoordeling overzicht:", + "OptionIRecommendThisItem": "Ik beveel dit item aan", + "WebClientTourContent": "Bekijk de recent toegevoegde media, volgende afleveringen en meer. De groene cirkels tonen hoeveel niet afgespeelde items er zijn.", + "WebClientTourMovies": "Bekijk films, trailers en meer op elk apparaat met een web browser.", "WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", "WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", "WebClientTourMetadataManager": "Click edit to open the metadata manager", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json index 3fd4c2c140..3288768f2e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json @@ -571,11 +571,11 @@ "LabelFullReview": "Coment\u00e1rio completo:", "LabelShortRatingDescription": "Resumo da avalia\u00e7\u00e3o:", "OptionIRecommendThisItem": "Eu recomendo este item", - "WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", - "WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", - "WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", - "WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", - "WebClientTourMetadataManager": "Click edit to open the metadata manager", + "WebClientTourContent": "Veja suas m\u00eddias adicionadas recentemente, pr\u00f3ximos epis\u00f3dios e mais. Os c\u00edrculos verdes indicam quantos itens n\u00e3o reproduzidos voc\u00ea tem.", + "WebClientTourMovies": "Reproduza filmes, trailers e mais em qualquer dispositivo com um browser web.", + "WebClientTourMouseOver": "Posicione o mouse sobre qualquer capa para acessar rapidamente informa\u00e7\u00f5es importantes", + "WebClientTourTapHold": "Toque e mantenha ou clique com o bot\u00e3o direito do mouse sobre a capa para um menu contextual", + "WebClientTourMetadataManager": "Clique em editar para abrir o gerenciador de metadados", "WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", "WebClientTourCollections": "Create movie collections to group box sets together", "WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json index c9548827a3..10d8401f40 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json @@ -196,7 +196,7 @@ "MessageDirectoryPickerInstruction": "\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0443\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u0421\u0435\u0442\u044c\u00bb \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0431\u043e\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: {0} \u0438\u043b\u0438 {1}.", "HeaderMenu": "\u041c\u0435\u043d\u044e", "ButtonOpen": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c", - "ButtonOpenInNewTab": "\u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435", + "ButtonOpenInNewTab": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435", "ButtonShuffle": "\u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c", "ButtonInstantMix": "\u0410\u0432\u0442\u043e\u043c\u0438\u043a\u0441", "ButtonResume": "\u0412\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c", @@ -571,11 +571,11 @@ "LabelFullReview": "\u041e\u0442\u0437\u044b\u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e:", "LabelShortRatingDescription": "\u041a\u0440\u0430\u0442\u043a\u0430\u044f \u0441\u0432\u043e\u0434\u043a\u0430 \u043e\u0446\u0435\u043d\u043a\u0438:", "OptionIRecommendThisItem": "\u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u044d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442", - "WebClientTourContent": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0432\u043e\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b, \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u0417\u0435\u043b\u0435\u043d\u044b\u0435 \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u0432\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.", - "WebClientTourMovies": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0438\u0442\u0435 \u0444\u0438\u043b\u044c\u043c\u044b, \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c.", + "WebClientTourContent": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0432\u043e\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b \u0438 \u0442.\u043f. \u0417\u0435\u043b\u0435\u043d\u044b\u0435 \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u0432\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.", + "WebClientTourMovies": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435 \u0444\u0438\u043b\u044c\u043c\u044b, \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u0442.\u043f., \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c.", "WebClientTourMouseOver": "\u0417\u0430\u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u043a\u0443\u0440\u0441\u043e\u0440 \u043c\u044b\u0448\u0438 \u043d\u0430\u0434 \u043b\u044e\u0431\u044b\u043c \u043f\u043e\u0441\u0442\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u0430\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438", - "WebClientTourTapHold": "\u041a\u043e\u0441\u043d\u0438\u0442\u0435\u0441\u044c \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u043b\u0438 \u0449\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0441\u0442\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e", - "WebClientTourMetadataManager": "\u0429\u0451\u043b\u043a\u043d\u0438\u0442\u0435 \u043f\u043e \u043a\u043d\u043e\u043f\u043a\u0435 \u041f\u0440\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e \u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445", + "WebClientTourTapHold": "\u041a\u043e\u0441\u043d\u0438\u0442\u0435\u0441\u044c \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u043b\u0438 \u0449\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043f\u043e \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0435\u0440\u0443 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e", + "WebClientTourMetadataManager": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u041f\u0440\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e \u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "WebClientTourPlaylists": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u0430\u0432\u0442\u043e\u043c\u0438\u043a\u0441\u044b, \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435 \u0438\u0445 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435", "WebClientTourCollections": "\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u043c\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435", "WebClientTourUserPreferences1": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431, \u0441 \u043a\u0430\u043a\u0438\u043c, \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 Media Browser", @@ -584,5 +584,5 @@ "WebClientTourUserPreferences4": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0437\u0430\u0434\u043d\u0438\u043a\u0438, \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u0438", "WebClientTourMobile1": "\u0412\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445...", "WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser", - "MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f" + "MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u044f\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json index 6e7753e172..9c5ef147c3 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json @@ -341,7 +341,7 @@ "HeaderCommunityRating": "Anv\u00e4ndaromd\u00f6me", "HeaderParentalRating": "\u00c5ldersgr\u00e4ns", "HeaderReleaseDate": "Premi\u00e4rdatum:", - "HeaderDateAdded": "Date added", + "HeaderDateAdded": "Inlagd den", "HeaderSeries": "Serie", "HeaderSeason": "S\u00e4song", "HeaderSeasonNumber": "S\u00e4songsnummer:", @@ -362,62 +362,62 @@ "OptionMusicArtists": "Musikartister", "OptionMusicAlbums": "Album", "OptionMusicVideos": "Musikvideor", - "OptionSongs": "Songs", - "OptionHomeVideos": "Home videos", - "OptionBooks": "Books", - "OptionAdultVideos": "Adult videos", - "ButtonUp": "Up", - "ButtonDown": "Down", - "LabelMetadataReaders": "Metadata readers:", - "LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", - "LabelMetadataDownloaders": "Metadata downloaders:", - "LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", - "LabelMetadataSavers": "Metadata savers:", - "LabelMetadataSaversHelp": "Choose the file formats to save your metadata to.", - "LabelImageFetchers": "Image fetchers:", - "LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority.", - "ButtonQueueAllFromHere": "Queue all from here", - "ButtonPlayAllFromHere": "Play all from here", - "LabelDynamicExternalId": "{0} Id:", - "HeaderIdentify": "Identify Item", + "OptionSongs": "L\u00e5tar", + "OptionHomeVideos": "Hemvideor", + "OptionBooks": "B\u00f6cker", + "OptionAdultVideos": "Inneh\u00e5ll f\u00f6r vuxna", + "ButtonUp": "Upp", + "ButtonDown": "Ner", + "LabelMetadataReaders": "Metadatal\u00e4sare:", + "LabelMetadataReadersHelp": "Rangordna dina lokala metadatak\u00e4llor i prioritetsordning. F\u00f6rst hittade fil l\u00e4ses in.", + "LabelMetadataDownloaders": "H\u00e4mtare av metadata:", + "LabelMetadataDownloadersHelp": "Aktivera och rangordna dina h\u00e4mtare baserat p\u00e5 prioritet. L\u00e4gre prioriterade h\u00e4mtare anv\u00e4nds endast f\u00f6r att fylla i saknad information.", + "LabelMetadataSavers": "Metadatasparare:", + "LabelMetadataSaversHelp": "V\u00e4lj de filformat du vill anv\u00e4nda f\u00f6r att spara dina metadata.", + "LabelImageFetchers": "H\u00e4mtare av bilder:", + "LabelImageFetchersHelp": "Aktivera och rangordna dina h\u00e4mtare baserat p\u00e5 prioritet.", + "ButtonQueueAllFromHere": "K\u00f6a alla fr o m h\u00e4r", + "ButtonPlayAllFromHere": "Spela upp alla fr o m h\u00e4r", + "LabelDynamicExternalId": "{0} ID:", + "HeaderIdentify": "Identifiera objekt", "PersonTypePerson": "Person", - "LabelTitleDisplayOrder": "Title display order:", - "OptionSortName": "Sort name", - "OptionReleaseDate": "Release date", + "LabelTitleDisplayOrder": "Visningsordning f\u00f6r titlar", + "OptionSortName": "Sorteringstitel", + "OptionReleaseDate": "Premi\u00e4rdatum", "LabelSeasonNumber": "S\u00e4songsnummer:", - "LabelDiscNumber": "Disc number", - "LabelParentNumber": "Parent number", + "LabelDiscNumber": "Skiva nr", + "LabelParentNumber": "F\u00f6r\u00e4lder nr", "LabelEpisodeNumber": "Avsnittsnummer:", - "LabelTrackNumber": "Track number:", - "LabelNumber": "Number:", - "LabelReleaseDate": "Release date:", - "LabelEndDate": "End date:", - "LabelYear": "Year:", - "LabelDateOfBirth": "Date of birth:", - "LabelBirthYear": "Birth year:", - "LabelDeathDate": "Death date:", - "HeaderRemoveMediaLocation": "Remove Media Location", - "MessageConfirmRemoveMediaLocation": "Are you sure you wish to remove this location?", - "HeaderRenameMediaFolder": "Rename Media Folder", - "LabelNewName": "New name:", - "HeaderAddMediaFolder": "Add Media Folder", - "HeaderAddMediaFolderHelp": "Name (Movies, Music, TV, etc):", - "HeaderRemoveMediaFolder": "Remove Media Folder", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "The following media locations will be removed from your library:", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?", - "ButtonRename": "Rename", - "ButtonChangeType": "Change type", - "HeaderMediaLocations": "Media Locations", - "LabelFolderTypeValue": "Folder type: {0}", - "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed movies & tv", + "LabelTrackNumber": "Sp\u00e5r nr", + "LabelNumber": "Nr:", + "LabelReleaseDate": "Premi\u00e4rdatum:", + "LabelEndDate": "Slutdatum:", + "LabelYear": "\u00c5r:", + "LabelDateOfBirth": "F\u00f6delsedatum:", + "LabelBirthYear": "F\u00f6delse\u00e5r:", + "LabelDeathDate": "D\u00f6d:", + "HeaderRemoveMediaLocation": "Ta bort mediaplats", + "MessageConfirmRemoveMediaLocation": "\u00c4r du s\u00e4ker p\u00e5 att du vill ta bort den h\u00e4r platsen?", + "HeaderRenameMediaFolder": "Byt namn p\u00e5 mediamapp", + "LabelNewName": "Nytt namn:", + "HeaderAddMediaFolder": "Skapa mediamapp", + "HeaderAddMediaFolderHelp": "Namn (Filmer, Musik, TV, etc)", + "HeaderRemoveMediaFolder": "Ta bort mediamapp", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "F\u00f6ljande platser kommer att tas bort fr\u00e5n biblioteket:", + "MessageAreYouSureYouWishToRemoveMediaFolder": "\u00c4r du s\u00e4ker p\u00e5 att du vill ta bort den h\u00e4r mappen?", + "ButtonRename": "\u00c4ndra namn", + "ButtonChangeType": "\u00c4ndra typ", + "HeaderMediaLocations": "Lagringsplatser f\u00f6r media", + "LabelFolderTypeValue": "Typ av mapp: {0}", + "LabelPathSubstitutionHelp": "Tillval: S\u00f6kv\u00e4gsutbyte betyder att en plats p\u00e5 servern kopplas till en lokal fils\u00f6kv\u00e4g p\u00e5 en klient. P\u00e5 s\u00e5 s\u00e4tt f\u00e5r klienten direkt tillg\u00e5ng till material p\u00e5 servern och kan spela upp det direkt via n\u00e4tverket.", + "FolderTypeMixed": "Blandat film & TV", "FolderTypeMovies": "Filmer", "FolderTypeMusic": "Musik", "FolderTypeAdultVideos": "Inneh\u00e5ll f\u00f6r vuxna", "FolderTypePhotos": "Foton", "FolderTypeMusicVideos": "Musikvideor", "FolderTypeHomeVideos": "Hemvideor", - "FolderTypeGames": "Games", + "FolderTypeGames": "Spel", "FolderTypeBooks": "B\u00f6cker", "FolderTypeTvShows": "TV-serier", "TabMovies": "Filmer", @@ -440,38 +440,38 @@ "MessageTrialWillExpireIn": "Provperioden f\u00f6r den h\u00e4r funktionen avslutas om {0} dag(ar)", "MessageInstallPluginFromApp": "Detta till\u00e4gg m\u00e5ste installeras inifr\u00e5n den app det skall anv\u00e4ndas i.", "ValuePriceUSD": "Pris: {0} (USD)", - "MessageFeatureIncludedWithSupporter": "You are registered for this feature, and will be able to continue using it with an active supporter membership.", - "MessageChangeRecurringPlanConfirm": "After completing this transaction you will need to cancel your previous recurring donation from within your PayPal account. Thank you for supporting Media Browser.", - "MessageSupporterMembershipExpiredOn": "Your supporter membership expired on {0}.", - "MessageYouHaveALifetimeMembership": "You have a lifetime supporter membership. You can provide additional donations on a one-time or recurring basis using the options below. Thank you for supporting Media Browser.", - "MessageYouHaveAnActiveRecurringMembership": "You have an active {0} membership. You can upgrade your plan using the options below.", + "MessageFeatureIncludedWithSupporter": "Du har registrerat den h\u00e4r funktionen och kan forts\u00e4tta att anv\u00e4nda den om du \u00e4r aktiv supportermedlem.", + "MessageChangeRecurringPlanConfirm": "N\u00e4r du avslutat den h\u00e4r transaktionen beh\u00f6ver du avbryta din tidigare st\u00e5ende donation via ditt PayPal-konto.", + "MessageSupporterMembershipExpiredOn": "Ditt supportermedlemskap upph\u00f6rde att g\u00e4lla {0}.", + "MessageYouHaveALifetimeMembership": "Du har ett livstids supportermedlemskap. Du kan l\u00e4mna extra bidrag, antingen i eng\u00e5ngsform eller \u00e5terkommande med hj\u00e4lp av valm\u00f6jligheterna nedan. Tack f\u00f6r att Du st\u00f6djer Media Browser.", + "MessageYouHaveAnActiveRecurringMembership": "Du har ett aktivt {0} medlemskap. Du kan uppgradera med hj\u00e4lp av valm\u00f6jligheterna nedan.", "ButtonDelete": "Ta bort", - "HeaderMediaBrowserAccountAdded": "Media Browser Account Added", - "MessageMediaBrowserAccountAdded": "The Media Browser account has been added to this user.", - "MessagePendingMediaBrowserAccountAdded": "The Media Browser account has been added to this user. An email will be sent to the owner of the account. The invitation will need to be confirmed by clicking a link within the email.", - "HeaderMediaBrowserAccountRemoved": "Media Browser Account Removed", - "MessageMediaBrowserAccontRemoved": "The Media Browser account has been removed from this user.", - "TooltipLinkedToMediaBrowserConnect": "Linked to Media Browser Connect", - "HeaderUnrated": "Unrated", - "ValueDiscNumber": "Disc {0}", - "HeaderUnknownDate": "Unknown Date", - "HeaderUnknownYear": "Unknown Year", + "HeaderMediaBrowserAccountAdded": "Ett Media Browser-konto har skapats", + "MessageMediaBrowserAccountAdded": "Media Browser-kontot har lagts till den h\u00e4r anv\u00e4ndaren.", + "MessagePendingMediaBrowserAccountAdded": "Media Browser-kontot har lagts till den h\u00e4r anv\u00e4ndaren. Ett e-postmeddelande skickas till kontots \u00e4gare. Inbjudan m\u00e5ste bekr\u00e4ftas genom att klicka p\u00e5 en l\u00e4nk angiven i meddelandet.", + "HeaderMediaBrowserAccountRemoved": "Media Browser-kontot har tagits bort.", + "MessageMediaBrowserAccontRemoved": "Media Browser-kontot har tagits bort fr\u00e5n den h\u00e4r anv\u00e4ndaren.", + "TooltipLinkedToMediaBrowserConnect": "L\u00e4nkad till Media Browser Connect", + "HeaderUnrated": "Ej klassad", + "ValueDiscNumber": "Skiva {0}", + "HeaderUnknownDate": "Ok\u00e4nt datum", + "HeaderUnknownYear": "Ok\u00e4nt \u00e5r", "ValueMinutes": "{0} min", - "ButtonPlayExternalPlayer": "Play with external player", - "HeaderSelectExternalPlayer": "Select External Player", - "HeaderExternalPlayerPlayback": "External Player Playback", - "ButtonImDone": "I'm Done", - "OptionWatched": "Watched", - "OptionUnwatched": "Unwatched", - "ExternalPlayerPlaystateOptionsHelp": "Specify how you would like to resume playing this video next time.", - "LabelMarkAs": "Mark as:", - "OptionInProgress": "In-Progress", - "LabelResumePoint": "Resume point:", - "ValueOneMovie": "1 movie", - "ValueMovieCount": "{0} movies", + "ButtonPlayExternalPlayer": "Spela upp med extern uppspelare", + "HeaderSelectExternalPlayer": "V\u00e4lj extern uppspelare", + "HeaderExternalPlayerPlayback": "Uppspelning med extern uppspelare", + "ButtonImDone": "Klart!", + "OptionWatched": "Visad", + "OptionUnwatched": "Ej visad", + "ExternalPlayerPlaystateOptionsHelp": "Ange hur du vill \u00e5teruppta den h\u00e4r videon n\u00e4sta g\u00e5ng.", + "LabelMarkAs": "Markera som:", + "OptionInProgress": "P\u00e5g\u00e5r", + "LabelResumePoint": "\u00c5teruppta vid:", + "ValueOneMovie": "1 film", + "ValueMovieCount": "{0} filmer", "ValueOneTrailer": "1 trailer", "ValueTrailerCount": "{0} trailers", - "ValueOneSeries": "1 series", + "ValueOneSeries": "1 serie", "ValueSeriesCount": "{0} serier", "ValueOneEpisode": "1 avsnitt", "ValueEpisodeCount": "{0} avsnitt", @@ -506,7 +506,7 @@ "HeaderCastAndCrew": "Medverkande", "ValueArtist": "Artist: {0}", "ValueArtists": "Artister: {0}", - "HeaderTags": "Tags", + "HeaderTags": "Etiketter", "MediaInfoCameraMake": "Kamerafabrikat", "MediaInfoCameraModel": "Kameramodell", "MediaInfoAltitude": "H\u00f6jd", @@ -520,69 +520,69 @@ "MediaInfoShutterSpeed": "Slutartid", "MediaInfoSoftware": "Programvara", "HeaderIfYouLikeCheckTheseOut": "Om du gillar {0}, ta en titt p\u00e5...", - "HeaderPlotKeywords": "Plot Keywords", + "HeaderPlotKeywords": "Nyckelord i handlingen", "HeaderMovies": "Filmer", "HeaderAlbums": "Album", "HeaderGames": "Spel", "HeaderBooks": "B\u00f6cker", - "HeaderEpisodes": "Episodes", - "HeaderSeasons": "Seasons", - "HeaderTracks": "Tracks", - "HeaderItems": "Items", - "HeaderOtherItems": "Other Items", - "ButtonFullReview": "Full review", - "ValueAsRole": "as {0}", - "ValueGuestStar": "Guest star", - "MediaInfoSize": "Size", - "MediaInfoPath": "Path", + "HeaderEpisodes": "Avsnitt", + "HeaderSeasons": "S\u00e4songer", + "HeaderTracks": "Sp\u00e5r", + "HeaderItems": "Objekt", + "HeaderOtherItems": "\u00d6vriga objekt", + "ButtonFullReview": "Fullst\u00e4ndig recension:", + "ValueAsRole": "som {0}", + "ValueGuestStar": "G\u00e4startist", + "MediaInfoSize": "Storlek", + "MediaInfoPath": "S\u00f6kv\u00e4g", "MediaInfoFormat": "Format", "MediaInfoContainer": "Container", - "MediaInfoDefault": "Default", - "MediaInfoForced": "Forced", - "MediaInfoExternal": "External", - "MediaInfoTimestamp": "Timestamp", - "MediaInfoPixelFormat": "Pixel format", - "MediaInfoBitDepth": "Bit depth", - "MediaInfoSampleRate": "Sample rate", - "MediaInfoBitrate": "Bitrate", - "MediaInfoChannels": "Channels", + "MediaInfoDefault": "F\u00f6rval", + "MediaInfoForced": "Tvingade", + "MediaInfoExternal": "Externa", + "MediaInfoTimestamp": "Tidsst\u00e4mpel", + "MediaInfoPixelFormat": "Pixelformat", + "MediaInfoBitDepth": "F\u00e4rgdjup", + "MediaInfoSampleRate": "Samplingsfrekvens", + "MediaInfoBitrate": "Bithastighet", + "MediaInfoChannels": "Kanaler", "MediaInfoLayout": "Layout", - "MediaInfoLanguage": "Language", + "MediaInfoLanguage": "Spr\u00e5k", "MediaInfoCodec": "Codec", - "MediaInfoProfile": "Profile", - "MediaInfoLevel": "Level", - "MediaInfoAspectRatio": "Aspect ratio", - "MediaInfoResolution": "Resolution", - "MediaInfoAnamorphic": "Anamorphic", - "MediaInfoInterlaced": "Interlaced", - "MediaInfoFramerate": "Framerate", - "MediaInfoStreamTypeAudio": "Audio", + "MediaInfoProfile": "Profil", + "MediaInfoLevel": "Niv\u00e5", + "MediaInfoAspectRatio": "Bildf\u00f6rh\u00e5llande:", + "MediaInfoResolution": "Uppl\u00f6sning", + "MediaInfoAnamorphic": "Anamorfisk", + "MediaInfoInterlaced": "Sammanfl\u00e4tad", + "MediaInfoFramerate": "Bildfrekvens", + "MediaInfoStreamTypeAudio": "Ljud", "MediaInfoStreamTypeData": "Data", "MediaInfoStreamTypeVideo": "Video", - "MediaInfoStreamTypeSubtitle": "Subtitle", - "MediaInfoStreamTypeEmbeddedImage": "Embedded Image", + "MediaInfoStreamTypeSubtitle": "Undertext", + "MediaInfoStreamTypeEmbeddedImage": "Infogad bild", "MediaInfoRefFrames": "Referensbildrutor", "TabPlayback": "Uppspelning", "HeaderSelectCustomIntrosPath": "V\u00e4lj s\u00f6kv\u00e4g f\u00f6r egna vinjetter", - "HeaderRateAndReview": "Rate and Review", - "HeaderThankYou": "Thank You", - "MessageThankYouForYourReview": "Thank you for your review.", - "LabelYourRating": "Your rating:", - "LabelFullReview": "Full review:", - "LabelShortRatingDescription": "Short rating summary:", - "OptionIRecommendThisItem": "I recommend this item", - "WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", - "WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", - "WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", - "WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", - "WebClientTourMetadataManager": "Click edit to open the metadata manager", - "WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", - "WebClientTourCollections": "Create movie collections to group box sets together", - "WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", - "WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app", - "WebClientTourUserPreferences3": "Design the web client home page to your liking", - "WebClientTourUserPreferences4": "Configure backdrops, theme songs and external players", - "WebClientTourMobile1": "The web client works great on smartphones and tablets...", - "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", - "MessageEnjoyYourStay": "Enjoy your stay" + "HeaderRateAndReview": "Betygs\u00e4tt och rescensera", + "HeaderThankYou": "Tack", + "MessageThankYouForYourReview": "Tack f\u00f6r din rescension", + "LabelYourRating": "Ditt betyg:", + "LabelFullReview": "Fullst\u00e4ndig recension:", + "LabelShortRatingDescription": "Kort summering av betyg:", + "OptionIRecommendThisItem": "Jag rekommenderar detta", + "WebClientTourContent": "Se nytillkommet inneh\u00e5ll, kommande avsnitt m m. De gr\u00f6na ringarna anger hur m\u00e5nga ej visade objekt som finns.", + "WebClientTourMovies": "Se filmer, trailers och mycket mera p\u00e5 vilken enhet som helst som har en webbl\u00e4sare", + "WebClientTourMouseOver": "H\u00e5ll muspekaren \u00f6ver en affisch f\u00f6r att se den viktigaste informationen", + "WebClientTourTapHold": "Tryck-och-h\u00e5ll eller h\u00f6gerklicka p\u00e5 en affisch f\u00f6r att f\u00e5 upp en inneh\u00e5llsmeny", + "WebClientTourMetadataManager": "Klicka p\u00e5 \"\u00e4ndra\" f\u00f6r att \u00f6ppna metadatahanteraren", + "WebClientTourPlaylists": "Skapa enkelt spellistor och snabbmixar och spela upp dem p\u00e5 valfri enhet", + "WebClientTourCollections": "Skapa dina egna samlingsboxar", + "WebClientTourUserPreferences1": "Personliga inst\u00e4llningar l\u00e5ter dig anpassa hur ditt bibliotek visas i alla dina Media Browser-appar", + "WebClientTourUserPreferences2": "V\u00e4lj ljudspr\u00e5k uch undertexter en g\u00e5ng f\u00f6r alla f\u00f6r alla Media Browser-appar", + "WebClientTourUserPreferences3": "Utforma webbklientens utseende enligt egna \u00f6nskem\u00e5l", + "WebClientTourUserPreferences4": "Anpassa fondbilder, ledmotiv och externa uppspelare", + "WebClientTourMobile1": "Webbklienten fungerar perfekt p\u00e5 smarta telefoner och surfplattor...", + "WebClientTourMobile2": "och kan enkelt fj\u00e4rrstyra andra enheter och Media Browser-appar", + "MessageEnjoyYourStay": "Ha ett trevligt bes\u00f6k" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json index ac2e774dda..656e9e55ca 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json @@ -258,7 +258,7 @@ "OptionUnplayed": "No reproducido", "LabelAirTime": "Duraci\u00f3n:", "OptionAscending": "Ascendente", - "HeaderMediaInfo": "Info del Medio:", + "HeaderMediaInfo": "Info del Medio", "OptionDescending": "Descendente", "HeaderPhotoInfo": "Info de Fotograf\u00eda:", "OptionRuntime": "Duraci\u00f3n", @@ -289,7 +289,7 @@ "HeaderXmlDocumentAttribute": "Atributo del Documento XML", "OptionRevenue": "Recaudaci\u00f3n", "XmlDocumentAttributeListHelp": "Estos atributos son aplicados al elemento ra\u00edz de cada respuesta XML.", - "OptionPoster": "Poster", + "OptionPoster": "Cartel", "OptionSaveMetadataAsHidden": "Guardar metadatos e im\u00e1genes como archivos ocultos", "OptionBackdrop": "Imagen de Fondo", "LabelExtractChaptersDuringLibraryScan": "Extraer im\u00e1genes de cap\u00edtulos durante el escaneo de la biblioteca", @@ -1000,7 +1000,7 @@ "MessageNoPlaylistItemsAvailable": "Esta lista de reproducci\u00f3n se encuentra vac\u00eda.", "HeaderWelcomeToMediaBrowserWebClient": "Bienvenido al Cliente Web de Media Browser", "ButtonDismiss": "Descartar", - "ButtonTakeTheTour": "Take the tour", + "ButtonTakeTheTour": "Haga el recorrido", "ButtonEditOtherUserPreferences": "Edita las preferencias personales de este usuario.", "LabelChannelStreamQuality": "Calidad por defecto para transmisi\u00f3n por internet:", "LabelChannelStreamQualityHelp": "En un ambiente de ancho de banda limitado, limitar la calidad puede ayudar a asegurar una experiencia de transimisi\u00f3n en tiempo real fluida.", @@ -1013,7 +1013,7 @@ "LabelChannelDownloadAgeHelp": "El contenido descargado anterior a esto ser\u00e1 eliminado. Permanecer\u00e1 reproducible via transmisi\u00f3n en tiempo real por Internet.", "ChannelSettingsFormHelp": "Instale canales tales como Avances y Vimeo desde el cat\u00e1logo de complementos.", "LabelSelectCollection": "Elegir colecci\u00f3n:", - "ButtonOptions": "Options", + "ButtonOptions": "Opciones", "ViewTypeMovies": "Pel\u00edculas", "ViewTypeTvShows": "TV", "ViewTypeGames": "Juegos", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/kk.json b/MediaBrowser.Server.Implementations/Localization/Server/kk.json index 5241d48634..bdeb28703d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/kk.json @@ -1000,7 +1000,7 @@ "MessageNoPlaylistItemsAvailable": "\u041e\u0441\u044b \u043e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c \u0430\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0431\u043e\u0441.", "HeaderWelcomeToMediaBrowserWebClient": "Media Browser \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0430\u0493\u0434\u0430\u0440\u043b\u0430\u043c\u0430\u0441\u044b\u043d\u0430 \u0445\u043e\u0448 \u043a\u0435\u043b\u0434\u0456\u04a3\u0456\u0437!", "ButtonDismiss": "\u0416\u0430\u0441\u044b\u0440\u0443", - "ButtonTakeTheTour": "Take the tour", + "ButtonTakeTheTour": "\u0410\u0440\u0430\u043b\u0430\u043f \u0448\u044b\u0493\u044b\u04a3\u044b\u0437", "ButtonEditOtherUserPreferences": "\u041e\u0441\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0456\u043d \u04e9\u04a3\u0434\u0435\u0443.", "LabelChannelStreamQuality": "\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0430\u0440\u049b\u044b\u043b\u044b \u0430\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443 \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0456:", "LabelChannelStreamQualityHelp": "\u04e8\u0442\u043a\u0456\u0437\u0443 \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u0433\u0456 \u0442\u04e9\u043c\u0435\u043d \u043e\u0440\u0442\u0430\u0434\u0430, \u0441\u0430\u043f\u0430\u0441\u044b\u043d \u0448\u0435\u043a\u0442\u0435\u0443\u0456 \u0436\u0430\u0442\u044b\u049b\u0442\u0430\u0443 \u0430\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443 \u04d9\u0441\u0435\u0440\u0456\u043d \u049b\u0430\u043c\u0442\u0430\u043c\u0430\u0441\u044b\u0437 \u0435\u0442\u0443\u0456\u043d\u0435 \u043a\u04e9\u043c\u0435\u043a\u0442\u0435\u0441\u0443\u0456 \u043c\u04af\u043c\u043a\u0456\u043d.", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nb.json b/MediaBrowser.Server.Implementations/Localization/Server/nb.json index e3a2f74a26..6e5aca1231 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nb.json @@ -130,17 +130,17 @@ "OptionDefaultSubtitles": "Standard", "LabelAlbum": "Album:", "OptionOnlyForcedSubtitles": "Kun tvunget undertekster", - "LabelCommunityRating": "Community rating:", + "LabelCommunityRating": "Fellesskap anmeldelse:", "OptionAlwaysPlaySubtitles": "Alltid spill undertekster", - "LabelVoteCount": "Vote count:", + "LabelVoteCount": "Stemme tall:", "OptionNoSubtitles": "Ingen Undertekster", "LabelMetascore": "Metascore:", "OptionDefaultSubtitlesHelp": "Undertekster som matcher spr\u00e5kpreferansene vil bli lastet n\u00e5r lyd er i utenlandsk spr\u00e5k.", - "LabelCriticRating": "Critic rating:", + "LabelCriticRating": "Kritiker anmeldelse:", "OptionOnlyForcedSubtitlesHelp": "Kun undertekster marker som tvunget vil bli lastet.", - "LabelCriticRatingSummary": "Critic rating summary:", + "LabelCriticRatingSummary": "Kritiker anmeldelse sammendrag:", "OptionAlwaysPlaySubtitlesHelp": "Undertekster som matcher spr\u00e5kets innstillinger vil bli lastet uavhengig lydens spr\u00e5k.", - "LabelAwardSummary": "Award summary:", + "LabelAwardSummary": "Pris sammendrag:", "OptionNoSubtitlesHelp": "Undertekster vil ikke bli lastet som standard.", "LabelWebsite": "Nettsted:", "TabProfiles": "Profiler", @@ -158,15 +158,15 @@ "ButtonResetPassword": "Resett passord", "LabelEndDate": "Slutt dato:", "LabelNewPassword": "Nytt passord", - "LabelAirDate": "Air days:", + "LabelAirDate": "Sendings dager:", "LabelNewPasswordConfirm": "Bekreft nytt passord", - "LabelAirTime:": "Air time:", + "LabelAirTime:": "Sendings tid:", "HeaderCreatePassword": "Lag nytt passord", "LabelRuntimeMinutes": "Spilletid (minutter):", "LabelCurrentPassword": "N\u00e5v\u00e6rende passord", "LabelParentalRating": "Foreldresensur:", "LabelMaxParentalRating": "Maks tillatt sensur.", - "LabelCustomRating": "Custom rating:", + "LabelCustomRating": "Kunde anmeldelse:", "MaxParentalRatingHelp": "Innhold med h\u00f8yere aldersgrense vil bli skjult for brukeren", "LabelBudget": "Budsjett", "LibraryAccessHelp": "Velg media mappe som skal deles med denne brukren. Administrator vil ha mulighet for \u00e5 endre alle mapper ved \u00e5 bruke metadata behandler.", @@ -200,13 +200,13 @@ "TabEpisodes": "Episoder", "LabelDisplayOrder": "Visnings rekkef\u00f8lge:", "TabGenres": "Sjanger", - "LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in", + "LabelDisplaySpecialsWithinSeasons": "Vis speialiteter innfor sensongen de ble sendt i", "TabPeople": "Folk", "HeaderCountries": "Land", "TabNetworks": "Nettverk", "HeaderGenres": "Sjanger", "HeaderUsers": "Bruker", - "HeaderPlotKeywords": "Plot Keywords", + "HeaderPlotKeywords": "Plott n\u00f8kkelord", "HeaderFilters": "Filtre", "HeaderStudios": "Studioer", "ButtonFilter": "Filter", @@ -222,7 +222,7 @@ "OptionGuestStars": "Gjeste-opptredelser", "HeaderDonationType": "Donasjon type:", "OptionDirectors": "Regis\u00f8r", - "OptionMakeOneTimeDonation": "Make a separate donation", + "OptionMakeOneTimeDonation": "Gi en egen donasjon", "OptionWriters": "Manus", "OptionOneTimeDescription": "Dette er en ekstra donasjon til teamet for \u00e5 vise din st\u00f8tte. Det har ikke noen ekstra fordeler, og vil ikke produsere en supporter tasten.", "OptionProducers": "Produsent", @@ -238,9 +238,9 @@ "HeaderPersonTypes": "Person Typer:", "OptionNoThemeSong": "Ingen temasang", "TabSongs": "Sanger", - "OptionNoThemeVideo": "No Theme Video", + "OptionNoThemeVideo": "Ingen tema video", "TabAlbums": "Album", - "LabelOneTimeDonationAmount": "Donation amount:", + "LabelOneTimeDonationAmount": "Donasjons bel\u00f8p:", "TabArtists": "Artister", "OptionActor": "Skuespiller", "TabAlbumArtists": "Album Artister", @@ -248,15 +248,15 @@ "TabMusicVideos": "Musikk-videoer", "OptionDirector": "Regiss\u00f8r", "ButtonSort": "Sorter", - "OptionGuestStar": "Guest star", + "OptionGuestStar": "Stjerne gjest", "HeaderSortBy": "Sorter etter", "OptionProducer": "Produsent", "HeaderSortOrder": "Sorter Etter:", "OptionWriter": "Manus", "OptionPlayed": "Sett", - "LabelAirDays": "Air days:", + "LabelAirDays": "Sendings dager:", "OptionUnplayed": "Ikke sett", - "LabelAirTime": "Air time:", + "LabelAirTime": "Sendings tid:", "OptionAscending": "Oppover", "HeaderMediaInfo": "Media informasjon", "OptionDescending": "Nedover", @@ -491,11 +491,11 @@ "TabFavorites": "Favoritter", "TabMyLibrary": "Mitt Bibliotek", "ButtonCancelRecording": "Avbryt Opptak", - "HeaderPrePostPadding": "Pre\/Post Padding", - "LabelPrePaddingMinutes": "Pre-padding minutter:", - "OptionPrePaddingRequired": "Pre-padding beh\u00f8ves for \u00e5 kunne gj\u00f8re opptak", - "LabelPostPaddingMinutes": "post-padding minutter:", - "OptionPostPaddingRequired": "Post-padding beh\u00f8ves for \u00e5 kunne gj\u00f8re opptak.", + "HeaderPrePostPadding": "Margin f\u00f8r\/etter", + "LabelPrePaddingMinutes": "Margin f\u00f8r programstart i minutter:", + "OptionPrePaddingRequired": "Margin f\u00f8r programstart kreves for \u00e5 kunne gj\u00f8re opptak", + "LabelPostPaddingMinutes": "Margin etter programslutt i minutter:", + "OptionPostPaddingRequired": "Margin etter programslutt kreves for \u00e5 kunne gj\u00f8re opptak", "HeaderWhatsOnTV": "Hva er p\u00e5", "HeaderUpcomingTV": "Kommende TV", "TabStatus": "Status", @@ -819,7 +819,7 @@ "ButtonFullscreen": "Veksle fullskjerm", "ButtonScenes": "Scener", "ButtonSubtitles": "Undertekster", - "ButtonAudioTracks": "Lyd spor", + "ButtonAudioTracks": "Lydspor", "ButtonPreviousTrack": "Forrige Spor", "ButtonNextTrack": "Neste Spor", "ButtonStop": "Stopp", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ru.json b/MediaBrowser.Server.Implementations/Localization/Server/ru.json index 961f7e8f9d..c716e23cc2 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ru.json @@ -81,7 +81,7 @@ "LabelDisplayFoldersView": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0430\u0441\u043f\u0435\u043a\u0442 \u041f\u0430\u043f\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043a\u0438", "MediaFolderHelpPluginRequired": "* \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d, \u043d\u043f\u0440., GameBrowser \u0438\u043b\u0438 MB Bookshelf.", "ViewTypeLiveTvRecordingGroups": "\u0417\u0430\u043f\u0438\u0441\u0438", - "ReferToMediaLibraryWiki": "\u041d\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0432\u0438\u043a\u0438 \u043f\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435.", + "ReferToMediaLibraryWiki": "\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0432\u0438\u043a\u0438 \u043f\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435.", "ViewTypeLiveTvChannels": "\u041a\u0430\u043d\u0430\u043b\u044b", "LabelCountry": "\u0421\u0442\u0440\u0430\u043d\u0430:", "LabelAllowLocalAccessWithoutPassword": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f", @@ -938,7 +938,7 @@ "LabelSubtitlePlaybackMode": "\u0420\u0435\u0436\u0438\u043c \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432:", "LabelDownloadLanguages": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u044f\u0437\u044b\u043a\u0438:", "ButtonRegister": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f", - "LabelSkipIfAudioTrackPresent": "\u041e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0430\u0443\u0434\u0438\u043e\u0434\u043e\u0440\u043e\u0436\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443", + "LabelSkipIfAudioTrackPresent": "\u041e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0430\u0443\u0434\u0438\u043e\u0434\u043e\u0440\u043e\u0436\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443", "LabelSkipIfAudioTrackPresentHelp": "\u0421\u043d\u044f\u0442\u044c \u0444\u043b\u0430\u0436\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u043c\u0443 \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u0430\u0443\u0434\u0438\u043e.", "HeaderSendMessage": "\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f", "ButtonSend": "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c", @@ -991,7 +991,7 @@ "MessageLoadingChannels": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043a\u0430\u043d\u0430\u043b\u0430...", "MessageLoadingContent": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435...", "ButtonMarkRead": "\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u0447\u0442\u0451\u043d\u043d\u043e\u0435", - "OptionDefaultSort": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f", + "OptionDefaultSort": "\u0423\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435", "OptionCommunityMostWatchedSort": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435", "TabNextUp": "\u041e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435", "MessageNoMovieSuggestionsAvailable": "\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b. \u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0444\u0438\u043b\u044c\u043c\u044b, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u043d\u0430\u0437\u0430\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/sv.json b/MediaBrowser.Server.Implementations/Localization/Server/sv.json index 0aeb3fd55a..1263f9b232 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/sv.json @@ -92,9 +92,9 @@ "LabelSaveLocalMetadata": "Spara grafik och metadata i mediamapparna", "HeaderLocalAccess": "Lokal \u00e5tkomst", "LabelSaveLocalMetadataHelp": "Om grafik och metadata sparas tillsammans med media \u00e4r de enkelt \u00e5tkomliga f\u00f6r redigering.", - "HeaderViewOrder": "View Order", + "HeaderViewOrder": "Visningsordning", "LabelDownloadInternetMetadata": "H\u00e4mta grafik och metadata fr\u00e5n Internet", - "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", + "LabelSelectUserViewOrder": "V\u00e4lj i vilken ordning dina vyer skall visas i Media Browser-appar", "LabelDownloadInternetMetadataHelp": "Media Browser kan h\u00e4mta informatiom om dina media fr\u00e5n Internet f\u00f6r att ge en visuellt full\u00e4ndad presentation.", "LabelMetadataRefreshMode": "Metod f\u00f6r uppdatering av metadata:", "TabPreferences": "Inst\u00e4llningar", @@ -149,82 +149,82 @@ "LabelOverview": "Synopsis:", "ButtonAddUser": "Ny anv\u00e4ndare", "LabelShortOverview": "Kort synopsis:", - "LabelReleaseDate": "Release date:", - "ButtonAddLocalUser": "Add Local User", - "LabelYear": "Year:", - "ButtonInviteMediaBrowserUser": "Invite Media Browser User", + "LabelReleaseDate": "Premi\u00e4rdatum:", + "ButtonAddLocalUser": "Skapa lokal anv\u00e4ndare", + "LabelYear": "\u00c5r:", + "ButtonInviteMediaBrowserUser": "Bjud in Media Browser-anv\u00e4ndare", "ButtonSave": "Spara", "LabelPlaceOfBirth": "F\u00f6delseort:", "ButtonResetPassword": "\u00c5terst\u00e4ll l\u00f6senord", - "LabelEndDate": "End date:", + "LabelEndDate": "Slutdatum:", "LabelNewPassword": "Nytt l\u00f6senord:", "LabelAirDate": "S\u00e4ndningsdagar:", "LabelNewPasswordConfirm": "Bekr\u00e4fta nytt l\u00f6senord:", "LabelAirTime:": "S\u00e4ndningstid:", "HeaderCreatePassword": "Skapa l\u00f6senord", - "LabelRuntimeMinutes": "Run time (minutes):", + "LabelRuntimeMinutes": "Speltid (min):", "LabelCurrentPassword": "Nuvarande l\u00f6senord:", - "LabelParentalRating": "Parental rating:", + "LabelParentalRating": "\u00c5ldersgr\u00e4ns:", "LabelMaxParentalRating": "H\u00f6gsta till\u00e5tna \u00e5ldersgr\u00e4ns", - "LabelCustomRating": "Custom rating:", + "LabelCustomRating": "Anpassad \u00e5ldersgr\u00e4ns:", "MaxParentalRatingHelp": "Inneh\u00e5ll med h\u00f6gre gr\u00e4ns visas ej f\u00f6r den h\u00e4r anv\u00e4ndaren.", "LabelBudget": "Budget", "LibraryAccessHelp": "Ange vilka mediamappar den h\u00e4r anv\u00e4ndaren ska ha tillg\u00e5ng till. Administrat\u00f6rer har r\u00e4ttighet att redigera alla mappar i metadatahanteraren.", - "LabelRevenue": "Revenue ($):", + "LabelRevenue": "Int\u00e4kter ($):", "ChannelAccessHelp": "V\u00e4lj kanaler att dela med denna anv\u00e4ndare. Administrat\u00f6rer kan redigera alla kanaler med hj\u00e4lp av metadatahanteraren.", - "LabelOriginalAspectRatio": "Original aspect ratio:", + "LabelOriginalAspectRatio": "Ursprungligt bildf\u00f6rh\u00e5llande:", "ButtonDeleteImage": "Ta bort bild", - "LabelPlayers": "Players:", + "LabelPlayers": "Spelare:", "LabelSelectUsers": "V\u00e4lj anv\u00e4ndare:", - "Label3DFormat": "3D format:", + "Label3DFormat": "3D-format:", "ButtonUpload": "Ladda upp", - "HeaderAlternateEpisodeNumbers": "Alternate Episode Numbers", + "HeaderAlternateEpisodeNumbers": "Alternativ avsnittsnumrering", "HeaderUploadNewImage": "Ladda upp ny bild", - "HeaderSpecialEpisodeInfo": "Special Episode Info", + "HeaderSpecialEpisodeInfo": "Info om specialavsnitt", "LabelDropImageHere": "Dra-och-sl\u00e4pp bild h\u00e4r", - "HeaderExternalIds": "External Id's:", + "HeaderExternalIds": "Externa ID:n", "ImageUploadAspectRatioHelp": "Bildf\u00f6rh\u00e5llande 1:1 rekommenderas. Endast JPG\/PNG.", - "LabelDvdSeasonNumber": "Dvd season number:", + "LabelDvdSeasonNumber": "S\u00e4songsnummer p\u00e5 DVD:", "MessageNothingHere": "Ingenting h\u00e4r.", - "LabelDvdEpisodeNumber": "Dvd episode number:", + "LabelDvdEpisodeNumber": "Avsnittsnummer p\u00e5 DVD:", "MessagePleaseEnsureInternetMetadata": "Var god se till att h\u00e4mtning av metadata via Internet \u00e4r aktiverad.", - "LabelAbsoluteEpisodeNumber": "Absolute episode number:", + "LabelAbsoluteEpisodeNumber": "Avsnittsnummer fr\u00e5n start:", "TabSuggested": "Rekommenderas", - "LabelAirsBeforeSeason": "Airs before season:", + "LabelAirsBeforeSeason": "S\u00e4nds f\u00f6re s\u00e4song:", "TabLatest": "Nytillkommet", - "LabelAirsAfterSeason": "Airs after season:", + "LabelAirsAfterSeason": "S\u00e4nds efter s\u00e4song:", "TabUpcoming": "Kommande", - "LabelAirsBeforeEpisode": "Airs before episode:", + "LabelAirsBeforeEpisode": "S\u00e4nds f\u00f6re avsnitt:", "TabShows": "Serier", - "LabelTreatImageAs": "Treat image as:", + "LabelTreatImageAs": "Behandla bild som:", "TabEpisodes": "Avsnitt", - "LabelDisplayOrder": "Display order:", + "LabelDisplayOrder": "Visningsordning:", "TabGenres": "Genrer", - "LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in", + "LabelDisplaySpecialsWithinSeasons": "Visa specialer i de s\u00e4songer de s\u00e4ndes i", "TabPeople": "Personer", - "HeaderCountries": "Countries", + "HeaderCountries": "L\u00e4nder", "TabNetworks": "TV-bolag", - "HeaderGenres": "Genres", + "HeaderGenres": "Genrer", "HeaderUsers": "Anv\u00e4ndare", - "HeaderPlotKeywords": "Plot Keywords", + "HeaderPlotKeywords": "Nyckelord i handlingen", "HeaderFilters": "Filter:", - "HeaderStudios": "Studios", + "HeaderStudios": "Studior", "ButtonFilter": "Filtrera", - "HeaderTags": "Tags", + "HeaderTags": "Etiketter", "OptionFavorite": "Favoriter", - "HeaderMetadataSettings": "Metadata Settings", + "HeaderMetadataSettings": "Metadatainst\u00e4llningar", "OptionLikes": "Gillar", - "LabelLockItemToPreventChanges": "Lock this item to prevent future changes", + "LabelLockItemToPreventChanges": "L\u00e5s det h\u00e4r objektet f\u00f6r att f\u00f6rhindra \u00e4ndringar", "OptionDislikes": "Ogillar", - "MessageLeaveEmptyToInherit": "Leave empty to inherit settings from a parent item, or the global default value.", + "MessageLeaveEmptyToInherit": "L\u00e4mna tomt f\u00f6r att \u00e4rva inst\u00e4llningarna fr\u00e5n \u00f6verordnat objekt, eller anv\u00e4nda globalt f\u00f6rval.", "OptionActors": "Sk\u00e5despelare", "TabDonate": "L\u00e4mna bidrag", "OptionGuestStars": "G\u00e4startister", - "HeaderDonationType": "Donation type:", + "HeaderDonationType": "Donationstyp:", "OptionDirectors": "Regiss\u00f6rer", - "OptionMakeOneTimeDonation": "Make a separate donation", + "OptionMakeOneTimeDonation": "Ge ett extra bidrag", "OptionWriters": "Manusf\u00f6rfattare", - "OptionOneTimeDescription": "This is an additional donation to the team to show your support. It does not have any additional benefits and will not produce a supporter key.", + "OptionOneTimeDescription": "Detta \u00e4r ett extra bidrag f\u00f6r att visa ditt st\u00f6d f\u00f6r teamet. Det ger inga ytterligare f\u00f6rm\u00e5ner och ingen supporterkod.", "OptionProducers": "Producenter", "OptionLifeTimeSupporterMembership": "Livstids supportermedlemskap", "HeaderResume": "\u00c5teruppta", @@ -232,31 +232,31 @@ "HeaderNextUp": "N\u00e4stkommande", "OptionMonthlySupporterMembership": "M\u00e5natligt supportermedlemskap", "NoNextUpItemsMessage": "Hittade inget. S\u00e4tt ig\u00e5ng och titta!", - "HeaderSupporterBenefit": "A supporter membership provides additional benefits such as access to premium plugins, internet channel content, and more.", + "HeaderSupporterBenefit": "Ett supportermedlemskap ger extra f\u00f6rdelar, t ex tillg\u00e5ng till premiumtill\u00e4gg, internetkanaler och mycket mer.", "HeaderLatestEpisodes": "Senaste avsnitten", - "OptionNoTrailer": "No Trailer", + "OptionNoTrailer": "Trailer saknas", "HeaderPersonTypes": "Personkategorier:", - "OptionNoThemeSong": "No Theme Song", + "OptionNoThemeSong": "Ledmotiv saknas", "TabSongs": "L\u00e5tar", - "OptionNoThemeVideo": "No Theme Video", + "OptionNoThemeVideo": "Temavideo saknas", "TabAlbums": "Album", - "LabelOneTimeDonationAmount": "Donation amount:", + "LabelOneTimeDonationAmount": "Bidragsbelopp:", "TabArtists": "Artister", - "OptionActor": "Actor", + "OptionActor": "Sk\u00e5despelare", "TabAlbumArtists": "Albumartister", - "OptionComposer": "Composer", + "OptionComposer": "Komposit\u00f6r", "TabMusicVideos": "Musikvideor", - "OptionDirector": "Director", + "OptionDirector": "Regiss\u00f6r", "ButtonSort": "Sortera", - "OptionGuestStar": "Guest star", + "OptionGuestStar": "G\u00e4startist", "HeaderSortBy": "Sortera efter:", - "OptionProducer": "Producer", + "OptionProducer": "Producent", "HeaderSortOrder": "Sorteringsordning:", - "OptionWriter": "Writer", + "OptionWriter": "Manusf\u00f6rfattare", "OptionPlayed": "Visad", - "LabelAirDays": "Air days:", + "LabelAirDays": "S\u00e4ndningsdagar:", "OptionUnplayed": "Ej visad", - "LabelAirTime": "Air time:", + "LabelAirTime": "S\u00e4ndningstid:", "OptionAscending": "Stigande", "HeaderMediaInfo": "Mediainformation", "OptionDescending": "Sjunkande", @@ -288,49 +288,49 @@ "OptionBudget": "Budget", "HeaderXmlDocumentAttribute": "XML-dokumentattribut", "OptionRevenue": "Int\u00e4kter", - "XmlDocumentAttributeListHelp": "These attributes are applied to the root element of every xml response.", + "XmlDocumentAttributeListHelp": "Dessa attribut till\u00e4mpas p\u00e5 rotelementet i alla xml-svar.", "OptionPoster": "Affisch", - "OptionSaveMetadataAsHidden": "Save metadata and images as hidden files", + "OptionSaveMetadataAsHidden": "Spara metadata och bilder som dolda filer", "OptionBackdrop": "Fondbild", - "LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan", + "LabelExtractChaptersDuringLibraryScan": "Extrahera kapitelbildrutor vid genoms\u00f6kning av biblioteket", "OptionTimeline": "Tidslinje", - "LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted when videos are imported during the library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.", + "LabelExtractChaptersDuringLibraryScanHelp": "Om aktiverat extraheras kapitelbildrutor n\u00e4r videor importeras vid genoms\u00f6kning av biblioteket. Om avaktiverat kommer extrahering att ske vid schemalagd kapitelbildrutebehandling, f\u00f6r att snabba upp den regelbundna genoms\u00f6kningen av biblioteket.", "OptionThumb": "Miniatyr", - "LabelConnectUserName": "Media Browser username\/email:", + "LabelConnectUserName": "Media Browser-anv\u00e4ndarnamn\/email:", "OptionBanner": "Banderoll", - "LabelConnectUserNameHelp": "Connect this user to a Media Browser account to enable easy sign-in access from any app without having to know the server ip address.", + "LabelConnectUserNameHelp": "Anslut den h\u00e4r anv\u00e4ndaren till ett Media Browser-konto f\u00f6r att erbjuda enkel inloggning fr\u00e5n alla appar utan att beh\u00f6va k\u00e4nna till serverns IP-adress.", "OptionCriticRating": "Kritikerbetyg", - "ButtonLearnMoreAboutMediaBrowserConnect": "Learn more about Media Browser Connect", + "ButtonLearnMoreAboutMediaBrowserConnect": "L\u00e4s mer om Media Browser Connect", "OptionVideoBitrate": "Bithastighet f\u00f6r video", - "LabelExternalPlayers": "External players:", + "LabelExternalPlayers": "Externa uppspelare:", "OptionResumable": "Kan \u00e5terupptas", - "LabelExternalPlayersHelp": "Display buttons to play content in external players. This is only available on devices that support url schemes, generally Android and iOS. With external players there is generally no support for remote control or resuming.", - "HeaderSubtitleProfile": "Subtitle Profile", + "LabelExternalPlayersHelp": "Visa knappar f\u00f6r att spela upp inneh\u00e5ll i externa uppspelare. Detta ar enbart tillg\u00e4ngligt p\u00e5 enheter som st\u00f6djer url-scheman, i allm\u00e4nhet Android och iOS. Externa uppspelare har normalt ej st\u00f6d f\u00f6r fj\u00e4rrkontroll eller \u00e5terupptagande.", + "HeaderSubtitleProfile": "Undertextprofil", "ScheduledTasksHelp": "Klicka p\u00e5 en aktivitet f\u00f6r att \u00e4ndra k\u00f6rtider.", "ScheduledTasksTitle": "Schemalagda aktiviteter", - "HeaderSubtitleProfiles": "Subtitle Profiles", - "HeaderSubtitleProfilesHelp": "Subtitle profiles describe the subtitle formats supported by the device.", + "HeaderSubtitleProfiles": "Undertextprofiler", + "HeaderSubtitleProfilesHelp": "Undertextprofiler beskriver de undertextformat som st\u00f6ds av enheten.", "TabMyPlugins": "Mina till\u00e4gg", "LabelFormat": "Format:", "TabCatalog": "Katalog", - "LabelMethod": "Method:", + "LabelMethod": "Metod:", "PluginsTitle": "Till\u00e4gg", - "LabelDidlMode": "Didl mode:", + "LabelDidlMode": "Didl-l\u00e4ge:", "HeaderAutomaticUpdates": "Automatiska uppdateringar", "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", "HeaderNowPlaying": "Nu spelas", "OptionResElement": "res element", "HeaderLatestAlbums": "Nytillkomna album", - "OptionEmbedSubtitles": "Embed within container", + "OptionEmbedSubtitles": "Infoga i container", "HeaderLatestSongs": "Nytillkomna l\u00e5tar", - "OptionExternallyDownloaded": "External download", + "OptionExternallyDownloaded": "Extern nerladdning", "HeaderRecentlyPlayed": "Nyligen spelade", - "OptionHlsSegmentedSubtitles": "Hls segmented subtitles", + "OptionHlsSegmentedSubtitles": "HLS-segmenterade undertexter", "HeaderFrequentlyPlayed": "Ofta spelade", "DevBuildWarning": "Utvecklingsversioner \u00e4r \"bleeding edge\". Dessa kommer ut ofta och \u00e4r otestade. Appen kanske kraschar och vissa delar kanske inte alls fungerar.", - "LabelSubtitleFormatHelp": "Example: srt", + "LabelSubtitleFormatHelp": "Exempel:srt", "LabelVideoType": "Videoformat:", - "ButtonLearnMore": "Learn more", + "ButtonLearnMore": "L\u00e4s mer", "OptionBluray": "Blu-ray", "TabPlayback": "Uppspelning", "OptionDvd": "DVD", @@ -364,7 +364,7 @@ "TabTrailers": "Trailers", "LabelCustomIntrosPath": "S\u00f6kv\u00e4g f\u00f6r egna vinjetter:", "LabelArtists": "Artister:", - "LabelCustomIntrosPathHelp": "A folder containing video files. A video will be randomly selected and played after trailers.", + "LabelCustomIntrosPathHelp": "En mapp inneh\u00e5llande videofiler. En video kommer att v\u00e4ljas slumpm\u00e4ssigt och spelas upp efter trailers.", "LabelArtistsHelp": "Separera med ; vid flera", "ValueSpecialEpisodeName": "Special - {0}", "HeaderLatestMovies": "Nytillkomna filmer", @@ -824,8 +824,8 @@ "ButtonNextTrack": "N\u00e4sta sp\u00e5r:", "ButtonStop": "Stopp", "ButtonPause": "Paus", - "ButtonNext": "Next", - "ButtonPrevious": "Previous", + "ButtonNext": "N\u00e4sta", + "ButtonPrevious": "F\u00f6reg\u00e5ende", "LabelGroupMoviesIntoCollections": "Gruppera filmer i samlingsboxar", "LabelGroupMoviesIntoCollectionsHelp": "I filmlistor visas filmer som ing\u00e5r i en samlingsbox som ett enda objekt.", "NotificationOptionPluginError": "Fel uppstod med till\u00e4gget", @@ -863,7 +863,7 @@ "OptionPlainVideoItemsHelp": "Om aktiverad representeras alla videor i DIDL som \"object.item.videoItem\" i st\u00e4llet f\u00f6r en mera specifik typ, t ex \"object.item.videoItem.movie\".", "LabelSupportedMediaTypes": "Mediaformat som st\u00f6ds:", "TabIdentification": "Identifiering", - "HeaderIdentification": "Identification", + "HeaderIdentification": "Identifiering", "TabDirectPlay": "Direktuppspelning", "TabContainers": "Beh\u00e5llare", "TabCodecs": "Kodningsformat", @@ -947,15 +947,15 @@ "LabelDisplayPluginsFor": "Visa till\u00e4gg f\u00f6r:", "PluginTabMediaBrowserClassic": "MB Classic", "PluginTabMediaBrowserTheater": "MB Theater", - "LabelEpisodeNamePlain": "Episode name", - "LabelSeriesNamePlain": "Series name", + "LabelEpisodeNamePlain": "Avsnittsnamn", + "LabelSeriesNamePlain": "Seriens namn", "ValueSeriesNamePeriod": "Series.name", "ValueSeriesNameUnderscore": "Series_name", "ValueEpisodeNamePeriod": "Episode.name", "ValueEpisodeNameUnderscore": "Episode_name", - "LabelSeasonNumberPlain": "Season number", - "LabelEpisodeNumberPlain": "Episode number", - "LabelEndingEpisodeNumberPlain": "Ending episode number", + "LabelSeasonNumberPlain": "S\u00e4songsnummer", + "LabelEpisodeNumberPlain": "Avsnittsnummer", + "LabelEndingEpisodeNumberPlain": "Avslutande avsnittsnummer", "HeaderTypeText": "Ange text", "LabelTypeText": "Text", "HeaderSearchForSubtitles": "S\u00f6k efter undertexter", @@ -1000,7 +1000,7 @@ "MessageNoPlaylistItemsAvailable": "Den h\u00e4r spellistan \u00e4r tom.", "HeaderWelcomeToMediaBrowserWebClient": "V\u00e4lkommen till Media Browsers webbklient", "ButtonDismiss": "Avvisa", - "ButtonTakeTheTour": "Take the tour", + "ButtonTakeTheTour": "Ta en rundtur", "ButtonEditOtherUserPreferences": "Redigera den h\u00e4r anv\u00e4ndarens personliga inst\u00e4llningar.", "LabelChannelStreamQuality": "\u00d6nskad kvalitet vid str\u00f6mning via Internet:", "LabelChannelStreamQualityHelp": "N\u00e4r bandbredden \u00e4r begr\u00e4nsad kan en l\u00e4gre kvalitet ge en mera st\u00f6rningsfri upplevelse.", @@ -1013,7 +1013,7 @@ "LabelChannelDownloadAgeHelp": "Nedladdat inneh\u00e5ll \u00e4ldre \u00e4n s\u00e5 raderas. Det \u00e4r fortfarande tillg\u00e4ngligt via str\u00f6mning fr\u00e5n Internet.", "ChannelSettingsFormHelp": "Installera kanaler, t ex Trailers och Vimeo, via till\u00e4ggskatalogen.", "LabelSelectCollection": "V\u00e4lj samling:", - "ButtonOptions": "Options", + "ButtonOptions": "Alternativ", "ViewTypeMovies": "Filmer", "ViewTypeTvShows": "TV", "ViewTypeGames": "Spel", @@ -1044,11 +1044,11 @@ "ViewTypeMusicAlbums": "Album", "ViewTypeMusicAlbumArtists": "Albumartister", "HeaderOtherDisplaySettings": "Visningsinst\u00e4llningar", - "ViewTypeMusicSongs": "Songs", - "ViewTypeMusicFavorites": "Favorites", - "ViewTypeMusicFavoriteAlbums": "Favorite Albums", - "ViewTypeMusicFavoriteArtists": "Favorite Artists", - "ViewTypeMusicFavoriteSongs": "Favorite Songs", + "ViewTypeMusicSongs": "L\u00e5tar", + "ViewTypeMusicFavorites": "Favoriter", + "ViewTypeMusicFavoriteAlbums": "Favoritalbum", + "ViewTypeMusicFavoriteArtists": "Favoritartister", + "ViewTypeMusicFavoriteSongs": "Favoritl\u00e5tar", "HeaderMyViews": "Mina vyer", "LabelSelectFolderGroups": "Gruppera automatiskt f\u00f6ljande mappar till vyer s\u00e5som filmer, musik och TV:", "LabelSelectFolderGroupsHelp": "Mappar som ej \u00e4r markerade visas enskilda i sin egen avdelning.", @@ -1163,7 +1163,7 @@ "OptionUnidentified": "Oidentifierad", "OptionMissingParentalRating": "\u00c5ldersgr\u00e4ns saknas", "OptionStub": "Stump", - "HeaderEpisodes": "Episodes:", + "HeaderEpisodes": "Avsnitt:", "OptionSeason0": "S\u00e4song 0", "LabelReport": "Rapport:", "OptionReportSongs": "L\u00e5tar", diff --git a/MediaBrowser.XbmcMetadata/EntryPoint.cs b/MediaBrowser.XbmcMetadata/EntryPoint.cs index ebe759fd80..38c583bd3e 100644 --- a/MediaBrowser.XbmcMetadata/EntryPoint.cs +++ b/MediaBrowser.XbmcMetadata/EntryPoint.cs @@ -6,6 +6,7 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.XbmcMetadata.Configuration; +using MediaBrowser.XbmcMetadata.Savers; using System; using System.Linq; @@ -36,20 +37,19 @@ namespace MediaBrowser.XbmcMetadata void _libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e) { - // TODO: Need a more accurate check here to see if xbmc metadata saving is enabled. - // This is probably good enough, but no guarantee - var userId = _config.GetNfoConfiguration().UserId; - if (string.IsNullOrWhiteSpace(userId)) - { - return; - } - if (e.UpdateReason == ItemUpdateType.ImageUpdate) { var person = e.Item as Person; if (person != null) { + var config = _config.GetNfoConfiguration(); + + if (!config.SaveImagePathsInNfo) + { + return; + } + var items = _libraryManager.RootFolder.RecursiveChildren; items = person.GetTaggedItems(items).ToList(); @@ -63,22 +63,13 @@ namespace MediaBrowser.XbmcMetadata void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) { - var userId = _config.GetNfoConfiguration().UserId; - if (string.IsNullOrWhiteSpace(userId)) - { - return; - } - - if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed) + if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed || e.SaveReason == UserDataSaveReason.UpdateUserRating) { var item = e.Item as BaseItem; - if (item != null) + if (!string.IsNullOrWhiteSpace(_config.GetNfoConfiguration().UserId)) { - if (item is Video) - { - SaveMetadataForItem(item, ItemUpdateType.MetadataEdit); - } + SaveMetadataForItem(item, ItemUpdateType.MetadataEdit); } } } @@ -99,7 +90,7 @@ namespace MediaBrowser.XbmcMetadata try { - await _providerManager.SaveMetadata(item, updateReason).ConfigureAwait(false); + await _providerManager.SaveMetadata(item, updateReason, new[] { BaseNfoSaver.SaverName }).ConfigureAwait(false); } catch (Exception ex) { diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 0231c8e7ed..2f2973130b 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -3,15 +3,13 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.XbmcMetadata.Configuration; +using MediaBrowser.XbmcMetadata.Savers; using System; using System.Collections.Generic; using System.Globalization; -using System.IO; using System.Linq; -using System.Text; using System.Threading; using System.Xml; -using MediaBrowser.XbmcMetadata.Savers; namespace MediaBrowser.XbmcMetadata.Parsers { @@ -41,10 +39,12 @@ namespace MediaBrowser.XbmcMetadata.Parsers /// Fetches metadata for an item from one xml file /// /// The item. + /// The user data list. /// The metadata file. /// The cancellation token. - /// - public void Fetch(T item, string metadataFile, CancellationToken cancellationToken) + /// + /// + public void Fetch(T item, List userDataList, string metadataFile, CancellationToken cancellationToken) { if (item == null) { @@ -64,17 +64,18 @@ namespace MediaBrowser.XbmcMetadata.Parsers ValidationType = ValidationType.None }; - Fetch(item, metadataFile, settings, cancellationToken); + Fetch(item, userDataList, metadataFile, settings, cancellationToken); } /// /// Fetches the specified item. /// /// The item. + /// The user data list. /// The metadata file. /// The settings. /// The cancellation token. - private void Fetch(T item, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken) + private void Fetch(T item, List userDataList, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken) { using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) { @@ -90,15 +91,17 @@ namespace MediaBrowser.XbmcMetadata.Parsers if (reader.NodeType == XmlNodeType.Element) { - FetchDataFromXmlNode(reader, item); + FetchDataFromXmlNode(reader, item, userDataList); } } } } } - protected virtual void FetchDataFromXmlNode(XmlReader reader, T item) + protected virtual void FetchDataFromXmlNode(XmlReader reader, T item, List userDataList) { + var userDataUserId = _config.GetNfoConfiguration().UserId; + switch (reader.Name) { // DateCreated @@ -571,7 +574,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers case "releasedate": { var formatString = _config.GetNfoConfiguration().ReleaseDateFormat; - + var val = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(val)) @@ -798,12 +801,176 @@ namespace MediaBrowser.XbmcMetadata.Parsers break; } + case "watched": + { + var val = reader.ReadElementContentAsString(); + + if (!string.IsNullOrWhiteSpace(val)) + { + bool parsedValue; + if (bool.TryParse(val, out parsedValue)) + { + if (!string.IsNullOrWhiteSpace(userDataUserId)) + { + var userData = GetOrAdd(userDataList, userDataUserId); + + userData.Played = parsedValue; + } + } + } + break; + } + + case "playcount": + { + var val = reader.ReadElementContentAsString(); + + if (!string.IsNullOrWhiteSpace(val)) + { + int parsedValue; + if (int.TryParse(val, NumberStyles.Integer, _usCulture, out parsedValue)) + { + if (!string.IsNullOrWhiteSpace(userDataUserId)) + { + var userData = GetOrAdd(userDataList, userDataUserId); + + userData.PlayCount = parsedValue; + } + } + } + break; + } + + case "lastplayed": + { + var val = reader.ReadElementContentAsString(); + + if (!string.IsNullOrWhiteSpace(val)) + { + DateTime parsedValue; + if (DateTime.TryParseExact(val, "yyyy-MM-dd HH:mm:ss", _usCulture, DateTimeStyles.None, out parsedValue)) + { + if (!string.IsNullOrWhiteSpace(userDataUserId)) + { + var userData = GetOrAdd(userDataList, userDataUserId); + + userData.LastPlayedDate = parsedValue; + } + } + } + break; + } + + case "resume": + { + using (var subtree = reader.ReadSubtree()) + { + if (!string.IsNullOrWhiteSpace(userDataUserId)) + { + var userData = GetOrAdd(userDataList, userDataUserId); + + FetchFromResumeNode(subtree, item, userData); + } + } + break; + } + + case "isuserfavorite": + { + var val = reader.ReadElementContentAsString(); + + if (!string.IsNullOrWhiteSpace(val)) + { + bool parsedValue; + if (bool.TryParse(val, out parsedValue)) + { + if (!string.IsNullOrWhiteSpace(userDataUserId)) + { + var userData = GetOrAdd(userDataList, userDataUserId); + + userData.IsFavorite = parsedValue; + } + } + } + break; + } + + case "userrating": + { + var val = reader.ReadElementContentAsString(); + + if (!string.IsNullOrWhiteSpace(val)) + { + double parsedValue; + if (double.TryParse(val, NumberStyles.Any, _usCulture, out parsedValue)) + { + if (!string.IsNullOrWhiteSpace(userDataUserId)) + { + var userData = GetOrAdd(userDataList, userDataUserId); + + userData.Rating = parsedValue; + } + } + } + break; + } + default: reader.Skip(); break; } } + private UserItemData GetOrAdd(List userDataList, string userId) + { + var userData = userDataList.FirstOrDefault(i => string.Equals(userId, i.UserId.ToString("N"), StringComparison.OrdinalIgnoreCase)); + + if (userData == null) + { + userData = new UserItemData() + { + UserId = new Guid(userId) + }; + + userDataList.Add(userData); + } + + return userData; + } + + private void FetchFromResumeNode(XmlReader reader, T item, UserItemData userData) + { + reader.MoveToContent(); + + while (reader.Read()) + { + if (reader.NodeType == XmlNodeType.Element) + { + switch (reader.Name) + { + case "position": + { + var val = reader.ReadElementContentAsString(); + + if (!string.IsNullOrWhiteSpace(val)) + { + double parsedValue; + if (double.TryParse(val, NumberStyles.Any, _usCulture, out parsedValue)) + { + userData.PlaybackPositionTicks = TimeSpan.FromSeconds(parsedValue).Ticks; + } + } + break; + } + + default: + reader.Skip(); + break; + } + } + } + } + private void FetchFromFileInfoNode(XmlReader reader, T item) { reader.MoveToContent(); diff --git a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs index ba7b48b1fd..42a60276b4 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; @@ -21,7 +22,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers { } - public void Fetch(Episode item, + public void Fetch(Episode item, + List userDataList, List images, List chapters, string metadataFile, @@ -31,7 +33,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers _chaptersFound = chapters; _xmlPath = metadataFile; - Fetch(item, metadataFile, cancellationToken); + Fetch(item, userDataList, metadataFile, cancellationToken); } private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); @@ -41,7 +43,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers /// /// The reader. /// The item. - protected override void FetchDataFromXmlNode(XmlReader reader, Episode item) + /// The user data list. + protected override void FetchDataFromXmlNode(XmlReader reader, Episode item, List userDataList) { switch (reader.Name) { @@ -203,7 +206,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers default: - base.FetchDataFromXmlNode(reader, item); + base.FetchDataFromXmlNode(reader, item, userDataList); break; } } diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs index 9b90b2bb34..d2bfeeb7ed 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs @@ -17,14 +17,15 @@ namespace MediaBrowser.XbmcMetadata.Parsers { } - public void Fetch(Video item, + public void Fetch(Video item, + List userDataList, List chapters, string metadataFile, CancellationToken cancellationToken) { _chaptersFound = chapters; - Fetch(item, metadataFile, cancellationToken); + Fetch(item, userDataList, metadataFile, cancellationToken); } /// @@ -32,7 +33,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers /// /// The reader. /// The item. - protected override void FetchDataFromXmlNode(XmlReader reader, Video item) + /// The user data list. + protected override void FetchDataFromXmlNode(XmlReader reader, Video item, List userDataList) { switch (reader.Name) { @@ -89,7 +91,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers // break; default: - base.FetchDataFromXmlNode(reader, item); + base.FetchDataFromXmlNode(reader, item, userDataList); break; } } diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs index 14abb74c62..4c3408e0ec 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs @@ -1,6 +1,8 @@ using MediaBrowser.Common.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Logging; +using System.Collections.Generic; using System.Xml; namespace MediaBrowser.XbmcMetadata.Parsers @@ -16,7 +18,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers /// /// The reader. /// The item. - protected override void FetchDataFromXmlNode(XmlReader reader, Season item) + /// The user data list. + protected override void FetchDataFromXmlNode(XmlReader reader, Season item, List userDataList) { switch (reader.Name) { @@ -37,7 +40,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers } default: - base.FetchDataFromXmlNode(reader, item); + base.FetchDataFromXmlNode(reader, item, userDataList); break; } } diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs index d72a64b5b1..2e8b076953 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs @@ -1,9 +1,11 @@ using MediaBrowser.Common.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System; +using System.Collections.Generic; using System.Xml; namespace MediaBrowser.XbmcMetadata.Parsers @@ -19,7 +21,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers /// /// The reader. /// The item. - protected override void FetchDataFromXmlNode(XmlReader reader, Series item) + /// The user data list. + protected override void FetchDataFromXmlNode(XmlReader reader, Series item, List userDataList) { switch (reader.Name) { @@ -85,7 +88,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers } default: - base.FetchDataFromXmlNode(reader, item); + base.FetchDataFromXmlNode(reader, item, userDataList); break; } } diff --git a/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs index 535fa28b83..9567de2b80 100644 --- a/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs @@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) { - new BaseNfoParser(_logger, _config).Fetch(result.Item, path, cancellationToken); + new BaseNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken); } protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) diff --git a/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs index f281c10483..1f9c78b56f 100644 --- a/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs @@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) { - new BaseNfoParser(_logger, _config).Fetch(result.Item, path, cancellationToken); + new BaseNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken); } protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) diff --git a/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs index 47371ea04b..df61e67f98 100644 --- a/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs @@ -2,6 +2,7 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; +using MediaBrowser.XbmcMetadata.Savers; using System; using System.IO; using System.Threading; @@ -27,8 +28,6 @@ namespace MediaBrowser.XbmcMetadata.Providers var path = file.FullName; - //await XmlProviderUtils.XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); - try { result.Item = new T(); @@ -44,10 +43,6 @@ namespace MediaBrowser.XbmcMetadata.Providers { result.HasMetadata = false; } - //finally - //{ - // XmlProviderUtils.XmlParsingResourcePool.Release(); - //} return result; } @@ -77,7 +72,7 @@ namespace MediaBrowser.XbmcMetadata.Providers { get { - return "Xbmc Nfo"; + return BaseNfoSaver.SaverName; } } } diff --git a/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs index c4edfb4612..36c2f66f53 100644 --- a/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs @@ -28,7 +28,7 @@ namespace MediaBrowser.XbmcMetadata.Providers { var chapters = new List(); - new MovieNfoParser(_logger, _config).Fetch(result.Item, chapters, path, cancellationToken); + new MovieNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, chapters, path, cancellationToken); result.Chapters = chapters; } diff --git a/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs index 7899305e3a..2d4bb4ddc8 100644 --- a/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs @@ -28,7 +28,7 @@ namespace MediaBrowser.XbmcMetadata.Providers var images = new List(); var chapters = new List(); - new EpisodeNfoParser(_logger, _config).Fetch(result.Item, images, chapters, path, cancellationToken); + new EpisodeNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, images, chapters, path, cancellationToken); result.Images = images; result.Chapters = chapters; diff --git a/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs index 7b68ed94b2..1be67c3103 100644 --- a/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs @@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) { - new SeasonNfoParser(_logger, _config).Fetch(result.Item, path, cancellationToken); + new SeasonNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken); } protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) diff --git a/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs index 9db0cc8fc7..b415571e34 100644 --- a/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs @@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) { - new SeriesNfoParser(_logger, _config).Fetch(result.Item, path, cancellationToken); + new SeriesNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken); } protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) diff --git a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs index b6f8170729..4bee6e911f 100644 --- a/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/BaseNfoSaver.cs @@ -95,7 +95,10 @@ namespace MediaBrowser.XbmcMetadata.Savers "musicbrainzalbumid", "musicbrainzreleasegroupid", "tvdbid", - "collectionitem" + "collectionitem", + + "isuserfavorite", + "userrating" }.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); @@ -117,6 +120,14 @@ namespace MediaBrowser.XbmcMetadata.Savers protected ILogger Logger { get; private set; } public string Name + { + get + { + return SaverName; + } + } + + public static string SaverName { get { @@ -852,11 +863,6 @@ namespace MediaBrowser.XbmcMetadata.Savers private static void AddUserData(BaseItem item, XmlWriter writer, IUserManager userManager, IUserDataManager userDataRepo, XbmcMetadataOptions options) { - if (!(item is Video)) - { - return; - } - var userId = options.UserId; if (string.IsNullOrWhiteSpace(userId)) { @@ -877,20 +883,30 @@ namespace MediaBrowser.XbmcMetadata.Savers var userdata = userDataRepo.GetUserData(user.Id, item.GetUserDataKey()); - writer.WriteElementString("playcount", userdata.PlayCount.ToString(UsCulture)); - writer.WriteElementString("watched", userdata.Played.ToString().ToLower()); + writer.WriteElementString("isuserfavorite", userdata.IsFavorite.ToString().ToLower()); - if (userdata.LastPlayedDate.HasValue) + if (userdata.Rating.HasValue) { - writer.WriteElementString("lastplayed", userdata.LastPlayedDate.Value.ToString("yyyy-MM-dd HH:mm:ss").ToLower()); + writer.WriteElementString("userrating", userdata.Rating.Value.ToString(CultureInfo.InvariantCulture).ToLower()); } - writer.WriteStartElement("resume"); + if (!item.IsFolder) + { + writer.WriteElementString("playcount", userdata.PlayCount.ToString(UsCulture)); + writer.WriteElementString("watched", userdata.Played.ToString().ToLower()); - var runTimeTicks = item.RunTimeTicks ?? 0; + if (userdata.LastPlayedDate.HasValue) + { + writer.WriteElementString("lastplayed", userdata.LastPlayedDate.Value.ToString("yyyy-MM-dd HH:mm:ss").ToLower()); + } - writer.WriteElementString("position", TimeSpan.FromTicks(userdata.PlaybackPositionTicks).TotalSeconds.ToString(UsCulture)); - writer.WriteElementString("total", TimeSpan.FromTicks(runTimeTicks).TotalSeconds.ToString(UsCulture)); + writer.WriteStartElement("resume"); + + var runTimeTicks = item.RunTimeTicks ?? 0; + + writer.WriteElementString("position", TimeSpan.FromTicks(userdata.PlaybackPositionTicks).TotalSeconds.ToString(UsCulture)); + writer.WriteElementString("total", TimeSpan.FromTicks(runTimeTicks).TotalSeconds.ToString(UsCulture)); + } writer.WriteEndElement(); }