From 87c23f145c2154c6af8f24f06ce0788b85024767 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 13 Jan 2015 00:40:27 -0500 Subject: kick off sync right after creating job --- MediaBrowser.Model/ApiClient/IApiClient.cs | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 9faa8fced..bcba9230f 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1440,5 +1440,12 @@ namespace MediaBrowser.Model.ApiClient /// The request. /// Task<SyncDataResponse>. Task SyncData(SyncDataRequest request); + + /// + /// Gets the synchronize job item file URL. + /// + /// The identifier. + /// System.String. + string GetSyncJobItemFileUrl(string id); } } \ No newline at end of file -- cgit v1.2.3 From 0e02e0559d3873a35ca2ec911b3c0b714a7611ea Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 16 Jan 2015 23:29:53 -0500 Subject: sync updates --- MediaBrowser.Api/ApiEntryPoint.cs | 3 +- MediaBrowser.Api/Playback/BaseStreamingService.cs | 2 +- MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs | 8 +- MediaBrowser.Api/Playback/Hls/VideoHlsService.cs | 3 +- MediaBrowser.Api/Sync/SyncService.cs | 30 ++- MediaBrowser.Controller/IServerApplicationHost.cs | 4 +- .../MediaEncoding/EncodingJobOptions.cs | 1 + MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs | 7 +- .../MediaBrowser.Model.Portable.csproj | 3 + .../MediaBrowser.Model.net35.csproj | 3 + MediaBrowser.Model/ApiClient/IApiClient.cs | 9 + MediaBrowser.Model/Dlna/StreamInfo.cs | 3 +- MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs | 1 + MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + MediaBrowser.Model/Sync/ItemFIleInfo.cs | 7 +- MediaBrowser.Model/Sync/SyncDialogOptions.cs | 4 +- MediaBrowser.Model/Sync/SyncHelper.cs | 36 ++-- MediaBrowser.Model/Sync/SyncJobItem.cs | 22 ++- MediaBrowser.Model/Sync/SyncOptions.cs | 8 +- MediaBrowser.Model/Sync/SyncParameter.cs | 12 ++ MediaBrowser.Model/Sync/SyncedItem.cs | 11 ++ .../MediaBrowser.Server.Implementations.csproj | 1 + .../Session/SessionManager.cs | 18 +- .../Sync/SyncConfig.cs | 29 +++ .../Sync/SyncJobProcessor.cs | 207 ++++++++++++++++++--- .../Sync/SyncManager.cs | 44 +++-- .../Sync/SyncRepository.cs | 48 ++++- .../Sync/SyncScheduledTask.cs | 12 +- .../ApplicationHost.cs | 4 +- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 33 files changed, 437 insertions(+), 116 deletions(-) create mode 100644 MediaBrowser.Model/Sync/SyncParameter.cs create mode 100644 MediaBrowser.Server.Implementations/Sync/SyncConfig.cs (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs index a9b43090a..ef415ec57 100644 --- a/MediaBrowser.Api/ApiEntryPoint.cs +++ b/MediaBrowser.Api/ApiEntryPoint.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Session; using System; @@ -89,7 +88,7 @@ namespace MediaBrowser.Api /// private void DeleteEncodedMediaCache() { - var path = Path.Combine(_config.ApplicationPaths.TranscodingTempPath, EncodingContext.Streaming.ToString().ToLower()); + var path = _config.ApplicationPaths.TranscodingTempPath; foreach (var file in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories) .ToList()) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 2a0c5e01f..84dd0c1e8 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -119,7 +119,7 @@ namespace MediaBrowser.Api.Playback /// System.String. private string GetOutputFilePath(StreamState state) { - var folder = Path.Combine(ServerConfigurationManager.ApplicationPaths.TranscodingTempPath, EncodingContext.Streaming.ToString().ToLower()); + var folder = ServerConfigurationManager.ApplicationPaths.TranscodingTempPath; var outputFileExtension = GetOutputFileExtension(state); diff --git a/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs b/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs index 14045b3a5..9f80fcd0a 100644 --- a/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs +++ b/MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs @@ -1,10 +1,6 @@ using MediaBrowser.Controller; -using MediaBrowser.Model.Dlna; using ServiceStack; -using System; using System.IO; -using System.Linq; -using System.Threading.Tasks; namespace MediaBrowser.Api.Playback.Hls { @@ -66,7 +62,7 @@ namespace MediaBrowser.Api.Playback.Hls { var file = request.PlaylistId + Path.GetExtension(Request.PathInfo); - file = Path.Combine(_appPaths.TranscodingTempPath, EncodingContext.Streaming.ToString().ToLower(), file); + file = Path.Combine(_appPaths.TranscodingTempPath, file); return ResultFactory.GetStaticFileResult(Request, file, FileShare.ReadWrite); } @@ -85,7 +81,7 @@ namespace MediaBrowser.Api.Playback.Hls { var file = request.SegmentId + Path.GetExtension(Request.PathInfo); - file = Path.Combine(_appPaths.TranscodingTempPath, EncodingContext.Streaming.ToString().ToLower(), file); + file = Path.Combine(_appPaths.TranscodingTempPath, file); return ResultFactory.GetStaticFileResult(Request, file, FileShare.ReadWrite); } diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index d786b51b3..de845c88d 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.MediaEncoding; -using MediaBrowser.Model.Dlna; using MediaBrowser.Model.IO; using ServiceStack; using System; @@ -71,7 +70,7 @@ namespace MediaBrowser.Api.Playback.Hls { var file = request.SegmentId + Path.GetExtension(Request.PathInfo); - file = Path.Combine(ServerConfigurationManager.ApplicationPaths.TranscodingTempPath, EncodingContext.Streaming.ToString().ToLower(), file); + file = Path.Combine(ServerConfigurationManager.ApplicationPaths.TranscodingTempPath, file); return ResultFactory.GetStaticFileResult(Request, file); } diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index a7467c12f..8d5ec824f 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -2,7 +2,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Sync; -using MediaBrowser.Model.Dto; using MediaBrowser.Model.Querying; using MediaBrowser.Model.Sync; using MediaBrowser.Model.Users; @@ -85,6 +84,16 @@ namespace MediaBrowser.Api.Sync public string Id { get; set; } } + [Route("/Sync/JobItems/{Id}/AdditionalFiles", "GET", Summary = "Gets a sync job item file")] + public class GetSyncJobItemAdditionalFile + { + [ApiMember(Name = "Id", Description = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + + [ApiMember(Name = "Name", Description = "Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public string Name { get; set; } + } + [Route("/Sync/OfflineActions", "POST", Summary = "Reports an action that occurred while offline.")] public class ReportOfflineActions : List, IReturnVoid { @@ -243,5 +252,24 @@ namespace MediaBrowser.Api.Sync Task.WaitAll(task); } + + public object Get(GetSyncJobItemAdditionalFile request) + { + var jobItem = _syncManager.GetJobItem(request.Id); + + if (jobItem.Status != SyncJobItemStatus.Transferring) + { + throw new ArgumentException("The job item is not yet ready for transfer."); + } + + var file = jobItem.AdditionalFiles.FirstOrDefault(i => string.Equals(i.Name, request.Name, StringComparison.OrdinalIgnoreCase)); + + if (file == null) + { + throw new ArgumentException("Sync job additional file not found."); + } + + return ToStaticFileResult(file.Path); + } } } diff --git a/MediaBrowser.Controller/IServerApplicationHost.cs b/MediaBrowser.Controller/IServerApplicationHost.cs index d1a9b386c..76eb9fceb 100644 --- a/MediaBrowser.Controller/IServerApplicationHost.cs +++ b/MediaBrowser.Controller/IServerApplicationHost.cs @@ -1,7 +1,7 @@ -using System.Collections.Generic; -using MediaBrowser.Common; +using MediaBrowser.Common; using MediaBrowser.Model.System; using System; +using System.Collections.Generic; namespace MediaBrowser.Controller { diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs b/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs index a988c2f97..ad9ab90a0 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs @@ -5,6 +5,7 @@ namespace MediaBrowser.Controller.MediaEncoding public class EncodingJobOptions { public string OutputContainer { get; set; } + public string OutputDirectory { get; set; } public long? StartTimeTicks { get; set; } public int? Width { get; set; } diff --git a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs index 4db4cd427..4dc522f05 100644 --- a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs @@ -280,13 +280,14 @@ namespace MediaBrowser.MediaEncoding.Encoder private string GetOutputFilePath(EncodingJob state) { - var folder = ConfigurationManager.ApplicationPaths.TranscodingTempPath; + var folder = string.IsNullOrWhiteSpace(state.Options.OutputDirectory) ? + ConfigurationManager.ApplicationPaths.TranscodingTempPath : + state.Options.OutputDirectory; var outputFileExtension = GetOutputFileExtension(state); - var context = state.Options.Context; var filename = state.Id + (outputFileExtension ?? string.Empty).ToLower(); - return Path.Combine(folder, context.ToString().ToLower(), filename); + return Path.Combine(folder, filename); } protected virtual string GetOutputFileExtension(EncodingJob state) diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index c49e3e303..de60a3e83 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -1094,6 +1094,9 @@ Sync\SyncOptions.cs + + Sync\SyncParameter.cs + Sync\SyncQuality.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index d8a29e8da..1cc1aac09 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -1053,6 +1053,9 @@ Sync\SyncOptions.cs + + Sync\SyncParameter.cs + Sync\SyncQuality.cs diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index bcba9230f..e8535278b 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1413,6 +1413,15 @@ namespace MediaBrowser.Model.ApiClient /// Task<Stream>. Task GetSyncJobItemFile(string id, CancellationToken cancellationToken); + /// + /// Gets the synchronize job item additional file. + /// + /// The identifier. + /// The name. + /// The cancellation token. + /// Task<Stream>. + Task GetSyncJobItemAdditionalFile(string id, string name, CancellationToken cancellationToken); + /// /// Opens the web socket. /// diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs index 22eb0cf6c..acd2658a8 100644 --- a/MediaBrowser.Model/Dlna/StreamInfo.cs +++ b/MediaBrowser.Model/Dlna/StreamInfo.cs @@ -212,7 +212,8 @@ namespace MediaBrowser.Model.Dlna IsForced = stream.IsForced, Language = stream.Language, Name = stream.Language ?? "Unknown", - Format = SubtitleFormat + Format = SubtitleFormat, + Index = stream.Index }); } diff --git a/MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs b/MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs index 1600408d6..a7a8da3ba 100644 --- a/MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs +++ b/MediaBrowser.Model/Dlna/SubtitleStreamInfo.cs @@ -7,5 +7,6 @@ namespace MediaBrowser.Model.Dlna public string Name { get; set; } public bool IsForced { get; set; } public string Format { get; set; } + public int Index { get; set; } } } \ No newline at end of file diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 2a1b0b659..599e4a902 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -385,6 +385,7 @@ + diff --git a/MediaBrowser.Model/Sync/ItemFIleInfo.cs b/MediaBrowser.Model/Sync/ItemFIleInfo.cs index b110af6b5..e023572fd 100644 --- a/MediaBrowser.Model/Sync/ItemFIleInfo.cs +++ b/MediaBrowser.Model/Sync/ItemFIleInfo.cs @@ -23,6 +23,11 @@ namespace MediaBrowser.Model.Sync /// Gets or sets the type of the image. /// /// The type of the image. - public ImageType ImageType { get; set; } + public ImageType? ImageType { get; set; } + /// + /// Gets or sets the index. + /// + /// The index. + public int Index { get; set; } } } diff --git a/MediaBrowser.Model/Sync/SyncDialogOptions.cs b/MediaBrowser.Model/Sync/SyncDialogOptions.cs index 0154b16ec..304e10ccc 100644 --- a/MediaBrowser.Model/Sync/SyncDialogOptions.cs +++ b/MediaBrowser.Model/Sync/SyncDialogOptions.cs @@ -13,12 +13,12 @@ namespace MediaBrowser.Model.Sync /// Gets or sets the options. /// /// The options. - public List Options { get; set; } + public List Options { get; set; } public SyncDialogOptions() { Targets = new List(); - Options = new List(); + Options = new List(); } } } diff --git a/MediaBrowser.Model/Sync/SyncHelper.cs b/MediaBrowser.Model/Sync/SyncHelper.cs index c2a446fbe..34a5ba995 100644 --- a/MediaBrowser.Model/Sync/SyncHelper.cs +++ b/MediaBrowser.Model/Sync/SyncHelper.cs @@ -5,13 +5,13 @@ namespace MediaBrowser.Model.Sync { public static class SyncHelper { - public static List GetSyncOptions(List items) + public static List GetSyncOptions(List items) { - List options = new List(); + List options = new List(); if (items.Count > 1) { - options.Add(SyncOptions.Name); + options.Add(SyncJobOption.Name); } foreach (BaseItemDto item in items) @@ -20,23 +20,23 @@ namespace MediaBrowser.Model.Sync { if (item.IsVideo) { - options.Add(SyncOptions.Quality); + options.Add(SyncJobOption.Quality); if (items.Count > 1) { - options.Add(SyncOptions.UnwatchedOnly); + options.Add(SyncJobOption.UnwatchedOnly); } break; } if (item.IsFolder && !item.IsMusicGenre && !item.IsArtist && !item.IsType("musicalbum") && !item.IsGameGenre) { - options.Add(SyncOptions.Quality); - options.Add(SyncOptions.UnwatchedOnly); + options.Add(SyncJobOption.Quality); + options.Add(SyncJobOption.UnwatchedOnly); break; } if (item.IsGenre) { - options.Add(SyncOptions.SyncNewContent); - options.Add(SyncOptions.ItemLimit); + options.Add(SyncJobOption.SyncNewContent); + options.Add(SyncJobOption.ItemLimit); break; } } @@ -48,8 +48,8 @@ namespace MediaBrowser.Model.Sync { if (item.IsFolder || item.IsGameGenre || item.IsMusicGenre || item.IsGenre || item.IsArtist || item.IsStudio || item.IsPerson) { - options.Add(SyncOptions.SyncNewContent); - options.Add(SyncOptions.ItemLimit); + options.Add(SyncJobOption.SyncNewContent); + options.Add(SyncJobOption.ItemLimit); break; } } @@ -58,15 +58,15 @@ namespace MediaBrowser.Model.Sync return options; } - public static List GetSyncOptions(SyncCategory category) + public static List GetSyncOptions(SyncCategory category) { - List options = new List(); + List options = new List(); - options.Add(SyncOptions.Name); - options.Add(SyncOptions.Quality); - options.Add(SyncOptions.UnwatchedOnly); - options.Add(SyncOptions.SyncNewContent); - options.Add(SyncOptions.ItemLimit); + options.Add(SyncJobOption.Name); + options.Add(SyncJobOption.Quality); + options.Add(SyncJobOption.UnwatchedOnly); + options.Add(SyncJobOption.SyncNewContent); + options.Add(SyncJobOption.ItemLimit); return options; } diff --git a/MediaBrowser.Model/Sync/SyncJobItem.cs b/MediaBrowser.Model/Sync/SyncJobItem.cs index 3d06943aa..943014c0d 100644 --- a/MediaBrowser.Model/Sync/SyncJobItem.cs +++ b/MediaBrowser.Model/Sync/SyncJobItem.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using MediaBrowser.Model.Dto; namespace MediaBrowser.Model.Sync { @@ -27,12 +29,18 @@ namespace MediaBrowser.Model.Sync /// /// The name of the item. public string ItemName { get; set; } - + /// /// Gets or sets the media source identifier. /// /// The media source identifier. public string MediaSourceId { get; set; } + + /// + /// Gets or sets the media source. + /// + /// The media source. + public MediaSourceInfo MediaSource { get; set; } /// /// Gets or sets the target identifier. @@ -74,9 +82,15 @@ namespace MediaBrowser.Model.Sync /// The primary image tag. public string PrimaryImageTag { get; set; } /// - /// Gets or sets a value indicating whether [requires conversion]. + /// Gets or sets the temporary path. /// - /// true if [requires conversion]; otherwise, false. - public bool RequiresConversion { get; set; } + /// The temporary path. + public string TemporaryPath { get; set; } + public List AdditionalFiles { get; set; } + + public SyncJobItem() + { + AdditionalFiles = new List(); + } } } diff --git a/MediaBrowser.Model/Sync/SyncOptions.cs b/MediaBrowser.Model/Sync/SyncOptions.cs index d4a7461f3..294f7bcef 100644 --- a/MediaBrowser.Model/Sync/SyncOptions.cs +++ b/MediaBrowser.Model/Sync/SyncOptions.cs @@ -1,12 +1,8 @@  namespace MediaBrowser.Model.Sync { - public enum SyncOptions + public class SyncOptions { - Name = 0, - Quality = 1, - UnwatchedOnly = 2, - SyncNewContent = 3, - ItemLimit = 4 + public string TemporaryPath { get; set; } } } diff --git a/MediaBrowser.Model/Sync/SyncParameter.cs b/MediaBrowser.Model/Sync/SyncParameter.cs new file mode 100644 index 000000000..def4ab3e3 --- /dev/null +++ b/MediaBrowser.Model/Sync/SyncParameter.cs @@ -0,0 +1,12 @@ + +namespace MediaBrowser.Model.Sync +{ + public enum SyncJobOption + { + Name = 0, + Quality = 1, + UnwatchedOnly = 2, + SyncNewContent = 3, + ItemLimit = 4 + } +} diff --git a/MediaBrowser.Model/Sync/SyncedItem.cs b/MediaBrowser.Model/Sync/SyncedItem.cs index 784a12bc9..2063506b1 100644 --- a/MediaBrowser.Model/Sync/SyncedItem.cs +++ b/MediaBrowser.Model/Sync/SyncedItem.cs @@ -1,4 +1,5 @@ using MediaBrowser.Model.Dto; +using System.Collections.Generic; namespace MediaBrowser.Model.Sync { @@ -34,5 +35,15 @@ namespace MediaBrowser.Model.Sync /// /// The user identifier. public string UserId { get; set; } + /// + /// Gets or sets the additional files. + /// + /// The additional files. + public List AdditionalFiles { get; set; } + + public SyncedItem() + { + AdditionalFiles = new List(); + } } } diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 433b76657..b4f277fbd 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -300,6 +300,7 @@ + diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 8bf39fd6b..7112c2357 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -307,21 +307,21 @@ namespace MediaBrowser.Server.Implementations.Session /// The library item. private void UpdateNowPlayingItem(SessionInfo session, PlaybackProgressInfo info, BaseItem libraryItem) { - var runtimeTicks = libraryItem == null ? null : libraryItem.RunTimeTicks; - if (string.IsNullOrWhiteSpace(info.MediaSourceId)) { info.MediaSourceId = info.ItemId; } - if (!string.Equals(info.ItemId, info.MediaSourceId) && - !string.IsNullOrWhiteSpace(info.MediaSourceId)) + if (!string.IsNullOrWhiteSpace(info.ItemId) && info.Item == null && libraryItem != null) { - runtimeTicks = _libraryManager.GetItemById(new Guid(info.MediaSourceId)).RunTimeTicks; - } + var runtimeTicks = libraryItem.RunTimeTicks; + + if (!string.Equals(info.ItemId, info.MediaSourceId) && + !string.IsNullOrWhiteSpace(info.MediaSourceId)) + { + runtimeTicks = _libraryManager.GetItemById(new Guid(info.MediaSourceId)).RunTimeTicks; + } - if (!string.IsNullOrWhiteSpace(info.ItemId) && libraryItem != null) - { var current = session.NowPlayingItem; if (current == null || !string.Equals(current.Id, info.ItemId, StringComparison.OrdinalIgnoreCase)) @@ -711,7 +711,7 @@ namespace MediaBrowser.Server.Implementations.Session info.MediaSourceId = info.ItemId; } - if (!string.IsNullOrWhiteSpace(info.ItemId) && libraryItem != null) + if (!string.IsNullOrWhiteSpace(info.ItemId) && info.Item == null && libraryItem != null) { var current = session.NowPlayingItem; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncConfig.cs b/MediaBrowser.Server.Implementations/Sync/SyncConfig.cs new file mode 100644 index 000000000..52c774330 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Sync/SyncConfig.cs @@ -0,0 +1,29 @@ +using MediaBrowser.Common.Configuration; +using MediaBrowser.Model.Sync; +using System.Collections.Generic; + +namespace MediaBrowser.Server.Implementations.Sync +{ + public class SyncConfigurationFactory : IConfigurationFactory + { + public IEnumerable GetConfigurations() + { + return new List + { + new ConfigurationStore + { + ConfigurationType = typeof(SyncOptions), + Key = "sync" + } + }; + } + } + + public static class SyncExtensions + { + public static SyncOptions GetSyncOptions(this IConfigurationManager config) + { + return config.GetConfiguration("sync"); + } + } +} diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 8053a3036..02c5aedd5 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -1,4 +1,7 @@ -using MediaBrowser.Common.Progress; +using System.Globalization; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.IO; +using MediaBrowser.Common.Progress; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; @@ -16,6 +19,7 @@ using MediaBrowser.Model.Sync; using MoreLinq; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -32,8 +36,10 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly ITVSeriesManager _tvSeriesManager; private readonly IMediaEncoder _mediaEncoder; private readonly ISubtitleEncoder _subtitleEncoder; + private readonly IConfigurationManager _config; + private readonly IFileSystem _fileSystem; - public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder) + public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder, IConfigurationManager config, IFileSystem fileSystem) { _libraryManager = libraryManager; _syncRepo = syncRepo; @@ -43,6 +49,8 @@ namespace MediaBrowser.Server.Implementations.Sync _tvSeriesManager = tvSeriesManager; _mediaEncoder = mediaEncoder; _subtitleEncoder = subtitleEncoder; + _config = config; + _fileSystem = fileSystem; } public async Task EnsureJobItems(SyncJob job) @@ -329,6 +337,13 @@ namespace MediaBrowser.Server.Implementations.Sync }); await SyncJobItems(result.Items, true, progress, cancellationToken).ConfigureAwait(false); + + CleanDeadSyncFiles(); + } + + private void CleanDeadSyncFiles() + { + // TODO } public async Task SyncJobItems(SyncJobItem[] items, bool enableConversion, IProgress progress, CancellationToken cancellationToken) @@ -416,24 +431,36 @@ namespace MediaBrowser.Server.Implementations.Sync var streamInfo = new StreamBuilder().BuildVideoItem(options); var mediaSource = streamInfo.MediaSource; + var externalSubs = streamInfo.GetExternalSubtitles("dummy", false); + var hasExternalSubs = externalSubs.Count > 0; - jobItem.MediaSourceId = streamInfo.MediaSourceId; + var requiresConversion = streamInfo.PlayMethod == PlayMethod.Transcode || hasExternalSubs; - if (streamInfo.PlayMethod == PlayMethod.Transcode) + if (requiresConversion && !enableConversion) { - if (!enableConversion) - { - return; - } + return; + } + jobItem.MediaSourceId = streamInfo.MediaSourceId; + jobItem.TemporaryPath = GetTemporaryPath(jobItem); + + if (requiresConversion) + { jobItem.Status = SyncJobItemStatus.Converting; - jobItem.RequiresConversion = true; + } + + if (streamInfo.PlayMethod == PlayMethod.Transcode) + { + // Save the job item now since conversion could take a while await _syncRepo.Update(jobItem).ConfigureAwait(false); try { - jobItem.OutputPath = await _mediaEncoder.EncodeVideo(new EncodingJobOptions(streamInfo, profile), progress, - cancellationToken); + jobItem.OutputPath = await _mediaEncoder.EncodeVideo(new EncodingJobOptions(streamInfo, profile) + { + OutputDirectory = jobItem.TemporaryPath + + }, progress, cancellationToken); } catch (OperationCanceledException) { @@ -445,18 +472,16 @@ namespace MediaBrowser.Server.Implementations.Sync _logger.ErrorException("Error during sync transcoding", ex); } - await ConvertSubtitles(jobItem, streamInfo, cancellationToken).ConfigureAwait(false); - if (jobItem.Status == SyncJobItemStatus.Failed || jobItem.Status == SyncJobItemStatus.Queued) { await _syncRepo.Update(jobItem).ConfigureAwait(false); return; } + + jobItem.MediaSource = await GetEncodedMediaSource(jobItem.OutputPath, user, true).ConfigureAwait(false); } else { - jobItem.RequiresConversion = false; - if (mediaSource.Protocol == MediaProtocol.File) { jobItem.OutputPath = mediaSource.Path; @@ -469,6 +494,16 @@ namespace MediaBrowser.Server.Implementations.Sync { throw new InvalidOperationException(string.Format("Cannot direct stream {0} protocol", mediaSource.Protocol)); } + + jobItem.MediaSource = mediaSource; + } + + if (hasExternalSubs) + { + // Save the job item now since conversion could take a while + await _syncRepo.Update(jobItem).ConfigureAwait(false); + + await ConvertSubtitles(jobItem, externalSubs, streamInfo, cancellationToken).ConfigureAwait(false); } jobItem.Progress = 50; @@ -476,18 +511,72 @@ namespace MediaBrowser.Server.Implementations.Sync await _syncRepo.Update(jobItem).ConfigureAwait(false); } - private async Task ConvertSubtitles(SyncJobItem jobItem, StreamInfo streamInfo, CancellationToken cancellationToken) + private async Task ConvertSubtitles(SyncJobItem jobItem, + IEnumerable subtitles, + StreamInfo streamInfo, + CancellationToken cancellationToken) { - if (streamInfo.SubtitleDeliveryMethod != SubtitleDeliveryMethod.External || !streamInfo.SubtitleStreamIndex.HasValue) + var files = new List(); + + var mediaStreams = jobItem.MediaSource.MediaStreams + .Where(i => i.Type != MediaStreamType.Subtitle || !i.IsExternal) + .ToList(); + + var startingIndex = mediaStreams.Count == 0 ? + 0 : + (mediaStreams.Select(i => i.Index).Max() + 1); + + foreach (var subtitle in subtitles) { - // Nothing to do - return; + var fileInfo = await ConvertSubtitles(jobItem.TemporaryPath, streamInfo, subtitle, cancellationToken).ConfigureAwait(false); + + // Reset this to a value that will be based on the output media + fileInfo.Index = startingIndex; + files.Add(fileInfo); + + mediaStreams.Add(new MediaStream + { + Index = startingIndex, + Codec = subtitle.Format, + IsForced = subtitle.IsForced, + IsExternal = true, + Language = subtitle.Language, + Path = fileInfo.Path + }); + + startingIndex++; } - //using (var stream = await _subtitleEncoder.GetSubtitles(streamInfo.ItemId, streamInfo.MediaSourceId, streamInfo.SubtitleStreamIndex.Value, streamInfo.SubtitleFormat, 0, null, cancellationToken).ConfigureAwait(false)) - //{ + jobItem.AdditionalFiles.AddRange(files); - //} + jobItem.MediaSource.MediaStreams = mediaStreams; + } + + private async Task ConvertSubtitles(string temporaryPath, StreamInfo streamInfo, SubtitleStreamInfo subtitleStreamInfo, CancellationToken cancellationToken) + { + var subtitleStreamIndex = subtitleStreamInfo.Index; + + var filename = Guid.NewGuid() + "." + subtitleStreamInfo.Format.ToLower(); + + var path = Path.Combine(temporaryPath, filename); + + Directory.CreateDirectory(Path.GetDirectoryName(path)); + + using (var stream = await _subtitleEncoder.GetSubtitles(streamInfo.ItemId, streamInfo.MediaSourceId, subtitleStreamIndex, subtitleStreamInfo.Format, 0, null, cancellationToken).ConfigureAwait(false)) + { + using (var fs = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true)) + { + await stream.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false); + } + } + + return new ItemFileInfo + { + Name = Path.GetFileName(path), + Path = path, + Type = ItemFileType.Subtitles, + Index = subtitleStreamIndex + }; } private async Task Sync(SyncJobItem jobItem, Audio item, User user, DeviceProfile profile, bool enableConversion, IProgress progress, CancellationToken cancellationToken) @@ -505,6 +594,7 @@ namespace MediaBrowser.Server.Implementations.Sync var mediaSource = streamInfo.MediaSource; jobItem.MediaSourceId = streamInfo.MediaSourceId; + jobItem.TemporaryPath = GetTemporaryPath(jobItem); if (streamInfo.PlayMethod == PlayMethod.Transcode) { @@ -514,12 +604,15 @@ namespace MediaBrowser.Server.Implementations.Sync } jobItem.Status = SyncJobItemStatus.Converting; - jobItem.RequiresConversion = true; await _syncRepo.Update(jobItem).ConfigureAwait(false); try { - jobItem.OutputPath = await _mediaEncoder.EncodeAudio(new EncodingJobOptions(streamInfo, profile), progress, cancellationToken); + jobItem.OutputPath = await _mediaEncoder.EncodeAudio(new EncodingJobOptions(streamInfo, profile) + { + OutputDirectory = jobItem.TemporaryPath + + }, progress, cancellationToken); } catch (OperationCanceledException) { @@ -536,11 +629,11 @@ namespace MediaBrowser.Server.Implementations.Sync await _syncRepo.Update(jobItem).ConfigureAwait(false); return; } + + jobItem.MediaSource = await GetEncodedMediaSource(jobItem.OutputPath, user, false).ConfigureAwait(false); } else { - jobItem.RequiresConversion = false; - if (mediaSource.Protocol == MediaProtocol.File) { jobItem.OutputPath = mediaSource.Path; @@ -553,6 +646,8 @@ namespace MediaBrowser.Server.Implementations.Sync { throw new InvalidOperationException(string.Format("Cannot direct stream {0} protocol", mediaSource.Protocol)); } + + jobItem.MediaSource = mediaSource; } jobItem.Progress = 50; @@ -583,5 +678,65 @@ namespace MediaBrowser.Server.Implementations.Sync // TODO: Download return mediaSource.Path; } + + private string GetTemporaryPath(SyncJobItem jobItem) + { + var basePath = _config.GetSyncOptions().TemporaryPath; + + if (string.IsNullOrWhiteSpace(basePath)) + { + basePath = Path.Combine(_config.CommonApplicationPaths.ProgramDataPath, "sync"); + } + + return Path.Combine(basePath, jobItem.JobId, jobItem.Id); + } + + private async Task GetEncodedMediaSource(string path, User user, bool isVideo) + { + var item = _libraryManager.ResolvePath(new FileInfo(path)); + + await item.RefreshMetadata(CancellationToken.None).ConfigureAwait(false); + + var hasMediaSources = item as IHasMediaSources; + + var mediaSources = hasMediaSources.GetMediaSources(false).ToList(); + + var preferredAudio = string.IsNullOrEmpty(user.Configuration.AudioLanguagePreference) + ? new string[] { } + : new[] { user.Configuration.AudioLanguagePreference }; + + var preferredSubs = string.IsNullOrEmpty(user.Configuration.SubtitleLanguagePreference) + ? new List { } + : new List { user.Configuration.SubtitleLanguagePreference }; + + foreach (var source in mediaSources) + { + if (isVideo) + { + source.DefaultAudioStreamIndex = + MediaStreamSelector.GetDefaultAudioStreamIndex(source.MediaStreams, preferredAudio, user.Configuration.PlayDefaultAudioTrack); + + var defaultAudioIndex = source.DefaultAudioStreamIndex; + var audioLangage = defaultAudioIndex == null + ? null + : source.MediaStreams.Where(i => i.Type == MediaStreamType.Audio && i.Index == defaultAudioIndex).Select(i => i.Language).FirstOrDefault(); + + source.DefaultAudioStreamIndex = + MediaStreamSelector.GetDefaultSubtitleStreamIndex(source.MediaStreams, preferredSubs, user.Configuration.SubtitleMode, audioLangage); + } + else + { + var audio = source.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Audio); + + if (audio != null) + { + source.DefaultAudioStreamIndex = audio.Index; + } + + } + } + + return mediaSources.FirstOrDefault(); + } } } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index bc6446d4e..b8d884cee 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Channels; @@ -13,6 +14,7 @@ using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.Sync; using MediaBrowser.Controller.TV; using MediaBrowser.Model.Dlna; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Querying; @@ -41,10 +43,11 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly Func _mediaEncoder; private readonly IFileSystem _fileSystem; private readonly Func _subtitleEncoder; + private readonly IConfigurationManager _config; private ISyncProvider[] _providers = { }; - public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func dtoService, IApplicationHost appHost, ITVSeriesManager tvSeriesManager, Func mediaEncoder, IFileSystem fileSystem, Func subtitleEncoder) + public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func dtoService, IApplicationHost appHost, ITVSeriesManager tvSeriesManager, Func mediaEncoder, IFileSystem fileSystem, Func subtitleEncoder, IConfigurationManager config) { _libraryManager = libraryManager; _repo = repo; @@ -57,6 +60,7 @@ namespace MediaBrowser.Server.Implementations.Sync _mediaEncoder = mediaEncoder; _fileSystem = fileSystem; _subtitleEncoder = subtitleEncoder; + _config = config; } public void AddParts(IEnumerable providers) @@ -66,7 +70,7 @@ namespace MediaBrowser.Server.Implementations.Sync public async Task CreateJob(SyncJobRequest request) { - var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager, _tvSeriesManager, _mediaEncoder(), _subtitleEncoder()); + var processor = GetSyncJobProcessor(); var user = _userManager.GetUserById(request.UserId); @@ -129,7 +133,7 @@ namespace MediaBrowser.Server.Implementations.Sync await _repo.Create(job).ConfigureAwait(false); await processor.EnsureJobItems(job).ConfigureAwait(false); - + // If it already has a converting status then is must have been aborted during conversion var jobItemsResult = _repo.GetJobItems(new SyncJobItemQuery { @@ -180,7 +184,7 @@ namespace MediaBrowser.Server.Implementations.Sync if (item == null) { - var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager, _tvSeriesManager, _mediaEncoder(), _subtitleEncoder()); + var processor = GetSyncJobProcessor(); var user = _userManager.GetUserById(job.UserId); @@ -408,11 +412,14 @@ namespace MediaBrowser.Server.Implementations.Sync jobItem.Status = SyncJobItemStatus.Synced; jobItem.Progress = 100; - if (jobItem.RequiresConversion) + if (!string.IsNullOrWhiteSpace(jobItem.TemporaryPath)) { try { - _fileSystem.DeleteFile(jobItem.OutputPath); + _fileSystem.DeleteDirectory(jobItem.TemporaryPath, true); + } + catch (DirectoryNotFoundException) + { } catch (Exception ex) { @@ -422,11 +429,16 @@ namespace MediaBrowser.Server.Implementations.Sync await _repo.Update(jobItem).ConfigureAwait(false); - var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager, _tvSeriesManager, _mediaEncoder(), _subtitleEncoder()); + var processor = GetSyncJobProcessor(); await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false); } + private SyncJobProcessor GetSyncJobProcessor() + { + return new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager, _tvSeriesManager, _mediaEncoder(), _subtitleEncoder(), _config, _fileSystem); + } + public SyncJobItem GetJobItem(string id) { return _repo.GetJobItem(id); @@ -455,7 +467,15 @@ namespace MediaBrowser.Server.Implementations.Sync SyncJobId = jobItem.JobId, SyncJobItemId = jobItem.Id, ServerId = _appHost.SystemId, - UserId = job.UserId + UserId = job.UserId, + AdditionalFiles = jobItem.AdditionalFiles.Select(i => new ItemFileInfo + { + ImageType = i.ImageType, + Name = i.Name, + Type = i.Type, + Index = i.Index + + }).ToList() }; var dtoOptions = new DtoOptions(); @@ -472,14 +492,11 @@ namespace MediaBrowser.Server.Implementations.Sync syncedItem.Item = _dtoService().GetBaseItemDto(libraryItem, dtoOptions); - // TODO: this should be the media source of the transcoded output - syncedItem.Item.MediaSources = syncedItem.Item.MediaSources - .Where(i => string.Equals(i.Id, jobItem.MediaSourceId)) - .ToList(); - var mediaSource = syncedItem.Item.MediaSources .FirstOrDefault(i => string.Equals(i.Id, jobItem.MediaSourceId)); + syncedItem.Item.MediaSources = new List(); + // This will be null for items that are not audio/video if (mediaSource == null) { @@ -488,6 +505,7 @@ namespace MediaBrowser.Server.Implementations.Sync else { syncedItem.OriginalFileName = Path.GetFileName(mediaSource.Path); + syncedItem.Item.MediaSources.Add(mediaSource); } return syncedItem; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index 151860d84..ae9143710 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs @@ -1,7 +1,9 @@ using MediaBrowser.Controller; using MediaBrowser.Controller.Sync; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Sync; using MediaBrowser.Server.Implementations.Persistence; using System; @@ -28,15 +30,18 @@ namespace MediaBrowser.Server.Implementations.Sync private IDbCommand _saveJobCommand; private IDbCommand _saveJobItemCommand; - public SyncRepository(ILogger logger, IServerApplicationPaths appPaths) + private readonly IJsonSerializer _json; + + public SyncRepository(ILogger logger, IServerApplicationPaths appPaths, IJsonSerializer json) { _logger = logger; _appPaths = appPaths; + _json = json; } public async Task Initialize() { - var dbFile = Path.Combine(_appPaths.DataPath, "sync11.db"); + var dbFile = Path.Combine(_appPaths.DataPath, "sync12.db"); _connection = await SqliteExtensions.ConnectToDb(dbFile, _logger).ConfigureAwait(false); @@ -45,7 +50,7 @@ namespace MediaBrowser.Server.Implementations.Sync "create table if not exists SyncJobs (Id GUID PRIMARY KEY, TargetId TEXT NOT NULL, Name TEXT NOT NULL, Quality TEXT NOT NULL, Status TEXT NOT NULL, Progress FLOAT, UserId TEXT NOT NULL, ItemIds TEXT NOT NULL, Category TEXT, ParentId TEXT, UnwatchedOnly BIT, ItemLimit INT, SyncNewContent BIT, DateCreated DateTime, DateLastModified DateTime, ItemCount int)", "create index if not exists idx_SyncJobs on SyncJobs(Id)", - "create table if not exists SyncJobItems (Id GUID PRIMARY KEY, ItemId TEXT, ItemName TEXT, MediaSourceId TEXT, JobId TEXT, RequiresConversion BIT, OutputPath TEXT, Status TEXT, TargetId TEXT, DateCreated DateTime, Progress FLOAT)", + "create table if not exists SyncJobItems (Id GUID PRIMARY KEY, ItemId TEXT, ItemName TEXT, MediaSourceId TEXT, JobId TEXT, TemporaryPath TEXT, OutputPath TEXT, Status TEXT, TargetId TEXT, DateCreated DateTime, Progress FLOAT, AdditionalFiles TEXT, MediaSource TEXT)", "create index if not exists idx_SyncJobItems on SyncJobs(Id)", //pragmas @@ -90,23 +95,25 @@ namespace MediaBrowser.Server.Implementations.Sync _saveJobCommand.Parameters.Add(_saveJobCommand, "@ItemCount"); _saveJobItemCommand = _connection.CreateCommand(); - _saveJobItemCommand.CommandText = "replace into SyncJobItems (Id, ItemId, ItemName, MediaSourceId, JobId, RequiresConversion, OutputPath, Status, TargetId, DateCreated, Progress) values (@Id, @ItemId, @ItemName, @MediaSourceId, @JobId, @RequiresConversion, @OutputPath, @Status, @TargetId, @DateCreated, @Progress)"; + _saveJobItemCommand.CommandText = "replace into SyncJobItems (Id, ItemId, ItemName, MediaSourceId, JobId, TemporaryPath, OutputPath, Status, TargetId, DateCreated, Progress, AdditionalFiles, MediaSource) values (@Id, @ItemId, @ItemName, @MediaSourceId, @JobId, @TemporaryPath, @OutputPath, @Status, @TargetId, @DateCreated, @Progress, @AdditionalFiles, @MediaSource)"; _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@Id"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@ItemId"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@ItemName"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@MediaSourceId"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@JobId"); - _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@RequiresConversion"); + _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@TemporaryPath"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@OutputPath"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@Status"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@TargetId"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@DateCreated"); _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@Progress"); + _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@AdditionalFiles"); + _saveJobItemCommand.Parameters.Add(_saveJobItemCommand, "@MediaSource"); } private const string BaseJobSelectText = "select Id, TargetId, Name, Quality, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount from SyncJobs"; - private const string BaseJobItemSelectText = "select Id, ItemId, ItemName, MediaSourceId, JobId, RequiresConversion, OutputPath, Status, TargetId, DateCreated, Progress from SyncJobItems"; + private const string BaseJobItemSelectText = "select Id, ItemId, ItemName, MediaSourceId, JobId, TemporaryPath, OutputPath, Status, TargetId, DateCreated, Progress, AdditionalFiles, MediaSource from SyncJobItems"; public SyncJob GetJob(string id) { @@ -557,12 +564,14 @@ namespace MediaBrowser.Server.Implementations.Sync _saveJobItemCommand.GetParameter(index++).Value = jobItem.ItemName; _saveJobItemCommand.GetParameter(index++).Value = jobItem.MediaSourceId; _saveJobItemCommand.GetParameter(index++).Value = jobItem.JobId; - _saveJobItemCommand.GetParameter(index++).Value = jobItem.RequiresConversion; + _saveJobItemCommand.GetParameter(index++).Value = jobItem.TemporaryPath; _saveJobItemCommand.GetParameter(index++).Value = jobItem.OutputPath; _saveJobItemCommand.GetParameter(index++).Value = jobItem.Status.ToString(); _saveJobItemCommand.GetParameter(index++).Value = jobItem.TargetId; _saveJobItemCommand.GetParameter(index++).Value = jobItem.DateCreated; _saveJobItemCommand.GetParameter(index++).Value = jobItem.Progress; + _saveJobItemCommand.GetParameter(index++).Value = _json.SerializeToString(jobItem.AdditionalFiles); + _saveJobItemCommand.GetParameter(index++).Value = jobItem.MediaSource == null ? null : _json.SerializeToString(jobItem.MediaSource); _saveJobItemCommand.Transaction = transaction; @@ -620,8 +629,11 @@ namespace MediaBrowser.Server.Implementations.Sync } info.JobId = reader.GetString(4); - info.RequiresConversion = reader.GetBoolean(5); + if (!reader.IsDBNull(5)) + { + info.TemporaryPath = reader.GetString(5); + } if (!reader.IsDBNull(6)) { info.OutputPath = reader.GetString(6); @@ -641,6 +653,26 @@ namespace MediaBrowser.Server.Implementations.Sync info.Progress = reader.GetDouble(10); } + if (!reader.IsDBNull(11)) + { + var json = reader.GetString(11); + + if (!string.IsNullOrWhiteSpace(json)) + { + info.AdditionalFiles = _json.DeserializeFromString>(json); + } + } + + if (!reader.IsDBNull(12)) + { + var json = reader.GetString(12); + + if (!string.IsNullOrWhiteSpace(json)) + { + info.MediaSource = _json.DeserializeFromString(json); + } + } + return info; } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs index 88b761a7d..4edebb60f 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs @@ -1,4 +1,6 @@ -using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.IO; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.Sync; @@ -21,8 +23,10 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly ITVSeriesManager _tvSeriesManager; private readonly IMediaEncoder _mediaEncoder; private readonly ISubtitleEncoder _subtitleEncoder; + private readonly IConfigurationManager _config; + private readonly IFileSystem _fileSystem; - public SyncScheduledTask(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder) + public SyncScheduledTask(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder, IConfigurationManager config, IFileSystem fileSystem) { _libraryManager = libraryManager; _syncRepo = syncRepo; @@ -32,6 +36,8 @@ namespace MediaBrowser.Server.Implementations.Sync _tvSeriesManager = tvSeriesManager; _mediaEncoder = mediaEncoder; _subtitleEncoder = subtitleEncoder; + _config = config; + _fileSystem = fileSystem; } public string Name @@ -54,7 +60,7 @@ namespace MediaBrowser.Server.Implementations.Sync public Task Execute(CancellationToken cancellationToken, IProgress progress) { - return new SyncJobProcessor(_libraryManager, _syncRepo, _syncManager, _logger, _userManager, _tvSeriesManager, _mediaEncoder, _subtitleEncoder).Sync(progress, + return new SyncJobProcessor(_libraryManager, _syncRepo, _syncManager, _logger, _userManager, _tvSeriesManager, _mediaEncoder, _subtitleEncoder, _config, _fileSystem).Sync(progress, cancellationToken); } diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 65d3b009f..f7ff5eef1 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -483,7 +483,7 @@ namespace MediaBrowser.Server.Startup.Common TVSeriesManager = new TVSeriesManager(UserManager, UserDataManager, LibraryManager); RegisterSingleInstance(TVSeriesManager); - SyncManager = new SyncManager(LibraryManager, SyncRepository, ImageProcessor, LogManager.GetLogger("SyncManager"), UserManager, () => DtoService, this, TVSeriesManager, () => MediaEncoder, FileSystemManager, () => SubtitleEncoder); + SyncManager = new SyncManager(LibraryManager, SyncRepository, ImageProcessor, LogManager.GetLogger("SyncManager"), UserManager, () => DtoService, this, TVSeriesManager, () => MediaEncoder, FileSystemManager, () => SubtitleEncoder, ServerConfigurationManager); RegisterSingleInstance(SyncManager); DtoService = new DtoService(Logger, LibraryManager, UserDataManager, ItemRepository, ImageProcessor, ServerConfigurationManager, FileSystemManager, ProviderManager, () => ChannelManager, SyncManager, this); @@ -663,7 +663,7 @@ namespace MediaBrowser.Server.Startup.Common private async Task GetSyncRepository() { - var repo = new SyncRepository(LogManager.GetLogger("SyncRepository"), ServerConfigurationManager.ApplicationPaths); + var repo = new SyncRepository(LogManager.GetLogger("SyncRepository"), ServerConfigurationManager.ApplicationPaths, JsonSerializer); await repo.Initialize().ConfigureAwait(false); diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index b2e8ce207..2f875f536 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.541 + 3.0.543 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 06fbc750f..7224a73cb 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.541 + 3.0.543 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index c11f886c1..f5a3a3de0 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.541 + 3.0.543 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index d183c9931..e3cbe9d04 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.541 + 3.0.543 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From f5b7e1dba42f0cf9951d8f2a2324f10fda425565 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 20 Jan 2015 23:56:00 -0500 Subject: add mark for removal options --- MediaBrowser.Api/Sync/SyncService.cs | 28 +++++++++++++++++ MediaBrowser.Controller/Sync/ISyncManager.cs | 14 +++++++++ MediaBrowser.Model/ApiClient/IApiClient.cs | 31 ++++++++++++++++++- MediaBrowser.Model/Sync/SyncJobItem.cs | 9 +++++- .../Localization/JavaScript/javascript.json | 3 ++ .../Sync/SyncManager.cs | 36 ++++++++++++++++++++++ 6 files changed, 119 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index c763aa8df..b30df572b 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -44,6 +44,20 @@ namespace MediaBrowser.Api.Sync public string Id { get; set; } } + [Route("/Sync/JobItems/{Id}/MarkForRemoval", "POST", Summary = "Marks a job item for removal")] + public class MarkJobItemForRemoval : IReturnVoid + { + [ApiMember(Name = "Id", Description = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + public string Id { get; set; } + } + + [Route("/Sync/JobItems/{Id}/UnmarkForRemoval", "POST", Summary = "Unmarks a job item for removal")] + public class UnmarkJobItemForRemoval : IReturnVoid + { + [ApiMember(Name = "Id", Description = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + public string Id { get; set; } + } + [Route("/Sync/JobItems/{Id}", "DELETE", Summary = "Cancels a sync job item")] public class CancelSyncJobItem : IReturnVoid { @@ -299,5 +313,19 @@ namespace MediaBrowser.Api.Sync Task.WaitAll(task); } + + public void Post(MarkJobItemForRemoval request) + { + var task = _syncManager.MarkJobItemForRemoval(request.Id); + + Task.WaitAll(task); + } + + public void Post(UnmarkJobItemForRemoval request) + { + var task = _syncManager.UnmarkJobItemForRemoval(request.Id); + + Task.WaitAll(task); + } } } diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs index 8e4b6a44a..62b6a3a37 100644 --- a/MediaBrowser.Controller/Sync/ISyncManager.cs +++ b/MediaBrowser.Controller/Sync/ISyncManager.cs @@ -128,5 +128,19 @@ namespace MediaBrowser.Controller.Sync /// The request. /// Task<SyncDataResponse>. Task SyncData(SyncDataRequest request); + + /// + /// Marks the job item for removal. + /// + /// The identifier. + /// Task. + Task MarkJobItemForRemoval(string id); + + /// + /// Unmarks the job item for removal. + /// + /// The identifier. + /// Task. + Task UnmarkJobItemForRemoval(string id); } } diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index e8535278b..b6938b217 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1449,12 +1449,41 @@ namespace MediaBrowser.Model.ApiClient /// The request. /// Task<SyncDataResponse>. Task SyncData(SyncDataRequest request); - /// /// Gets the synchronize job item file URL. /// /// The identifier. /// System.String. string GetSyncJobItemFileUrl(string id); + /// + /// Marks the synchronize job item for removal. + /// + /// The identifier. + /// Task. + Task MarkSyncJobItemForRemoval(string id); + /// + /// Unmarks the synchronize job item for removal. + /// + /// The identifier. + /// Task. + Task UnmarkSyncJobItemForRemoval(string id); + /// + /// Queues the failed synchronize job item for retry. + /// + /// The identifier. + /// Task. + Task QueueFailedSyncJobItemForRetry(string id); + /// + /// Cancels the synchronize job item. + /// + /// The identifier. + /// Task. + Task CancelSyncJobItem(string id); + /// + /// Enables the cancelled synchronize job item. + /// + /// The identifier. + /// Task. + Task EnableCancelledSyncJobItem(string id); } } \ No newline at end of file diff --git a/MediaBrowser.Model/Sync/SyncJobItem.cs b/MediaBrowser.Model/Sync/SyncJobItem.cs index 133065bf9..195d1e17e 100644 --- a/MediaBrowser.Model/Sync/SyncJobItem.cs +++ b/MediaBrowser.Model/Sync/SyncJobItem.cs @@ -86,8 +86,15 @@ namespace MediaBrowser.Model.Sync /// /// The temporary path. public string TemporaryPath { get; set; } + /// + /// Gets or sets the additional files. + /// + /// The additional files. public List AdditionalFiles { get; set; } - + /// + /// Gets or sets a value indicating whether this instance is marked for removal. + /// + /// true if this instance is marked for removal; otherwise, false. public bool IsMarkedForRemoval { get; set; } public SyncJobItem() diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index e4d20d3a1..62619a567 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -59,6 +59,7 @@ "ButtonCancelItem": "Cancel item", "ButtonQueueForRetry": "Queue for retry", "ButtonReenable": "Re-enable", + "SyncJobItemStatusSyncedMarkForRemoval": "Marked for removal", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -70,6 +71,8 @@ "LabelFree": "Free", "HeaderSelectAudio": "Select Audio", "HeaderSelectSubtitles": "Select Subtitles", + "ButtonMarkForRemoval": "Mark for removal from device", + "ButtonUnmarkForRemoval": "Unmark for removal from device", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default/Forced)", diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 7e4455ab3..b5e29533b 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -684,5 +684,41 @@ namespace MediaBrowser.Server.Implementations.Sync await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false); } + + public async Task MarkJobItemForRemoval(string id) + { + var jobItem = _repo.GetJobItem(id); + + if (jobItem.Status != SyncJobItemStatus.Synced) + { + throw new ArgumentException("Operation is not valid for this job item"); + } + + jobItem.IsMarkedForRemoval = true; + + await _repo.Update(jobItem).ConfigureAwait(false); + + var processor = GetSyncJobProcessor(); + + await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false); + } + + public async Task UnmarkJobItemForRemoval(string id) + { + var jobItem = _repo.GetJobItem(id); + + if (jobItem.Status != SyncJobItemStatus.Synced) + { + throw new ArgumentException("Operation is not valid for this job item"); + } + + jobItem.IsMarkedForRemoval = false; + + await _repo.Update(jobItem).ConfigureAwait(false); + + var processor = GetSyncJobProcessor(); + + await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false); + } } } -- cgit v1.2.3 From b7e5e21c975cc4953764d48c1dacbcd4dc149de9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 22 Jan 2015 11:41:34 -0500 Subject: update task buttons --- MediaBrowser.Api/BaseApiService.cs | 20 ++- MediaBrowser.Api/ConfigurationService.cs | 3 +- MediaBrowser.Api/Dlna/DlnaServerService.cs | 3 +- MediaBrowser.Api/Images/ImageService.cs | 16 +-- MediaBrowser.Api/Playback/BaseStreamingService.cs | 2 +- MediaBrowser.Api/PluginService.cs | 3 +- .../ScheduledTasks/ScheduledTaskService.cs | 3 +- MediaBrowser.Api/UserService.cs | 3 +- MediaBrowser.Controller/Entities/Folder.cs | 2 +- .../Entities/ISupportsBoxSetGrouping.cs | 9 +- MediaBrowser.Controller/Entities/Movies/BoxSet.cs | 2 +- MediaBrowser.Controller/Entities/Movies/Movie.cs | 7 - MediaBrowser.Dlna/DlnaManager.cs | 31 ++-- .../MediaBrowser.Model.Portable.csproj | 3 - .../MediaBrowser.Model.net35.csproj | 3 - MediaBrowser.Model/ApiClient/IApiClient.cs | 18 --- MediaBrowser.Model/Dto/VideoStreamOptions.cs | 158 --------------------- MediaBrowser.Model/MediaBrowser.Model.csproj | 1 - .../Collections/CollectionManager.cs | 64 ++++----- .../Library/Validators/BoxSetPostScanTask.cs | 50 ------- .../Localization/JavaScript/javascript.json | 8 +- .../MediaBrowser.Server.Implementations.csproj | 1 - 22 files changed, 86 insertions(+), 324 deletions(-) delete mode 100644 MediaBrowser.Model/Dto/VideoStreamOptions.cs delete mode 100644 MediaBrowser.Server.Implementations/Library/Validators/BoxSetPostScanTask.cs (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs index 297a13155..e90969655 100644 --- a/MediaBrowser.Api/BaseApiService.cs +++ b/MediaBrowser.Api/BaseApiService.cs @@ -4,6 +4,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Logging; +using ServiceStack.Text.Controller; using ServiceStack.Web; using System; using System.Collections.Generic; @@ -21,7 +22,7 @@ namespace MediaBrowser.Api /// /// The logger. public ILogger Logger { get; set; } - + /// /// Gets or sets the HTTP result factory. /// @@ -143,7 +144,7 @@ namespace MediaBrowser.Api { if (!string.IsNullOrEmpty(parentId)) { - var folder = (Folder) libraryManager.GetItemById(new Guid(parentId)); + var folder = (Folder)libraryManager.GetItemById(new Guid(parentId)); if (userId.HasValue) { @@ -287,6 +288,20 @@ namespace MediaBrowser.Api }) ?? name; } + protected string GetPathValue(int index) + { + var pathInfo = PathInfo.Parse(Request.PathInfo); + var first = pathInfo.GetArgumentValue(0); + + // backwards compatibility + if (string.Equals(first, "mediabrowser", StringComparison.OrdinalIgnoreCase)) + { + index++; + } + + return pathInfo.GetArgumentValue(index); + } + /// /// Gets the name of the item by. /// @@ -294,7 +309,6 @@ namespace MediaBrowser.Api /// The type. /// The library manager. /// Task{BaseItem}. - /// protected BaseItem GetItemByName(string name, string type, ILibraryManager libraryManager) { BaseItem item; diff --git a/MediaBrowser.Api/ConfigurationService.cs b/MediaBrowser.Api/ConfigurationService.cs index 3eb0296fc..d0abd18c2 100644 --- a/MediaBrowser.Api/ConfigurationService.cs +++ b/MediaBrowser.Api/ConfigurationService.cs @@ -143,8 +143,7 @@ namespace MediaBrowser.Api public void Post(UpdateNamedConfiguration request) { - var pathInfo = PathInfo.Parse(Request.PathInfo); - var key = pathInfo.GetArgumentValue(2); + var key = GetPathValue(2); var configurationType = _configurationManager.GetConfigurationType(key); var configuration = _jsonSerializer.DeserializeFromStream(request.RequestStream, configurationType); diff --git a/MediaBrowser.Api/Dlna/DlnaServerService.cs b/MediaBrowser.Api/Dlna/DlnaServerService.cs index 94d6e25b0..2383017c6 100644 --- a/MediaBrowser.Api/Dlna/DlnaServerService.cs +++ b/MediaBrowser.Api/Dlna/DlnaServerService.cs @@ -120,8 +120,7 @@ namespace MediaBrowser.Api.Dlna private async Task PostAsync(Stream requestStream, IUpnpService service) { - var pathInfo = PathInfo.Parse(Request.PathInfo); - var id = pathInfo.GetArgumentValue(2); + var id = GetPathValue(2); using (var reader = new StreamReader(requestStream)) { diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index f2586b043..f141d9df9 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -396,8 +396,7 @@ namespace MediaBrowser.Api.Images public object Get(GetItemByNameImage request) { - var pathInfo = PathInfo.Parse(Request.PathInfo); - var type = pathInfo.GetArgumentValue(0); + var type = GetPathValue(0); var item = GetItemByName(request.Name, type, _libraryManager); @@ -406,8 +405,7 @@ namespace MediaBrowser.Api.Images public object Head(GetItemByNameImage request) { - var pathInfo = PathInfo.Parse(Request.PathInfo); - var type = pathInfo.GetArgumentValue(0); + var type = GetPathValue(0); var item = GetItemByName(request.Name, type, _libraryManager); @@ -420,10 +418,9 @@ namespace MediaBrowser.Api.Images /// The request. public void Post(PostUserImage request) { - var pathInfo = PathInfo.Parse(Request.PathInfo); - var id = new Guid(pathInfo.GetArgumentValue(1)); + var id = new Guid(GetPathValue(1)); - request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue(3), true); + request.Type = (ImageType)Enum.Parse(typeof(ImageType), GetPathValue(3), true); var item = _userManager.GetUserById(id); @@ -438,10 +435,9 @@ namespace MediaBrowser.Api.Images /// The request. public void Post(PostItemImage request) { - var pathInfo = PathInfo.Parse(Request.PathInfo); - var id = new Guid(pathInfo.GetArgumentValue(1)); + var id = new Guid(GetPathValue(1)); - request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue(3), true); + request.Type = (ImageType)Enum.Parse(typeof(ImageType), GetPathValue(3), true); var item = _libraryManager.GetItemById(id); diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index b3610bc38..77f6dc103 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -824,7 +824,7 @@ namespace MediaBrowser.Api.Playback { get { - return false; + return true; } } diff --git a/MediaBrowser.Api/PluginService.cs b/MediaBrowser.Api/PluginService.cs index 62aa1e755..f9098f5bf 100644 --- a/MediaBrowser.Api/PluginService.cs +++ b/MediaBrowser.Api/PluginService.cs @@ -236,8 +236,7 @@ namespace MediaBrowser.Api { // We need to parse this manually because we told service stack not to with IRequiresRequestStream // https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs - var pathInfo = PathInfo.Parse(Request.PathInfo); - var id = new Guid(pathInfo.GetArgumentValue(1)); + var id = new Guid(GetPathValue(1)); var plugin = _appHost.Plugins.First(p => p.Id == id); diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs index 947b99d35..e3722b4a7 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs @@ -224,8 +224,7 @@ namespace MediaBrowser.Api.ScheduledTasks { // We need to parse this manually because we told service stack not to with IRequiresRequestStream // https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs - var pathInfo = PathInfo.Parse(Request.PathInfo); - var id = pathInfo.GetArgumentValue(1); + var id = GetPathValue(1); var task = TaskManager.ScheduledTasks.FirstOrDefault(i => string.Equals(i.Id, id)); diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index 51a7584b8..37553e4a4 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -449,8 +449,7 @@ namespace MediaBrowser.Api { // We need to parse this manually because we told service stack not to with IRequiresRequestStream // https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs - var pathInfo = PathInfo.Parse(Request.PathInfo); - var id = new Guid(pathInfo.GetArgumentValue(1)); + var id = new Guid(GetPathValue(1)); var dtoUser = request; diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 005f263f7..ff6e8e85b 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -301,7 +301,7 @@ namespace MediaBrowser.Controller.Entities public override bool IsVisible(User user) { - if (this is ICollectionFolder) + if (this is ICollectionFolder && !(this is BasePluginFolder)) { if (user.Policy.BlockedMediaFolders != null) { diff --git a/MediaBrowser.Controller/Entities/ISupportsBoxSetGrouping.cs b/MediaBrowser.Controller/Entities/ISupportsBoxSetGrouping.cs index 0fd463155..fbe5a06d0 100644 --- a/MediaBrowser.Controller/Entities/ISupportsBoxSetGrouping.cs +++ b/MediaBrowser.Controller/Entities/ISupportsBoxSetGrouping.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; - + namespace MediaBrowser.Controller.Entities { /// @@ -10,10 +8,5 @@ namespace MediaBrowser.Controller.Entities /// public interface ISupportsBoxSetGrouping { - /// - /// Gets or sets the box set identifier list. - /// - /// The box set identifier list. - List BoxSetIdList { get; set; } } } diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs index e48b8d845..63690661a 100644 --- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs +++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs @@ -4,13 +4,13 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Users; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Users; namespace MediaBrowser.Controller.Entities.Movies { diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs index b3774cfe0..2fa5fc6e1 100644 --- a/MediaBrowser.Controller/Entities/Movies/Movie.cs +++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs @@ -25,12 +25,6 @@ namespace MediaBrowser.Controller.Entities.Movies public List ThemeVideoIds { get; set; } public List ProductionLocations { get; set; } - /// - /// This is just a cache to enable quick access by Id - /// - [IgnoreDataMember] - public List BoxSetIdList { get; set; } - public Movie() { SpecialFeatureIds = new List(); @@ -40,7 +34,6 @@ namespace MediaBrowser.Controller.Entities.Movies RemoteTrailerIds = new List(); ThemeSongIds = new List(); ThemeVideoIds = new List(); - BoxSetIdList = new List(); Taglines = new List(); Keywords = new List(); ProductionLocations = new List(); diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs index 31f1e0a88..2c22abd4d 100644 --- a/MediaBrowser.Dlna/DlnaManager.cs +++ b/MediaBrowser.Dlna/DlnaManager.cs @@ -132,61 +132,74 @@ namespace MediaBrowser.Dlna { if (!string.IsNullOrWhiteSpace(profileInfo.DeviceDescription)) { - if (deviceInfo.DeviceDescription == null || !Regex.IsMatch(deviceInfo.DeviceDescription, profileInfo.DeviceDescription)) + if (deviceInfo.DeviceDescription == null || !IsRegexMatch(deviceInfo.DeviceDescription, profileInfo.DeviceDescription)) return false; } if (!string.IsNullOrWhiteSpace(profileInfo.FriendlyName)) { - if (deviceInfo.FriendlyName == null || !Regex.IsMatch(deviceInfo.FriendlyName, profileInfo.FriendlyName)) + if (deviceInfo.FriendlyName == null || !IsRegexMatch(deviceInfo.FriendlyName, profileInfo.FriendlyName)) return false; } if (!string.IsNullOrWhiteSpace(profileInfo.Manufacturer)) { - if (deviceInfo.Manufacturer == null || !Regex.IsMatch(deviceInfo.Manufacturer, profileInfo.Manufacturer)) + if (deviceInfo.Manufacturer == null || !IsRegexMatch(deviceInfo.Manufacturer, profileInfo.Manufacturer)) return false; } if (!string.IsNullOrWhiteSpace(profileInfo.ManufacturerUrl)) { - if (deviceInfo.ManufacturerUrl == null || !Regex.IsMatch(deviceInfo.ManufacturerUrl, profileInfo.ManufacturerUrl)) + if (deviceInfo.ManufacturerUrl == null || !IsRegexMatch(deviceInfo.ManufacturerUrl, profileInfo.ManufacturerUrl)) return false; } if (!string.IsNullOrWhiteSpace(profileInfo.ModelDescription)) { - if (deviceInfo.ModelDescription == null || !Regex.IsMatch(deviceInfo.ModelDescription, profileInfo.ModelDescription)) + if (deviceInfo.ModelDescription == null || !IsRegexMatch(deviceInfo.ModelDescription, profileInfo.ModelDescription)) return false; } if (!string.IsNullOrWhiteSpace(profileInfo.ModelName)) { - if (deviceInfo.ModelName == null || !Regex.IsMatch(deviceInfo.ModelName, profileInfo.ModelName)) + if (deviceInfo.ModelName == null || !IsRegexMatch(deviceInfo.ModelName, profileInfo.ModelName)) return false; } if (!string.IsNullOrWhiteSpace(profileInfo.ModelNumber)) { - if (deviceInfo.ModelNumber == null || !Regex.IsMatch(deviceInfo.ModelNumber, profileInfo.ModelNumber)) + if (deviceInfo.ModelNumber == null || !IsRegexMatch(deviceInfo.ModelNumber, profileInfo.ModelNumber)) return false; } if (!string.IsNullOrWhiteSpace(profileInfo.ModelUrl)) { - if (deviceInfo.ModelUrl == null || !Regex.IsMatch(deviceInfo.ModelUrl, profileInfo.ModelUrl)) + if (deviceInfo.ModelUrl == null || !IsRegexMatch(deviceInfo.ModelUrl, profileInfo.ModelUrl)) return false; } if (!string.IsNullOrWhiteSpace(profileInfo.SerialNumber)) { - if (deviceInfo.SerialNumber == null || !Regex.IsMatch(deviceInfo.SerialNumber, profileInfo.SerialNumber)) + if (deviceInfo.SerialNumber == null || !IsRegexMatch(deviceInfo.SerialNumber, profileInfo.SerialNumber)) return false; } return true; } + private bool IsRegexMatch(string input, string pattern) + { + try + { + return Regex.IsMatch(input, pattern); + } + catch (ArgumentException ex) + { + _logger.ErrorException("Error evaluating regex pattern {0}", ex, pattern); + return false; + } + } + public DeviceProfile GetProfile(IDictionary headers) { if (headers == null) diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 91d0e15f8..0a350f517 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -497,9 +497,6 @@ Dto\UserItemDataDto.cs - - Dto\VideoStreamOptions.cs - Entities\BaseItemInfo.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 47e019051..0c5946d12 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -462,9 +462,6 @@ Dto\UserItemDataDto.cs - - Dto\VideoStreamOptions.cs - Entities\BaseItemInfo.cs diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index b6938b217..0e69bb91f 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1316,24 +1316,6 @@ namespace MediaBrowser.Model.ApiClient /// Task<QueryResult<BaseItemDto>>. Task> GetPlaylistItems(PlaylistItemQuery query); - /// - /// Gets the url needed to stream a video file - /// - /// The options. - /// System.String. - /// options - [Obsolete] - string GetVideoStreamUrl(VideoStreamOptions options); - - /// - /// Formulates a url for streaming video using the HLS protocol - /// - /// The options. - /// System.String. - /// options - [Obsolete] - string GetHlsVideoStreamUrl(VideoStreamOptions options); - /// /// Sends the context message asynchronous. /// diff --git a/MediaBrowser.Model/Dto/VideoStreamOptions.cs b/MediaBrowser.Model/Dto/VideoStreamOptions.cs deleted file mode 100644 index e9a83bd12..000000000 --- a/MediaBrowser.Model/Dto/VideoStreamOptions.cs +++ /dev/null @@ -1,158 +0,0 @@ -using System; - -namespace MediaBrowser.Model.Dto -{ - /// - /// Class VideoStreamOptions - /// - [Obsolete] - public class VideoStreamOptions - { - /// - /// Gets or sets the audio bit rate. - /// - /// The audio bit rate. - public int? AudioBitRate { get; set; } - - /// - /// Gets or sets the audio codec. - /// Omit to copy the original stream - /// - /// The audio encoding format. - public string AudioCodec { get; set; } - - /// - /// Gets or sets the item id. - /// - /// The item id. - public string ItemId { get; set; } - - /// - /// Gets or sets the max audio channels. - /// - /// The max audio channels. - public int? MaxAudioChannels { get; set; } - - /// - /// Gets or sets the max audio sample rate. - /// - /// The max audio sample rate. - public int? MaxAudioSampleRate { get; set; } - - /// - /// Gets or sets the start time ticks. - /// - /// The start time ticks. - public long? StartTimeTicks { get; set; } - - /// - /// Gets or sets a value indicating whether the original media should be served statically - /// Only used with progressive streaming - /// - /// true if static; otherwise, false. - public bool? Static { get; set; } - - /// - /// Gets or sets the output file extension. - /// - /// The output file extension. - public string OutputFileExtension { get; set; } - - /// - /// Gets or sets the device id. - /// - /// The device id. - public string DeviceId { get; set; } - - /// - /// Gets or sets the video codec. - /// Omit to copy - /// - /// The video codec. - public string VideoCodec { get; set; } - - /// - /// Gets or sets the video bit rate. - /// - /// The video bit rate. - public int? VideoBitRate { get; set; } - - /// - /// Gets or sets the width. - /// - /// The width. - public int? Width { get; set; } - - /// - /// Gets or sets the height. - /// - /// The height. - public int? Height { get; set; } - - /// - /// Gets or sets the width of the max. - /// - /// The width of the max. - public int? MaxWidth { get; set; } - - /// - /// Gets or sets the height of the max. - /// - /// The height of the max. - public int? MaxHeight { get; set; } - - /// - /// Gets or sets the frame rate. - /// - /// The frame rate. - public double? FrameRate { get; set; } - - /// - /// Gets or sets the index of the audio stream. - /// - /// The index of the audio stream. - public int? AudioStreamIndex { get; set; } - - /// - /// Gets or sets the index of the video stream. - /// - /// The index of the video stream. - public int? VideoStreamIndex { get; set; } - - /// - /// Gets or sets the index of the subtitle stream. - /// - /// The index of the subtitle stream. - public int? SubtitleStreamIndex { get; set; } - - /// - /// Gets or sets the profile. - /// - /// The profile. - public string Profile { get; set; } - - /// - /// Gets or sets the level. - /// - /// The level. - public string Level { get; set; } - - /// - /// Gets or sets the baseline stream audio bit rate. - /// - /// The baseline stream audio bit rate. - public int? BaselineStreamAudioBitRate { get; set; } - - /// - /// Gets or sets a value indicating whether [append baseline stream]. - /// - /// true if [append baseline stream]; otherwise, false. - public bool AppendBaselineStream { get; set; } - - /// - /// Gets or sets the time stamp offset ms. Only used with HLS. - /// - /// The time stamp offset ms. - public int? TimeStampOffsetMs { get; set; } - } -} \ No newline at end of file diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 36d22347f..bad17abae 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -135,7 +135,6 @@ - diff --git a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs index d92db34e3..6100e3f5d 100644 --- a/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs +++ b/MediaBrowser.Server.Implementations/Collections/CollectionManager.cs @@ -167,18 +167,6 @@ namespace MediaBrowser.Server.Implementations.Collections } list.Add(LinkedChild.Create(item)); - - var supportsGrouping = item as ISupportsBoxSetGrouping; - - if (supportsGrouping != null) - { - var boxsetIdList = supportsGrouping.BoxSetIdList.ToList(); - if (!boxsetIdList.Contains(collectionId)) - { - boxsetIdList.Add(collectionId); - } - supportsGrouping.BoxSetIdList = boxsetIdList; - } } collection.LinkedChildren.AddRange(list); @@ -228,15 +216,6 @@ namespace MediaBrowser.Server.Implementations.Collections { itemList.Add(childItem); } - - var supportsGrouping = childItem as ISupportsBoxSetGrouping; - - if (supportsGrouping != null) - { - var boxsetIdList = supportsGrouping.BoxSetIdList.ToList(); - boxsetIdList.Remove(collectionId); - supportsGrouping.BoxSetIdList = boxsetIdList; - } } var shortcutFiles = Directory @@ -289,29 +268,40 @@ namespace MediaBrowser.Server.Implementations.Collections public IEnumerable CollapseItemsWithinBoxSets(IEnumerable items, User user) { - var itemsToCollapse = new List(); - var boxsets = new List(); + var results = new Dictionary(); + var allBoxsets = new List(); - var list = items.ToList(); - - foreach (var item in list.OfType()) + foreach (var item in items) { - var currentBoxSets = item.BoxSetIdList - .Select(i => _libraryManager.GetItemById(i)) - .Where(i => i != null && i.IsVisible(user)) - .ToList(); + var grouping = item as ISupportsBoxSetGrouping; - if (currentBoxSets.Count > 0) + if (grouping == null) + { + results[item.Id] = item; + } + else { - itemsToCollapse.Add(item); - boxsets.AddRange(currentBoxSets); + var itemId = item.Id; + + var currentBoxSets = allBoxsets + .Where(i => i.GetLinkedChildren().Any(j => j.Id == itemId)) + .ToList(); + + if (currentBoxSets.Count > 0) + { + foreach (var boxset in currentBoxSets) + { + results[boxset.Id] = boxset; + } + } + else + { + results[item.Id] = item; + } } } - return list - .Except(itemsToCollapse.Cast()) - .Concat(boxsets) - .DistinctBy(i => i.Id); + return results.Values; } } } diff --git a/MediaBrowser.Server.Implementations/Library/Validators/BoxSetPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/Validators/BoxSetPostScanTask.cs deleted file mode 100644 index 86d88f7e0..000000000 --- a/MediaBrowser.Server.Implementations/Library/Validators/BoxSetPostScanTask.cs +++ /dev/null @@ -1,50 +0,0 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using System; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Server.Implementations.Library.Validators -{ - public class BoxSetPostScanTask : ILibraryPostScanTask - { - private readonly ILibraryManager _libraryManager; - - public BoxSetPostScanTask(ILibraryManager libraryManager) - { - _libraryManager = libraryManager; - } - - public Task Run(IProgress progress, CancellationToken cancellationToken) - { - var items = _libraryManager.RootFolder.RecursiveChildren.ToList(); - - var boxsets = items.OfType().ToList(); - - var numComplete = 0; - - foreach (var boxset in boxsets) - { - foreach (var child in boxset.Children.Concat(boxset.GetLinkedChildren()).OfType()) - { - var boxsetIdList = child.BoxSetIdList.ToList(); - if (!boxsetIdList.Contains(boxset.Id)) - { - boxsetIdList.Add(boxset.Id); - } - child.BoxSetIdList = boxsetIdList; - } - - numComplete++; - double percent = numComplete; - percent /= boxsets.Count; - progress.Report(percent * 100); - } - - progress.Report(100); - return Task.FromResult(true); - } - } -} diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index 62619a567..4206ccf59 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -45,6 +45,8 @@ "ButtonHelp": "Help", "ButtonSave": "Save", "HeaderDevices": "Devices", + "ButtonScheduledTasks": "Scheduled tasks", + "ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task. It can also be run manually here. To configure the scheduled task, see:", "HeaderSupporterBenefit": "A supporter membership provides additional benefits such as access to premium plugins, internet channel content, and more. {0}Learn more{1}.", "HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard", "HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client", @@ -59,7 +61,7 @@ "ButtonCancelItem": "Cancel item", "ButtonQueueForRetry": "Queue for retry", "ButtonReenable": "Re-enable", - "SyncJobItemStatusSyncedMarkForRemoval": "Marked for removal", + "SyncJobItemStatusSyncedMarkForRemoval": "Marked for removal", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -71,8 +73,8 @@ "LabelFree": "Free", "HeaderSelectAudio": "Select Audio", "HeaderSelectSubtitles": "Select Subtitles", - "ButtonMarkForRemoval": "Mark for removal from device", - "ButtonUnmarkForRemoval": "Unmark for removal from device", + "ButtonMarkForRemoval": "Mark for removal from device", + "ButtonUnmarkForRemoval": "Unmark for removal from device", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default/Forced)", diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 548ac07aa..fe5642dbc 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -209,7 +209,6 @@ - -- cgit v1.2.3 From 792e4c4f1ba3d337cfaffca03e158d95560b3093 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 30 Jan 2015 00:18:32 -0500 Subject: sync updates --- MediaBrowser.Api/UserLibrary/UserLibraryService.cs | 1 - MediaBrowser.Api/UserService.cs | 33 ++++++++- MediaBrowser.Controller/Library/IUserManager.cs | 8 ++ .../MediaBrowser.Model.Portable.csproj | 3 + .../MediaBrowser.Model.net35.csproj | 3 + MediaBrowser.Model/ApiClient/ConnectionResult.cs | 2 + MediaBrowser.Model/ApiClient/ConnectionState.cs | 4 +- MediaBrowser.Model/ApiClient/IApiClient.cs | 7 ++ MediaBrowser.Model/ApiClient/IConnectionManager.cs | 9 +++ MediaBrowser.Model/ApiClient/ServerCredentials.cs | 4 + MediaBrowser.Model/ApiClient/ServerInfo.cs | 48 ++++++++++++ MediaBrowser.Model/ApiClient/ServerUserInfo.cs | 9 +++ MediaBrowser.Model/Dto/UserDto.cs | 10 ++- MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + MediaBrowser.Model/Session/ClientCapabilities.cs | 1 + .../Library/UserManager.cs | 13 ++++ .../Localization/JavaScript/ar.json | 3 + .../Localization/JavaScript/bg_BG.json | 5 +- .../Localization/JavaScript/ca.json | 3 + .../Localization/JavaScript/cs.json | 3 + .../Localization/JavaScript/da.json | 3 + .../Localization/JavaScript/de.json | 3 + .../Localization/JavaScript/el.json | 3 + .../Localization/JavaScript/en_GB.json | 5 +- .../Localization/JavaScript/en_US.json | 5 +- .../Localization/JavaScript/es.json | 3 + .../Localization/JavaScript/es_MX.json | 3 + .../Localization/JavaScript/fi.json | 3 + .../Localization/JavaScript/fr.json | 3 + .../Localization/JavaScript/he.json | 3 + .../Localization/JavaScript/hr.json | 3 + .../Localization/JavaScript/it.json | 3 + .../Localization/JavaScript/kk.json | 5 +- .../Localization/JavaScript/ms.json | 5 +- .../Localization/JavaScript/nb.json | 3 + .../Localization/JavaScript/nl.json | 3 + .../Localization/JavaScript/pl.json | 3 + .../Localization/JavaScript/pt_BR.json | 3 + .../Localization/JavaScript/pt_PT.json | 3 + .../Localization/JavaScript/ru.json | 15 ++-- .../Localization/JavaScript/sv.json | 3 + .../Localization/JavaScript/tr.json | 3 + .../Localization/JavaScript/uk.json | 5 +- .../Localization/JavaScript/vi.json | 3 + .../Localization/JavaScript/zh_CN.json | 3 + .../Localization/JavaScript/zh_TW.json | 3 + .../Localization/Server/ar.json | 8 +- .../Localization/Server/bg_BG.json | 8 +- .../Localization/Server/ca.json | 8 +- .../Localization/Server/cs.json | 8 +- .../Localization/Server/da.json | 8 +- .../Localization/Server/de.json | 8 +- .../Localization/Server/el.json | 8 +- .../Localization/Server/en_GB.json | 8 +- .../Localization/Server/en_US.json | 8 +- .../Localization/Server/es.json | 8 +- .../Localization/Server/es_MX.json | 8 +- .../Localization/Server/fi.json | 8 +- .../Localization/Server/fr.json | 8 +- .../Localization/Server/he.json | 8 +- .../Localization/Server/hr.json | 8 +- .../Localization/Server/it.json | 86 +++++++++++----------- .../Localization/Server/kk.json | 30 ++++---- .../Localization/Server/ko.json | 8 +- .../Localization/Server/ms.json | 8 +- .../Localization/Server/nb.json | 8 +- .../Localization/Server/nl.json | 8 +- .../Localization/Server/pl.json | 8 +- .../Localization/Server/pt_BR.json | 8 +- .../Localization/Server/pt_PT.json | 8 +- .../Localization/Server/ru.json | 30 ++++---- .../Localization/Server/sv.json | 8 +- .../Localization/Server/tr.json | 8 +- .../Localization/Server/uk.json | 8 +- .../Localization/Server/vi.json | 8 +- .../Localization/Server/zh_CN.json | 8 +- .../Localization/Server/zh_TW.json | 8 +- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 81 files changed, 505 insertions(+), 147 deletions(-) create mode 100644 MediaBrowser.Model/ApiClient/ServerUserInfo.cs (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 80ab72db7..cdfd00ce9 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -455,7 +455,6 @@ namespace MediaBrowser.Api.UserLibrary var dtos = trailerIds .Select(_libraryManager.GetItemById) - .OrderBy(i => i.SortName) .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item)); return dtos.ToList(); diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index 2c497d172..603396e38 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -55,6 +55,21 @@ namespace MediaBrowser.Api public string Id { get; set; } } + /// + /// Class GetUser + /// + [Route("/Users/{Id}/Offline", "GET", Summary = "Gets an offline user record by Id")] + [Authenticated] + public class GetOfflineUser : IReturn + { + /// + /// Gets or sets the id. + /// + /// The id. + [ApiMember(Name = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + } + /// /// Class DeleteUser /// @@ -319,7 +334,7 @@ namespace MediaBrowser.Api .Select(i => _userManager.GetUserDto(i, Request.RemoteIp)) .ToList(); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// @@ -338,7 +353,21 @@ namespace MediaBrowser.Api var result = _userManager.GetUserDto(user, Request.RemoteIp); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); + } + + public object Get(GetOfflineUser request) + { + var user = _userManager.GetUserById(request.Id); + + if (user == null) + { + throw new ResourceNotFoundException("User not found"); + } + + var result = _userManager.GetOfflineUserDto(user, Request.RemoteIp); + + return ToOptimizedResult(result); } /// diff --git a/MediaBrowser.Controller/Library/IUserManager.cs b/MediaBrowser.Controller/Library/IUserManager.cs index 5aa58aa57..97a3cced9 100644 --- a/MediaBrowser.Controller/Library/IUserManager.cs +++ b/MediaBrowser.Controller/Library/IUserManager.cs @@ -117,6 +117,14 @@ namespace MediaBrowser.Controller.Library /// Task. Task ResetPassword(User user); + /// + /// Gets the offline user dto. + /// + /// The user. + /// The device identifier. + /// UserDto. + UserDto GetOfflineUserDto(User user, string deviceId); + /// /// Resets the easy password. /// diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 0a350f517..310170b5f 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -122,6 +122,9 @@ ApiClient\ServerInfo.cs + + ApiClient\ServerUserInfo.cs + ApiClient\SessionUpdatesEventArgs.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 0c5946d12..31d2e6470 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -87,6 +87,9 @@ ApiClient\ServerInfo.cs + + ApiClient\ServerUserInfo.cs + ApiClient\SessionUpdatesEventArgs.cs diff --git a/MediaBrowser.Model/ApiClient/ConnectionResult.cs b/MediaBrowser.Model/ApiClient/ConnectionResult.cs index 12a80ee15..32a80d1a3 100644 --- a/MediaBrowser.Model/ApiClient/ConnectionResult.cs +++ b/MediaBrowser.Model/ApiClient/ConnectionResult.cs @@ -1,4 +1,5 @@ using MediaBrowser.Model.Connect; +using MediaBrowser.Model.Dto; using System.Collections.Generic; namespace MediaBrowser.Model.ApiClient @@ -9,6 +10,7 @@ namespace MediaBrowser.Model.ApiClient public List Servers { get; set; } public IApiClient ApiClient { get; set; } public ConnectUser ConnectUser { get; set; } + public UserDto OfflineUser { get; set; } public ConnectionResult() { diff --git a/MediaBrowser.Model/ApiClient/ConnectionState.cs b/MediaBrowser.Model/ApiClient/ConnectionState.cs index 5e47d688e..9b753c7bb 100644 --- a/MediaBrowser.Model/ApiClient/ConnectionState.cs +++ b/MediaBrowser.Model/ApiClient/ConnectionState.cs @@ -6,6 +6,8 @@ namespace MediaBrowser.Model.ApiClient ServerSignIn = 2, SignedIn = 3, ServerSelection = 4, - ConnectSignIn = 5 + ConnectSignIn = 5, + OfflineSignIn = 6, + OfflineSignedIn = 7 } } \ No newline at end of file diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 0e69bb91f..bcd1dfe12 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -557,6 +557,13 @@ namespace MediaBrowser.Model.ApiClient /// id Task GetUserAsync(string id); + /// + /// Gets the offline user asynchronous. + /// + /// The identifier. + /// Task<UserDto>. + Task GetOfflineUserAsync(string id); + /// /// Gets the parental ratings async. /// diff --git a/MediaBrowser.Model/ApiClient/IConnectionManager.cs b/MediaBrowser.Model/ApiClient/IConnectionManager.cs index a54c330ac..658c71ac5 100644 --- a/MediaBrowser.Model/ApiClient/IConnectionManager.cs +++ b/MediaBrowser.Model/ApiClient/IConnectionManager.cs @@ -136,5 +136,14 @@ namespace MediaBrowser.Model.ApiClient /// /// The cancellation token. Task> GetAvailableServers(CancellationToken cancellationToken); + + /// + /// Authenticates an offline user with their password + /// + /// The user. + /// The password. + /// if set to true [remember credentials]. + /// Task. + Task AuthenticateOffline(UserDto user, string password, bool rememberCredentials); } } diff --git a/MediaBrowser.Model/ApiClient/ServerCredentials.cs b/MediaBrowser.Model/ApiClient/ServerCredentials.cs index fbbc6c05d..b5f38f4db 100644 --- a/MediaBrowser.Model/ApiClient/ServerCredentials.cs +++ b/MediaBrowser.Model/ApiClient/ServerCredentials.cs @@ -70,6 +70,10 @@ namespace MediaBrowser.Model.ApiClient { existing.LastConnectionMode = server.LastConnectionMode; } + foreach (ServerUserInfo user in server.Users) + { + existing.AddOrUpdate(user); + } } else { diff --git a/MediaBrowser.Model/ApiClient/ServerInfo.cs b/MediaBrowser.Model/ApiClient/ServerInfo.cs index 46cc560af..2faa5b407 100644 --- a/MediaBrowser.Model/ApiClient/ServerInfo.cs +++ b/MediaBrowser.Model/ApiClient/ServerInfo.cs @@ -1,12 +1,16 @@ using MediaBrowser.Model.Connect; +using MediaBrowser.Model.Extensions; using MediaBrowser.Model.System; using System; using System.Collections.Generic; +using System.Linq; namespace MediaBrowser.Model.ApiClient { public class ServerInfo { + public List Users { get; set; } + public String Name { get; set; } public String Id { get; set; } public String LocalAddress { get; set; } @@ -23,6 +27,7 @@ namespace MediaBrowser.Model.ApiClient public ServerInfo() { WakeOnLanInfos = new List(); + Users = new List(); } public void ImportInfo(PublicSystemInfo systemInfo) @@ -70,5 +75,48 @@ namespace MediaBrowser.Model.ApiClient throw new ArgumentException("Unexpected ConnectionMode"); } } + + public void AddOrUpdate(ServerUserInfo user) + { + if (user == null) + { + throw new ArgumentNullException("user"); + } + + var list = Users.ToList(); + + var index = FindIndex(list, user.Id); + + if (index != -1) + { + var existing = list[index]; + + // Merge the data + existing.IsOffline = user.IsOffline; + } + else + { + list.Add(user); + } + + Users = list; + } + + private int FindIndex(List users, string id) + { + var index = 0; + + foreach (var user in users) + { + if (StringHelper.Equals(id, user.Id)) + { + return index; + } + + index++; + } + + return -1; + } } } diff --git a/MediaBrowser.Model/ApiClient/ServerUserInfo.cs b/MediaBrowser.Model/ApiClient/ServerUserInfo.cs new file mode 100644 index 000000000..43186c86d --- /dev/null +++ b/MediaBrowser.Model/ApiClient/ServerUserInfo.cs @@ -0,0 +1,9 @@ + +namespace MediaBrowser.Model.ApiClient +{ + public class ServerUserInfo + { + public string Id { get; set; } + public bool IsOffline { get; set; } + } +} diff --git a/MediaBrowser.Model/Dto/UserDto.cs b/MediaBrowser.Model/Dto/UserDto.cs index 3e2d869d6..22428fadd 100644 --- a/MediaBrowser.Model/Dto/UserDto.cs +++ b/MediaBrowser.Model/Dto/UserDto.cs @@ -48,7 +48,13 @@ namespace MediaBrowser.Model.Dto /// /// The id. public string Id { get; set; } - + + /// + /// Gets or sets the offline password. + /// + /// The offline password. + public string OfflinePassword { get; set; } + /// /// Gets or sets the primary image tag. /// @@ -108,7 +114,7 @@ namespace MediaBrowser.Model.Dto /// /// The original primary image aspect ratio. public double? OriginalPrimaryImageAspectRatio { get; set; } - + /// /// Gets a value indicating whether this instance has primary image. /// diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index bad17abae..0962cbe7a 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -76,6 +76,7 @@ + diff --git a/MediaBrowser.Model/Session/ClientCapabilities.cs b/MediaBrowser.Model/Session/ClientCapabilities.cs index 6c1b6e8b2..6ca4507c0 100644 --- a/MediaBrowser.Model/Session/ClientCapabilities.cs +++ b/MediaBrowser.Model/Session/ClientCapabilities.cs @@ -16,6 +16,7 @@ namespace MediaBrowser.Model.Session public bool SupportsContentUploading { get; set; } public bool SupportsPersistentIdentifier { get; set; } public bool SupportsSync { get; set; } + public bool SupportsOfflineAccess { get; set; } public DeviceProfile DeviceProfile { get; set; } diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/MediaBrowser.Server.Implementations/Library/UserManager.cs index a001b25b6..09f060a46 100644 --- a/MediaBrowser.Server.Implementations/Library/UserManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserManager.cs @@ -402,6 +402,19 @@ namespace MediaBrowser.Server.Implementations.Library return dto; } + public UserDto GetOfflineUserDto(User user, string deviceId) + { + var dto = GetUserDto(user); + + var offlinePasswordHash = GetLocalPasswordHash(user); + dto.HasPassword = !IsPasswordEmpty(offlinePasswordHash); + + // Hash the pin with the device Id to create a unique result for this device + dto.OfflinePassword = GetSha1String(offlinePasswordHash + deviceId); + + return dto; + } + private string GetImageCacheTag(BaseItem item, ItemImageInfo image) { try diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json index 741174d91..2fd96dd0d 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "\u0647\u0644 \u0627\u0646\u062a \u0645\u062a\u0627\u0643\u062f \u0645\u0646 \u0627\u0646\u0643 \u062a\u0631\u064a\u062f \u062d\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u061f", "PasswordResetHeader": "\u0627\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631", "PasswordResetComplete": "\u0644\u0642\u062f \u062a\u0645 \u0627\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "\u0647\u0644 \u0627\u0646\u062a \u0645\u062a\u0627\u0643\u062f \u0645\u0646 \u0627\u0646\u0643 \u062a\u0631\u064a\u062f \u0627\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631\u061f", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "\u062a\u0645 \u062d\u0641\u0638 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631.", "PasswordMatchError": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631 \u0648\u062a\u0627\u0643\u064a\u062f\u0647\u0627 \u064a\u062c\u0628 \u0627\u0646 \u064a\u062a\u0637\u0627\u0628\u0642\u0627\u0646.", "OptionRelease": "\u0627\u0644\u0627\u0635\u062f\u0627\u0631 \u0627\u0644\u0631\u0633\u0645\u0649", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/bg_BG.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/bg_BG.json index 1bbbe8510..e373d1716 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/bg_BG.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/bg_BG.json @@ -14,9 +14,12 @@ "FileReadError": "An error occurred while reading the file.", "DeleteUser": "Delete User", "DeleteUserConfirmation": "Are you sure you wish to delete this user?", - "PasswordResetHeader": "Password Reset", + "PasswordResetHeader": "Reset Password", "PasswordResetComplete": "The password has been reset.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Are you sure you wish to reset the password?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Password saved.", "PasswordMatchError": "Password and password confirmation must match.", "OptionRelease": "\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u043d\u043e \u0438\u0437\u0434\u0430\u043d\u0438\u0435", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json index 5c3299fbc..16b73f46c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Are you sure you wish to delete this user?", "PasswordResetHeader": "Restablir contrasenya", "PasswordResetComplete": "La contrasenya s'ha restablert.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Esteu segur que voleu restablir la contrasenya?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "S'ha guardat la contrasenya.", "PasswordMatchError": "Confirmaci\u00f3 de la contrasenya i la contrasenya han de coincidir.", "OptionRelease": "Versi\u00f3 Oficial", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json index 9e73ee241..8473145e6 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Are you sure you wish to delete this user?", "PasswordResetHeader": "Obnovit heslo", "PasswordResetComplete": "Heslo bylo obnoveno.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Jste si jisti, \u017ee chcete obnovit heslo?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Heslo ulo\u017eeno.", "PasswordMatchError": "Heslo a potvrzen\u00ed hesla mus\u00ed souhlasit.", "OptionRelease": "Ofici\u00e1ln\u00ed vyd\u00e1n\u00ed", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json index cfeb5e3d0..5acae8560 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Er du sikker p\u00e5 du \u00f8nsker at slette denne bruger?", "PasswordResetHeader": "Nulstil kode", "PasswordResetComplete": "Koden er blevet nulstillet", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Er du sikker p\u00e5 at koden skal nulstilles", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Koden er gemt", "PasswordMatchError": "Kode og kode bekr\u00e6ftelse skal v\u00e6re ens.", "OptionRelease": "Officiel Udgivelse", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json index 600dc19e5..f06e6fe7b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "M\u00f6chtest du {0} wirklich l\u00f6schen?", "PasswordResetHeader": "Passwort zur\u00fccksetzen", "PasswordResetComplete": "Das Passwort wurde zur\u00fcckgesetzt.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "M\u00f6chtest du das Passwort wirklich zur\u00fccksetzen?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Passwort gespeichert", "PasswordMatchError": "Die Passw\u00f6rter m\u00fcssen \u00fcbereinstimmen.", "OptionRelease": "Offizielles Release", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json index ae87f2a82..e8426614b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Are you sure you wish to delete this user?", "PasswordResetHeader": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2", "PasswordResetComplete": "\u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03ad\u03c7\u03b5\u03b9 \u03b3\u03af\u03bd\u03b5\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "\u0395\u03af\u03c3\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2;", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "\u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c4\u03b7\u03ba\u03b5", "PasswordMatchError": "\u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03bf\u03bd \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7\u03c2 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03bf\u03c5\u03bd", "OptionRelease": "\u0397 \u03b5\u03c0\u03af\u03c3\u03b7\u03bc\u03b7 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json index ad3543c32..8f5b55554 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json @@ -14,9 +14,12 @@ "FileReadError": "An error occurred while reading the file.", "DeleteUser": "Delete User", "DeleteUserConfirmation": "Are you sure you wish to delete this user?", - "PasswordResetHeader": "Password Reset", + "PasswordResetHeader": "Reset Password", "PasswordResetComplete": "The password has been reset.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Are you sure you wish to reset the password?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Password saved.", "PasswordMatchError": "Password and password confirmation must match.", "OptionRelease": "Official Release", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json index e39a5d9c2..6e884ec40 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json @@ -14,9 +14,12 @@ "FileReadError": "An error occurred while reading the file.", "DeleteUser": "Delete User", "DeleteUserConfirmation": "Are you sure you wish to delete this user?", - "PasswordResetHeader": "Password Reset", + "PasswordResetHeader": "Reset Password", "PasswordResetComplete": "The password has been reset.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Are you sure you wish to reset the password?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Password saved.", "PasswordMatchError": "Password and password confirmation must match.", "OptionRelease": "Official Release", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json index 5355048b0..501d66e5b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Are you sure you wish to delete this user?", "PasswordResetHeader": "Restablecer contrase\u00f1a", "PasswordResetComplete": "La contrase\u00f1a se ha restablecido.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Esta seguro que desea restablecer la contrase\u00f1a?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Contrase\u00f1a guardada.", "PasswordMatchError": "La contrase\u00f1a y la confirmaci\u00f3n de la contrase\u00f1a deben de ser iguales.", "OptionRelease": "Release Oficial", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json index d0222ff16..d365a2c76 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "\u00bfEst\u00e1 seguro de querer eliminar este usuario?", "PasswordResetHeader": "Restablecer Contrase\u00f1a", "PasswordResetComplete": "La contrase\u00f1a ha sido restablecida.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "\u00bfEst\u00e1 seguro de querer restablecer la contrase\u00f1a?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Contrase\u00f1a guardada.", "PasswordMatchError": "La Contrase\u00f1a y la confirmaci\u00f3n de la contrase\u00f1a deben coincidir.", "OptionRelease": "Versi\u00f3n Oficial", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json index 9f8340f9b..83069c29e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Oletko varma ett\u00e4 haluat poistaa t\u00e4m\u00e4n k\u00e4ytt\u00e4j\u00e4n?", "PasswordResetHeader": "Salasanan Palautus", "PasswordResetComplete": "Salasana on palauttettu.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Oletko varma, ett\u00e4 haluat palauttaa salasanan?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Salasana tallennettu.", "PasswordMatchError": "Salasana ja salasanan vahvistuksen pit\u00e4\u00e4 olla samat.", "OptionRelease": "Virallinen Julkaisu", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json index 1063d8759..074cd146d 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "\u00cates-vous s\u00fbr de vouloir supprimer cet utilisateur?", "PasswordResetHeader": "R\u00e9initialisation du mot de passe", "PasswordResetComplete": "Le mot de passe a \u00e9t\u00e9 r\u00e9initialis\u00e9.", + "PinCodeResetComplete": "Le code Easy Pin a \u00e9t\u00e9 r\u00e9initialis\u00e9.", "PasswordResetConfirmation": "\u00cates-vous s\u00fbr de vouloir r\u00e9initialiser le mot de passe?", + "PinCodeResetConfirmation": "Etes-vous s\u00fbr de vouloir r\u00e9initialiser le code pin ?", + "HeaderPinCodeReset": "R\u00e9initialiser le code Pin", "PasswordSaved": "Mot de passe sauvegard\u00e9.", "PasswordMatchError": "Le mot de passe et sa confirmation doivent correspondre.", "OptionRelease": "Version officielle", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json index 8233ee705..30272ddcf 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Are you sure you wish to delete this user?", "PasswordResetHeader": "\u05d0\u05d9\u05e4\u05d5\u05e1 \u05e1\u05d9\u05e1\u05de\u05d0", "PasswordResetComplete": "\u05d4\u05e1\u05d9\u05e1\u05de\u05d0 \u05d0\u05d5\u05e4\u05e1\u05d4.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d0\u05e4\u05e1 \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d0?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "\u05d4\u05e1\u05d9\u05e1\u05de\u05d0 \u05e0\u05e9\u05de\u05e8\u05d4.", "PasswordMatchError": "\u05d4\u05e1\u05d9\u05e1\u05de\u05d0 \u05d5\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d0 \u05e6\u05e8\u05d9\u05db\u05d5\u05ea \u05dc\u05d4\u05d9\u05d5\u05ea \u05d6\u05d4\u05d5\u05ea.", "OptionRelease": "\u05e9\u05d9\u05d7\u05e8\u05d5\u05e8 \u05e8\u05e9\u05de\u05d9", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json index af21fd7a8..de3050845 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Da li ste sigurni da \u017eelite izbrisati odabranog korisnika?", "PasswordResetHeader": "Resetiraj lozinku", "PasswordResetComplete": "Lozinka je resetirana.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Da li ste sigurni da \u017eelite resetirati lozinku?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Lozinka snimljena.", "PasswordMatchError": "Lozinka i lozinka potvrde moraju biti identi\u010dne.", "OptionRelease": "Slu\u017ebeno izdanje", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json index 671992034..4d85f6e34 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Sei sicuro di voler eliminare questo utente", "PasswordResetHeader": "Ripristina Password", "PasswordResetComplete": "la password \u00e8 stata ripristinata.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Sei sicuro di voler ripristinare la password?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Password salvata.", "PasswordMatchError": "Le password non coincidono.", "OptionRelease": "Versione Ufficiale", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json index d3f64ca50..fd71dfebf 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d \u043e\u0441\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043d\u044b \u0436\u043e\u044e \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?", "PasswordResetHeader": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0434\u0456 \u044b\u0441\u044b\u0440\u0443", "PasswordResetComplete": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437 \u044b\u0441\u044b\u0440\u044b\u043b\u0434\u044b.", + "PinCodeResetComplete": "PIN-\u043a\u043e\u0434 \u044b\u0441\u044b\u0440\u044b\u043b\u0434\u044b", "PasswordResetConfirmation": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d \u049b\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0434\u0456 \u044b\u0441\u044b\u0440\u0443 \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?", + "PinCodeResetConfirmation": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d PIN-\u043a\u043e\u0434\u0442\u044b \u044b\u0441\u044b\u0440\u0443 \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?", + "HeaderPinCodeReset": "PIN-\u043a\u043e\u0434\u0442\u044b \u044b\u0441\u044b\u0440\u0443", "PasswordSaved": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437 \u0441\u0430\u049b\u0442\u0430\u043b\u0434\u044b.", "PasswordMatchError": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0456 \u043c\u0435\u043d \u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0434\u0456 \u0440\u0430\u0441\u0442\u0430\u0443 \u04e9\u0440\u0456\u0441\u0442\u0435\u0440\u0456 \u0441\u04d9\u0439\u043a\u0435\u0441 \u0431\u043e\u043b\u0443 \u043a\u0435\u0440\u0435\u043a.", "OptionRelease": "\u0420\u0435\u0441\u043c\u0438 \u0448\u044b\u0493\u0430\u0440\u044b\u043b\u044b\u043c", @@ -631,7 +634,7 @@ "WebClientTourMobile2": "\u0441\u043e\u043d\u044b\u043c\u0435\u043d \u049b\u0430\u0442\u0430\u0440 \u0431\u0430\u0441\u049b\u0430 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\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 \u0442\u0430\u043c\u0430\u0448\u0430\u043b\u0430\u04a3\u044b\u0437", "DashboardTourDashboard": "\u0421\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 \u0431\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440\u0434\u044b \u0431\u0430\u049b\u044b\u043b\u0430\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u0433\u0456\u043d\u0435 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u041a\u0456\u043c \u043d\u0435 \u0456\u0441\u0442\u0435\u0433\u0435\u043d\u0456\u043d \u0436\u04d9\u043d\u0435 \u049b\u0430\u0439\u0434\u0430 \u0442\u04b1\u0440\u0493\u0430\u043d\u044b\u043d \u0431\u0456\u043b\u0456\u043f \u0436\u0430\u0442\u0430\u0441\u044b\u0437.", - "DashboardTourHelp": "\u042d\u043a\u0440\u0430\u043d\u0434\u0430\u0493\u044b \u043c\u0430\u0437\u043c\u04b1\u043d\u0493\u0430 \u049b\u0430\u0442\u044b\u0441\u0442\u044b \u0443\u0438\u043a\u0438 \u0431\u0435\u0442\u0442\u0435\u0440\u0456\u043d \u0430\u0448\u0443 \u04af\u0448\u0456\u043d \u0456\u0448\u043a\u0456 \u0430\u043d\u044b\u049b\u0442\u0430\u043c\u0430 \u043e\u04a3\u0430\u0439 \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u043a\u0442\u0435\u0440\u0434\u0456 \u049b\u0430\u043c\u0442\u0430\u043c\u0430\u0441\u044b\u0437 \u0435\u0442\u0435\u0434\u0456.", + "DashboardTourHelp": "\u042d\u043a\u0440\u0430\u043d\u0434\u0430\u0493\u044b \u043c\u0430\u0437\u043c\u04b1\u043d\u0493\u0430 \u049b\u0430\u0442\u044b\u0441\u0442\u044b \u0443\u0438\u043a\u0438 \u0431\u0435\u0442\u0442\u0435\u0440\u0456\u043d \u043e\u04a3\u0430\u0439\u0442\u044b\u043b\u044b\u043f \u0430\u0448\u0443 \u04af\u0448\u0456\u043d \u0456\u0448\u043a\u0456 \u0430\u043d\u044b\u049b\u0442\u0430\u043c\u0430 \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u043a\u0442\u0435\u0440\u0456\u043d \u049b\u0430\u043c\u0442\u0430\u043c\u0430\u0441\u044b\u0437 \u0435\u0442\u0435\u0434\u0456. ", "DashboardTourUsers": "\u0414\u043e\u0441\u0442\u0430\u0440\u044b\u04a3\u044b\u0437 \u0431\u0435\u043d \u043e\u0442\u0431\u0430\u0441\u044b\u04a3\u044b\u0437 \u04d9\u0440\u049b\u0430\u0439\u0441\u044b\u043d\u0430 \u04e9\u0437\u0456\u043d\u0456\u04a3 \u049b\u04b1\u049b\u044b\u049b\u0442\u0430\u0440\u044b, \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443\u044b, \u043c\u0430\u0437\u043c\u04b1\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443\u044b \u0436\u04d9\u043d\u0435 \u0442.\u0431. \u0431\u0430\u0440 \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u043b\u0435\u0440\u0456\u043d \u0436\u0435\u04a3\u0456\u043b \u0436\u0430\u0441\u0430\u04a3\u044b\u0437.", "DashboardTourCinemaMode": "\u041a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440 \u0440\u0435\u0436\u0456\u043c\u0456 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u043a\u04e9\u0440\u043d\u0435\u0443\u0434\u0456 \u0431\u0430\u0441\u0442\u044b \u0435\u0440\u0435\u043a\u0448\u0435\u043b\u0456\u043a\u0442\u0456\u04a3 \u0430\u043b\u0434\u044b\u043d\u0434\u0430 \u043e\u0439\u043d\u0430\u0442\u0443 \u049b\u0430\u0431\u0456\u043b\u0435\u0442\u0456\u043c\u0435\u043d \u043a\u0438\u043d\u043e \u043a\u04e9\u0440\u0441\u0435\u0442\u0435\u0442\u0456\u043d \u0437\u0430\u043b \u04d9\u0441\u0435\u0440\u0456\u043d \u049b\u043e\u043d\u0430\u049b\u0436\u0430\u0439\u044b\u04a3\u044b\u0437\u0493\u0430 \u0442\u0456\u043a\u0435\u043b\u0435\u0439 \u0436\u0435\u0442\u043a\u0456\u0437\u0435\u0434\u0456.", "DashboardTourChapters": "\u0411\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0434\u0456 \u049b\u0430\u0440\u0430\u0493\u0430\u043d \u043a\u0435\u0437\u0434\u0435 \u04b1\u043d\u0430\u043c\u0434\u044b\u043b\u0430\u0443 \u043a\u04e9\u0440\u0441\u0435\u0442\u0456\u043c \u04af\u0448\u0456\u043d \u0441\u0430\u0445\u043d\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d \u0442\u0443\u0434\u044b\u0440\u0443\u044b\u043d \u049b\u043e\u0441\u044b\u04a3\u044b\u0437.", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json index 932d37fe0..e16b6c492 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json @@ -14,9 +14,12 @@ "FileReadError": "An error occurred while reading the file.", "DeleteUser": "Delete User", "DeleteUserConfirmation": "Are you sure you wish to delete this user?", - "PasswordResetHeader": "Password Reset", + "PasswordResetHeader": "Reset Password", "PasswordResetComplete": "The password has been reset.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Are you sure you wish to reset the password?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Password saved.", "PasswordMatchError": "Password and password confirmation must match.", "OptionRelease": "Official Release", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json index 2b6a9a67b..4604f8d57 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Er du sikker p\u00e5 at du vil slette denne brukeren?", "PasswordResetHeader": "Resett passord", "PasswordResetComplete": "Passordet har blitt resatt", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Er du sikker p\u00e5 at du vil resette passordet?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Passord lagret", "PasswordMatchError": "Passord og passord-verifiseringen m\u00e5 matche", "OptionRelease": "Offisiell utgivelse", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json index 5a59c1c0c..1594dd761 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Weet u zeker dat u deze gebruiker wilt verwijderen?", "PasswordResetHeader": "Wachtwoord opnieuw instellen", "PasswordResetComplete": "Het wachtwoord is opnieuw ingesteld.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Weet u zeker dat u het wachtwoord opnieuw in wilt stellen?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Wachtwoord opgeslagen.", "PasswordMatchError": "Wachtwoord en wachtwoord bevestiging moeten hetzelfde zijn.", "OptionRelease": "Offici\u00eble Release", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json index 1e8b9aed5..0b252a4fd 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Czy na pewno chcesz skasowa\u0107 tego u\u017cytkownika?", "PasswordResetHeader": "Zresetuj has\u0142o", "PasswordResetComplete": "Has\u0142o zosta\u0142o zresetowane.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Jeste\u015b pewien \u017ce chcesz zresetowa\u0107 has\u0142o?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Has\u0142o zapisane.", "PasswordMatchError": "Has\u0142o i potwierdzenie has\u0142a musz\u0105 si\u0119 zgadza\u0107.", "OptionRelease": "Oficjalne wydanie", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json index 0ffac1450..5a3e564e4 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Deseja realmente excluir este usu\u00e1rio?", "PasswordResetHeader": "Redefinir Senha", "PasswordResetComplete": "A senha foi redefinida.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Deseja realmente redefinir a senha?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Senha salva.", "PasswordMatchError": "A senha e a confirma\u00e7\u00e3o da senha devem ser iguais.", "OptionRelease": "Lan\u00e7amento Oficial", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json index 2c5786f09..600f1f902 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Tem a certeza que deseja apagar este utilizador?", "PasswordResetHeader": "Redefinir Senha", "PasswordResetComplete": "A senha foi redefinida.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Tem a certeza que deseja redefinir a senha?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Senha guardada.", "PasswordMatchError": "A senha e a confirma\u00e7\u00e3o da senha devem coincidir.", "OptionRelease": "Lan\u00e7amento Oficial", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json index 6ee54c8a4..dd136ff8a 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f?", "PasswordResetHeader": "\u0421\u0431\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f", "PasswordResetComplete": "\u041f\u0430\u0440\u043e\u043b\u044c \u0431\u044b\u043b \u0441\u0431\u0440\u043e\u0448\u0435\u043d.", + "PinCodeResetComplete": "PIN-\u043a\u043e\u0434 \u0431\u044b\u043b \u0441\u0431\u0440\u043e\u0448\u0435\u043d.", "PasswordResetConfirmation": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c?", + "PinCodeResetConfirmation": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c PIN-\u043a\u043e\u0434?", + "HeaderPinCodeReset": "\u0421\u0431\u0440\u043e\u0441 PIN-\u043a\u043e\u0434\u0430", "PasswordSaved": "\u041f\u0430\u0440\u043e\u043b\u044c \u0431\u044b\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d.", "PasswordMatchError": "\u041f\u0430\u0440\u043e\u043b\u044c \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c", "OptionRelease": "\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a", @@ -250,7 +253,7 @@ "ButtonReports": "\u041e\u0442\u0447\u0451\u0442\u044b", "ButtonMetadataManager": "\u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "HeaderTime": "\u0412\u0440\u0435\u043c\u044f", - "HeaderName": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "HeaderName": "\u0418\u043c\u044f (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435)", "HeaderAlbum": "\u0410\u043b\u044c\u0431\u043e\u043c", "HeaderAlbumArtist": "\u0410\u043b\u044c\u0431\u043e\u043c\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c", "HeaderArtist": "\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c", @@ -377,13 +380,13 @@ "HeaderSpecials": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435", "HeaderTrailers": "\u0422\u0440\u0435\u0439\u043b\u0435\u0440\u044b", "HeaderAudio": "\u0410\u0443\u0434\u0438\u043e", - "HeaderResolution": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435", + "HeaderResolution": "\u0420\u0430\u0437\u0440-\u0438\u0435", "HeaderVideo": "\u0412\u0438\u0434\u0435\u043e", - "HeaderRuntime": "\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c", - "HeaderCommunityRating": "\u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430", - "HeaderParentalRating": "\u0412\u043e\u0437\u0440\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", + "HeaderRuntime": "\u0414\u043b\u0438\u0442-c\u0442\u044c", + "HeaderCommunityRating": "\u041e\u0431\u0449-\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430", + "HeaderParentalRating": "\u0412\u043e\u0437\u0440-\u0430\u044f \u043a\u0430\u0442-\u0438\u044f", "HeaderReleaseDate": "\u0414\u0430\u0442\u0430 \u0432\u044b\u043f\u0443\u0441\u043a\u0430", - "HeaderDateAdded": "\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f", + "HeaderDateAdded": "\u0414\u0430\u0442\u0430 \u0434\u043e\u0431-\u0438\u044f", "HeaderSeries": "\u0421\u0435\u0440\u0438\u0430\u043b\u044b", "HeaderSeason": "\u0421\u0435\u0437\u043e\u043d", "HeaderSeasonNumber": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0435\u0437\u043e\u043d\u0430", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json index fdc185a7f..3d2f9d088 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "\u00c4r du s\u00e4ker p\u00e5 att du vill radera denna anv\u00e4ndare?", "PasswordResetHeader": "\u00c5terst\u00e4ll l\u00f6senordet", "PasswordResetComplete": "L\u00f6senordet har \u00e5terst\u00e4llts.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "\u00c4r du s\u00e4ker p\u00e5 att du vill \u00e5terst\u00e4lla l\u00f6senordet?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "L\u00f6senordet har sparats.", "PasswordMatchError": "L\u00f6senordet och bekr\u00e4ftelsen m\u00e5ste \u00f6verensst\u00e4mma.", "OptionRelease": "Officiell version", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json index d0bec1810..3b9a34fe3 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Are you sure you wish to delete this user?", "PasswordResetHeader": "Sifre S\u0131f\u0131rland\u0131", "PasswordResetComplete": "Parolan\u0131z S\u0131f\u0131rlanm\u0131st\u0131r.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Sifrenizi S\u0131f\u0131rlamak \u0130stediginizden Eminmisiniz?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Sifre Kaydedildi", "PasswordMatchError": "Parola ve Sifre Eslesmelidir.", "OptionRelease": "Resmi Yay\u0131n", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/uk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/uk.json index 5894f5c11..74286666d 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/uk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/uk.json @@ -14,9 +14,12 @@ "FileReadError": "An error occurred while reading the file.", "DeleteUser": "Delete User", "DeleteUserConfirmation": "Are you sure you wish to delete this user?", - "PasswordResetHeader": "Password Reset", + "PasswordResetHeader": "Reset Password", "PasswordResetComplete": "The password has been reset.", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "Are you sure you wish to reset the password?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "Password saved.", "PasswordMatchError": "Password and password confirmation must match.", "OptionRelease": "Official Release", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json index 09a98cccf..532953082 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Are you sure you wish to delete this user?", "PasswordResetHeader": "Reset M\u1eadt kh\u1ea9u", "PasswordResetComplete": "M\u1eadt kh\u1ea9u \u0111\u00e3 \u0111\u01b0\u1ee3c reset", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "B\u1ea1n c\u00f3 ch\u1eafc mu\u1ed1n reset m\u1eadt kh\u1ea9u?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "M\u1eadt kh\u1ea9u \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u.", "PasswordMatchError": "M\u1eadt kh\u1ea9u v\u00e0 m\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn c\u1ea7n ph\u1ea3i kh\u1edbp nhau .", "OptionRelease": "Ph\u00e1t h\u00e0nh ch\u00ednh th\u1ee9c", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json index c853a83c3..4f5e4b3eb 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "\u4f60\u786e\u5b9a\u8981\u5220\u9664\u6b64\u7528\u6237\uff1f", "PasswordResetHeader": "\u5bc6\u7801\u91cd\u7f6e", "PasswordResetComplete": "\u5bc6\u7801\u5df2\u91cd\u7f6e", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "\u4f60\u786e\u5b9a\u8981\u91cd\u7f6e\u5bc6\u7801\uff1f", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "\u5bc6\u7801\u5df2\u4fdd\u5b58\u3002", "PasswordMatchError": "\u5bc6\u7801\u548c\u786e\u8ba4\u5bc6\u7801\u5fc5\u987b\u5339\u914d\u3002", "OptionRelease": "\u5b98\u65b9\u6b63\u5f0f\u7248", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json index ede237bf6..912e833d5 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json @@ -16,7 +16,10 @@ "DeleteUserConfirmation": "Are you sure you wish to delete this user?", "PasswordResetHeader": "\u91cd\u8a2d\u5bc6\u78bc", "PasswordResetComplete": "\u5bc6\u78bc\u5df2\u91cd\u8a2d", + "PinCodeResetComplete": "The pin code has been reset.", "PasswordResetConfirmation": "\u4f60\u78ba\u5b9a\u8981\u91cd\u8a2d\u5bc6\u78bc\uff1f", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", "PasswordSaved": "\u5bc6\u78bc\u5df2\u4fdd\u5b58\u3002", "PasswordMatchError": "\u5bc6\u78bc\u548c\u5bc6\u78bc\u78ba\u8a8d\u5fc5\u9808\u4e00\u81f4\u3002", "OptionRelease": "Official Release", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ar.json b/MediaBrowser.Server.Implementations/Localization/Server/ar.json index 23d601b47..45ee5df06 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ar.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/bg_BG.json b/MediaBrowser.Server.Implementations/Localization/Server/bg_BG.json index 9ec39fb8a..6367a6bdc 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/bg_BG.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/bg_BG.json @@ -56,6 +56,7 @@ "HeaderVideo": "\u0412\u0438\u0434\u0435\u043e", "HeaderPaths": "\u041f\u044a\u0442\u0438\u0449\u0430", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ca.json b/MediaBrowser.Server.Implementations/Localization/Server/ca.json index a4d8caf82..e1bb9b5cc 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ca.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/cs.json b/MediaBrowser.Server.Implementations/Localization/Server/cs.json index e55db0322..7dada50ac 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/cs.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/da.json b/MediaBrowser.Server.Implementations/Localization/Server/da.json index 5e11736ea..b35932f8e 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/da.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/da.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/de.json b/MediaBrowser.Server.Implementations/Localization/Server/de.json index e8ee154fc..dd05b519e 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/de.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/de.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Pfade", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Synchronisation ben\u00f6tigt eine Supporter-Mitgliedschaft", "HeaderEnjoyDayTrial": "Genie\u00dfen Sie eine 14 Tage Testversion", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Nutze die Verzeichnissansicht f\u00fcr die Darstellung der reinen Medienordner", "ViewTypeLiveTvRecordingGroups": "Aufnahmen", "ViewTypeLiveTvChannels": "Kan\u00e4le", - "LabelAllowLocalAccessWithoutPassword": "Erlaube lokalen Zugriff ohne Passwort", - "LabelAllowLocalAccessWithoutPasswordHelp": "Fall aktiviert, wird kein Passwort f\u00fcr einen Zugriff innerhalb deines Heimnetzwerks ben\u00f6tigt.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Passwort", "HeaderLocalAccess": "Lokaler Zugriff", "HeaderViewOrder": "Reihenfolge f\u00fcr Ansichten", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "W\u00e4hle die Reihenfolge in der die Ansichten innerhalb von Media Browser Apps angezeigt werden.", "LabelMetadataRefreshMode": "Metadaten Aktualisierungsmethode:", "LabelImageRefreshMode": "Aktualisierungsmethode f\u00fcr Bilder:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/el.json b/MediaBrowser.Server.Implementations/Localization/Server/el.json index f641d8a24..1d15d4bbf 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/el.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/el.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json index 0959b9cb8..6c1cb185a 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json index 935cd295b..5dd939774 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es.json b/MediaBrowser.Server.Implementations/Localization/Server/es.json index 3ccffff17..10fb8f326 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json index c74d5a42a..c394039c5 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Rutas", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sinc requiere de una Membres\u00eda de Aficionado", "HeaderEnjoyDayTrial": "Disfrute de una Prueba Gratuita por 14 D\u00edas", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Mostrar una vista de carpetas para mostrar carpetas de medios simples", "ViewTypeLiveTvRecordingGroups": "Grabaciones", "ViewTypeLiveTvChannels": "Canales", - "LabelAllowLocalAccessWithoutPassword": "Permite acceso local sin una contrase\u00f1a", - "LabelAllowLocalAccessWithoutPasswordHelp": "Al habilitarse, no se requerir\u00e1 de una contrase\u00f1a cuando se inicie sesi\u00f3n desde su red local.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Contrase\u00f1a", "HeaderLocalAccess": "Acceso Local", "HeaderViewOrder": "Orden de Despliegue", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Seleccione el orden en que sus vistas ser\u00e1n desplegadas dentro de las apps de Media Browser", "LabelMetadataRefreshMode": "Modo de actualizaci\u00f3n de metadatos:", "LabelImageRefreshMode": "Modo de actualizaci\u00f3n de im\u00e1genes:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fi.json b/MediaBrowser.Server.Implementations/Localization/Server/fi.json index b958ca5a3..247e3cc37 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fi.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fr.json b/MediaBrowser.Server.Implementations/Localization/Server/fr.json index 44ead2cfc..58be84864 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fr.json @@ -56,6 +56,7 @@ "HeaderVideo": "Vid\u00e9o", "HeaderPaths": "Chemins", "CategorySync": "Sync", + "HeaderEasyPinCode": "Code Easy Pin", "RegisterWithPayPal": "S'enregistrer avec PayPal", "HeaderSyncRequiresSupporterMembership": "Sync n\u00e9cessite un abonnement actif comme supporteur", "HeaderEnjoyDayTrial": "Profitez d'une p\u00e9riode d'essai de 14 jours", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Afficher une vue mosa\u00efque pour montrer les dossiers media en int\u00e9gralit\u00e9.", "ViewTypeLiveTvRecordingGroups": "Enregistrements", "ViewTypeLiveTvChannels": "Cha\u00eenes", - "LabelAllowLocalAccessWithoutPassword": "Autoriser l'acc\u00e8s local sans un mot de passe", - "LabelAllowLocalAccessWithoutPasswordHelp": "Si activ\u00e9, le mot de passe ne sera pas requis pour s'authentifier depuis le r\u00e9seau local.", + "LabelEasyPinCode": "Code Easy Pin :", + "EasyPasswordHelp": "Votre code Easy Pin permet l'utilisation de l'acc\u00e8s offline dans les applications Media Browser compatibles, ainsi que l'authentification simplifi\u00e9e dans les r\u00e9seaux domestiques.", + "LabelInNetworkSignInWithEasyPassword": "Activer l'authentification simplifi\u00e9e dans les r\u00e9seaux domestiques avec mon code Easy Pin", + "LabelInNetworkSignInWithEasyPasswordHelp": "L'activation de cette option vous permet d'utiliser votre code Easy Pin pour vous connecter aux applications Media Browser depuis votre r\u00e9seau domestique. Votre mot de passe habituel ne sera n\u00e9cessaire que depuis l'ext\u00e9rieur. Si vous ne saisissez rien pour le code pin, vous n'aurez pas besoin de mot de passe depuis votre r\u00e9seau domestique.", "HeaderPassword": "Mot de passe", "HeaderLocalAccess": "Acc\u00e8s local", "HeaderViewOrder": "Ordre d'affichage", + "ButtonResetEasyPassword": "R\u00e9initialiser le code Easy Pin", "LabelSelectUserViewOrder": "Choisir l'ordre d'affichage qui sera utilis\u00e9 dans les applications de Media Browser", "LabelMetadataRefreshMode": "Mode de mise \u00e0 jour des m\u00e9tadonn\u00e9es :", "LabelImageRefreshMode": "Mode de mise \u00e0 jour des images :", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/he.json b/MediaBrowser.Server.Implementations/Localization/Server/he.json index 289b90ed9..5c80acb6c 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/he.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/he.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/hr.json b/MediaBrowser.Server.Implementations/Localization/Server/hr.json index a7cb646e0..184dae0ad 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/hr.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/it.json b/MediaBrowser.Server.Implementations/Localization/Server/it.json index 3b44eccdc..f8899d1fd 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/it.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/it.json @@ -40,31 +40,32 @@ "OptionIAcceptTermsOfService": "Accetto i termini di servizio", "ButtonPrivacyPolicy": "Informativa sulla privacy", "ButtonTermsOfService": "Termini di Servizio", - "HeaderDeveloperOptions": "Developer Options", - "OptionEnableWebClientResponseCache": "Enable web client response caching", - "OptionDisableForDevelopmentHelp": "Configure these as needed for web client development purposes.", + "HeaderDeveloperOptions": "Opzioni Sviluppatore", + "OptionEnableWebClientResponseCache": "Abilita la cache del client web", + "OptionDisableForDevelopmentHelp": "Configura questi parametri per sviluppatori del client web", "OptionEnableWebClientResourceMinification": "Enable web client resource minification", - "LabelDashboardSourcePath": "Web client source path:", - "LabelDashboardSourcePathHelp": "If running the server from source, specify the path to the dashboard-ui folder. All web client files will be served from this location.", - "ButtonConvertMedia": "Convert media", - "ButtonOrganize": "Organize", + "LabelDashboardSourcePath": "Percorso sorgente client web", + "LabelDashboardSourcePathHelp": "se si sta eseguendo il server da una sorgente, specifica il percorso dell'interfaccia. Tutti i file per i client saranno presi da questo percorso", + "ButtonConvertMedia": "Converti media", + "ButtonOrganize": "Organizza", "ButtonOk": "OK", "ButtonCancel": "Annulla", "ButtonNew": "Nuovo", "HeaderTV": "TV", "HeaderAudio": "Audio", "HeaderVideo": "Video", - "HeaderPaths": "Paths", - "CategorySync": "Sync", - "RegisterWithPayPal": "Register with PayPal", - "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", - "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", - "LabelSyncTempPath": "Temporary file path:", - "LabelSyncTempPathHelp": "Specify a custom sync working folder. Converted media created during the sync process will be stored here.", - "LabelCustomCertificatePath": "Custom certificate path:", - "LabelCustomCertificatePathHelp": "Supply your own ssl certificate. If omitted, the server will create a self-signed certificate.", - "TitleNotifications": "Notifications", - "ButtonDonateWithPayPal": "Donate with PayPal", + "HeaderPaths": "Percorsi", + "CategorySync": "Sinc.zza", + "HeaderEasyPinCode": "Codice pin", + "RegisterWithPayPal": "Registra con PayPal", + "HeaderSyncRequiresSupporterMembership": "La sincronizzazione richiede un'iscrizione come supporter", + "HeaderEnjoyDayTrial": "Goditi la tua prova gratuita di 14 giorni", + "LabelSyncTempPath": "Percorso file temporanei", + "LabelSyncTempPathHelp": "Specifica una cartella per la sincronizzazione. I file multimediali convertiti durante la sincronizzazione verranno collocati qui.", + "LabelCustomCertificatePath": "Percorso certificati personalizzato:", + "LabelCustomCertificatePathHelp": "Fornisci il tuo certificato SSL. Se non impostato il server ne creer\u00e0 uno gi\u00e0 firmato.", + "TitleNotifications": "Notifiche", + "ButtonDonateWithPayPal": "Effettua una donazione con PayPal", "OptionDetectArchiveFilesAsMedia": "Considera gli archivi come file multimediali", "OptionDetectArchiveFilesAsMediaHelp": "se attivato, i file con estensione .rar e .zip saranno considerati come file multimediali.", "LabelEnterConnectUserName": "Nome Utente o email:", @@ -82,14 +83,14 @@ "FolderTypeTvShows": "Tv", "FolderTypeInherit": "ereditare", "LabelContentType": "Tipo di contenuto:", - "TitleScheduledTasks": "Scheduled Tasks", + "TitleScheduledTasks": "Compiti Pianificati", "HeaderSetupLibrary": "Configura la tua libreria", "ButtonAddMediaFolder": "Aggiungi cartella", "LabelFolderType": "Tipo cartella", "ReferToMediaLibraryWiki": "Fare riferimento alla wiki libreria multimediale.", "LabelCountry": "Nazione:", "LabelLanguage": "Lingua:", - "ButtonJoinTheDevelopmentTeam": "Join the Development Team", + "ButtonJoinTheDevelopmentTeam": "Unisciti al Team di Sviluppo", "HeaderPreferredMetadataLanguage": "Lingua dei metadati preferita:", "LabelSaveLocalMetadata": "Salva immagini e metadati nelle cartelle multimediali", "LabelSaveLocalMetadataHelp": "Il salvataggio di immagini e dei metadati direttamente nelle cartelle multimediali verranno messe in un posto dove possono essere facilmente modificate.", @@ -108,7 +109,7 @@ "HeaderDeviceAccess": "Accesso dispositivo", "OptionEnableAccessFromAllDevices": "Abilitare l'accesso da tutti i dispositivi", "OptionEnableAccessToAllChannels": "Abilita l'accesso a tutti i canali", - "OptionEnableAccessToAllLibraries": "Enable access to all libraries", + "OptionEnableAccessToAllLibraries": "Abilita l'accesso a tutte le librerie", "DeviceAccessHelp": "Questo vale solo per i dispositivi che possono essere identificati in modo univoco e non impedire l'accesso del browser. Filtraggio di accesso al dispositivo dell'utente impedir\u00e0 loro di usare nuovi dispositivi fino a quando non sono state approvate qui.", "LabelDisplayMissingEpisodesWithinSeasons": "Visualizza gli episodi mancanti nelle stagioni", "LabelUnairedMissingEpisodesWithinSeasons": "Visualizzare episodi mai andati in onda all'interno stagioni", @@ -298,7 +299,7 @@ "OptionMetascore": "Punteggio", "ButtonSelect": "Seleziona", "ButtonGroupVersions": "Versione Gruppo", - "ButtonAddToCollection": "Add to Collection", + "ButtonAddToCollection": "Aggiungi alla collezione", "PismoMessage": "Dona per avere una licenza di Pismo", "TangibleSoftwareMessage": "Utilizza Tangible Solutions Java\/C# con una licenza su donazione.", "HeaderCredits": "Crediti", @@ -512,7 +513,7 @@ "HeaderSystemPaths": "Percorsi di sistema", "LinkCommunity": "Comunit\u00e0", "LinkGithub": "Github", - "LinkApi": "Api", + "LinkApi": "API", "LinkApiDocumentation": "Documentazione Api", "LabelFriendlyServerName": "Nome condiviso del server:", "LabelFriendlyServerNameHelp": "Questo nome \u00e8 usato per identificare il server sulla rete.Se lasciato vuoto verra usato il nome del pc", @@ -522,23 +523,23 @@ "HeaderNewCollection": "Nuova collezione", "ButtonSubmit": "Invia", "ButtonCreate": "Crea", - "LabelCustomCss": "Custom css:", - "LabelCustomCssHelp": "Apply your own custom css to the web interface.", - "LabelLocalHttpServerPortNumber": "Local http port number:", + "LabelCustomCss": "CSS Personalizzato", + "LabelCustomCssHelp": "Applica il tuo CSS personale all'interfaccia web", + "LabelLocalHttpServerPortNumber": "Porta HTTP locale", "LabelLocalHttpServerPortNumberHelp": "Il numero di porta TCP del server http del browser media a cui dovrebbe legarsi.", - "LabelPublicHttpPort": "Public http port number:", - "LabelPublicHttpPortHelp": "The public port number that should be mapped to the local http port.", - "LabelPublicHttpsPort": "Public https port number:", - "LabelPublicHttpsPortHelp": "The public port number that should be mapped to the local https port.", - "LabelEnableHttps": "Report https as external address", - "LabelEnableHttpsHelp": "If enabled, the server will report an https url to clients as it's external address. This may break clients that do not yet support https.", - "LabelHttpsPort": "Local https port number:", - "LabelHttpsPortHelp": "The tcp port number that Media Browser's https server should bind to.", + "LabelPublicHttpPort": "Porta HTTP pubblica", + "LabelPublicHttpPortHelp": "Il numero di porta pubblica dovrebbe essere mappato verso la porta HTTP locale.", + "LabelPublicHttpsPort": "Numero porta HTTP pubblica", + "LabelPublicHttpsPortHelp": "Il numero della porta HTTP pubblica dovrebbe essere mappato verso la porta HTTP locale.", + "LabelEnableHttps": "Riporta HTTPS come indirizzo esterno", + "LabelEnableHttpsHelp": "se abilitato, il server riporter\u00e0 un url HTTPS ai client come il proprio indirizzo esterno. Questo potrebbe non far funzionare i client che ancora non supportano l'HTTPS", + "LabelHttpsPort": "Porta HTTPS locale", + "LabelHttpsPortHelp": "Il numero di porta TCP a cui il server HTTPS di Media Browser dovrebbe associarsi.", "LabelWebSocketPortNumber": "Numero porta web socket:", "LabelEnableAutomaticPortMap": "Abilita mappatura delle porte automatiche", "LabelEnableAutomaticPortMapHelp": "Tentativo di mappare automaticamente la porta pubblica alla porta locale tramite UPnP. Questo potrebbe non funzionare con alcuni modelli di router.", - "LabelExternalDDNS": "External WAN Address:", - "LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here. Media Browser apps will use it when connecting remotely. Leave empty for automatic detection.", + "LabelExternalDDNS": "Indirizzo WAN esterno", + "LabelExternalDDNSHelp": "Se hai un DNS dinamico inseriscilo qui. Le app Media Browser lo useranno durante la connessione in remoto. Lascia vuoto per la rilevazione automatica", "TabResume": "Riprendi", "TabWeather": "Tempo", "TitleAppSettings": "Impostazioni delle app", @@ -668,7 +669,7 @@ "NotificationOptionInstallationFailed": "Installazione fallita", "NotificationOptionNewLibraryContent": "Nuovo contenuto aggiunto", "NotificationOptionNewLibraryContentMultiple": "Nuovi contenuti aggiunti", - "NotificationOptionCameraImageUploaded": "Camera image uploaded", + "NotificationOptionCameraImageUploaded": "Immagine fotocamera caricata", "SendNotificationHelp": "Per impostazione predefinita, le notifiche vengono inviate alla casella della pagina principale. Sfoglia il catalogo plugin da installare opzioni di notifica aggiuntive.", "NotificationOptionServerRestartRequired": "Riavvio del server necessario", "LabelNotificationEnabled": "Abilita questa notifica", @@ -886,8 +887,8 @@ "OptionDefaultSort": "Predefinito", "OptionCommunityMostWatchedSort": "Pi\u00f9 visti", "TabNextUp": "Da vedere", - "HeaderBecomeMediaBrowserSupporter": "Become a Media Browser Supporter", - "TextEnjoyBonusFeatures": "Enjoy Bonus Features", + "HeaderBecomeMediaBrowserSupporter": "Diventa un Media Browser Supporter", + "TextEnjoyBonusFeatures": "Goditi le caratteristiche aggiuntive", "MessageNoMovieSuggestionsAvailable": "Nessun suggerimento di film attualmente disponibile. Iniziare a guardare e valutare i vostri film, e poi tornare per i suggerimenti.", "MessageNoCollectionsAvailable": "Le collezioni ti permettono di goderti raccolte personalizzate di Film, Serie TV, Album, Libri e Giochi. Clicca sul + per iniziare a creare le tue Collezioni", "MessageNoPlaylistsAvailable": "Playlist ti permettere di mettere in coda gli elementi da riprodurre.Usa il tasto destro o tap e tieni premuto quindi seleziona elemento da aggiungere", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Visualizza cartelle come normali cartelle dei media", "ViewTypeLiveTvRecordingGroups": "Registrazioni", "ViewTypeLiveTvChannels": "canali", - "LabelAllowLocalAccessWithoutPassword": "Consenti di accedere localmente senza password", - "LabelAllowLocalAccessWithoutPasswordHelp": "Quando abilitato la password non \u00e8 necessaria", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Accesso locale", "HeaderViewOrder": "Visualizza ordine", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Scegliere l'ordine vostre opinioni verranno visualizzati in applicazioni all'interno del browser media", "LabelMetadataRefreshMode": "Metadata (modo Aggiornamento)", "LabelImageRefreshMode": "Immagine (modo Aggiornamento)", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/kk.json b/MediaBrowser.Server.Implementations/Localization/Server/kk.json index b6d581130..1da578855 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/kk.json @@ -34,7 +34,7 @@ "LabelEnableChapterImageExtractionForMovies": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440 \u04af\u0448\u0456\u043d \u0441\u0430\u0445\u043d\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d \u0448\u044b\u0493\u0430\u0440\u044b\u043f \u0430\u043b\u0443\u0434\u044b \u049b\u043e\u0441\u0443", "LabelChapterImageExtractionForMoviesHelp": "\u0421\u0430\u0445\u043d\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d \u0448\u044b\u0493\u0430\u0440\u044b\u043f \u0430\u043b\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0442\u0435\u0440\u0433\u0435 \u0441\u0430\u0445\u043d\u0430 \u0431\u04e9\u043b\u0435\u043a\u0442\u0435\u0443\u0433\u0435 \u0430\u0440\u043d\u0430\u043b\u0493\u0430\u043d \u0441\u044b\u0437\u0431\u0430\u043b\u044b\u049b \u043c\u04d9\u0437\u0456\u0440\u043b\u0435\u0440\u0434\u0456 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u0411\u04b1\u043b \u043f\u0440\u043e\u0446\u0435\u0441 \u0431\u0430\u044f\u0443, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0434\u044b \u0442\u043e\u0437\u0434\u044b\u0440\u0430\u0442\u044b\u043d \u0436\u04d9\u043d\u0435 \u0431\u0456\u0440\u0430\u0437 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442 \u043a\u0435\u04a3\u0456\u0441\u0442\u0456\u043a\u0442\u0456 \u049b\u0430\u0436\u0435\u0442 \u0435\u0442\u0435\u0442\u0456\u043d \u0431\u043e\u043b\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d. \u0411\u04b1\u043b \u0442\u04af\u043d\u0433\u0456 4:00 \u0441\u0430\u0493\u0430\u0442\u044b\u043d\u0430 \u0436\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u0430\u043d \u0442\u0430\u043f\u0441\u044b\u0440\u043c\u0430 \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456, \u0434\u0435\u0433\u0435\u043d\u043c\u0435\u043d \u0431\u04b1\u043b \u0416\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0443\u0448\u044b \u0430\u0439\u043c\u0430\u0493\u044b\u043d\u0434\u0430 \u0442\u0435\u04a3\u0448\u0435\u043b\u0435\u0434\u0456. \u0411\u04b1\u043b \u0442\u0430\u043f\u0441\u044b\u0440\u043c\u0430\u043d\u044b \u049b\u0430\u0440\u0431\u0430\u043b\u0430\u0441 \u0441\u0430\u0493\u0430\u0442\u0442\u0430\u0440\u044b\u043d\u0434\u0430 \u043e\u0440\u044b\u043d\u0434\u0430\u0443 \u04b1\u0441\u044b\u043d\u044b\u043b\u043c\u0430\u0439\u0434\u044b.", "LabelEnableAutomaticPortMapping": "\u041f\u043e\u0440\u0442 \u0430\u0432\u0442\u043e\u0441\u0430\u043b\u0493\u0430\u0441\u0442\u044b\u0440\u0443\u044b\u043d \u049b\u043e\u0441\u0443", - "LabelEnableAutomaticPortMappingHelp": "UPnP \u049b\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443\u0434\u044b \u0436\u0435\u04a3\u0456\u043b\u0434\u0435\u0442\u0443 \u04af\u0448\u0456\u043d \u0436\u043e\u043b \u0436\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u044b\u0448\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043b\u0430\u0443\u0493\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u0411\u04b1\u043b \u043a\u0435\u0439\u0431\u0456\u0440 \u0440\u043e\u0443\u0442\u0435\u0440 \u04b1\u043b\u0433\u0456\u043b\u0435\u0440\u0456\u043c\u0435\u043d \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u043c\u0435\u0439\u0442\u0456\u043d\u0456 \u043c\u04af\u043c\u043a\u0456\u043d.", + "LabelEnableAutomaticPortMappingHelp": "\u049a\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u043e\u04a3\u0430\u0439\u0442\u044b\u043b\u044b\u043f \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443 \u04af\u0448\u0456\u043d UPnP \u0436\u043e\u043b \u0436\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u044b\u0448\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043b\u0430\u0443\u0493\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u0411\u04b1\u043b \u043a\u0435\u0439\u0431\u0456\u0440 \u0436\u043e\u043b \u0436\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u044b\u0448 \u04af\u043b\u0433\u0456\u043b\u0435\u0440\u0456\u043c\u0435\u043d \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u043c\u0435\u0439\u0442\u0456\u043d\u0456 \u043c\u04af\u043c\u043a\u0456\u043d.", "HeaderTermsOfService": "Media Browser \u049a\u044b\u0437\u043c\u0435\u0442 \u0448\u0430\u0440\u0442\u0442\u0430\u0440\u044b", "MessagePleaseAcceptTermsOfService": "\u0416\u0430\u043b\u0493\u0430\u0441\u0442\u044b\u0440\u043c\u0430\u0441 \u0431\u04b1\u0440\u044b\u043d \u049a\u044b\u0437\u043c\u0435\u0442 \u0448\u0430\u0440\u0442\u0442\u0430\u0440\u044b\u043d \u0436\u04d9\u043d\u0435 \u049a\u04b1\u043f\u0438\u044f\u043b\u044b\u043b\u044b\u049b \u0441\u0430\u044f\u0441\u0430\u0442\u044b\u043d \u049b\u0430\u0431\u044b\u043b\u0434\u0430\u04a3\u044b\u0437.", "OptionIAcceptTermsOfService": "\u049a\u044b\u0437\u043c\u0435\u0442 \u0448\u0430\u0440\u0442\u0442\u0430\u0440\u044b\u043d \u049b\u0430\u0431\u044b\u043b\u0434\u0430\u0439\u043c\u044b\u043d", @@ -56,6 +56,7 @@ "HeaderVideo": "\u0411\u0435\u0439\u043d\u0435", "HeaderPaths": "\u0416\u043e\u043b\u0434\u0430\u0440", "CategorySync": "\u04ae\u043d\u0434\u0435\u0441\u0442\u0456\u0440\u0443", + "HeaderEasyPinCode": "\u041e\u04a3\u0430\u0439\u0442\u044b\u043b\u0493\u0430\u043d PIN-\u043a\u043e\u0434", "RegisterWithPayPal": "PayPal \u0430\u0440\u049b\u044b\u043b\u044b \u0442\u0456\u0440\u043a\u0435\u043b\u0443", "HeaderSyncRequiresSupporterMembership": "\u04ae\u043d\u0434\u0435\u0441\u0442\u0456\u0440\u0443 \u04af\u0448\u0456\u043d \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u043b\u044b\u049b \u043c\u04af\u0448\u0435\u043b\u0456\u043a \u049b\u0430\u0436\u0435\u0442", "HeaderEnjoyDayTrial": "14-\u043a\u04af\u043d\u0434\u0456\u043a \u0442\u0435\u0433\u0456\u043d \u0441\u044b\u043d\u0430\u043c\u0430\u043d\u044b \u0442\u0430\u043c\u0430\u0448\u0430\u043b\u0430\u043d\u044b\u04a3\u044b\u0437", @@ -507,7 +508,7 @@ "SystemDlnaProfilesHelp": "\u0416\u04af\u0439\u0435\u043b\u0456\u043a \u043f\u0440\u043e\u0444\u0438\u043b\u044c\u0434\u0435\u0440 \u0442\u0435\u043a \u043e\u049b\u0443 \u04af\u0448\u0456\u043d. \u0416\u04af\u0439\u0435\u043b\u0456\u043a \u043f\u0440\u043e\u0444\u0438\u043b\u044c\u0434\u0456\u04a3 \u04e9\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440\u0456 \u0436\u0430\u04a3\u0430 \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u043f\u0440\u043e\u0444\u0438\u043b\u044c\u0433\u0435 \u0436\u0430\u0437\u044b\u043b\u0430\u0434\u044b.", "TitleDashboard": "\u0411\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b", "TabHome": "\u0411\u0430\u0441\u0442\u044b", - "TabInfo": "\u0410\u049b\u043f\u0430\u0440\u0430\u0442", + "TabInfo": "\u041f\u0440\u043e\u0444\u0430\u0439\u043b \u0442\u0443\u0440\u0430\u043b\u044b", "HeaderLinks": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043b\u0435\u0440", "HeaderSystemPaths": "\u0416\u04af\u0439\u0435\u043b\u0456\u043a \u0436\u043e\u043b\u0434\u0430\u0440", "LinkCommunity": "\u049a\u0430\u0443\u044b\u043c\u0434\u0430\u0441\u0442\u044b\u049b", @@ -601,7 +602,7 @@ "HeaderRunningTasks": "\u041e\u0440\u044b\u043d\u0434\u0430\u043b\u044b\u043f \u0436\u0430\u0442\u049b\u0430\u043d \u0442\u0430\u043f\u0441\u044b\u0440\u043c\u0430\u043b\u0430\u0440", "HeaderActiveDevices": "\u0411\u0435\u043b\u0441\u0435\u043d\u0434\u0456 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440", "HeaderPendingInstallations": "\u0411\u04e9\u0433\u0435\u043b\u0456\u0441 \u043e\u0440\u043d\u0430\u0442\u044b\u043c\u0434\u0430\u0440", - "HeaderServerInformation": "\u0421\u0435\u0440\u0432\u0435\u0440 \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0456", + "HeaderServerInformation": "\u0421\u0435\u0440\u0432\u0435\u0440 \u0442\u0443\u0440\u0430\u043b\u044b", "ButtonRestartNow": "\u049a\u0430\u0437\u0456\u0440 \u049b\u0430\u0439\u0442\u0430 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u0443", "ButtonRestart": "\u049a\u0430\u0439\u0442\u0430 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u0443", "ButtonShutdown": "\u0416\u04b1\u043c\u044b\u0441\u0442\u044b \u0430\u044f\u049b\u0442\u0430\u0443", @@ -758,7 +759,7 @@ "TabContainers": "\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043b\u0435\u0440", "TabCodecs": "\u041a\u043e\u0434\u0435\u043a\u0442\u0435\u0440", "TabResponses": "\u04ae\u043d \u049b\u0430\u0442\u0443\u043b\u0430\u0440", - "HeaderProfileInformation": "\u041f\u0440\u043e\u0444\u0430\u0439\u043b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u044b", + "HeaderProfileInformation": "\u041f\u0440\u043e\u0444\u0430\u0439\u043b \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0442\u0435\u0440\u0456", "LabelEmbedAlbumArtDidl": "Didl \u0456\u0448\u0456\u043d\u0435 \u0430\u043b\u044c\u0431\u043e\u043c \u0441\u0443\u0440\u0435\u0442\u0456\u043d \u0435\u043d\u0434\u0456\u0440\u0443", "LabelEmbedAlbumArtDidlHelp": "\u041a\u0435\u0439\u0431\u0456\u0440 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u0493\u0430 \u0430\u043b\u044c\u0431\u043e\u043c \u0441\u0443\u0440\u0435\u0442\u0456\u043d \u0430\u043b\u0443 \u04af\u0448\u0456\u043d \u043e\u0441\u044b \u04d9\u0434\u0456\u0441 \u049b\u0430\u0436\u0435\u0442. \u0411\u0430\u0441\u049b\u0430\u043b\u0430\u0440 \u04af\u0448\u0456\u043d, \u043e\u0441\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u049b\u043e\u0441\u044b\u043b\u0493\u0430\u043d\u0434\u0430, \u043e\u0439\u043d\u0430\u0442\u0443 \u0441\u04d9\u0442\u0441\u0456\u0437 \u0431\u043e\u043b\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d.", "LabelAlbumArtPN": "\u0410\u043b\u044c\u0431\u043e\u043c \u0441\u0443\u0440\u0435\u0442\u0456 PN:", @@ -949,7 +950,7 @@ "OptionLibraryFolders": "\u0422\u0430\u0441\u0443\u0448\u044b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u044b", "TitleRemoteControl": "\u049a\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443", "OptionLatestTvRecordings": "\u0415\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u0436\u0430\u0437\u0431\u0430\u043b\u0430\u0440", - "LabelProtocolInfo": "\u041f\u0440\u043e\u0442\u043e\u049b\u043e\u043b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u044b:", + "LabelProtocolInfo": "\u041f\u0440\u043e\u0442\u043e\u049b\u043e\u043b \u0442\u0443\u0440\u0430\u043b\u044b:", "LabelProtocolInfoHelp": "\u0411\u04b1\u043b \u043c\u04d9\u043d \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043d\u044b\u04a3 GetProtocolInfo \u0441\u04b1\u0440\u0430\u043d\u044b\u0441\u0442\u0430\u0440\u044b\u043d\u0430 \u0436\u0430\u0443\u0430\u043f \u0431\u0435\u0440\u0433\u0435\u043d\u0434\u0435 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043b\u0430\u0434\u044b.", "TabNfo": "NFO-\u0444\u0430\u0439\u043b\u0434\u0430\u0440", "HeaderKodiMetadataHelp": "Media Browser \u0431\u0430\u0493\u0434\u0430\u0440\u043b\u0430\u043c\u0430\u0441\u044b Kodi NFO \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0442\u0435\u0440\u0456\u043d\u0456\u04a3 \u0436\u04d9\u043d\u0435 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d\u0456\u04a3 \u043a\u0456\u0440\u0456\u043a\u0442\u0456\u0440\u043c\u0435 \u049b\u043e\u043b\u0434\u0430\u0443\u044b\u043d \u049b\u0430\u043c\u0442\u0438\u0434\u044b. Kodi \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0456\u043d \u049b\u043e\u0441\u0443 \u043d\u0435\u043c\u0435\u0441\u0435 \u04e9\u0448\u0456\u0440\u0443 \u04af\u0448\u0456\u043d \u049a\u044b\u0437\u043c\u0435\u0442\u0442\u0435\u0440 \u049b\u043e\u0439\u044b\u043d\u0434\u044b\u0441\u044b\u043d\u0434\u0430\u0493\u044b \u0442\u0430\u0441\u0443\u0448\u044b \u0442\u04af\u0440\u043b\u0435\u0440\u0456\u043d\u0435 \u0430\u0440\u043d\u0430\u043b\u0493\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440\u0434\u0456 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u04a3\u044b\u0437.", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "\u041a\u04d9\u0434\u0456\u043c\u0433\u0456 \u0442\u0430\u0441\u0443\u0448\u044b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u044b\u043d \u043a\u04e9\u0440\u0441\u0435\u0442\u0443 \u04af\u0448\u0456\u043d \u049a\u0430\u043b\u0442\u0430\u043b\u0430\u0440 \u0430\u0441\u043f\u0435\u043a\u0442\u0456\u043d \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", "ViewTypeLiveTvRecordingGroups": "\u0416\u0430\u0437\u0431\u0430\u043b\u0430\u0440", "ViewTypeLiveTvChannels": "\u0410\u0440\u043d\u0430\u043b\u0430\u0440", - "LabelAllowLocalAccessWithoutPassword": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0441\u0456\u0437 \u0436\u0435\u0440\u0433\u0456\u043b\u0456\u043a\u0442\u0456 \u049b\u0430\u0442\u044b\u043d\u0441\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", - "LabelAllowLocalAccessWithoutPasswordHelp": "\u049a\u043e\u0441\u044b\u043b\u0493\u0430\u043d \u0431\u043e\u043b\u0441\u0430, \u04af\u0439\u0456\u04a3\u0456\u0437\u0434\u0435\u0433\u0456 \u0436\u0435\u043b\u0456 \u0456\u0448\u0456\u043d\u0435\u043d \u043a\u0456\u0440\u0433\u0435\u043d\u0434\u0435 \u049b\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437 \u049b\u0430\u0436\u0435\u0442 \u0431\u043e\u043b\u043c\u0430\u0439\u0434\u044b.", + "LabelEasyPinCode": "\u041e\u04a3\u0430\u0439\u0442\u044b\u043b\u0493\u0430\u043d PIN-\u043a\u043e\u0434:", + "EasyPasswordHelp": "\u041e\u04a3\u0430\u0439\u0442\u044b\u043b\u0493\u0430\u043d PIN-\u043a\u043e\u0434\u044b\u04a3\u044b\u0437 \u049b\u043e\u043b\u0434\u0430\u0443\u0434\u0430\u0493\u044b Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d\u0430\u043d \u0434\u0435\u0440\u0431\u0435\u0441 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443 \u04af\u0448\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043b\u0430\u0434\u044b, \u0436\u04d9\u043d\u0435 \u0436\u0435\u043b\u0456 \u0456\u0448\u0456\u043d\u0434\u0435 \u043e\u04a3\u0430\u0439\u0442\u044b\u043b\u044b\u043f \u043a\u0456\u0440\u0443 \u04af\u0448\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043b\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d.", + "LabelInNetworkSignInWithEasyPassword": "\u041e\u04a3\u0430\u0439\u0442\u044b\u043b\u0493\u0430\u043d PIN-\u043a\u043e\u0434\u044b\u043c \u0430\u0440\u049b\u044b\u043b\u044b \u0436\u0435\u043b\u0456 \u0456\u0448\u0456\u043d\u0434\u0435 \u043e\u04a3\u0430\u0439\u0442\u044b\u043b\u044b\u043f \u043a\u0456\u0440\u0443\u0434\u0456 \u049b\u043e\u0441\u0443", + "LabelInNetworkSignInWithEasyPasswordHelp": "\u0415\u0433\u0435\u0440 \u049b\u043e\u0441\u044b\u043b\u0441\u0430, \u04af\u0439 \u0436\u0435\u043b\u0456\u0441\u0456 \u0456\u0448\u0456\u043d\u0435\u043d Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d\u0430 \u043a\u0456\u0440\u0443 \u04af\u0448\u0456\u043d \u043e\u04a3\u0430\u0439\u0442\u044b\u043b\u0493\u0430\u043d PIN-\u043a\u043e\u0434\u044b\u04a3\u044b\u0437\u0434\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u044b\u04a3\u044b\u0437 \u043c\u04af\u043c\u043a\u0456\u043d. \u0421\u0456\u0437\u0434\u0456\u04a3 \u049b\u0430\u043b\u044b\u043f\u0442\u044b \u049b\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0456\u04a3\u0456\u0437 \u0442\u0435\u043a \u049b\u0430\u043d\u0430 \u04af\u0439 \u0441\u044b\u0440\u0442\u044b\u043d\u0434\u0430 \u049b\u0430\u0436\u0435\u0442 \u0431\u043e\u043b\u0430\u0434\u044b. \u0415\u0433\u0435\u0440 PIN-\u043a\u043e\u0434 \u0431\u043e\u0441 \u049b\u0430\u043b\u0434\u044b\u0440\u044b\u043b\u0441\u0430, \u04af\u0439 \u0436\u0435\u043b\u0456\u0441\u0456\u043d\u0434\u0435 \u049b\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0456\u04a3\u0456\u0437 \u049b\u0430\u0436\u0435\u0442 \u0431\u043e\u043b\u043c\u0430\u0439\u0434\u044b.", "HeaderPassword": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437", "HeaderLocalAccess": "\u0416\u0435\u0440\u0433\u0456\u043b\u0456\u043a\u0442\u0456 \u049b\u0430\u0442\u044b\u043d\u0430\u0441", "HeaderViewOrder": "\u0410\u0441\u043f\u0435\u043a\u0442\u0442\u0435\u0440 \u0440\u0435\u0442\u0456", + "ButtonResetEasyPassword": "\u041e\u04a3\u0430\u0439\u0442\u044b\u043b\u0493\u0430\u043d PIN-\u043a\u043e\u0434\u0442\u044b \u044b\u0441\u044b\u0440\u0443", "LabelSelectUserViewOrder": "Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d\u0434\u0430 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0435\u0442\u0456\u043d \u041c\u0435\u043d\u0456\u04a3 \u0430\u0441\u043f\u0435\u043a\u0442\u0442\u0435\u0440\u0456\u043c \u0440\u0435\u0442\u0456\u043d \u0442\u0430\u04a3\u0434\u0430\u04a3\u044b\u0437", "LabelMetadataRefreshMode": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u043a\u04e9\u043a\u0435\u0439\u0442\u0435\u0441\u0442\u0456 \u0435\u0442\u0443 \u0440\u0435\u0436\u0456\u043c\u0456:", "LabelImageRefreshMode": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u043a\u04e9\u043a\u0435\u0439\u0442\u0435\u0441\u0442\u0456 \u0435\u0442\u0443 \u0440\u0435\u0436\u0456\u043c\u0456:", @@ -1133,7 +1137,7 @@ "OptionAddMissingDataOnly": "\u0422\u0435\u043a \u049b\u0430\u043d\u0430 \u0436\u043e\u043a \u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u04af\u0441\u0442\u0435\u0443", "OptionLocalRefreshOnly": "\u0422\u0435\u043a \u049b\u0430\u043d\u0430 \u0436\u0435\u0440\u0433\u0456\u043b\u0456\u043a\u0442\u0456 \u043a\u04e9\u043a\u0435\u0439\u0442\u0435\u0441\u0442\u0456 \u0435\u0442\u0443", "HeaderRefreshMetadata": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u043a\u04e9\u043a\u0435\u0439\u0442\u0435\u0441\u0442\u0456 \u0435\u0442\u0443", - "HeaderPersonInfo": "\u0422\u04b1\u043b\u0493\u0430 \u0442\u0443\u0440\u0430\u043b\u044b \u0430\u049b\u043f\u0430\u0440\u0430\u0442", + "HeaderPersonInfo": "\u0422\u04b1\u043b\u0493\u0430 \u0442\u0443\u0440\u0430\u043b\u044b", "HeaderIdentifyItem": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0456 \u0430\u043d\u044b\u049b\u0442\u0430\u0443", "HeaderIdentifyItemHelp": "\u0406\u0437\u0434\u0435\u0443\u0434\u0456\u04a3 \u0431\u0456\u0440 \u043d\u0435 \u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0448\u0430\u0440\u0442\u044b\u043d \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437. \u0406\u0437\u0434\u0435\u0443 \u043d\u04d9\u0442\u0438\u0436\u0435\u043b\u0435\u0440\u0456\u043d \u043a\u04e9\u0431\u0435\u0439\u0442\u0443 \u04af\u0448\u0456\u043d \u0448\u0430\u0440\u0442\u0442\u044b \u0430\u043b\u0430\u0441\u0442\u0430\u04a3\u044b\u0437.", "HeaderConfirmDeletion": "\u0416\u043e\u044e\u0434\u044b \u0440\u0430\u0441\u0442\u0430\u0443", @@ -1167,7 +1171,7 @@ "LabelPlayers": "\u041e\u0439\u044b\u043d\u0448\u044b\u043b\u0430\u0440:", "Label3DFormat": "3D \u043f\u0456\u0448\u0456\u043c\u0456:", "HeaderAlternateEpisodeNumbers": "\u0411\u0430\u043b\u0430\u043c\u0430\u043b\u044b \u044d\u043f\u0438\u0437\u043e\u0434 \u043d\u04e9\u043c\u0456\u0440\u043b\u0435\u0440\u0456", - "HeaderSpecialEpisodeInfo": "\u0410\u0440\u043d\u0430\u0439\u044b \u044d\u043f\u0438\u0437\u043e\u0434 \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u044b", + "HeaderSpecialEpisodeInfo": "\u0410\u0440\u043d\u0430\u0439\u044b \u044d\u043f\u0438\u0437\u043e\u0434 \u0442\u0443\u0440\u0430\u043b\u044b", "HeaderExternalIds": "\u0421\u044b\u0440\u0442\u049b\u044b \u0441\u04d9\u0439\u043a\u0435\u0441\u0442\u0435\u043d\u0434\u0456\u0440\u0433\u0456\u0448\u0442\u0435\u0440:", "LabelDvdSeasonNumber": "DVD \u043c\u0430\u0443\u0441\u044b\u043c \u043d\u04e9\u043c\u0456\u0440\u0456", "LabelDvdEpisodeNumber": "DVD \u044d\u043f\u0438\u0437\u043e\u0434 \u043d\u04e9\u043c\u0456\u0440\u0456", @@ -1206,15 +1210,15 @@ "OptionWriter": "\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439\u0448\u0456", "LabelAirDays": "\u042d\u0444\u0438\u0440 \u043a\u04af\u043d\u0434\u0435\u0440\u0456:", "LabelAirTime": "\u042d\u0444\u0438\u0440 \u0443\u0430\u049b\u044b\u0442\u044b:", - "HeaderMediaInfo": "\u0422\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0456", - "HeaderPhotoInfo": "\u0424\u043e\u0442\u043e\u0441\u0443\u0440\u0435\u0442 \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0456", + "HeaderMediaInfo": "\u0422\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u0442\u0443\u0440\u0430\u043b\u044b", + "HeaderPhotoInfo": "\u0424\u043e\u0442\u043e\u0441\u0443\u0440\u0435\u0442 \u0442\u0443\u0440\u0430\u043b\u044b", "HeaderInstall": "\u041e\u0440\u043d\u0430\u0442\u0443", "LabelSelectVersionToInstall": "\u041e\u0440\u043d\u0430\u0442\u044b\u043c \u043d\u04b1\u0441\u049b\u0430\u0441\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443:", "LinkSupporterMembership": "\u0416\u0430\u049b\u0442\u0430\u0443\u0448\u044b \u043c\u04af\u0448\u0435\u043b\u0456\u0433\u0456 \u0442\u0443\u0440\u0430\u043b\u044b \u0442\u0430\u043d\u044b\u0441\u044b\u04a3\u044b\u0437", "MessageSupporterPluginRequiresMembership": "\u0411\u04b1\u043b \u043f\u043b\u0430\u0433\u0438\u043d\u0433\u0435 14 \u043a\u04af\u043d\u0434\u0456\u043a \u0442\u0435\u0433\u0456\u043d \u0441\u044b\u043d\u0430\u043c\u0430\u0434\u0430\u043d \u043a\u0435\u0439\u0456\u043d \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456 \u0436\u0430\u049b\u0442\u0430\u0443\u0448\u044b \u043c\u04af\u0448\u0435\u043b\u0456\u0433\u0456\u043d \u049b\u0430\u0436\u0435\u0442 \u0435\u0442\u0435\u0434\u0456.", "MessagePremiumPluginRequiresMembership": "\u0411\u04b1\u043b \u043f\u043b\u0430\u0433\u0438\u043d\u0434\u0456 \u0441\u0430\u0442\u044b\u043f \u0430\u043b\u0443 \u04af\u0448\u0456\u043d 14 \u043a\u04af\u043d\u0434\u0456\u043a \u0442\u0435\u0433\u0456\u043d \u0441\u044b\u043d\u0430\u043c\u0430\u0434\u0430\u043d \u043a\u0435\u0439\u0456\u043d \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456 \u0436\u0430\u049b\u0442\u0430\u0443\u0448\u044b \u043c\u04af\u0448\u0435\u043b\u0456\u0433\u0456\u043d \u049b\u0430\u0436\u0435\u0442 \u0435\u0442\u0435\u0434\u0456.", "HeaderReviews": "\u041f\u0456\u043a\u0456\u0440\u043b\u0435\u0440", - "HeaderDeveloperInfo": "\u0416\u0430\u0441\u0430\u049b\u0442\u0430\u0443\u0448\u044b \u0442\u0443\u0440\u0430\u043b\u044b", + "HeaderDeveloperInfo": "\u0416\u0430\u0441\u0430\u049b\u0442\u0430\u0443\u0448\u044b\u043b\u0430\u0440 \u0442\u0443\u0440\u0430\u043b\u044b", "HeaderRevisionHistory": "\u04e8\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440 \u0442\u0430\u0440\u0438\u0445\u044b", "ButtonViewWebsite": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u0441\u0430\u0439\u0442\u044b\u043d \u049b\u0430\u0440\u0430\u0443", "LabelRecurringDonationCanBeCancelledHelp": "\u049a\u0430\u0439\u0442\u0430\u043b\u0430\u043c\u0430 \u049b\u0430\u0439\u044b\u0440\u043c\u0430\u043b\u0434\u044b\u049b\u0442\u0430\u0440 PayPal \u0435\u0441\u0435\u043f \u0448\u043e\u0442\u044b \u0430\u0440\u049b\u044b\u043b\u044b \u04d9\u0440 \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0434\u0430 \u0431\u043e\u043b\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d.", @@ -1227,7 +1231,7 @@ "LabelExtractChaptersDuringLibraryScanHelp": "\u049a\u043e\u0441\u044b\u043b\u0493\u0430\u043d\u0434\u0430, \u0441\u0430\u0445\u043d\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456 \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u043d\u044b \u0441\u043a\u0430\u043d\u0435\u0440\u043b\u0435\u0443 \u043c\u0435\u0437\u0433\u0456\u043b\u0456\u043d\u0434\u0435, \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440 \u0441\u044b\u0440\u0442\u0442\u0430\u043d \u0430\u043b\u044b\u043d\u0493\u0430\u043d\u0434\u0430, \u0448\u044b\u0493\u0430\u0440\u044b\u043f \u0430\u043b\u044b\u043d\u0430\u0434\u044b. \u0410\u0436\u044b\u0440\u0430\u0442\u044b\u043b\u0493\u0430\u043d\u0434\u0430, \u0431\u04b1\u043b\u0430\u0440 \u0441\u0430\u0445\u043d\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d\u0435 \u0436\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u0430\u043d \u0442\u0430\u043f\u0441\u044b\u0440\u043c\u0430\u0441\u044b \u043c\u0435\u0437\u0433\u0456\u043b\u0456\u043d\u0434\u0435, \u0442\u04b1\u0440\u0430\u049b\u0442\u044b \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u043d\u044b \u0441\u043a\u0430\u043d\u0435\u0440\u043b\u0435\u0443\u0456\u043d \u0436\u044b\u043b\u0434\u0430\u043c\u044b\u0440\u0430\u049b \u0430\u044f\u049b\u0442\u0430\u043b\u0443\u044b \u04b1\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0456\u043f, \u0448\u044b\u0493\u0430\u0440\u044b\u043f \u0430\u043b\u044b\u043d\u0430\u0434\u044b.", "LabelConnectGuestUserName": "\u041e\u043b\u0430\u0440\u0434\u044b\u04a3 Media Browser \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0430\u0442\u044b \u043d\u0435\u043c\u0435\u0441\u0435 \u044d-\u043f\u043e\u0448\u0442\u0430 \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b:", "LabelConnectUserName": "Media Browser \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0430\u0442\u044b\/\u044d-\u043f\u043e\u0448\u0442\u0430\u0441\u044b:", - "LabelConnectUserNameHelp": "\u0421\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 IP \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b\u043d \u0431\u0456\u043b\u043c\u0435\u0439 \u0442\u04b1\u0440\u044b\u043f \u04d9\u0440\u049b\u0430\u0439\u0441\u044b Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u0441\u044b\u043d\u0430\u043d \u043a\u0456\u0440\u0443-\u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0442\u044b \u0436\u0435\u04a3\u0456\u043b\u0434\u0435\u0442\u0443\u0456\u043d \u049b\u043e\u0441\u0443 \u04af\u0448\u0456\u043d \u043e\u0441\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043d\u044b Media Browser \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u0441\u0456\u043d\u0435 \u0431\u0430\u0439\u043b\u0430\u043d\u044b\u0441\u0442\u044b\u0440\u044b\u04a3\u044b\u0437.", + "LabelConnectUserNameHelp": "\u0421\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 IP \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b\u043d \u0431\u0456\u043b\u043c\u0435\u0439 \u0442\u04b1\u0440\u044b\u043f \u04d9\u0440\u049b\u0430\u0439\u0441\u044b Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u0441\u044b\u043d\u0430\u043d \u043e\u04a3\u0430\u0439\u0442\u044b\u043b\u0493\u0430\u043d \u043a\u0456\u0440\u0443-\u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0442\u044b \u049b\u043e\u0441\u0443 \u04af\u0448\u0456\u043d \u043e\u0441\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043d\u044b Media Browser \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u0441\u0456\u043d\u0435 \u0431\u0430\u0439\u043b\u0430\u043d\u044b\u0441\u0442\u044b\u0440\u044b\u04a3\u044b\u0437.", "ButtonLearnMoreAboutMediaBrowserConnect": "Media Browser Connect \u0442\u0443\u0440\u0430\u043b\u044b \u043a\u04e9\u0431\u0456\u0440\u0435\u043a \u0431\u0456\u043b\u0443", "LabelExternalPlayers": "\u0421\u044b\u0440\u0442\u049b\u044b \u043e\u0439\u043d\u0430\u0442\u049b\u044b\u0448\u0442\u0430\u0440:", "LabelExternalPlayersHelp": "\u0421\u044b\u0440\u0442\u049b\u044b \u043e\u0439\u043d\u0430\u0442\u049b\u044b\u0448\u0442\u0430\u0440\u0434\u0430 \u043c\u0430\u0437\u043c\u04b1\u043d\u0434\u044b \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u043a\u0442\u0435\u0440\u0434\u0456 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443. \u0411\u04b1\u043b \u0442\u0435\u043a \u049b\u0430\u043d\u0430 URL \u0441\u0445\u0435\u043c\u0430\u043b\u0430\u0440\u044b\u043d \u049b\u043e\u043b\u0434\u0430\u0439\u0442\u044b\u043d, \u04d9\u0434\u0435\u0442\u0442\u0435, Android \u0436\u04d9\u043d\u0435 iOS, \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u0434\u0430 \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456. \u0421\u044b\u0440\u0442\u049b\u044b \u043e\u0439\u043d\u0430\u0442\u049b\u044b\u0448\u0442\u0430\u0440, \u049b\u0430\u0493\u0438\u0434\u0430 \u0431\u043e\u0439\u044b\u043d\u0448\u0430, \u0430\u043b\u044b\u0441\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443\u0434\u044b \u0436\u04d9\u043d\u0435 \u0436\u0430\u043b\u0493\u0430\u0441\u0442\u044b\u0440\u0443\u0434\u044b \u049b\u043e\u043b\u0434\u0430\u043c\u0430\u0439\u0434\u044b.", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ko.json b/MediaBrowser.Server.Implementations/Localization/Server/ko.json index 8fb90b86e..98094e213 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ko.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ko.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ms.json b/MediaBrowser.Server.Implementations/Localization/Server/ms.json index a2dc72110..0b591e6ba 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ms.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nb.json b/MediaBrowser.Server.Implementations/Localization/Server/nb.json index 1bf7e3c5b..ebbd9e5a0 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nb.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Stier", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Vis alle mapper som rene lagringsmapper", "ViewTypeLiveTvRecordingGroups": "Opptak", "ViewTypeLiveTvChannels": "Kanaler", - "LabelAllowLocalAccessWithoutPassword": "Tillat lokal tilkobling uten passord", - "LabelAllowLocalAccessWithoutPasswordHelp": "N\u00e5r aktivert, vil ikke ett passord v\u00e6re p\u00e5krevd for innlogging fra ditt lokale hjemme nettverk.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Passord", "HeaderLocalAccess": "Lokal Tilkobling", "HeaderViewOrder": "Visnings rekkef\u00f8lge", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Velg rekkef\u00f8lge dine visninger vil bli vist inn i Media Browser apps", "LabelMetadataRefreshMode": "Metadata oppfrisknings modus:", "LabelImageRefreshMode": "Bilde oppfrisknings modus:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nl.json b/MediaBrowser.Server.Implementations/Localization/Server/nl.json index c6bbd7d56..9912a31dc 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nl.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paden", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Registreer met PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Vereist een Supporter lidmaatschap", "HeaderEnjoyDayTrial": "Geniet van een 14-daagse gratis proefversie", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Toon een mappenweergave als u gewoon Mediamappen wilt weergeven", "ViewTypeLiveTvRecordingGroups": "Opnamen", "ViewTypeLiveTvChannels": "Kanalen", - "LabelAllowLocalAccessWithoutPassword": "Lokale toegang toestaan zonder wachtwoord", - "LabelAllowLocalAccessWithoutPasswordHelp": "Als dit ingeschakeld is dan kan er in het thuisnetwerk zonder wachtwoord aangemeld worden.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Wachtwoord", "HeaderLocalAccess": "Lokale toegang", "HeaderViewOrder": "Weergave volgorde", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Kies de volgorde van uw weergaven die zullen worden weergegeven in Media Browser applicaties", "LabelMetadataRefreshMode": "Metadata vernieuw mode:", "LabelImageRefreshMode": "Afbeelding vernieuw mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pl.json b/MediaBrowser.Server.Implementations/Localization/Server/pl.json index dbb120350..42af12177 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pl.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json index 41848919d..b150edd8d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json @@ -56,6 +56,7 @@ "HeaderVideo": "V\u00eddeo", "HeaderPaths": "Caminhos", "CategorySync": "Sincroniza\u00e7\u00e3o", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Registrar com PayPal", "HeaderSyncRequiresSupporterMembership": "Sincroniza\u00e7\u00e3o Necessita de uma Filia\u00e7\u00e3o de Colaborador", "HeaderEnjoyDayTrial": "Aproveite um per\u00edodo de 14 dias gr\u00e1tis para testes", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Exibir visualiza\u00e7\u00e3o de pastas para mostrar pastas simples de m\u00eddia", "ViewTypeLiveTvRecordingGroups": "Grava\u00e7\u00f5es", "ViewTypeLiveTvChannels": "Canais", - "LabelAllowLocalAccessWithoutPassword": "Permtir acesso local sem senha", - "LabelAllowLocalAccessWithoutPasswordHelp": "Quando ativado, uma senha n\u00e3o ser\u00e1 necess\u00e1ria para entrar atrav\u00e9s de sua rede dom\u00e9stica.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Senha", "HeaderLocalAccess": "Acesso Local", "HeaderViewOrder": "Ordem da Visualiza\u00e7\u00e3o", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Escolha a ordem em que suas visualiza\u00e7\u00f5es ser\u00e3o exibidas dentro das apps do Media Browser", "LabelMetadataRefreshMode": "Modo de atualiza\u00e7\u00e3o dos metadados:", "LabelImageRefreshMode": "Modo de atualiza\u00e7\u00e3o das imagens:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json index c6590062f..d7113fc6f 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ru.json b/MediaBrowser.Server.Implementations/Localization/Server/ru.json index 589b7e515..73bc7ffbc 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ru.json @@ -34,7 +34,7 @@ "LabelEnableChapterImageExtractionForMovies": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0441\u0446\u0435\u043d \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u043c\u043e\u0432", "LabelChapterImageExtractionForMoviesHelp": "\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0441\u0446\u0435\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0446\u0435\u043d\u044b. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c, \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0447\u0430, \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u043d\u0430 4:00 \u0443\u0442\u0440\u0430, \u043e\u0434\u043d\u0430\u043a\u043e, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u0447\u0430\u0441\u044b \u043f\u0438\u043a.", "LabelEnableAutomaticPortMapping": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432", - "LabelEnableAutomaticPortMappingHelp": "UPnP \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430.\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432.", + "LabelEnableAutomaticPortMappingHelp": "UPnP \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430.\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432.", "HeaderTermsOfService": "\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433 Media Browser", "MessagePleaseAcceptTermsOfService": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0435 \u0441 \u0423\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433 \u0438 \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c.", "OptionIAcceptTermsOfService": "\u042f \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u044e\u0441\u044c \u0441 \u0423\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433", @@ -56,6 +56,7 @@ "HeaderVideo": "\u0412\u0438\u0434\u0435\u043e", "HeaderPaths": "\u041f\u0443\u0442\u0438", "CategorySync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f", + "HeaderEasyPinCode": "\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 PIN-\u043a\u043e\u0434", "RegisterWithPayPal": "\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 PayPal", "HeaderSyncRequiresSupporterMembership": "\u0414\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430", "HeaderEnjoyDayTrial": "\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c 14-\u0434\u043d\u0435\u0432\u043d\u044b\u043c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c \u043f\u0440\u043e\u0431\u043d\u044b\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c", @@ -507,7 +508,7 @@ "SystemDlnaProfilesHelp": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044e \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u043d\u043e\u0432\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435.", "TitleDashboard": "\u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c", "TabHome": "\u0413\u043b\u0430\u0432\u043d\u043e\u0435", - "TabInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f", + "TabInfo": "\u041e \u043f\u0440\u043e\u0444\u0438\u043b\u0435", "HeaderLinks": "\u0421\u0441\u044b\u043b\u043a\u0438", "HeaderSystemPaths": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438", "LinkCommunity": "\u0421\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e", @@ -550,7 +551,7 @@ "LabelMinResumeDurationHelp": "\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u0438\u043c\u044b\u043c\u0438 \u043f\u0440\u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u0435\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e", "TitleAutoOrganize": "\u0410\u0432\u0442\u043e\u0440\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f", "TabActivityLog": "\u0416\u0443\u0440\u043d\u0430\u043b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439", - "HeaderName": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", + "HeaderName": "\u0418\u043c\u044f (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435)", "HeaderDate": "\u0414\u0430\u0442\u0430", "HeaderSource": "\u041e\u0442\u043a\u0443\u0434\u0430", "HeaderDestination": "\u041a\u0443\u0434\u0430", @@ -601,7 +602,7 @@ "HeaderRunningTasks": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0438", "HeaderActiveDevices": "\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", "HeaderPendingInstallations": "\u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438", - "HeaderServerInformation": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0435", + "HeaderServerInformation": "\u041e \u0441\u0435\u0440\u0432\u0435\u0440\u0435", "ButtonRestartNow": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e", "ButtonRestart": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c", "ButtonShutdown": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443", @@ -949,7 +950,7 @@ "OptionLibraryFolders": "\u041c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043a\u0438", "TitleRemoteControl": "\u0423\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435", "OptionLatestTvRecordings": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438", - "LabelProtocolInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435:", + "LabelProtocolInfo": "\u041e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435:", "LabelProtocolInfoHelp": "\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b GetProtocolInfo \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", "TabNfo": "NFO-\u0444\u0430\u0439\u043b\u044b", "HeaderKodiMetadataHelp": "\u0412 Media Browser \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043b\u044f Kodi-\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 NFO-\u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u0434\u043b\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432. \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Kodi-\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u00ab\u0421\u043b\u0443\u0436\u0431\u044b\u00bb, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445.", @@ -1119,11 +1120,14 @@ "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", "ViewTypeLiveTvRecordingGroups": "\u0417\u0430\u043f\u0438\u0441\u0438", "ViewTypeLiveTvChannels": "\u041a\u0430\u043d\u0430\u043b\u044b", - "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", - "LabelAllowLocalAccessWithoutPasswordHelp": "\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438, \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0432\u0430\u0448\u0435\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438.", + "LabelEasyPinCode": "\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 PIN-\u043a\u043e\u0434:", + "EasyPasswordHelp": "\u0412\u0430\u0448 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 PIN-\u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Media Browser, \u0438 \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0438\u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430.", + "LabelInNetworkSignInWithEasyPassword": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0432\u0445\u043e\u0434 \u0441 \u043c\u043e\u0438\u043c \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u043c PIN-\u043a\u043e\u0434\u043e\u043c", + "LabelInNetworkSignInWithEasyPasswordHelp": "\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 PIN-\u043a\u043e\u0434 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Media Browser \u0438\u0437\u043d\u0443\u0442\u0440\u0438 \u0432\u0430\u0448\u0435\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438. \u0412\u0430\u0448 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0435 \u0434\u043e\u043c\u0430. \u0415\u0441\u043b\u0438 PIN-\u043a\u043e\u0434 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c, \u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u043e\u043b\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u0430\u0448\u0435\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438.", "HeaderPassword": "\u041f\u0430\u0440\u043e\u043b\u044c", "HeaderLocalAccess": "\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f", "HeaderViewOrder": "\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432", + "ButtonResetEasyPassword": "\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 PIN-\u043a\u043e\u0434", "LabelSelectUserViewOrder": "\u0412\u044b\u0431\u043e\u0440 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Media Browser", "LabelMetadataRefreshMode": "\u0420\u0435\u0436\u0438\u043c \u043f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:", "LabelImageRefreshMode": "\u0420\u0435\u0436\u0438\u043c \u043f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432:", @@ -1133,7 +1137,7 @@ "OptionAddMissingDataOnly": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0441\u0443\u0442-\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445", "OptionLocalRefreshOnly": "\u041f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435", "HeaderRefreshMetadata": "\u041f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445", - "HeaderPersonInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0435", + "HeaderPersonInfo": "\u041e \u043f\u0435\u0440\u0441\u043e\u043d\u0435", "HeaderIdentifyItem": "\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430", "HeaderIdentifyItemHelp": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043e\u0434\u043d\u043e \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u043f\u043e\u0438\u0441\u043a\u0430. \u0414\u043b\u044f \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435.", "HeaderConfirmDeletion": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f", @@ -1167,7 +1171,7 @@ "LabelPlayers": "\u0418\u0433\u0440\u043e\u043a\u0438:", "Label3DFormat": "\u0424\u043e\u0440\u043c\u0430\u0442 3D:", "HeaderAlternateEpisodeNumbers": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u044d\u043f\u0438\u0437\u043e\u0434\u043e\u0432", - "HeaderSpecialEpisodeInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u043f\u0438\u0437\u043e\u0434\u0435", + "HeaderSpecialEpisodeInfo": "\u041e \u0441\u043f\u0435\u0446\u044d\u043f\u0438\u0437\u043e\u0434\u0435", "HeaderExternalIds": "\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b:", "LabelDvdSeasonNumber": "\u041d\u043e\u043c\u0435\u0440 DVD-\u0441\u0435\u0437\u043e\u043d\u0430:", "LabelDvdEpisodeNumber": "\u041d\u043e\u043c\u0435\u0440 DVD-\u044d\u043f\u0438\u0437\u043e\u0434\u0430:", @@ -1206,15 +1210,15 @@ "OptionWriter": "\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0441\u0442", "LabelAirDays": "\u0414\u043d\u0438 \u044d\u0444\u0438\u0440\u0430:", "LabelAirTime": "\u0412\u0440\u0435\u043c\u044f \u044d\u0444\u0438\u0440\u0430:", - "HeaderMediaInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445", - "HeaderPhotoInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438", + "HeaderMediaInfo": "\u041e \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445", + "HeaderPhotoInfo": "\u041e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438", "HeaderInstall": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430", "LabelSelectVersionToInstall": "\u0412\u044b\u0431\u043e\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438:", "LinkSupporterMembership": "\u0423\u0437\u043d\u0430\u0442\u044c \u043e \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u0435 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430", "MessageSupporterPluginRequiresMembership": "\u0414\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 14 \u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430.", "MessagePremiumPluginRequiresMembership": "\u0414\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 14 \u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430.", "HeaderReviews": "\u041e\u0442\u0437\u044b\u0432\u044b", - "HeaderDeveloperInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445", + "HeaderDeveloperInfo": "\u041e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445", "HeaderRevisionHistory": "\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439", "ButtonViewWebsite": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0435\u0431\u0441\u0430\u0439\u0442", "LabelRecurringDonationCanBeCancelledHelp": "\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0430\u0448\u0443 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c PayPal.", @@ -1227,7 +1231,7 @@ "LabelExtractChaptersDuringLibraryScanHelp": "\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0441\u0446\u0435\u043d \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0435\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438. \u041f\u0440\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u00ab\u0420\u0438\u0441\u0443\u043d\u043a\u0438 \u0441\u0446\u0435\u043d\u00bb, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435.", "LabelConnectGuestUserName": "\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f Media Browser \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u044d-\u043f\u043e\u0447\u0442\u044b:", "LabelConnectUserName": "\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f Media Browser \/ \u044d-\u043f\u043e\u0447\u0442\u0430:", - "LabelConnectUserNameHelp": "\u0421\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f c \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e Media Browser, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u0434\u043e\u0431\u043d\u043e\u043c\u0443 \u0432\u0445\u043e\u0434\u0443 \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Media Browser \u0431\u0435\u0437 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0437\u043d\u0430\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.", + "LabelConnectUserNameHelp": "\u0421\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f c \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e Media Browser, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u043c\u0443 \u0432\u0445\u043e\u0434\u0443 \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Media Browser \u0431\u0435\u0437 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0437\u043d\u0430\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.", "ButtonLearnMoreAboutMediaBrowserConnect": "\u0423\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e Media Browser Connect", "LabelExternalPlayers": "\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u0438:", "LabelExternalPlayersHelp": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f\u0445. \u041e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 URL-\u0441\u0445\u0435\u043c\u044b, \u043e\u0431\u044b\u0447\u043d\u043e, \u0432 Android \u0438 iOS. \u0412\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f\u0445, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/sv.json b/MediaBrowser.Server.Implementations/Localization/Server/sv.json index 74d76ab7f..e3d1d54a8 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/sv.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Vy som visar vanliga lagringsmappar", "ViewTypeLiveTvRecordingGroups": "Inspelningar", "ViewTypeLiveTvChannels": "Kanaler", - "LabelAllowLocalAccessWithoutPassword": "Till\u00e5t lokal \u00e5tkomst utan l\u00f6senord", - "LabelAllowLocalAccessWithoutPasswordHelp": "G\u00f6r att l\u00f6senord ej kr\u00e4vs vid inloggning fr\u00e5n hemman\u00e4tverket.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "L\u00f6senord", "HeaderLocalAccess": "Lokal \u00e5tkomst", "HeaderViewOrder": "Visningsordning", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "V\u00e4lj i vilken ordning dina vyer skall visas i Media Browser-appar", "LabelMetadataRefreshMode": "Metod f\u00f6r uppdatering av metadata:", "LabelImageRefreshMode": "Metod f\u00f6r uppdatering av bilder:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/tr.json b/MediaBrowser.Server.Implementations/Localization/Server/tr.json index e6ac2ddea..4fd8a764a 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/tr.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/uk.json b/MediaBrowser.Server.Implementations/Localization/Server/uk.json index 452343f32..f6d79e3a7 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/uk.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/uk.json @@ -56,6 +56,7 @@ "HeaderVideo": "\u0412\u0456\u0434\u0435\u043e", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/vi.json b/MediaBrowser.Server.Implementations/Localization/Server/vi.json index ff69301b5..d6330bf1e 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/vi.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json index 3cdfa8126..56bd68f6e 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json @@ -56,6 +56,7 @@ "HeaderVideo": "\u89c6\u9891", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "\u663e\u793a\u4e00\u4e2a\u6587\u4ef6\u5939\u89c6\u56fe\u6765\u5448\u73b0\u5e73\u9762\u5a92\u4f53\u6587\u4ef6\u5939", "ViewTypeLiveTvRecordingGroups": "\u5f55\u5236", "ViewTypeLiveTvChannels": "\u9891\u9053", - "LabelAllowLocalAccessWithoutPassword": "\u5141\u8bb8\u672c\u5730\u8bbf\u95ee\u4e0d\u4f7f\u7528\u5bc6\u7801", - "LabelAllowLocalAccessWithoutPasswordHelp": "\u5f53\u542f\u7528\u65f6\uff0c\u4ece\u60a8\u7684\u5bb6\u5ead\u7f51\u7edc\u4e2d\u767b\u5f55\u65f6\u5c06\u4e0d\u9700\u8981\u5bc6\u7801\u3002", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "\u5bc6\u7801", "HeaderLocalAccess": "\u672c\u5730\u8bbf\u95ee", "HeaderViewOrder": "\u67e5\u770b\u987a\u5e8f", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "\u60a8\u6240\u9009\u62e9\u7684\u67e5\u770b\u987a\u5e8f\u5c06\u663e\u793a\u5728Media Browser \u7684\u5404\u79cdApp\u4e0a\u9762", "LabelMetadataRefreshMode": "\u5a92\u4f53\u8d44\u6599\u5237\u65b0\u6a21\u5f0f\uff1a", "LabelImageRefreshMode": "\u56fe\u7247\u5237\u65b0\u6a21\u5f0f\uff1a", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json index 543d3a965..2e6f40e43 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json @@ -56,6 +56,7 @@ "HeaderVideo": "Video", "HeaderPaths": "Paths", "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", "RegisterWithPayPal": "Register with PayPal", "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", @@ -1119,11 +1120,14 @@ "LabelDisplayFoldersView": "Display a folders view to show plain media folders", "ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvChannels": "Channels", - "LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", - "LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network.", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", "HeaderPassword": "Password", "HeaderLocalAccess": "Local Access", "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelMetadataRefreshMode": "Metadata refresh mode:", "LabelImageRefreshMode": "Image refresh mode:", diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index b594f3973..ff6e92c6b 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.547 + 3.0.550 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 857ab8e87..ea08142be 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.547 + 3.0.550 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 2ef4ac4b5..a420f4eae 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.547 + 3.0.550 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index d28a38a8d..bf8c18ad8 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.547 + 3.0.550 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 046a1de253bbd20a2ee40958071330b316e91d6f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 4 Feb 2015 15:16:23 -0500 Subject: sync updates --- MediaBrowser.Api/MediaBrowser.Api.csproj | 1 + .../Session/SessionInfoWebSocketListener.cs | 3 +- MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs | 101 +++++++++++++++++++++ .../Net/BasePeriodicWebSocketListener.cs | 10 ++ MediaBrowser.Model/ApiClient/IApiClient.cs | 16 ++++ MediaBrowser.Model/ApiClient/IServerEvents.cs | 5 + MediaBrowser.Model/Sync/SyncJob.cs | 5 + .../Sync/SyncJobProcessor.cs | 6 +- .../Sync/SyncManager.cs | 26 +++++- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 13 files changed, 173 insertions(+), 12 deletions(-) create mode 100644 MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 06f65c448..552091280 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -130,6 +130,7 @@ + diff --git a/MediaBrowser.Api/Session/SessionInfoWebSocketListener.cs b/MediaBrowser.Api/Session/SessionInfoWebSocketListener.cs index 25130776e..8f68569b7 100644 --- a/MediaBrowser.Api/Session/SessionInfoWebSocketListener.cs +++ b/MediaBrowser.Api/Session/SessionInfoWebSocketListener.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Logging; diff --git a/MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs b/MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs new file mode 100644 index 000000000..906a52209 --- /dev/null +++ b/MediaBrowser.Api/Sync/SyncJobsWebSocketListener.cs @@ -0,0 +1,101 @@ +using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Sync; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Sync; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.Sync +{ + /// + /// Class SessionInfoWebSocketListener + /// + class SyncJobsWebSocketListener : BasePeriodicWebSocketListener, WebSocketListenerState> + { + /// + /// Gets the name. + /// + /// The name. + protected override string Name + { + get { return "SyncJobs"; } + } + + private readonly ISyncManager _syncManager; + private string _userId; + private string _targetId; + + public SyncJobsWebSocketListener(ILogger logger, ISyncManager syncManager) + : base(logger) + { + _syncManager = syncManager; + _syncManager.SyncJobCancelled += _syncManager_SyncJobCancelled; + _syncManager.SyncJobCreated += _syncManager_SyncJobCreated; + _syncManager.SyncJobUpdated += _syncManager_SyncJobUpdated; + } + + protected override void ParseMessageParams(string[] values) + { + base.ParseMessageParams(values); + + if (values.Length > 0) + { + _userId = values[0]; + } + + if (values.Length > 1) + { + _targetId = values[1]; + } + } + + void _syncManager_SyncJobUpdated(object sender, Model.Events.GenericEventArgs e) + { + SendData(false); + } + + void _syncManager_SyncJobCreated(object sender, Model.Events.GenericEventArgs e) + { + SendData(true); + } + + void _syncManager_SyncJobCancelled(object sender, Model.Events.GenericEventArgs e) + { + SendData(true); + } + + /// + /// Gets the data to send. + /// + /// The state. + /// Task{SystemInfo}. + protected override async Task> GetDataToSend(WebSocketListenerState state) + { + var jobs = await _syncManager.GetJobs(new SyncJobQuery + { + UserId = _userId, + TargetId = _targetId + + }).ConfigureAwait(false); + + return jobs.Items; + } + + protected override bool SendOnTimer + { + get + { + return false; + } + } + + protected override void Dispose(bool dispose) + { + _syncManager.SyncJobCancelled -= _syncManager_SyncJobCancelled; + _syncManager.SyncJobCreated -= _syncManager_SyncJobCreated; + _syncManager.SyncJobUpdated -= _syncManager_SyncJobUpdated; + + base.Dispose(dispose); + } + } +} diff --git a/MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs b/MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs index f1e371c1a..990d23970 100644 --- a/MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs +++ b/MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs @@ -93,6 +93,11 @@ namespace MediaBrowser.Controller.Net } } + protected virtual void ParseMessageParams(string[] values) + { + + } + /// /// Starts sending messages over a web socket /// @@ -104,6 +109,11 @@ namespace MediaBrowser.Controller.Net var dueTimeMs = long.Parse(vals[0], UsCulture); var periodMs = long.Parse(vals[1], UsCulture); + if (vals.Length > 2) + { + ParseMessageParams(vals.Skip(2).ToArray()); + } + var cancellationTokenSource = new CancellationTokenSource(); Logger.Info("{1} Begin transmitting over websocket to {0}", message.Connection.RemoteEndPoint, GetType().Name); diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index bcd1dfe12..9fe138a49 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -893,6 +893,22 @@ namespace MediaBrowser.Model.ApiClient /// if set to true [keep existing authentication]. void ChangeServerLocation(string address, bool keepExistingAuth = false); + /// + /// Starts the receiving synchronize jobs updates. + /// + /// The interval ms. + /// The user identifier. + /// The target identifier. + /// Task. + Task StartReceivingSyncJobsUpdates(int intervalMs, string userId, string targetId); + + /// + /// Stops the receiving synchronize jobs updates. + /// + /// The interval ms. + /// Task. + Task StopReceivingSyncJobsUpdates(int intervalMs); + /// /// Starts the receiving session updates. /// diff --git a/MediaBrowser.Model/ApiClient/IServerEvents.cs b/MediaBrowser.Model/ApiClient/IServerEvents.cs index cc51ce4c6..311cb8b21 100644 --- a/MediaBrowser.Model/ApiClient/IServerEvents.cs +++ b/MediaBrowser.Model/ApiClient/IServerEvents.cs @@ -7,6 +7,7 @@ using MediaBrowser.Model.Sync; using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Updates; using System; +using System.Collections.Generic; namespace MediaBrowser.Model.ApiClient { @@ -139,5 +140,9 @@ namespace MediaBrowser.Model.ApiClient /// Occurs when [synchronize job cancelled]. /// event EventHandler> SyncJobCancelled; + /// + /// Occurs when [synchronize jobs updated]. + /// + event EventHandler>> SyncJobsUpdated; } } diff --git a/MediaBrowser.Model/Sync/SyncJob.cs b/MediaBrowser.Model/Sync/SyncJob.cs index 5737ed3bb..93e73d22e 100644 --- a/MediaBrowser.Model/Sync/SyncJob.cs +++ b/MediaBrowser.Model/Sync/SyncJob.cs @@ -16,6 +16,11 @@ namespace MediaBrowser.Model.Sync /// The device identifier. public string TargetId { get; set; } /// + /// Gets or sets the name of the target. + /// + /// The name of the target. + public string TargetName { get; set; } + /// /// Gets or sets the quality. /// /// The quality. diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 6ef74d953..c373faf1e 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -144,7 +144,7 @@ namespace MediaBrowser.Server.Implementations.Sync return UpdateJobStatus(job, result.Items.ToList()); } - private Task UpdateJobStatus(SyncJob job, List jobItems) + private async Task UpdateJobStatus(SyncJob job, List jobItems) { job.ItemCount = jobItems.Count; @@ -204,7 +204,9 @@ namespace MediaBrowser.Server.Implementations.Sync job.Status = SyncJobStatus.Transferring; } - return _syncRepo.Update(job); + await _syncRepo.Update(job).ConfigureAwait(false); + + ((SyncManager)_syncManager).OnSyncJobUpdated(job); } public async Task> GetItemsForSync(SyncCategory? category, string parentId, IEnumerable itemIds, User user, bool unwatchedOnly) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 627e94eb1..6eef268b9 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -174,7 +174,7 @@ namespace MediaBrowser.Server.Implementations.Sync return returnResult; } - public Task UpdateJob(SyncJob job) + public async Task UpdateJob(SyncJob job) { // Get fresh from the db and only update the fields that are supported to be changed. var instance = _repo.GetJob(job.Id); @@ -185,7 +185,21 @@ namespace MediaBrowser.Server.Implementations.Sync instance.SyncNewContent = job.SyncNewContent; instance.ItemLimit = job.ItemLimit; - return _repo.Update(instance); + await _repo.Update(instance).ConfigureAwait(false); + + OnSyncJobUpdated(instance); + } + + internal void OnSyncJobUpdated(SyncJob job) + { + if (SyncJobUpdated != null) + { + EventHelper.FireEventIfNotNull(SyncJobUpdated, this, new GenericEventArgs + { + Argument = job + + }, _logger); + } } public async Task> GetJobs(SyncJobQuery query) @@ -202,6 +216,14 @@ namespace MediaBrowser.Server.Implementations.Sync private async Task FillMetadata(SyncJob job) { + var target = GetSyncTargets(job.UserId) + .FirstOrDefault(i => string.Equals(i.Id, job.TargetId, StringComparison.OrdinalIgnoreCase)); + + if (target != null) + { + job.TargetName = target.Name; + } + var item = job.RequestedItemIds .Select(_libraryManager.GetItemById) .FirstOrDefault(i => i != null); diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 37c4d9ba4..4b104fe25 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.556 + 3.0.559 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index a2472fb84..40a395a63 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.556 + 3.0.559 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 24f94d22e..17597b582 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.556 + 3.0.559 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index b50c59b59..c9a635f64 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.556 + 3.0.559 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 1f1852f3cbe2a7899aea0d306a77d2eedb0434fc Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 4 Feb 2015 22:01:37 -0500 Subject: sync updates --- MediaBrowser.Api/MediaBrowser.Api.csproj | 1 + MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs | 120 +++++++++++++++++++++ MediaBrowser.Api/Sync/SyncService.cs | 4 +- .../Entities/UserViewBuilder.cs | 5 + .../MediaEncoding/EncodingJobOptions.cs | 7 +- MediaBrowser.Controller/Sync/ISyncManager.cs | 8 +- .../MediaBrowser.Model.Portable.csproj | 3 + .../MediaBrowser.Model.net35.csproj | 3 + MediaBrowser.Model/ApiClient/IApiClient.cs | 15 +++ MediaBrowser.Model/ApiClient/IServerEvents.cs | 4 + MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + MediaBrowser.Model/Sync/CompleteSyncJobInfo.cs | 15 +++ MediaBrowser.Model/Sync/SyncJobItemStatus.cs | 11 +- MediaBrowser.Model/Sync/SyncJobStatus.cs | 11 +- .../Dto/DtoService.cs | 3 +- .../Library/LibraryManager.cs | 5 + .../Localization/JavaScript/javascript.json | 5 +- .../Sync/SyncJobProcessor.cs | 55 ++++++---- .../Sync/SyncManager.cs | 47 ++++++-- .../Sync/SyncScheduledTask.cs | 2 +- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 24 files changed, 280 insertions(+), 57 deletions(-) create mode 100644 MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs create mode 100644 MediaBrowser.Model/Sync/CompleteSyncJobInfo.cs (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 552091280..23cdf8b7a 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -130,6 +130,7 @@ + diff --git a/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs b/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs new file mode 100644 index 000000000..61a26d160 --- /dev/null +++ b/MediaBrowser.Api/Sync/SyncJobWebSocketListener.cs @@ -0,0 +1,120 @@ +using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Sync; +using MediaBrowser.Model.Events; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Sync; +using System; +using System.Linq; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.Sync +{ + /// + /// Class SessionInfoWebSocketListener + /// + class SyncJobWebSocketListener : BasePeriodicWebSocketListener + { + /// + /// Gets the name. + /// + /// The name. + protected override string Name + { + get { return "SyncJob"; } + } + + private readonly ISyncManager _syncManager; + private string _jobId; + + public SyncJobWebSocketListener(ILogger logger, ISyncManager syncManager) + : base(logger) + { + _syncManager = syncManager; + _syncManager.SyncJobCancelled += _syncManager_SyncJobCancelled; + _syncManager.SyncJobUpdated += _syncManager_SyncJobUpdated; + _syncManager.SyncJobItemCreated += _syncManager_SyncJobItemCreated; + _syncManager.SyncJobItemUpdated += _syncManager_SyncJobItemUpdated; + } + + void _syncManager_SyncJobItemUpdated(object sender, GenericEventArgs e) + { + if (string.Equals(e.Argument.Id, _jobId, StringComparison.Ordinal)) + { + SendData(false); + } + } + + void _syncManager_SyncJobItemCreated(object sender, GenericEventArgs e) + { + if (string.Equals(e.Argument.Id, _jobId, StringComparison.Ordinal)) + { + SendData(true); + } + } + + protected override void ParseMessageParams(string[] values) + { + base.ParseMessageParams(values); + + if (values.Length > 0) + { + _jobId = values[0]; + } + } + + void _syncManager_SyncJobUpdated(object sender, GenericEventArgs e) + { + if (string.Equals(e.Argument.Id, _jobId, StringComparison.Ordinal)) + { + SendData(false); + } + } + + void _syncManager_SyncJobCancelled(object sender, GenericEventArgs e) + { + if (string.Equals(e.Argument.Id, _jobId, StringComparison.Ordinal)) + { + SendData(true); + } + } + + /// + /// Gets the data to send. + /// + /// The state. + /// Task{SystemInfo}. + protected override Task GetDataToSend(WebSocketListenerState state) + { + var job = _syncManager.GetJob(_jobId); + var items = _syncManager.GetJobItems(new SyncJobItemQuery + { + AddMetadata = true, + JobId = _jobId + }); + + var info = new CompleteSyncJobInfo + { + Job = job, + JobItems = items.Items.ToList() + }; + + return Task.FromResult(info); + } + + protected override bool SendOnTimer + { + get + { + return false; + } + } + + protected override void Dispose(bool dispose) + { + _syncManager.SyncJobCancelled -= _syncManager_SyncJobCancelled; + _syncManager.SyncJobUpdated -= _syncManager_SyncJobUpdated; + + base.Dispose(dispose); + } + } +} diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index 93d8a8d0a..13c716136 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -206,7 +206,7 @@ namespace MediaBrowser.Api.Sync { var jobItem = _syncManager.GetJobItem(request.Id); - if (jobItem.Status != SyncJobItemStatus.Transferring) + if (jobItem.Status < SyncJobItemStatus.ReadyToTransfer) { throw new ArgumentException("The job item is not yet ready for transfer."); } @@ -286,7 +286,7 @@ namespace MediaBrowser.Api.Sync { var jobItem = _syncManager.GetJobItem(request.Id); - if (jobItem.Status != SyncJobItemStatus.Transferring) + if (jobItem.Status < SyncJobItemStatus.ReadyToTransfer) { throw new ArgumentException("The job item is not yet ready for transfer."); } diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index a24a42535..318c5fff3 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -846,6 +846,11 @@ namespace MediaBrowser.Controller.Entities BaseItem queryParent, User user) { + if (items == null) + { + throw new ArgumentNullException("items"); + } + if (CollapseBoxSetItems(query, queryParent, user)) { items = BaseItem.CollectionManager.CollapseItemsWithinBoxSets(items, user); diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs b/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs index ad9ab90a0..fe0fb3295 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingJobOptions.cs @@ -81,12 +81,17 @@ namespace MediaBrowser.Controller.MediaEncoding VideoCodec = info.VideoCodec; VideoBitRate = info.VideoBitrate; AudioStreamIndex = info.AudioStreamIndex; - SubtitleStreamIndex = info.SubtitleStreamIndex; MaxRefFrames = info.MaxRefFrames; MaxVideoBitDepth = info.MaxVideoBitDepth; SubtitleMethod = info.SubtitleDeliveryMethod; Cabac = info.Cabac; Context = info.Context; + + if (info.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode || + info.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Embed) + { + SubtitleStreamIndex = info.SubtitleStreamIndex; + } } } } diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs index 362b9c3bc..dc15a394e 100644 --- a/MediaBrowser.Controller/Sync/ISyncManager.cs +++ b/MediaBrowser.Controller/Sync/ISyncManager.cs @@ -15,7 +15,9 @@ namespace MediaBrowser.Controller.Sync event EventHandler> SyncJobCreated; event EventHandler> SyncJobCancelled; event EventHandler> SyncJobUpdated; - + event EventHandler> SyncJobItemUpdated; + event EventHandler> SyncJobItemCreated; + /// /// Creates the job. /// @@ -35,7 +37,7 @@ namespace MediaBrowser.Controller.Sync /// The query. /// QueryResult<SyncJobItem>. QueryResult GetJobItems(SyncJobItemQuery query); - + /// /// Gets the job. /// @@ -63,7 +65,7 @@ namespace MediaBrowser.Controller.Sync /// The identifier. /// Task. Task CancelJobItem(string id); - + /// /// Cancels the job. /// diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 310170b5f..ba3065bc9 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -1043,6 +1043,9 @@ Session\UserDataChangeInfo.cs + + Sync\CompleteSyncJobInfo.cs + Sync\DeviceFileInfo.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 31d2e6470..8d22f25a9 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -1002,6 +1002,9 @@ Session\UserDataChangeInfo.cs + + Sync\CompleteSyncJobInfo.cs + Sync\DeviceFileInfo.cs diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 9fe138a49..a7d11d507 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -893,6 +893,21 @@ namespace MediaBrowser.Model.ApiClient /// if set to true [keep existing authentication]. void ChangeServerLocation(string address, bool keepExistingAuth = false); + /// + /// Starts the receiving synchronize job updates. + /// + /// The interval ms. + /// The job identifier. + /// Task. + Task StartReceivingSyncJobUpdates(int intervalMs, string jobId); + + /// + /// Stops the receiving synchronize job updates. + /// + /// The interval ms. + /// Task. + Task StopReceivingSyncJobUpdates(int intervalMs); + /// /// Starts the receiving synchronize jobs updates. /// diff --git a/MediaBrowser.Model/ApiClient/IServerEvents.cs b/MediaBrowser.Model/ApiClient/IServerEvents.cs index 311cb8b21..ae2d5d323 100644 --- a/MediaBrowser.Model/ApiClient/IServerEvents.cs +++ b/MediaBrowser.Model/ApiClient/IServerEvents.cs @@ -144,5 +144,9 @@ namespace MediaBrowser.Model.ApiClient /// Occurs when [synchronize jobs updated]. /// event EventHandler>> SyncJobsUpdated; + /// + /// Occurs when [synchronize job updated]. + /// + event EventHandler> SyncJobUpdated; } } diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 0962cbe7a..c8e09dd82 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -368,6 +368,7 @@ + diff --git a/MediaBrowser.Model/Sync/CompleteSyncJobInfo.cs b/MediaBrowser.Model/Sync/CompleteSyncJobInfo.cs new file mode 100644 index 000000000..52d3fab3c --- /dev/null +++ b/MediaBrowser.Model/Sync/CompleteSyncJobInfo.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Model.Sync +{ + public class CompleteSyncJobInfo + { + public SyncJob Job { get; set; } + public List JobItems { get; set; } + + public CompleteSyncJobInfo() + { + JobItems = new List(); + } + } +} diff --git a/MediaBrowser.Model/Sync/SyncJobItemStatus.cs b/MediaBrowser.Model/Sync/SyncJobItemStatus.cs index 913f9e259..c4e23c63c 100644 --- a/MediaBrowser.Model/Sync/SyncJobItemStatus.cs +++ b/MediaBrowser.Model/Sync/SyncJobItemStatus.cs @@ -5,10 +5,11 @@ namespace MediaBrowser.Model.Sync { Queued = 0, Converting = 1, - Transferring = 2, - Synced = 3, - RemovedFromDevice = 4, - Failed = 5, - Cancelled = 6 + ReadyToTransfer = 2, + Transferring = 3, + Synced = 4, + RemovedFromDevice = 5, + Failed = 6, + Cancelled = 7 } } diff --git a/MediaBrowser.Model/Sync/SyncJobStatus.cs b/MediaBrowser.Model/Sync/SyncJobStatus.cs index 6c0068a8a..ac211a32a 100644 --- a/MediaBrowser.Model/Sync/SyncJobStatus.cs +++ b/MediaBrowser.Model/Sync/SyncJobStatus.cs @@ -5,10 +5,11 @@ namespace MediaBrowser.Model.Sync { Queued = 0, Converting = 1, - Transferring = 2, - Completed = 3, - CompletedWithError = 4, - Failed = 5, - Cancelled = 6 + ReadyToTransfer = 2, + Transferring = 3, + Completed = 4, + CompletedWithError = 5, + Failed = 6, + Cancelled = 7 } } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index 61c24cf54..7b36321f1 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -162,7 +162,8 @@ namespace MediaBrowser.Server.Implementations.Dto { SyncJobItemStatus.Converting, SyncJobItemStatus.Queued, - SyncJobItemStatus.Transferring + SyncJobItemStatus.Transferring, + SyncJobItemStatus.ReadyToTransfer } }); diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index d7ea444a3..29871d928 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -517,6 +517,11 @@ namespace MediaBrowser.Server.Implementations.Library public IEnumerable ReplaceVideosWithPrimaryVersions(IEnumerable items) { + if (items == null) + { + throw new ArgumentNullException("items"); + } + var dict = new Dictionary(); foreach (var item in items) diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index 5e881e3b6..3fddf274c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -53,6 +53,7 @@ "SyncJobStatusFailed": "Failed", "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusReadyToTransfer": "Ready to Transfer", "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", @@ -216,8 +217,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", - "ValueItemCount": "{0} item", - "ValueItemCountPlural": "{0} items", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index c373faf1e..e418448db 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -29,7 +29,7 @@ namespace MediaBrowser.Server.Implementations.Sync { private readonly ILibraryManager _libraryManager; private readonly ISyncRepository _syncRepo; - private readonly ISyncManager _syncManager; + private readonly SyncManager _syncManager; private readonly ILogger _logger; private readonly IUserManager _userManager; private readonly ITVSeriesManager _tvSeriesManager; @@ -38,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly IConfigurationManager _config; private readonly IFileSystem _fileSystem; - public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder, IConfigurationManager config, IFileSystem fileSystem) + public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo, SyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager, IMediaEncoder mediaEncoder, ISubtitleEncoder subtitleEncoder, IConfigurationManager config, IFileSystem fileSystem) { _libraryManager = libraryManager; _syncRepo = syncRepo; @@ -106,6 +106,7 @@ namespace MediaBrowser.Server.Implementations.Sync }; await _syncRepo.Create(jobItem).ConfigureAwait(false); + _syncManager.OnSyncJobItemCreated(jobItem); jobItems.Add(jobItem); } @@ -184,11 +185,19 @@ namespace MediaBrowser.Server.Implementations.Sync { job.Status = SyncJobStatus.Cancelled; } + else if (jobItems.All(i => i.Status == SyncJobItemStatus.ReadyToTransfer)) + { + job.Status = SyncJobStatus.ReadyToTransfer; + } + else if (jobItems.All(i => i.Status == SyncJobItemStatus.Transferring)) + { + job.Status = SyncJobStatus.Transferring; + } else if (jobItems.Any(i => i.Status == SyncJobItemStatus.Converting)) { job.Status = SyncJobStatus.Converting; } - else if (pct >= 100) + else if (jobItems.All(i => i.Status == SyncJobItemStatus.Cancelled || i.Status == SyncJobItemStatus.Failed || i.Status == SyncJobItemStatus.Synced || i.Status == SyncJobItemStatus.RemovedFromDevice)) { if (jobItems.Any(i => i.Status == SyncJobItemStatus.Failed)) { @@ -201,12 +210,12 @@ namespace MediaBrowser.Server.Implementations.Sync } else { - job.Status = SyncJobStatus.Transferring; + job.Status = SyncJobStatus.Queued; } await _syncRepo.Update(job).ConfigureAwait(false); - ((SyncManager)_syncManager).OnSyncJobUpdated(job); + _syncManager.OnSyncJobUpdated(job); } public async Task> GetItemsForSync(SyncCategory? category, string parentId, IEnumerable itemIds, User user, bool unwatchedOnly) @@ -414,7 +423,7 @@ namespace MediaBrowser.Server.Implementations.Sync { jobItem.Status = SyncJobItemStatus.Failed; _logger.Error("Unable to locate library item for JobItem {0}, ItemId {1}", jobItem.Id, jobItem.ItemId); - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); return; } @@ -423,7 +432,7 @@ namespace MediaBrowser.Server.Implementations.Sync { jobItem.Status = SyncJobItemStatus.Failed; _logger.Error("Unable to locate SyncTarget for JobItem {0}, SyncTargetId {1}", jobItem.Id, jobItem.TargetId); - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); return; } @@ -490,7 +499,7 @@ namespace MediaBrowser.Server.Implementations.Sync if (streamInfo.PlayMethod == PlayMethod.Transcode) { // Save the job item now since conversion could take a while - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); await UpdateJobStatus(job).ConfigureAwait(false); try @@ -504,7 +513,7 @@ namespace MediaBrowser.Server.Implementations.Sync if ((DateTime.UtcNow - lastJobUpdate).TotalSeconds >= DatabaseProgressUpdateIntervalSeconds) { jobItem.Progress = pct / 2; - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); await UpdateJobStatus(job).ConfigureAwait(false); } }); @@ -528,7 +537,7 @@ namespace MediaBrowser.Server.Implementations.Sync if (jobItem.Status == SyncJobItemStatus.Failed || jobItem.Status == SyncJobItemStatus.Queued) { - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); return; } @@ -555,14 +564,14 @@ namespace MediaBrowser.Server.Implementations.Sync if (externalSubs.Count > 0) { // Save the job item now since conversion could take a while - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); await ConvertSubtitles(jobItem, externalSubs, streamInfo, cancellationToken).ConfigureAwait(false); } jobItem.Progress = 50; - jobItem.Status = SyncJobItemStatus.Transferring; - await _syncRepo.Update(jobItem).ConfigureAwait(false); + jobItem.Status = SyncJobItemStatus.ReadyToTransfer; + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); } private bool RequiresExtraction(SubtitleStreamInfo stream, MediaSourceInfo mediaSource) @@ -666,7 +675,7 @@ namespace MediaBrowser.Server.Implementations.Sync } jobItem.Status = SyncJobItemStatus.Converting; - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); await UpdateJobStatus(job).ConfigureAwait(false); try @@ -680,7 +689,7 @@ namespace MediaBrowser.Server.Implementations.Sync if ((DateTime.UtcNow - lastJobUpdate).TotalSeconds >= DatabaseProgressUpdateIntervalSeconds) { jobItem.Progress = pct / 2; - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); await UpdateJobStatus(job).ConfigureAwait(false); } }); @@ -704,7 +713,7 @@ namespace MediaBrowser.Server.Implementations.Sync if (jobItem.Status == SyncJobItemStatus.Failed || jobItem.Status == SyncJobItemStatus.Queued) { - await _syncRepo.Update(jobItem).ConfigureAwait(false); + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); return; } @@ -729,8 +738,8 @@ namespace MediaBrowser.Server.Implementations.Sync } jobItem.Progress = 50; - jobItem.Status = SyncJobItemStatus.Transferring; - await _syncRepo.Update(jobItem).ConfigureAwait(false); + jobItem.Status = SyncJobItemStatus.ReadyToTransfer; + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); } private async Task Sync(SyncJobItem jobItem, Photo item, DeviceProfile profile, CancellationToken cancellationToken) @@ -738,17 +747,17 @@ namespace MediaBrowser.Server.Implementations.Sync jobItem.OutputPath = item.Path; jobItem.Progress = 50; - jobItem.Status = SyncJobItemStatus.Transferring; - await _syncRepo.Update(jobItem).ConfigureAwait(false); + jobItem.Status = SyncJobItemStatus.ReadyToTransfer; + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); } private async Task SyncGeneric(SyncJobItem jobItem, BaseItem item, CancellationToken cancellationToken) { jobItem.OutputPath = item.Path; - + jobItem.Progress = 50; - jobItem.Status = SyncJobItemStatus.Transferring; - await _syncRepo.Update(jobItem).ConfigureAwait(false); + jobItem.Status = SyncJobItemStatus.ReadyToTransfer; + await _syncManager.UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); } private async Task DownloadFile(SyncJobItem jobItem, MediaSourceInfo mediaSource, CancellationToken cancellationToken) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 6eef268b9..eecbd78d1 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -52,6 +52,8 @@ namespace MediaBrowser.Server.Implementations.Sync public event EventHandler> SyncJobCreated; public event EventHandler> SyncJobCancelled; public event EventHandler> SyncJobUpdated; + public event EventHandler> SyncJobItemUpdated; + public event EventHandler> SyncJobItemCreated; public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func dtoService, IApplicationHost appHost, ITVSeriesManager tvSeriesManager, Func mediaEncoder, IFileSystem fileSystem, Func subtitleEncoder, IConfigurationManager config) { @@ -202,6 +204,32 @@ namespace MediaBrowser.Server.Implementations.Sync } } + internal async Task UpdateSyncJobItemInternal(SyncJobItem jobItem) + { + await _repo.Update(jobItem).ConfigureAwait(false); + + if (SyncJobUpdated != null) + { + EventHelper.FireEventIfNotNull(SyncJobItemUpdated, this, new GenericEventArgs + { + Argument = jobItem + + }, _logger); + } + } + + internal void OnSyncJobItemCreated(SyncJobItem job) + { + if (SyncJobUpdated != null) + { + EventHelper.FireEventIfNotNull(SyncJobItemCreated, this, new GenericEventArgs + { + Argument = job + + }, _logger); + } + } + public async Task> GetJobs(SyncJobQuery query) { var result = _repo.GetJobs(query); @@ -504,7 +532,7 @@ namespace MediaBrowser.Server.Implementations.Sync } } - await _repo.Update(jobItem).ConfigureAwait(false); + await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); var processor = GetSyncJobProcessor(); @@ -610,7 +638,10 @@ namespace MediaBrowser.Server.Implementations.Sync var jobItemResult = GetJobItems(new SyncJobItemQuery { TargetId = targetId, - Statuses = new List { SyncJobItemStatus.Transferring } + Statuses = new List + { + SyncJobItemStatus.ReadyToTransfer + } }); return jobItemResult.Items @@ -669,7 +700,7 @@ namespace MediaBrowser.Server.Implementations.Sync { // Content is no longer on the device jobItem.Status = SyncJobItemStatus.RemovedFromDevice; - await _repo.Update(jobItem).ConfigureAwait(false); + await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); } } @@ -761,7 +792,7 @@ namespace MediaBrowser.Server.Implementations.Sync jobItem.Progress = 0; jobItem.IsMarkedForRemoval = false; - await _repo.Update(jobItem).ConfigureAwait(false); + await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); var processor = GetSyncJobProcessor(); @@ -772,7 +803,7 @@ namespace MediaBrowser.Server.Implementations.Sync { var jobItem = _repo.GetJobItem(id); - if (jobItem.Status != SyncJobItemStatus.Queued && jobItem.Status != SyncJobItemStatus.Transferring && jobItem.Status != SyncJobItemStatus.Converting) + if (jobItem.Status != SyncJobItemStatus.Queued && jobItem.Status != SyncJobItemStatus.ReadyToTransfer && jobItem.Status != SyncJobItemStatus.Converting) { throw new ArgumentException("Operation is not valid for this job item"); } @@ -781,7 +812,7 @@ namespace MediaBrowser.Server.Implementations.Sync jobItem.Progress = 0; jobItem.IsMarkedForRemoval = true; - await _repo.Update(jobItem).ConfigureAwait(false); + await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); var processor = GetSyncJobProcessor(); @@ -814,7 +845,7 @@ namespace MediaBrowser.Server.Implementations.Sync jobItem.IsMarkedForRemoval = true; - await _repo.Update(jobItem).ConfigureAwait(false); + await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); var processor = GetSyncJobProcessor(); @@ -832,7 +863,7 @@ namespace MediaBrowser.Server.Implementations.Sync jobItem.IsMarkedForRemoval = false; - await _repo.Update(jobItem).ConfigureAwait(false); + await UpdateSyncJobItemInternal(jobItem).ConfigureAwait(false); var processor = GetSyncJobProcessor(); diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs index b68a97817..ccc9508e8 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs @@ -60,7 +60,7 @@ namespace MediaBrowser.Server.Implementations.Sync public Task Execute(CancellationToken cancellationToken, IProgress progress) { - return new SyncJobProcessor(_libraryManager, _syncRepo, _syncManager, _logger, _userManager, _tvSeriesManager, _mediaEncoder, _subtitleEncoder, _config, _fileSystem) + return new SyncJobProcessor(_libraryManager, _syncRepo, (SyncManager)_syncManager, _logger, _userManager, _tvSeriesManager, _mediaEncoder, _subtitleEncoder, _config, _fileSystem) .Sync(progress, cancellationToken); } diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 4b104fe25..1a65fba67 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.559 + 3.0.560 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 40a395a63..d28f98aff 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.559 + 3.0.560 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 17597b582..d4b030ba1 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.559 + 3.0.560 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index c9a635f64..e5b7a27ba 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.559 + 3.0.560 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From bde06629da72a2418921b2e300fdd996f0119b5a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 5 Feb 2015 16:14:08 -0500 Subject: update translations --- .../Entities/UserViewBuilder.cs | 2 +- .../MediaBrowser.Controller.csproj | 1 + MediaBrowser.Controller/Sync/ICloudSyncProvider.cs | 9 +- .../Sync/IServerSyncProvider.cs | 18 +- MediaBrowser.Controller/Sync/SyncAccount.cs | 28 + MediaBrowser.Model/ApiClient/IApiClient.cs | 6 +- .../Localization/JavaScript/ar.json | 9 +- .../Localization/JavaScript/bg_BG.json | 9 +- .../Localization/JavaScript/ca.json | 9 +- .../Localization/JavaScript/cs.json | 9 +- .../Localization/JavaScript/da.json | 9 +- .../Localization/JavaScript/de.json | 29 +- .../Localization/JavaScript/el.json | 9 +- .../Localization/JavaScript/en_GB.json | 9 +- .../Localization/JavaScript/en_US.json | 9 +- .../Localization/JavaScript/es.json | 9 +- .../Localization/JavaScript/es_MX.json | 13 +- .../Localization/JavaScript/fi.json | 9 +- .../Localization/JavaScript/fr.json | 13 +- .../Localization/JavaScript/he.json | 9 +- .../Localization/JavaScript/hr.json | 9 +- .../Localization/JavaScript/it.json | 69 +- .../Localization/JavaScript/kk.json | 13 +- .../Localization/JavaScript/ms.json | 9 +- .../Localization/JavaScript/nb.json | 9 +- .../Localization/JavaScript/nl.json | 13 +- .../Localization/JavaScript/pl.json | 9 +- .../Localization/JavaScript/pt_BR.json | 9 +- .../Localization/JavaScript/pt_PT.json | 9 +- .../Localization/JavaScript/ru.json | 13 +- .../Localization/JavaScript/sl_SI.json | 720 +++++++++++ .../Localization/JavaScript/sv.json | 9 +- .../Localization/JavaScript/tr.json | 9 +- .../Localization/JavaScript/uk.json | 9 +- .../Localization/JavaScript/vi.json | 9 +- .../Localization/JavaScript/zh_CN.json | 13 +- .../Localization/JavaScript/zh_TW.json | 9 +- .../Localization/LocalizationManager.cs | 1 + .../Localization/Server/de.json | 30 +- .../Localization/Server/en_GB.json | 2 +- .../Localization/Server/it.json | 24 +- .../Localization/Server/kk.json | 4 +- .../Localization/Server/ru.json | 4 +- .../Localization/Server/sl_SI.json | 1356 ++++++++++++++++++++ .../MediaBrowser.Server.Implementations.csproj | 2 + .../Sync/CloudSyncProvider.cs | 24 +- .../Sync/MediaSync.cs | 4 +- 47 files changed, 2434 insertions(+), 175 deletions(-) create mode 100644 MediaBrowser.Controller/Sync/SyncAccount.cs create mode 100644 MediaBrowser.Server.Implementations/Localization/JavaScript/sl_SI.json create mode 100644 MediaBrowser.Server.Implementations/Localization/Server/sl_SI.json (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index 318c5fff3..b5ca053ec 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -417,7 +417,7 @@ namespace MediaBrowser.Controller.Entities ParentId = (parent == null ? null : parent.Id.ToString("N")), GroupItems = true - }).Select(i => i.Item1); + }).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null); query.SortBy = new string[] { }; diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 27beabcc1..e8223ef10 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -345,6 +345,7 @@ + diff --git a/MediaBrowser.Controller/Sync/ICloudSyncProvider.cs b/MediaBrowser.Controller/Sync/ICloudSyncProvider.cs index f93360c64..dae7faef8 100644 --- a/MediaBrowser.Controller/Sync/ICloudSyncProvider.cs +++ b/MediaBrowser.Controller/Sync/ICloudSyncProvider.cs @@ -1,4 +1,5 @@ - +using System.Collections.Generic; + namespace MediaBrowser.Controller.Sync { public interface ICloudSyncProvider @@ -8,5 +9,11 @@ namespace MediaBrowser.Controller.Sync /// /// The name. string Name { get; } + + /// + /// Gets the synchronize targets. + /// + /// IEnumerable<SyncTarget>. + IEnumerable GetSyncAccounts(); } } diff --git a/MediaBrowser.Controller/Sync/IServerSyncProvider.cs b/MediaBrowser.Controller/Sync/IServerSyncProvider.cs index 175fda647..8ef54fd43 100644 --- a/MediaBrowser.Controller/Sync/IServerSyncProvider.cs +++ b/MediaBrowser.Controller/Sync/IServerSyncProvider.cs @@ -31,22 +31,12 @@ namespace MediaBrowser.Controller.Sync /// /// The server identifier. /// The item identifier. - /// The path. + /// The path parts. + /// The name. + /// Type of the file. /// The target. /// The cancellation token. /// Task. - Task TransferItemFile(string serverId, string itemId, string path, SyncTarget target, CancellationToken cancellationToken); - - /// - /// Transfers the related file. - /// - /// The server identifier. - /// The item identifier. - /// The path. - /// The type. - /// The target. - /// The cancellation token. - /// Task. - Task TransferRelatedFile(string serverId, string itemId, string path, ItemFileType type, SyncTarget target, CancellationToken cancellationToken); + Task TransferItemFile(string serverId, string itemId, string[] pathParts, string name, ItemFileType fileType, SyncTarget target, CancellationToken cancellationToken); } } diff --git a/MediaBrowser.Controller/Sync/SyncAccount.cs b/MediaBrowser.Controller/Sync/SyncAccount.cs new file mode 100644 index 000000000..882e948d1 --- /dev/null +++ b/MediaBrowser.Controller/Sync/SyncAccount.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Controller.Sync +{ + public class SyncAccount + { + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } + /// + /// Gets or sets the identifier. + /// + /// The identifier. + public string Id { get; set; } + /// + /// Gets or sets the user identifier. + /// + /// The user identifier. + public List UserIds { get; set; } + + public SyncAccount() + { + UserIds = new List(); + } + } +} diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index a7d11d507..03802fc28 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -904,9 +904,8 @@ namespace MediaBrowser.Model.ApiClient /// /// Stops the receiving synchronize job updates. /// - /// The interval ms. /// Task. - Task StopReceivingSyncJobUpdates(int intervalMs); + Task StopReceivingSyncJobUpdates(); /// /// Starts the receiving synchronize jobs updates. @@ -920,9 +919,8 @@ namespace MediaBrowser.Model.ApiClient /// /// Stops the receiving synchronize jobs updates. /// - /// The interval ms. /// Task. - Task StopReceivingSyncJobsUpdates(int intervalMs); + Task StopReceivingSyncJobsUpdates(); /// /// Starts the receiving session updates. diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json index 2461ec160..799c9f5dd 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "\u062a\u062e\u0632\u064a\u0646", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/bg_BG.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/bg_BG.json index 9e0d6ee9e..574d37a35 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/bg_BG.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/bg_BG.json @@ -49,8 +49,11 @@ "ButtonHelp": "\u041f\u043e\u043c\u043e\u0449", "ButtonSave": "\u0417\u0430\u043f\u043e\u043c\u043d\u0438", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json index ad823b99b..1477f0abe 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Save", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json index 7af1d06c4..91b00084d 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Ulo\u017eit", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Aktualizujte te\u010f", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json index 93f235703..6bf49ebbc 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Gem", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json index 6d1ac2939..111cb9e5e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json @@ -14,12 +14,12 @@ "FileReadError": "Beim Lesen der Datei ist ein Fehler aufgetreten.", "DeleteUser": "Benutzer l\u00f6schen", "DeleteUserConfirmation": "M\u00f6chtest du {0} wirklich l\u00f6schen?", - "PasswordResetHeader": "Reset Password", + "PasswordResetHeader": "Passwort zur\u00fccksetzen", "PasswordResetComplete": "Das Passwort wurde zur\u00fcckgesetzt.", - "PinCodeResetComplete": "The pin code has been reset.", + "PinCodeResetComplete": "Der PIN wurde zur\u00fcckgesetzt", "PasswordResetConfirmation": "M\u00f6chtest du das Passwort wirklich zur\u00fccksetzen?", - "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", - "HeaderPinCodeReset": "Reset Pin Code", + "PinCodeResetConfirmation": "Sind Sie sich sicher, dass Sie Ihren PIN Code zur\u00fccksetzen m\u00f6chten?", + "HeaderPinCodeReset": "PIN Code zur\u00fccksetzen", "PasswordSaved": "Passwort gespeichert", "PasswordMatchError": "Die Passw\u00f6rter m\u00fcssen \u00fcbereinstimmen.", "OptionRelease": "Offizielles Release", @@ -48,10 +48,13 @@ "LabelFailed": "(fehlgeschlagen)", "ButtonHelp": "Hilfe", "ButtonSave": "Speichern", - "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", - "SyncJobStatusCompleted": "Synced", - "SyncJobStatusCompletedWithError": "Synced with errors", + "SyncJobStatusQueued": "Warten", + "SyncJobStatusConverting": "Konvertiere", + "SyncJobStatusFailed": "Fehlgeschlagen", + "SyncJobStatusCancelled": "Abgebrochen", + "SyncJobStatusCompleted": "Synchronisiert", + "SyncJobStatusTransferring": "\u00dcbertrage", + "SyncJobStatusCompletedWithError": "Synchronisation mit Fehler", "LabelCollection": "Sammlung", "HeaderAddToCollection": "Zur Sammlung hinzuf\u00fcgen", "NewCollectionNameExample": "Beispiel: Star Wars Collection", @@ -89,9 +92,9 @@ "LabelFree": "Frei", "HeaderSelectAudio": "W\u00e4hle Audio", "HeaderSelectSubtitles": "W\u00f6hle Untertitel", - "ButtonMarkForRemoval": "Zur L\u00f6schung vom Ger\u00e4t markieren", - "ButtonUnmarkForRemoval": "Markierung zur L\u00f6schung vom Ger\u00e4t aufheben", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "ButtonMarkForRemoval": "Entferne von Ger\u00e4t", + "ButtonUnmarkForRemoval": "Abbrechen von Entfernen von Ger\u00e4t", + "LabelSyncQualityHelp": "Verwenden Sie \"Hohe Qualit\u00e4t\" f\u00fcr die maximale vom Ger\u00e4t unterst\u00fctzte Qualit\u00e4t. Mittlere und geringe Qualit\u00e4t werden die erlaubte Datenrate reduzieren.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Erzwungen)", "LabelDefaultForcedStream": "(Standard\/Erzwungen)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Bist du dir sicher Media Browser Server neustarten zu wollen?", "MessageConfirmShutdown": "Bist du dir sicher Media Browser Server herunterfahren zu wollen?", "ButtonUpdateNow": "Jetzt aktualisieren", + "ValueItemCount": "{0} Eintrag", + "ValueItemCountPlural": "{0} Eintr\u00e4ge", "NewVersionOfSomethingAvailable": "Eine neue Version von {0} ist verf\u00fcgbar!", "VersionXIsAvailableForDownload": "Version {0} ist jetzt bereit zum download.", "LabelVersionNumber": "Version {0}", @@ -677,7 +682,7 @@ "MessageForgotPasswordFileCreated": "Die folgende Datei wurde auf deinem Server erstellt und enth\u00e4lt eine Anleitung, wie fortgefahren werden muss:", "MessageForgotPasswordFileExpiration": "Der Zur\u00fccksetzungs-PIN wird am {0} auslaufen.", "MessageInvalidForgotPasswordPin": "Ein ung\u00fcltiger oder abgelaufener PIN wurde eingegeben. Bitte versuche es noch einmal.", - "MessagePasswordResetForUsers": "Passwords have been removed for the following users:", + "MessagePasswordResetForUsers": "Passw\u00f6rter der folgenden Benutzer wurden entfernt:", "HeaderInviteGuest": "Lade G\u00e4ste ein", "ButtonLinkMyMediaBrowserAccount": "Verkn\u00fcpfe jetzt meinen Account", "MessageConnectAccountRequiredToInviteGuest": "Um G\u00e4ste einladen zu k\u00f6nnen, musst du zuerst deinen Media Browser Account auf diesem Server verkn\u00fcpfen.", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json index 48d11ea88..2d33bb0ea 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c3\u03c4\u03b5", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json index 0cfb01896..97bad5106 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Save", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json index dfa71fcc0..b651356ea 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Save", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json index ca78e4f0f..910d5c74e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Grabar", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "A\u00f1adir a la colecci\u00f3n", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Seleccionar Subt\u00edtulos", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Por defecto)", "LabelForcedStream": "(Forzado)", "LabelDefaultForcedStream": "(Por defecto\/Forzado)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "\u00bfEst\u00e1 seguro que desea reiniciar Media Browser Server?", "MessageConfirmShutdown": "\u00bfEst\u00e1 seguro que desea apagar Media Browser Server?", "ButtonUpdateNow": "Actualizar ahora", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "\u00a1Hay disponible una nueva versi\u00f3n de {0}!", "VersionXIsAvailableForDownload": "La versi\u00f3n {0} est\u00e1 disponible para su descarga.", "LabelVersionNumber": "Versi\u00f3n {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json index f38a10e3c..d9f263706 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -49,8 +49,11 @@ "ButtonHelp": "Ayuda", "ButtonSave": "Guardar", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Colecci\u00f3n", "HeaderAddToCollection": "Agregar a Colecci\u00f3n.", @@ -89,9 +92,9 @@ "LabelFree": "Gratis", "HeaderSelectAudio": "Seleccionar Audio", "HeaderSelectSubtitles": "Seleccionar Subtitulos", - "ButtonMarkForRemoval": "Marcado para remover del dispositivo", - "ButtonUnmarkForRemoval": "Desmarcar para remover del dispositivo", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "ButtonMarkForRemoval": "Remove from device", + "ButtonUnmarkForRemoval": "Cancel removal from device", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Por defecto)", "LabelForcedStream": "(Forzado)", "LabelDefaultForcedStream": "(Por Defecto\/Forzado)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "\u00bfEst\u00e1 seguro de querer reiniciar el Servidor de Media Browser?", "MessageConfirmShutdown": "\u00bfEst\u00e1 seguro de querer apagar el Servidor de Media Browser?", "ButtonUpdateNow": "Actualizar Ahora", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "\u00a1Una nueva versi\u00f3n de {0} esta disponible!", "VersionXIsAvailableForDownload": "La versi\u00f3n {0} ahora esta disponible para descargar.", "LabelVersionNumber": "Versi\u00f3n {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json index 7d1687de1..6e182588c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Tallenna", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json index 832b8db0e..c2830450b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json @@ -49,8 +49,11 @@ "ButtonHelp": "Aide", "ButtonSave": "Sauvegarder", "SyncJobStatusQueued": "Mis en file d'attente", - "SyncJobStatusInProgress": "En cours", + "SyncJobStatusConverting": "Conversion en cours", + "SyncJobStatusFailed": "Echec", + "SyncJobStatusCancelled": "Annul\u00e9", "SyncJobStatusCompleted": "Synchronis\u00e9", + "SyncJobStatusTransferring": "Transfert en cours", "SyncJobStatusCompletedWithError": "Synchronis\u00e9, mais des erreurs sont apparues", "LabelCollection": "Collection", "HeaderAddToCollection": "Ajouter \u00e0 la collection", @@ -89,9 +92,9 @@ "LabelFree": "Gratuit", "HeaderSelectAudio": "S\u00e9lectionner audio", "HeaderSelectSubtitles": "S\u00e9lectionner sous-titres", - "ButtonMarkForRemoval": "Marquer pour suppression dans le disque", - "ButtonUnmarkForRemoval": "Lib\u00e9rer la suppression dans le disque", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "ButtonMarkForRemoval": "Supprimer de l'appareil", + "ButtonUnmarkForRemoval": "Annuler la suppression de l'appareil", + "LabelSyncQualityHelp": "S\u00e9lectionnez Haute qualit\u00e9 pour obtenir la qualit\u00e9 optimale support\u00e9e par l'appareil. Qualit\u00e9 moyenne et basse qualit\u00e9 r\u00e9duiront le d\u00e9bit autoris\u00e9.", "LabelDefaultStream": "(Par d\u00e9faut)", "LabelForcedStream": "(Forc\u00e9)", "LabelDefaultForcedStream": "(Par d\u00e9faut\/Forc\u00e9)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "\u00cates-vous s\u00fbr de vouloir red\u00e9marrer le serveur Media Browser?", "MessageConfirmShutdown": "\u00cates-vous s\u00fbr de vouloir \u00e9teindre le serveur Media Browser?", "ButtonUpdateNow": "Mettre \u00e0 jour maintenant", + "ValueItemCount": "{0} \u00e9l\u00e9ment", + "ValueItemCountPlural": "{0} \u00e9l\u00e9ments", "NewVersionOfSomethingAvailable": "Une nouvelle version de {0} est disponible!", "VersionXIsAvailableForDownload": "La version {0} est maintenant disponible au t\u00e9l\u00e9chargement.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json index f98f99777..a79424ce2 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "\u05e9\u05de\u05d5\u05e8", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "\u05e2\u05d3\u05db\u05df \u05e2\u05db\u05e9\u05d9\u05d5", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json index 4c8677956..9534a327e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Snimi", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "A\u017euriraj sad", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json index 509373686..e676bd2a9 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json @@ -6,8 +6,8 @@ "Administrator": "Amministratore", "Password": "Password", "DeleteImage": "Elimina immagine", - "MessageThankYouForSupporting": "Thank you for supporting Media Browser.", - "MessagePleaseSupportMediaBrowser": "Please support Media Browser.", + "MessageThankYouForSupporting": "Grazie per supportare Media Browser", + "MessagePleaseSupportMediaBrowser": "Per favore supporta Media Browser", "DeleteImageConfirmation": "Sei sicuro di voler eliminare questa immagine?", "FileReadCancelled": "Il file letto \u00e8 stato cancellato.", "FileNotFound": "File non trovato", @@ -16,10 +16,10 @@ "DeleteUserConfirmation": "Sei sicuro di voler eliminare questo utente", "PasswordResetHeader": "Ripristina Password", "PasswordResetComplete": "la password \u00e8 stata ripristinata.", - "PinCodeResetComplete": "The pin code has been reset.", + "PinCodeResetComplete": "Il codice PIN \u00e8 stato resettato", "PasswordResetConfirmation": "Sei sicuro di voler ripristinare la password?", - "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", - "HeaderPinCodeReset": "Reset Pin Code", + "PinCodeResetConfirmation": "Sei sicuro di voler resettare il codice PIN?", + "HeaderPinCodeReset": "Resetta il codice PIN", "PasswordSaved": "Password salvata.", "PasswordMatchError": "Le password non coincidono.", "OptionRelease": "Versione Ufficiale", @@ -37,7 +37,7 @@ "MessageKeyRemoved": "Grazie. La vostra chiave supporter \u00e8 stata rimossa.", "ErrorLaunchingChromecast": "Si \u00e8 verificato un errore all'avvio di chromecast. Assicurati che il tuo dispositivo sia connesso alla rete wireless.", "HeaderSearch": "Ricerca", - "ValueDateCreated": "Date created: {0}", + "ValueDateCreated": "Data di creazione {0}", "LabelArtist": "Artista", "LabelMovie": "Film", "LabelMusicVideo": "Video Musicali", @@ -48,21 +48,24 @@ "LabelFailed": "(fallito)", "ButtonHelp": "Aiuto", "ButtonSave": "Salva", - "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", - "SyncJobStatusCompleted": "Synced", - "SyncJobStatusCompletedWithError": "Synced with errors", - "LabelCollection": "Collection", + "SyncJobStatusQueued": "In Coda", + "SyncJobStatusConverting": "Conversione", + "SyncJobStatusFailed": "Fallito", + "SyncJobStatusCancelled": "Cancellato", + "SyncJobStatusCompleted": "Sinc.to", + "SyncJobStatusTransferring": "Trasferimento", + "SyncJobStatusCompletedWithError": "Sincronizzato con errori", + "LabelCollection": "Collezione", "HeaderAddToCollection": "Aggiungi alla Collezione", "NewCollectionNameExample": "Esempio: Collezione Star wars", "OptionSearchForInternetMetadata": "Cerca su internet le immagini e i metadati", "LabelSelectCollection": "Seleziona Collezione:", "HeaderDevices": "Dispositivi", - "ButtonScheduledTasks": "Scheduled tasks", - "MessageItemsAdded": "Items added", - "ButtonAddToCollection": "Add to collection", - "HeaderSelectCertificatePath": "Select Certificate Path", - "ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task. It can also be run manually here. To configure the scheduled task, see:", + "ButtonScheduledTasks": "Operazioni Pianificate", + "MessageItemsAdded": "Oggetti aggiunti", + "ButtonAddToCollection": "Aggiungi alla collezione", + "HeaderSelectCertificatePath": "Seleziona il percorso del Certificato", + "ConfirmMessageScheduledTaskButton": "L'operazione viene normalmente eseguita come operazione pianificata. Pu\u00f2 anche essere avviata manualmente da qui. Per configurare le operazioni pianificate, vedi:", "HeaderSupporterBenefit": "La sottoscrizione Supporter concede dei benefici come: l'accesso a plug-in premium, contenuti dei canali internet, e altro. {0}Scopri di pi\u00f9{1}", "HeaderWelcomeToMediaBrowserServerDashboard": "Benvenuti nel Dashboard di Media Browser", "HeaderWelcomeToMediaBrowserWebClient": "Benvenuti nel Media Browser Web client", @@ -74,10 +77,10 @@ "HeaderChannelAccess": "Accesso canali", "HeaderDeviceAccess": "Accesso dispositivo", "HeaderSelectDevices": "Seleziona periferiche", - "ButtonCancelItem": "Cancel item", - "ButtonQueueForRetry": "Queue for retry", - "ButtonReenable": "Re-enable", - "SyncJobItemStatusSyncedMarkForRemoval": "Marked for removal", + "ButtonCancelItem": "Cancella oggetto", + "ButtonQueueForRetry": "In attesa di riprovare", + "ButtonReenable": "Ri-abilita", + "SyncJobItemStatusSyncedMarkForRemoval": "Selezionato per la rimozione", "LabelAbortedByServerShutdown": "(Interrotto dallo spegnimento del server)", "LabelScheduledTaskLastRan": "Ultima esecuzione {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Elimina Operazione pianificata", @@ -89,14 +92,14 @@ "LabelFree": "Gratis", "HeaderSelectAudio": "Seleziona audio", "HeaderSelectSubtitles": "Seleziona sottotitoli", - "ButtonMarkForRemoval": "Remove from device", - "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "ButtonMarkForRemoval": "Rimuovi dal dispositivo", + "ButtonUnmarkForRemoval": "Annulla rimozione dal dispositivo", + "LabelSyncQualityHelp": "Usa qualit\u00e0 alta come livello di qualit\u00e0 massimo per il dispositivo. Media e bassa diminuiranno il bitrate consentito", "LabelDefaultStream": "(Predefinito)", "LabelForcedStream": "(forzato)", "LabelDefaultForcedStream": "(Predefinito\/Forzato)", "LabelUnknownLanguage": "Lingua Sconosciuta", - "MessageConfirmSyncJobItemCancellation": "Are you sure you wish to cancel this item?", + "MessageConfirmSyncJobItemCancellation": "Sei sicuro di voler cancellare questo elemento?", "ButtonMute": "Muto", "ButtonUnmute": "Togli muto", "ButtonStop": "Stop", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Sei sicuro di voler riavviare Media Browser Server?", "MessageConfirmShutdown": "Sei sicuro di voler Spegnere Media Browser Server?", "ButtonUpdateNow": "Aggiorna Adesso", + "ValueItemCount": "{0} elemento", + "ValueItemCountPlural": "{0} elementi", "NewVersionOfSomethingAvailable": "Una nuova versione di {0} \u00e8 disponibile!", "VersionXIsAvailableForDownload": "Versione {0} \u00e8 ora disponibile per il download.", "LabelVersionNumber": "Versione {0}", @@ -220,10 +225,10 @@ "LabelPlayMethodDirectPlay": "Riproduzione Diretta", "LabelAudioCodec": "Audio: {0}", "LabelVideoCodec": "Video: {0}", - "LabelLocalAccessUrl": "Local access: {0}", + "LabelLocalAccessUrl": "Accesso locale {0}", "LabelRemoteAccessUrl": "Accesso remoto: {0}", - "LabelRunningOnPort": "Running on http port {0}.", - "LabelRunningOnPorts": "Running on http port {0}, and https port {1}.", + "LabelRunningOnPort": "In esecuzione sulla porta HTTP {0}.", + "LabelRunningOnPorts": "In esecuzione sulla porta HTTP {0}, e porta HTTPS {1}", "HeaderLatestFromChannel": "Ultime da {0}", "ButtonDownload": "Download", "LabelUnknownLanaguage": "lingua sconosciuta", @@ -237,7 +242,7 @@ "ButtonRefresh": "Aggiorna", "LabelCurrentPath": "Percorso Corrente:", "HeaderSelectMediaPath": "Seleziona il percorso", - "HeaderSelectPath": "Select Path", + "HeaderSelectPath": "Seleziona Percorso", "ButtonNetwork": "Rete", "MessageDirectoryPickerInstruction": "Percorsi di rete possono essere inseriti manualmente nel caso in cui il pulsante Rete non riesce a individuare i vostri dispositivi. Ad esempio, {0} o {1}", "HeaderMenu": "Menu", @@ -248,7 +253,7 @@ "ButtonResume": "Riprendi", "HeaderScenes": "Scene", "HeaderAudioTracks": "Tracce audio", - "HeaderLibraries": "Libraries", + "HeaderLibraries": "Librerie", "HeaderSubtitles": "Sottotitoli", "HeaderVideoQuality": "Qualit\u00e0 video", "MessageErrorPlayingVideo": "Si \u00e8 verificato un errore nella riproduzione del video.", @@ -615,7 +620,7 @@ "MediaInfoRefFrames": "Ref frames", "TabPlayback": "Riproduzione", "TabNotifications": "Notifiche", - "TabExpert": "Expert", + "TabExpert": "Esperto", "HeaderSelectCustomIntrosPath": "Selezionare Intro Path Personalizzata", "HeaderRateAndReview": "Punteggio e Commenti", "HeaderThankYou": "Grazie", @@ -650,7 +655,7 @@ "DashboardTourMobile": "Il cruscotto Media Browser funziona alla grande su smartphone e tablet. Gestisci il tuo server dal palmo della tua mano in qualsiasi momento, ovunque.", "MessageRefreshQueued": "Aggiornamento programmato", "TabDevices": "Dispositivi", - "TabExtras": "Extras", + "TabExtras": "Extra", "DeviceLastUsedByUserName": "Ultimo utilizzata da {0}", "HeaderDeleteDevice": "Elimina dispositivo", "DeleteDeviceConfirmation": "Sei sicuro di voler cancellare questo dispositivo? Esso riapparir\u00e0 la prossima volta che un utente accede con esso.", @@ -677,7 +682,7 @@ "MessageForgotPasswordFileCreated": "Il seguente file \u00e8 stato creato sul server e contiene le istruzioni su come procedere:", "MessageForgotPasswordFileExpiration": "Il pin scadr\u00e0 {0}.", "MessageInvalidForgotPasswordPin": "Un pin Invalido o scaduto \u00e8 stato inserito. Riprova.", - "MessagePasswordResetForUsers": "Passwords have been removed for the following users:", + "MessagePasswordResetForUsers": "Le password per i seguenti utenti sono state rimosse:", "HeaderInviteGuest": "Invita Ospite", "ButtonLinkMyMediaBrowserAccount": "Collega il mio account", "MessageConnectAccountRequiredToInviteGuest": "Per invitare gli ospiti \u00e8 necessario collegare prima il tuo account browser media a questo server.", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json index 9ef911823..f0b24e321 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json @@ -49,8 +49,11 @@ "ButtonHelp": "\u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430\u0493\u0430", "ButtonSave": "\u0421\u0430\u049b\u0442\u0430\u0443", "SyncJobStatusQueued": "\u041a\u0435\u0437\u0435\u043a\u0442\u0435", - "SyncJobStatusInProgress": "\u041e\u0440\u044b\u043d\u0434\u0430\u043b\u0443\u0434\u0430", + "SyncJobStatusConverting": "\u0422\u04af\u0440\u043b\u0435\u043d\u0434\u0456\u0440\u0443\u0434\u0435", + "SyncJobStatusFailed": "\u0421\u04d9\u0442\u0441\u0456\u0437", + "SyncJobStatusCancelled": "\u0411\u043e\u043b\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0493\u0430\u043d", "SyncJobStatusCompleted": "\u04ae\u043d\u0434\u0435\u0441\u0442\u0456\u0440\u0456\u043b\u0433\u0435\u043d", + "SyncJobStatusTransferring": "\u0410\u0443\u044b\u0441\u0442\u044b\u0440\u044b\u043b\u0443\u0434\u0430", "SyncJobStatusCompletedWithError": "\u049a\u0430\u0442\u0435\u043b\u0435\u0440\u043c\u0435\u043d \u04af\u043d\u0434\u0435\u0441\u0442\u0456\u0440\u0456\u043b\u0433\u0435\u043d", "LabelCollection": "\u0416\u0438\u044b\u043d\u0442\u044b\u049b", "HeaderAddToCollection": "\u0416\u0438\u044b\u043d\u0442\u044b\u049b\u049b\u0430 \u04af\u0441\u0442\u0435\u0443", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u043b\u0435\u0440 \u0442\u0430\u04a3\u0434\u0430\u0443", "ButtonMarkForRemoval": "\u049a\u04b1\u0440\u044b\u043b\u0493\u044b\u0434\u0430\u043d \u0430\u043b\u0430\u0441\u0442\u0430\u0443", "ButtonUnmarkForRemoval": "\u049a\u04b1\u0440\u044b\u043b\u0493\u044b\u0434\u0430\u043d \u0430\u043b\u0430\u0441\u0442\u0430\u0443\u0434\u044b \u0431\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443", - "LabelSyncQualityHelp": "\u049a\u04b1\u0440\u044b\u043b\u0493\u044b \u0431\u0430\u0440\u044b\u043d\u0448\u0430 \u049b\u043e\u043b\u0434\u0430\u0443 \u0441\u0430\u043f\u0430\u0441\u044b \u04af\u0448\u0456\u043d \u0436\u043e\u0493\u0430\u0440\u044b \u0441\u0430\u043f\u0430\u043d\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u04a3\u044b\u0437. \u041e\u0440\u0442\u0430\u0441\u044b \u0436\u04d9\u043d\u0435 \u0442\u04e9\u043c\u0435\u043d\u0456 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0456\u043b\u0433\u0435\u043d \u049b\u0430\u0440\u049b\u044b\u043d\u0434\u044b \u0430\u0437\u0430\u0439\u0442\u0430\u0434\u044b.", + "LabelSyncQualityHelp": "\u049a\u04b1\u0440\u044b\u043b\u0493\u044b \u0431\u0430\u0440\u044b\u043d\u0448\u0430 \u049b\u043e\u043b\u0434\u0430\u0443 \u0441\u0430\u043f\u0430\u0441\u044b \u04af\u0448\u0456\u043d \u0436\u043e\u0493\u0430\u0440\u044b \u0441\u0430\u043f\u0430\u043d\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u04a3\u044b\u0437. \u041e\u0440\u0442\u0430 \u0436\u04d9\u043d\u0435 \u0442\u04e9\u043c\u0435\u043d \u0441\u0430\u043f\u0430\u043b\u0430\u0440 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0456\u043b\u0433\u0435\u043d \u049b\u0430\u0440\u049b\u044b\u043d\u0434\u044b \u0430\u0437\u0430\u0439\u0442\u0430\u0434\u044b.", "LabelDefaultStream": "(\u04d8\u0434\u0435\u043f\u043a\u0456)", "LabelForcedStream": "(\u041c\u04d9\u0436\u0431\u04af\u0440\u043b\u0456)", "LabelDefaultForcedStream": "(\u04d8\u0434\u0435\u043f\u043a\u0456\/\u041c\u04d9\u0436\u0431\u04af\u0440\u043b\u0456)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d Media Browser Server \u049b\u0430\u0439\u0442\u0430 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?", "MessageConfirmShutdown": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d Media Browser Server \u0436\u04b1\u043c\u044b\u0441\u044b \u0430\u044f\u049b\u0442\u0430\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?", "ButtonUpdateNow": "\u049a\u0430\u0437\u0456\u0440 \u0436\u0430\u04a3\u0430\u0440\u0442\u0443", + "ValueItemCount": "{0} \u044d\u043b\u0435\u043c\u0435\u043d\u0442", + "ValueItemCountPlural": "{0} \u044d\u043b\u0435\u043c\u0435\u043d\u0442", "NewVersionOfSomethingAvailable": "\u0416\u0430\u04a3\u0430 {0} \u043d\u04b1\u0441\u049b\u0430\u0441\u044b \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456!", "VersionXIsAvailableForDownload": "\u0415\u043d\u0434\u0456 {0} \u043d\u04b1\u0441\u049b\u0430 \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443\u0493\u0430 \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456.", "LabelVersionNumber": "\u041d\u0443\u0441\u049b\u0430\u0441\u044b: {0}", @@ -516,7 +521,7 @@ "OptionUnwatched": "\u049a\u0430\u0440\u0430\u043b\u043c\u0430\u0493\u0430\u043d", "ExternalPlayerPlaystateOptionsHelp": "\u041a\u0435\u043b\u0435\u0441\u0456 \u0440\u0435\u0442\u0442\u0435 \u043e\u0441\u044b \u0431\u0435\u0439\u043d\u0435\u043d\u0456 \u049b\u0430\u043b\u0430\u0443\u044b\u04a3\u044b\u0437\u0431\u0435\u043d \u049b\u0430\u043b\u0430\u0439 \u0436\u0430\u043b\u0493\u0430\u0441\u0442\u044b\u0440\u0443\u044b\u043d \u0430\u043d\u044b\u049b\u0442\u0430\u04a3\u044b\u0437.", "LabelMarkAs": "\u0411\u044b\u043b\u0430\u0439\u0448\u0430 \u0431\u0435\u043b\u0433\u0456\u043b\u0435\u0443:", - "OptionInProgress": "\u0421\u04af\u0440\u0435\u043b\u0456", + "OptionInProgress": "\u041e\u0440\u044b\u043d\u0434\u0430\u043b\u0443\u0434\u0430", "LabelResumePoint": "\u0416\u0430\u043b\u0493\u0430\u0441\u0442\u044b\u0440\u0443 \u043d\u04af\u043a\u0442\u0435\u0441\u0456:", "ValueOneMovie": "1 \u0444\u0438\u043b\u044c\u043c", "ValueMovieCount": "{0} \u0444\u0438\u043b\u044c\u043c", @@ -706,7 +711,7 @@ "MessageUnsetContentHelp": "\u041c\u0430\u0437\u043c\u04b1\u043d \u043a\u04d9\u0434\u0456\u043c\u0433\u0456 \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440 \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0435\u0434\u0456. \u0415\u04a3 \u0436\u0430\u049b\u0441\u044b \u043d\u04d9\u0442\u0438\u0436\u0435\u043b\u0435\u0440 \u0430\u043b\u0443 \u04af\u0448\u0456\u043d, \u0456\u0448\u043a\u0456 \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u0434\u044b\u04a3 \u043c\u0430\u0437\u043c\u04af\u043d \u0442\u04af\u0440\u043b\u0435\u0440\u0456\u043d \u043e\u0440\u043d\u0430\u0442\u044b\u043f \u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u0440\u0435\u0442\u0442\u0435\u0443\u0448\u0456\u043d\u0456 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u04a3\u044b\u0437", "SyncJobItemStatusQueued": "\u041a\u0435\u0437\u0435\u043a\u0442\u0435", "SyncJobItemStatusConverting": "\u0422\u04af\u0440\u043b\u0435\u043d\u0434\u0456\u0440\u0443\u0434\u0435", - "SyncJobItemStatusTransferring": "\u0422\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443\u0434\u0430", + "SyncJobItemStatusTransferring": "\u0410\u0443\u044b\u0441\u0442\u044b\u0440\u044b\u043b\u0443\u0434\u0430", "SyncJobItemStatusSynced": "\u04ae\u043d\u0434\u0435\u0441\u0442\u0456\u0440\u0456\u043b\u0433\u0435\u043d", "SyncJobItemStatusFailed": "\u0421\u04d9\u0442\u0441\u0456\u0437", "SyncJobItemStatusRemovedFromDevice": "\u049a\u04b1\u0440\u044b\u043b\u0493\u044b\u0434\u0430\u043d \u0430\u043b\u0430\u0441\u0442\u0430\u043b\u0493\u0430\u043d", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json index b868461d6..a2d27a197 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Save", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json index 9da65571d..38aefa3e2 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "lagre", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Legg Til I Samling", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Velg Undertekst", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Standard)", "LabelForcedStream": "(Tvunget)", "LabelDefaultForcedStream": "(Standard\/Tvunget)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Er du sikker p\u00e5 at du vil gi Media Browser Server en omstart?", "MessageConfirmShutdown": "Er du sikker p\u00e5 du vil sl\u00e5 av Media Browser Server?", "ButtonUpdateNow": "Oppdater N\u00e5", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "En ny versjon av {0} er tilgjengelig!", "VersionXIsAvailableForDownload": "Vesjon {0} er n\u00e5 tilgjengelig for nedlasting.", "LabelVersionNumber": "Versjon {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json index 36bc4a968..8e1d9323b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json @@ -49,8 +49,11 @@ "ButtonHelp": "Hulp", "ButtonSave": "Opslaan", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Verzameling", "HeaderAddToCollection": "Toevoegen aan verzameling", @@ -89,9 +92,9 @@ "LabelFree": "Gratis", "HeaderSelectAudio": "Selecteer Audio", "HeaderSelectSubtitles": "Selecteer Ondertitels", - "ButtonMarkForRemoval": "Markeren voor verwijdering uit het apparaat", - "ButtonUnmarkForRemoval": "Niet markeren voor verwijdering uit het apparaat", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "ButtonMarkForRemoval": "Remove from device", + "ButtonUnmarkForRemoval": "Cancel removal from device", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Standaard)", "LabelForcedStream": "(Geforceerd)", "LabelDefaultForcedStream": "(Standaard \/ Georceerd)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Weet u zeker dat u Media Browser Server wilt herstarten?", "MessageConfirmShutdown": "Weet u zeker dat u Media Browser Server wilt afsluiten?", "ButtonUpdateNow": "Nu bijwerken", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "Er is een nieuwe versie van {0} beschikbaar!", "VersionXIsAvailableForDownload": "Versie {0} is nu beschikbaar voor download.", "LabelVersionNumber": "Versie {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json index dff6cbb8b..b8db8e547 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Zapisz", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json index 31c79b876..90fa72341 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json @@ -49,8 +49,11 @@ "ButtonHelp": "Ajuda", "ButtonSave": "Salvar", "SyncJobStatusQueued": "Enfileirado", - "SyncJobStatusInProgress": "Em-Progresso", + "SyncJobStatusConverting": "Convertendo", + "SyncJobStatusFailed": "Falhou", + "SyncJobStatusCancelled": "Cancelado", "SyncJobStatusCompleted": "Sincronizado", + "SyncJobStatusTransferring": "Transferindo", "SyncJobStatusCompletedWithError": "Sincronizado com erros", "LabelCollection": "Cole\u00e7\u00e3o", "HeaderAddToCollection": "Adicionar \u00e0 Cole\u00e7\u00e3o", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Selecione Legendas", "ButtonMarkForRemoval": "Remover do dispositivo", "ButtonUnmarkForRemoval": "Cancelar remo\u00e7\u00e3o do dispositivo", - "LabelSyncQualityHelp": "Use alta qualidade para a qualidade m\u00e1xima suportada pelo dispositivo. M\u00e9dia e Baixa reduzem a taxa permitida.", + "LabelSyncQualityHelp": "Use alta qualidade para a qualidade m\u00e1xima suportada pelo dispositivo. Qualidades M\u00e9dia e Baixa reduzem a taxa permitida.", "LabelDefaultStream": "(Padr\u00e3o)", "LabelForcedStream": "(For\u00e7ada)", "LabelDefaultForcedStream": "(Padr\u00e3o\/For\u00e7ada)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Deseja realmente reiniciar o Servidor Media Browser?", "MessageConfirmShutdown": "Deseja realmente desligar o Servidor Media Browser?", "ButtonUpdateNow": "Atualizar Agora", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} itens", "NewVersionOfSomethingAvailable": "Est\u00e1 dispon\u00edvel uma nova vers\u00e3o de {0}!", "VersionXIsAvailableForDownload": "A vers\u00e3o {0} est\u00e1 dispon\u00edvel para download.", "LabelVersionNumber": "Vers\u00e3o {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json index be65ed31a..148ff9dab 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Guardar", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Tem a certeza que deseja reiniciar o Media Browser Server?", "MessageConfirmShutdown": "Tem a certeza que deseja encerrar o Media Browser Server?", "ButtonUpdateNow": "Atualizar Agora", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json index bf2a536bf..933390f65 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json @@ -49,8 +49,11 @@ "ButtonHelp": "\u041a \u0441\u043f\u0440\u0430\u0432\u043a\u0435", "ButtonSave": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c", "SyncJobStatusQueued": "\u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u0438", - "SyncJobStatusInProgress": "\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435", + "SyncJobStatusConverting": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f", + "SyncJobStatusFailed": "\u041d\u0435\u0443\u0434\u0430\u0447\u043d\u043e", + "SyncJobStatusCancelled": "\u041e\u0442\u043c\u0435\u043d\u0435\u043d\u043e", "SyncJobStatusCompleted": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e", + "SyncJobStatusTransferring": "\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f", "SyncJobStatusCompletedWithError": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438", "LabelCollection": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f", "HeaderAddToCollection": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "\u0412\u044b\u0431\u043e\u0440 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432", "ButtonMarkForRemoval": "\u0418\u0437\u044a\u044f\u0442\u044c \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", "ButtonUnmarkForRemoval": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u044a\u044f\u0442\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", - "LabelSyncQualityHelp": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0438 \u043d\u0438\u0437\u043a\u043e\u0435 \u043f\u043e\u043d\u0438\u0436\u0430\u044e\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0443\u043c\u044e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.", + "LabelSyncQualityHelp": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0438 \u043d\u0438\u0437\u043a\u043e\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043d\u0438\u0436\u0430\u044e\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0443\u044e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.", "LabelDefaultStream": "(\u0423\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435)", "LabelForcedStream": "(\u0424\u043e\u0440\u0441-\u044b\u0435)", "LabelDefaultForcedStream": "(\u0423\u043c\u043e\u043b\u0447.\/\u0424\u043e\u0440\u0441-\u044b\u0435)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Media Browser Server?", "MessageConfirmShutdown": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 Media Browser Server?", "ButtonUpdateNow": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e", + "ValueItemCount": "{0} \u044d\u043b\u0435\u043c\u0435\u043d\u0442", + "ValueItemCountPlural": "{0} \u044d\u043b\u0435\u043c\u0435\u043d\u0442(\u0430\/\u043e\u0432)", "NewVersionOfSomethingAvailable": "\u0418\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f {0}!", "VersionXIsAvailableForDownload": "\u0412\u0435\u0440\u0441\u0438\u044f {0} \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.", "LabelVersionNumber": "\u0412\u0435\u0440\u0441\u0438\u044f {0}", @@ -516,7 +521,7 @@ "OptionUnwatched": "\u041d\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e", "ExternalPlayerPlaystateOptionsHelp": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435, \u043a\u0430\u043a \u0432\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e \u0432\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437.", "LabelMarkAs": "\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u043a:", - "OptionInProgress": "\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f", + "OptionInProgress": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f", "LabelResumePoint": "\u0422\u043e\u0447\u043a\u0430 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f:", "ValueOneMovie": "1 \u0444\u0438\u043b\u044c\u043c", "ValueMovieCount": "{0} \u0444\u0438\u043b\u044c\u043c(\u0430\/\u043e\u0432)", @@ -706,7 +711,7 @@ "MessageUnsetContentHelp": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438. \u0414\u043b\u044f \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0438\u043f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043f\u0430\u043f\u043e\u043a.", "SyncJobItemStatusQueued": "\u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u0438", "SyncJobItemStatusConverting": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f", - "SyncJobItemStatusTransferring": "\u041f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f", + "SyncJobItemStatusTransferring": "\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f", "SyncJobItemStatusSynced": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e", "SyncJobItemStatusFailed": "\u041d\u0435\u0443\u0434\u0430\u0447\u043d\u043e", "SyncJobItemStatusRemovedFromDevice": "\u0418\u0437\u044a\u044f\u0442\u043e \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/sl_SI.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/sl_SI.json new file mode 100644 index 000000000..4cc69cdc9 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/sl_SI.json @@ -0,0 +1,720 @@ +{ + "SettingsSaved": "Settings saved.", + "AddUser": "Add User", + "Users": "Users", + "Delete": "Delete", + "Administrator": "Administrator", + "Password": "Password", + "DeleteImage": "Delete Image", + "MessageThankYouForSupporting": "Thank you for supporting Media Browser.", + "MessagePleaseSupportMediaBrowser": "Please support Media Browser.", + "DeleteImageConfirmation": "Are you sure you wish to delete this image?", + "FileReadCancelled": "The file read has been canceled.", + "FileNotFound": "File not found.", + "FileReadError": "An error occurred while reading the file.", + "DeleteUser": "Delete User", + "DeleteUserConfirmation": "Are you sure you wish to delete this user?", + "PasswordResetHeader": "Reset Password", + "PasswordResetComplete": "The password has been reset.", + "PinCodeResetComplete": "The pin code has been reset.", + "PasswordResetConfirmation": "Are you sure you wish to reset the password?", + "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", + "HeaderPinCodeReset": "Reset Pin Code", + "PasswordSaved": "Password saved.", + "PasswordMatchError": "Password and password confirmation must match.", + "OptionRelease": "Official Release", + "OptionBeta": "Beta", + "OptionDev": "Dev (Unstable)", + "UninstallPluginHeader": "Uninstall Plugin", + "UninstallPluginConfirmation": "Are you sure you wish to uninstall {0}?", + "NoPluginConfigurationMessage": "This plugin has nothing to configure.", + "NoPluginsInstalledMessage": "You have no plugins installed.", + "BrowsePluginCatalogMessage": "Browse our plugin catalog to view available plugins.", + "MessageKeyEmailedTo": "Key emailed to {0}.", + "MessageKeysLinked": "Keys linked.", + "HeaderConfirmation": "Confirmation", + "MessageKeyUpdated": "Thank you. Your supporter key has been updated.", + "MessageKeyRemoved": "Thank you. Your supporter key has been removed.", + "ErrorLaunchingChromecast": "There was an error launching chromecast. Please ensure your device is connected to your wireless network.", + "HeaderSearch": "Search", + "ValueDateCreated": "Date created: {0}", + "LabelArtist": "Artist", + "LabelMovie": "Movie", + "LabelMusicVideo": "Music Video", + "LabelEpisode": "Episode", + "LabelSeries": "Serije", + "LabelStopping": "Stopping", + "LabelCancelled": "(cancelled)", + "LabelFailed": "(neuspe\u0161no)", + "ButtonHelp": "Help", + "ButtonSave": "Save", + "SyncJobStatusQueued": "Queued", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", + "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", + "SyncJobStatusCompletedWithError": "Synced with errors", + "LabelCollection": "Collection", + "HeaderAddToCollection": "Add to Collection", + "NewCollectionNameExample": "Example: Star Wars Collection", + "OptionSearchForInternetMetadata": "Search the internet for artwork and metadata", + "LabelSelectCollection": "Select collection:", + "HeaderDevices": "Devices", + "ButtonScheduledTasks": "Scheduled tasks", + "MessageItemsAdded": "Items added", + "ButtonAddToCollection": "Add to collection", + "HeaderSelectCertificatePath": "Select Certificate Path", + "ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task. It can also be run manually here. To configure the scheduled task, see:", + "HeaderSupporterBenefit": "A supporter membership provides additional benefits such as access to premium plugins, internet channel content, and more. {0}Learn more{1}.", + "HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard", + "HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client", + "ButtonTakeTheTour": "Take the tour", + "HeaderWelcomeBack": "Welcome back!", + "ButtonTakeTheTourToSeeWhatsNew": "Take the tour to see what's new", + "MessageNoSyncJobsFound": "No sync jobs found. Create sync jobs using the Sync buttons found throughout the web interface.", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", + "ButtonCancelItem": "Cancel item", + "ButtonQueueForRetry": "Queue for retry", + "ButtonReenable": "Re-enable", + "SyncJobItemStatusSyncedMarkForRemoval": "Marked for removal", + "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", + "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", + "HeaderDeleteTaskTrigger": "Delete Task Trigger", + "HeaderTaskTriggers": "Task Triggers", + "MessageDeleteTaskTrigger": "Are you sure you wish to delete this task trigger?", + "MessageNoPluginsInstalled": "You have no plugins installed.", + "LabelVersionInstalled": "{0} installed", + "LabelNumberReviews": "{0} Reviews", + "LabelFree": "Free", + "HeaderSelectAudio": "Select Audio", + "HeaderSelectSubtitles": "Select Subtitles", + "ButtonMarkForRemoval": "Remove from device", + "ButtonUnmarkForRemoval": "Cancel removal from device", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", + "LabelDefaultStream": "(Default)", + "LabelForcedStream": "(Forced)", + "LabelDefaultForcedStream": "(Default\/Forced)", + "LabelUnknownLanguage": "Unknown language", + "MessageConfirmSyncJobItemCancellation": "Are you sure you wish to cancel this item?", + "ButtonMute": "Mute", + "ButtonUnmute": "Unmute", + "ButtonStop": "Stop", + "ButtonNextTrack": "Next Track", + "ButtonPause": "Pause", + "ButtonPlay": "Play", + "ButtonEdit": "Edit", + "ButtonQueue": "Queue", + "ButtonPlayTrailer": "Predvajaj napovednik", + "ButtonPlaylist": "Playlist", + "ButtonPreviousTrack": "Previous Track", + "LabelEnabled": "Enabled", + "LabelDisabled": "Disabled", + "ButtonMoreInformation": "More Information", + "LabelNoUnreadNotifications": "No unread notifications.", + "ButtonViewNotifications": "View notifications", + "ButtonMarkTheseRead": "Mark these read", + "ButtonClose": "Close", + "LabelAllPlaysSentToPlayer": "All plays will be sent to the selected player.", + "MessageInvalidUser": "Invalid username or password. Please try again.", + "HeaderLoginFailure": "Login Failure", + "HeaderAllRecordings": "All Recordings", + "RecommendationBecauseYouLike": "Because you like {0}", + "RecommendationBecauseYouWatched": "Because you watched {0}", + "RecommendationDirectedBy": "Directed by {0}", + "RecommendationStarring": "Starring {0}", + "HeaderConfirmRecordingCancellation": "Confirm Recording Cancellation", + "MessageConfirmRecordingCancellation": "Are you sure you wish to cancel this recording?", + "MessageRecordingCancelled": "Recording cancelled.", + "HeaderConfirmSeriesCancellation": "Confirm Series Cancellation", + "MessageConfirmSeriesCancellation": "Are you sure you wish to cancel this series?", + "MessageSeriesCancelled": "Series cancelled.", + "HeaderConfirmRecordingDeletion": "Confirm Recording Deletion", + "MessageConfirmRecordingDeletion": "Are you sure you wish to delete this recording?", + "MessageRecordingDeleted": "Recording deleted.", + "ButonCancelRecording": "Cancel Recording", + "MessageRecordingSaved": "Recording saved.", + "OptionSunday": "Sunday", + "OptionMonday": "Monday", + "OptionTuesday": "Tuesday", + "OptionWednesday": "Wednesday", + "OptionThursday": "Thursday", + "OptionFriday": "Friday", + "OptionSaturday": "Saturday", + "HeaderConfirmDeletion": "Confirm Deletion", + "MessageConfirmPathSubstitutionDeletion": "Are you sure you wish to delete this path substitution?", + "LiveTvUpdateAvailable": "(Update available)", + "LabelVersionUpToDate": "Up to date!", + "ButtonResetTuner": "Reset tuner", + "HeaderResetTuner": "Reset Tuner", + "MessageConfirmResetTuner": "Are you sure you wish to reset this tuner? Any active players or recordings will be abruptly stopped.", + "ButtonCancelSeries": "Cancel Series", + "HeaderSeriesRecordings": "Series Recordings", + "LabelAnytime": "Any time", + "StatusRecording": "Recording", + "StatusWatching": "Watching", + "StatusRecordingProgram": "Recording {0}", + "StatusWatchingProgram": "Watching {0}", + "HeaderSplitMedia": "Split Media Apart", + "MessageConfirmSplitMedia": "Are you sure you wish to split the media sources into separate items?", + "HeaderError": "Error", + "MessagePleaseSelectOneItem": "Please select at least one item.", + "MessagePleaseSelectTwoItems": "Please select at least two items.", + "MessageTheFollowingItemsWillBeGrouped": "The following titles will be grouped into one item:", + "MessageConfirmItemGrouping": "Media Browser clients will automatically choose the optimal version to play based on device and network performance. Are you sure you wish to continue?", + "HeaderResume": "Resume", + "HeaderMyViews": "My Views", + "HeaderLibraryFolders": "Media Folders", + "HeaderLatestMedia": "Latest Media", + "ButtonMoreItems": "More...", + "ButtonMore": "More", + "HeaderFavoriteMovies": "Favorite Movies", + "HeaderFavoriteShows": "Favorite Shows", + "HeaderFavoriteEpisodes": "Favorite Episodes", + "HeaderFavoriteGames": "Favorite Games", + "HeaderRatingsDownloads": "Rating \/ Downloads", + "HeaderConfirmProfileDeletion": "Confirm Profile Deletion", + "MessageConfirmProfileDeletion": "Are you sure you wish to delete this profile?", + "HeaderSelectServerCachePath": "Select Server Cache Path", + "HeaderSelectTranscodingPath": "Select Transcoding Temporary Path", + "HeaderSelectImagesByNamePath": "Select Images By Name Path", + "HeaderSelectMetadataPath": "Select Metadata Path", + "HeaderSelectServerCachePathHelp": "Browse or enter the path to use for server cache files. The folder must be writeable.", + "HeaderSelectTranscodingPathHelp": "Browse or enter the path to use for transcoding temporary files. The folder must be writeable.", + "HeaderSelectImagesByNamePathHelp": "Browse or enter the path to your items by name folder. The folder must be writeable.", + "HeaderSelectMetadataPathHelp": "Browse or enter the path you'd like to store metadata within. The folder must be writeable.", + "HeaderSelectChannelDownloadPath": "Select Channel Download Path", + "HeaderSelectChannelDownloadPathHelp": "Browse or enter the path to use for storing channel cache files. The folder must be writeable.", + "OptionNewCollection": "New...", + "ButtonAdd": "Add", + "ButtonRemove": "Remove", + "LabelChapterDownloaders": "Chapter downloaders:", + "LabelChapterDownloadersHelp": "Enable and rank your preferred chapter downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", + "HeaderFavoriteAlbums": "Favorite Albums", + "HeaderLatestChannelMedia": "Latest Channel Items", + "ButtonOrganizeFile": "Organize File", + "ButtonDeleteFile": "Delete File", + "HeaderOrganizeFile": "Organize File", + "HeaderDeleteFile": "Delete File", + "StatusSkipped": "Skipped", + "StatusFailed": "Failed", + "StatusSuccess": "Success", + "MessageFileWillBeDeleted": "The following file will be deleted:", + "MessageSureYouWishToProceed": "Are you sure you wish to proceed?", + "MessageDuplicatesWillBeDeleted": "In addition the following dupliates will be deleted:", + "MessageFollowingFileWillBeMovedFrom": "The following file will be moved from:", + "MessageDestinationTo": "to:", + "HeaderSelectWatchFolder": "Select Watch Folder", + "HeaderSelectWatchFolderHelp": "Browse or enter the path to your watch folder. The folder must be writeable.", + "OrganizePatternResult": "Result: {0}", + "HeaderRestart": "Restart", + "HeaderShutdown": "Shutdown", + "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", + "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", + "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", + "NewVersionOfSomethingAvailable": "A new version of {0} is available!", + "VersionXIsAvailableForDownload": "Version {0} is now available for download.", + "LabelVersionNumber": "Version {0}", + "LabelPlayMethodTranscoding": "Transcoding", + "LabelPlayMethodDirectStream": "Direct Streaming", + "LabelPlayMethodDirectPlay": "Direct Playing", + "LabelAudioCodec": "Audio: {0}", + "LabelVideoCodec": "Video: {0}", + "LabelLocalAccessUrl": "Local access: {0}", + "LabelRemoteAccessUrl": "Remote access: {0}", + "LabelRunningOnPort": "Running on http port {0}.", + "LabelRunningOnPorts": "Running on http port {0}, and https port {1}.", + "HeaderLatestFromChannel": "Latest from {0}", + "ButtonDownload": "Download", + "LabelUnknownLanaguage": "Unknown language", + "HeaderCurrentSubtitles": "Current Subtitles", + "MessageDownloadQueued": "The download has been queued.", + "MessageAreYouSureDeleteSubtitles": "Are you sure you wish to delete this subtitle file?", + "ButtonRemoteControl": "Remote Control", + "HeaderLatestTvRecordings": "Latest Recordings", + "ButtonOk": "Ok", + "ButtonCancel": "Cancel", + "ButtonRefresh": "Refresh", + "LabelCurrentPath": "Current path:", + "HeaderSelectMediaPath": "Select Media Path", + "HeaderSelectPath": "Select Path", + "ButtonNetwork": "Network", + "MessageDirectoryPickerInstruction": "Network paths can be entered manually in the event the Network button fails to locate your devices. For example, {0} or {1}.", + "HeaderMenu": "Menu", + "ButtonOpen": "Open", + "ButtonOpenInNewTab": "Open in new tab", + "ButtonShuffle": "Shuffle", + "ButtonInstantMix": "Instant mix", + "ButtonResume": "Resume", + "HeaderScenes": "Scenes", + "HeaderAudioTracks": "Audio Tracks", + "HeaderLibraries": "Libraries", + "HeaderSubtitles": "Subtitles", + "HeaderVideoQuality": "Video Quality", + "MessageErrorPlayingVideo": "There was an error playing the video.", + "MessageEnsureOpenTuner": "Please ensure there is an open tuner availalble.", + "ButtonHome": "Home", + "ButtonDashboard": "Dashboard", + "ButtonReports": "Reports", + "ButtonMetadataManager": "Metadata Manager", + "HeaderTime": "Time", + "HeaderName": "Name", + "HeaderAlbum": "Album", + "HeaderAlbumArtist": "Album Artist", + "HeaderArtist": "Artist", + "LabelAddedOnDate": "Added {0}", + "ButtonStart": "Start", + "HeaderChannels": "Channels", + "HeaderMediaFolders": "Media Folders", + "HeaderBlockItemsWithNoRating": "Block items with no rating information:", + "OptionBlockOthers": "Others", + "OptionBlockTvShows": "TV Shows", + "OptionBlockTrailers": "Trailers", + "OptionBlockMusic": "Music", + "OptionBlockMovies": "Movies", + "OptionBlockBooks": "Books", + "OptionBlockGames": "Games", + "OptionBlockLiveTvPrograms": "Live TV Programs", + "OptionBlockLiveTvChannels": "Live TV Channels", + "OptionBlockChannelContent": "Internet Channel Content", + "ButtonRevoke": "Revoke", + "MessageConfirmRevokeApiKey": "Are you sure you wish to revoke this api key? The application's connection to Media Browser will be abruptly terminated.", + "HeaderConfirmRevokeApiKey": "Revoke Api Key", + "ValueContainer": "Container: {0}", + "ValueAudioCodec": "Audio Codec: {0}", + "ValueVideoCodec": "Video Codec: {0}", + "ValueCodec": "Codec: {0}", + "ValueConditions": "Conditions: {0}", + "LabelAll": "All", + "HeaderDeleteImage": "Delete Image", + "MessageFileNotFound": "File not found.", + "MessageFileReadError": "An error occurred reading this file.", + "ButtonNextPage": "Next Page", + "ButtonPreviousPage": "Previous Page", + "ButtonMoveLeft": "Move left", + "ButtonMoveRight": "Move right", + "ButtonBrowseOnlineImages": "Browse online images", + "HeaderDeleteItem": "Delete Item", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", + "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", + "MessageValueNotCorrect": "The value entered is not correct. Please try again.", + "MessageItemSaved": "Item saved.", + "MessagePleaseAcceptTermsOfServiceBeforeContinuing": "Please accept the terms of service before continuing.", + "OptionEnded": "Ended", + "OptionContinuing": "Continuing", + "OptionOff": "Off", + "OptionOn": "On", + "ButtonSettings": "Settings", + "ButtonUninstall": "Uninstall", + "HeaderFields": "Fields", + "HeaderFieldsHelp": "Slide a field to 'off' to lock it and prevent it's data from being changed.", + "HeaderLiveTV": "Live TV", + "MissingLocalTrailer": "Missing local trailer.", + "MissingPrimaryImage": "Missing primary image.", + "MissingBackdropImage": "Missing backdrop image.", + "MissingLogoImage": "Missing logo image.", + "MissingEpisode": "Missing episode.", + "OptionScreenshots": "Screenshots", + "OptionBackdrops": "Backdrops", + "OptionImages": "Images", + "OptionKeywords": "Keywords", + "OptionTags": "Tags", + "OptionStudios": "Studios", + "OptionName": "Name", + "OptionOverview": "Overview", + "OptionGenres": "Genres", + "OptionParentalRating": "Parental Rating", + "OptionPeople": "People", + "OptionRuntime": "Runtime", + "OptionProductionLocations": "Production Locations", + "OptionBirthLocation": "Birth Location", + "LabelAllChannels": "All channels", + "LabelLiveProgram": "LIVE", + "LabelNewProgram": "NEW", + "LabelPremiereProgram": "PREMIERE", + "LabelHDProgram": "HD", + "HeaderChangeFolderType": "Change Content Type", + "HeaderChangeFolderTypeHelp": "To change the type, please remove and rebuild the folder with the new type.", + "HeaderAlert": "Alert", + "MessagePleaseRestart": "Please restart to finish updating.", + "ButtonRestart": "Restart", + "MessagePleaseRefreshPage": "Please refresh this page to receive new updates from the server.", + "ButtonHide": "Hide", + "MessageSettingsSaved": "Settings saved.", + "ButtonSignOut": "Sign Out", + "ButtonMyProfile": "My Profile", + "ButtonMyPreferences": "My Preferences", + "MessageBrowserDoesNotSupportWebSockets": "This browser does not support web sockets. For a better experience, try a newer browser such as Chrome, Firefox, IE10+, Safari (iOS) or Opera.", + "LabelInstallingPackage": "Installing {0}", + "LabelPackageInstallCompleted": "{0} installation completed.", + "LabelPackageInstallFailed": "{0} installation failed.", + "LabelPackageInstallCancelled": "{0} installation cancelled.", + "TabServer": "Server", + "TabUsers": "Users", + "TabLibrary": "Library", + "TabMetadata": "Metadata", + "TabDLNA": "DLNA", + "TabLiveTV": "Live TV", + "TabAutoOrganize": "Auto-Organize", + "TabPlugins": "Plugins", + "TabAdvanced": "Advanced", + "TabHelp": "Help", + "TabScheduledTasks": "Scheduled Tasks", + "ButtonFullscreen": "Celoten zaslon", + "ButtonAudioTracks": "Audio Tracks", + "ButtonSubtitles": "Subtitles", + "ButtonScenes": "Scenes", + "ButtonQuality": "Quality", + "HeaderNotifications": "Notifications", + "HeaderSelectPlayer": "Select Player:", + "ButtonSelect": "Select", + "ButtonNew": "New", + "MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.", + "HeaderVideoError": "Video Error", + "ButtonAddToPlaylist": "Add to playlist", + "HeaderAddToPlaylist": "Add to Playlist", + "LabelName": "Name:", + "ButtonSubmit": "Submit", + "LabelSelectPlaylist": "Playlist:", + "OptionNewPlaylist": "New playlist...", + "MessageAddedToPlaylistSuccess": "Ok", + "ButtonView": "View", + "ButtonViewSeriesRecording": "View series recording", + "ValueOriginalAirDate": "Original air date: {0}", + "ButtonRemoveFromPlaylist": "Remove from playlist", + "HeaderSpecials": "Specials", + "HeaderTrailers": "Trailers", + "HeaderAudio": "Audio", + "HeaderResolution": "Resolution", + "HeaderVideo": "Video", + "HeaderRuntime": "Runtime", + "HeaderCommunityRating": "Community rating", + "HeaderParentalRating": "Parental rating", + "HeaderReleaseDate": "Release date", + "HeaderDateAdded": "Date added", + "HeaderSeries": "Series", + "HeaderSeason": "Season", + "HeaderSeasonNumber": "Season number", + "HeaderNetwork": "Network", + "HeaderYear": "Year", + "HeaderGameSystem": "Game system", + "HeaderPlayers": "Players", + "HeaderEmbeddedImage": "Embedded image", + "HeaderTrack": "Track", + "HeaderDisc": "Disc", + "OptionMovies": "Movies", + "OptionCollections": "Collections", + "OptionSeries": "Series", + "OptionSeasons": "Seasons", + "OptionEpisodes": "Episodes", + "OptionGames": "Games", + "OptionGameSystems": "Game systems", + "OptionMusicArtists": "Music artists", + "OptionMusicAlbums": "Music albums", + "OptionMusicVideos": "Music videos", + "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", + "PersonTypePerson": "Person", + "LabelTitleDisplayOrder": "Title display order:", + "OptionSortName": "Sort name", + "OptionReleaseDate": "Datum izdaje", + "LabelSeasonNumber": "Season number:", + "LabelDiscNumber": "Disc number", + "LabelParentNumber": "Parent number", + "LabelEpisodeNumber": "Episode number:", + "LabelTrackNumber": "Track number:", + "LabelNumber": "Number:", + "LabelReleaseDate": "Release date:", + "LabelEndDate": "End date:", + "LabelYear": "Year:", + "LabelDateOfBirth": "Date of birth:", + "LabelBirthYear": "Birth year:", + "LabelBirthDate": "Birth date:", + "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", + "LabelContentTypeValue": "Content type: {0}", + "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", + "FolderTypeUnset": "Unset (mixed content)", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "TabMovies": "Movies", + "TabSeries": "Series", + "TabEpisodes": "Episodes", + "TabTrailers": "Trailers", + "TabGames": "Games", + "TabAlbums": "Albums", + "TabSongs": "Songs", + "TabMusicVideos": "Music Videos", + "BirthPlaceValue": "Birth place: {0}", + "DeathDateValue": "Died: {0}", + "BirthDateValue": "Born: {0}", + "HeaderLatestReviews": "Latest Reviews", + "HeaderPluginInstallation": "Plugin Installation", + "MessageAlreadyInstalled": "This version is already installed.", + "ValueReviewCount": "{0} Reviews", + "MessageYouHaveVersionInstalled": "You currently have version {0} installed.", + "MessageTrialExpired": "The trial period for this feature has expired", + "MessageTrialWillExpireIn": "The trial period for this feature will expire in {0} day(s)", + "MessageInstallPluginFromApp": "This plugin must be installed from with in the app you intend to use it in.", + "ValuePriceUSD": "Price: {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.", + "ButtonDelete": "Delete", + "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", + "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", + "ValueOneTrailer": "1 trailer", + "ValueTrailerCount": "{0} trailers", + "ValueOneSeries": "1 series", + "ValueSeriesCount": "{0} series", + "ValueOneEpisode": "1 episode", + "ValueEpisodeCount": "{0} episodes", + "ValueOneGame": "1 game", + "ValueGameCount": "{0} games", + "ValueOneAlbum": "1 album", + "ValueAlbumCount": "{0} albums", + "ValueOneSong": "1 song", + "ValueSongCount": "{0} songs", + "ValueOneMusicVideo": "1 music video", + "ValueMusicVideoCount": "{0} music videos", + "HeaderOffline": "Offline", + "HeaderUnaired": "Unaired", + "HeaderMissing": "Missing", + "ButtonWebsite": "Website", + "TooltipFavorite": "Favorite", + "TooltipLike": "Like", + "TooltipDislike": "Dislike", + "TooltipPlayed": "Played", + "ValueSeriesYearToPresent": "{0}-Present", + "ValueAwards": "Awards: {0}", + "ValueBudget": "Budget: {0}", + "ValueRevenue": "Revenue: {0}", + "ValuePremiered": "Premiered {0}", + "ValuePremieres": "Premieres {0}", + "ValueStudio": "Studio: {0}", + "ValueStudios": "Studios: {0}", + "ValueSpecialEpisodeName": "Special - {0}", + "LabelLimit": "Limit:", + "ValueLinks": "Links: {0}", + "HeaderPeople": "People", + "HeaderCastAndCrew": "Cast & Crew", + "ValueArtist": "Artist: {0}", + "ValueArtists": "Artists: {0}", + "HeaderTags": "Tags", + "MediaInfoCameraMake": "Camera make", + "MediaInfoCameraModel": "Camera model", + "MediaInfoAltitude": "Altitude", + "MediaInfoAperture": "Aperture", + "MediaInfoExposureTime": "Exposure time", + "MediaInfoFocalLength": "Focal length", + "MediaInfoOrientation": "Orientation", + "MediaInfoIsoSpeedRating": "Iso speed rating", + "MediaInfoLatitude": "Latitude", + "MediaInfoLongitude": "Longitude", + "MediaInfoShutterSpeed": "Shutter speed", + "MediaInfoSoftware": "Software", + "HeaderIfYouLikeCheckTheseOut": "If you like {0}, check these out...", + "HeaderPlotKeywords": "Plot Keywords", + "HeaderMovies": "Movies", + "HeaderAlbums": "Albums", + "HeaderGames": "Games", + "HeaderBooks": "Books", + "HeaderEpisodes": "Episodes", + "HeaderSeasons": "Seasons", + "HeaderTracks": "Tracks", + "HeaderItems": "Items", + "HeaderOtherItems": "Other Items", + "ButtonFullReview": "Full review", + "ValueAsRole": "as {0}", + "ValueGuestStar": "Guest star", + "MediaInfoSize": "Size", + "MediaInfoPath": "Path", + "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", + "MediaInfoLayout": "Layout", + "MediaInfoLanguage": "Language", + "MediaInfoCodec": "Codec", + "MediaInfoProfile": "Profile", + "MediaInfoLevel": "Level", + "MediaInfoAspectRatio": "Aspect ratio", + "MediaInfoResolution": "Resolution", + "MediaInfoAnamorphic": "Anamorphic", + "MediaInfoInterlaced": "Interlaced", + "MediaInfoFramerate": "Framerate", + "MediaInfoStreamTypeAudio": "Audio", + "MediaInfoStreamTypeData": "Data", + "MediaInfoStreamTypeVideo": "Video", + "MediaInfoStreamTypeSubtitle": "Subtitle", + "MediaInfoStreamTypeEmbeddedImage": "Embedded Image", + "MediaInfoRefFrames": "Ref frames", + "TabPlayback": "Playback", + "TabNotifications": "Notifications", + "TabExpert": "Expert", + "HeaderSelectCustomIntrosPath": "Select Custom Intros Path", + "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", + "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", + "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", + "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", + "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", + "DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.", + "DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.", + "DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.", + "DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.", + "DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere.", + "MessageRefreshQueued": "Refresh queued", + "TabDevices": "Devices", + "TabExtras": "Extras", + "DeviceLastUsedByUserName": "Last used by {0}", + "HeaderDeleteDevice": "Delete Device", + "DeleteDeviceConfirmation": "Are you sure you wish to delete this device? It will reappear the next time a user signs in with it.", + "LabelEnableCameraUploadFor": "Enable camera upload for:", + "HeaderSelectUploadPath": "Select Upload Path", + "LabelEnableCameraUploadForHelp": "Uploads will occur automatically in the background when signed into Media Browser.", + "ErrorMessageStartHourGreaterThanEnd": "End time must be greater than the start time.", + "ButtonLibraryAccess": "Library access", + "ButtonParentalControl": "Parental control", + "HeaderInvitationSent": "Invitation Sent", + "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", + "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.", + "HeaderConnectionFailure": "Connection Failure", + "MessageUnableToConnectToServer": "We're unable to connect to the selected server right now. Please ensure it is running and try again.", + "ButtonSelectServer": "Select server", + "MessagePluginConfigurationRequiresLocalAccess": "To configure this plugin please sign in to your local server directly.", + "MessageLoggedOutParentalControl": "Access is currently restricted. Please try again later.", + "DefaultErrorMessage": "There was an error processing the request. Please try again later.", + "ButtonAccept": "Accept", + "ButtonReject": "Reject", + "HeaderForgotPassword": "Forgot Password", + "MessageContactAdminToResetPassword": "Please contact your system administrator to reset your password.", + "MessageForgotPasswordInNetworkRequired": "Please try again within your home network to initiate the password reset process.", + "MessageForgotPasswordFileCreated": "The following file has been created on your server and contains instructions on how to proceed:", + "MessageForgotPasswordFileExpiration": "The reset pin will expire at {0}.", + "MessageInvalidForgotPasswordPin": "An invalid or expired pin was entered. Please try again.", + "MessagePasswordResetForUsers": "Passwords have been removed for the following users:", + "HeaderInviteGuest": "Invite Guest", + "ButtonLinkMyMediaBrowserAccount": "Link my account now", + "MessageConnectAccountRequiredToInviteGuest": "In order to invite guests you need to first link your Media Browser account to this server.", + "ButtonSync": "Sync", + "SyncMedia": "Sync Media", + "HeaderCancelSyncJob": "Cancel Sync", + "CancelSyncJobConfirmation": "Are you sure you wish to cancel this sync job?", + "TabSync": "Sync", + "MessagePleaseSelectDeviceToSyncTo": "Please select a device to sync to.", + "MessageSyncJobCreated": "Sync job created.", + "LabelSyncTo": "Sync to:", + "LabelSyncJobName": "Sync job name:", + "LabelQuality": "Kvaliteta:", + "OptionHigh": "Visoka", + "OptionMedium": "Srednja", + "OptionLow": "Nizka", + "HeaderSettings": "Nastavitve", + "OptionAutomaticallySyncNewContent": "Samodejno sinhroniziraj nove vsebine", + "OptionAutomaticallySyncNewContentHelp": "Nova vsebina, dodana v to kategorijo, bo samodejno sinhronizirana v napravo", + "OptionSyncUnwatchedVideosOnly": "Sync unwatched videos only", + "OptionSyncUnwatchedVideosOnlyHelp": "Only unwatched videos will be synced, and videos will be removed from the device as they are watched.", + "LabelItemLimit": "Item limit:", + "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", + "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", + "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders.", + "SyncJobItemStatusQueued": "Queued", + "SyncJobItemStatusConverting": "Converting", + "SyncJobItemStatusTransferring": "Transferring", + "SyncJobItemStatusSynced": "Synced", + "SyncJobItemStatusFailed": "Failed", + "SyncJobItemStatusRemovedFromDevice": "Removed from device", + "SyncJobItemStatusCancelled": "Cancelled", + "MessageJobItemHasNoActions": "d" +} \ 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 d484f4e15..373232778 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json @@ -49,8 +49,11 @@ "ButtonHelp": "Hj\u00e4lp", "ButtonSave": "Spara", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "L\u00e4gg till samling", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "V\u00e4lj undertexter", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(f\u00f6rvalda)", "LabelForcedStream": "(tvingade)", "LabelDefaultForcedStream": "(f\u00f6rvalda\/tvingade)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "\u00c4r du s\u00e4ker p\u00e5 att du vill starta om Media Browser Server?", "MessageConfirmShutdown": "\u00c4r du s\u00e4ker p\u00e5 att du vill st\u00e4nga av Media Browser Server?", "ButtonUpdateNow": "Uppdatera nu", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "En ny version av {0} finns tillg\u00e4nglig!", "VersionXIsAvailableForDownload": "Version {0} finns tillg\u00e4nglig f\u00f6r h\u00e4mtning.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json index fb36a3641..4730eea15 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "Kay\u0131t", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/uk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/uk.json index 346c2107e..398e07f32 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/uk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/uk.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "\u0417\u0431\u0435\u0440\u0456\u0433\u0442\u0438", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0434\u043e \u043a\u043e\u043b\u0435\u043a\u0446\u0456\u0457", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json index bf3368b1a..6f81e96b0 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "L\u01b0u", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json index 0fcb4a0a5..1202699b9 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "\u50a8\u5b58", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "\u5408\u96c6", "HeaderAddToCollection": "\u52a0\u5165\u5408\u96c6", @@ -89,9 +92,9 @@ "LabelFree": "\u514d\u8d39", "HeaderSelectAudio": "\u9009\u62e9\u97f3\u9891", "HeaderSelectSubtitles": "\u9009\u62e9\u5b57\u5e55", - "ButtonMarkForRemoval": "\u4ece\u8bbe\u5907\u4e2d\u6807\u8bb0\u5220\u9664", - "ButtonUnmarkForRemoval": "\u4ece\u8bbe\u5907\u4e2d\u53d6\u6d88\u6807\u8bb0\u5220\u9664", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "ButtonMarkForRemoval": "Remove from device", + "ButtonUnmarkForRemoval": "Cancel removal from device", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(\u9ed8\u8ba4)", "LabelForcedStream": "(\u5f3a\u5236)", "LabelDefaultForcedStream": "(\u9ed8\u8ba4\/\u5f3a\u5236)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "\u4f60\u786e\u5b9a\u5e0c\u671b\u91cd\u542fMedia Browser\u670d\u52a1\u5668\uff1f", "MessageConfirmShutdown": "\u4f60\u786e\u5b9a\u5e0c\u671b\u5173\u95edMedia Browser\u670d\u52a1\u5668\uff1f", "ButtonUpdateNow": "\u73b0\u5728\u66f4\u65b0", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "\u4e00\u4e2a\u65b0\u7684\u7248\u672c {0} \u53ef\u7528!", "VersionXIsAvailableForDownload": "\u7248\u672c {0} \u73b0\u5728\u5df2\u7ecf\u53ef\u4ee5\u4e0b\u8f7d\u3002", "LabelVersionNumber": "\u7248\u672c {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json index 6198dddf7..c8126df72 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json @@ -49,8 +49,11 @@ "ButtonHelp": "Help", "ButtonSave": "\u4fdd\u5b58", "SyncJobStatusQueued": "Queued", - "SyncJobStatusInProgress": "In-Progress", + "SyncJobStatusConverting": "Converting", + "SyncJobStatusFailed": "Failed", + "SyncJobStatusCancelled": "Cancelled", "SyncJobStatusCompleted": "Synced", + "SyncJobStatusTransferring": "Transferring", "SyncJobStatusCompletedWithError": "Synced with errors", "LabelCollection": "Collection", "HeaderAddToCollection": "Add to Collection", @@ -91,7 +94,7 @@ "HeaderSelectSubtitles": "Select Subtitles", "ButtonMarkForRemoval": "Remove from device", "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and Low reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", "LabelDefaultStream": "(Default)", "LabelForcedStream": "(Forced)", "LabelDefaultForcedStream": "(Default\/Forced)", @@ -212,6 +215,8 @@ "MessageConfirmRestart": "Are you sure you wish to restart Media Browser Server?", "MessageConfirmShutdown": "Are you sure you wish to shutdown Media Browser Server?", "ButtonUpdateNow": "Update Now", + "ValueItemCount": "{0} item", + "ValueItemCountPlural": "{0} items", "NewVersionOfSomethingAvailable": "A new version of {0} is available!", "VersionXIsAvailableForDownload": "Version {0} is now available for download.", "LabelVersionNumber": "Version {0}", diff --git a/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs b/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs index 173b0e5ce..d94fff9dd 100644 --- a/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs +++ b/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs @@ -381,6 +381,7 @@ namespace MediaBrowser.Server.Implementations.Localization new LocalizatonOption{ Name="Portuguese (Brazil)", Value="pt-BR"}, new LocalizatonOption{ Name="Portuguese (Portugal)", Value="pt-PT"}, new LocalizatonOption{ Name="Russian", Value="ru"}, + new LocalizatonOption{ Name="Slovenian (Slovenia)", Value="sl-SI"}, new LocalizatonOption{ Name="Spanish", Value="es-ES"}, new LocalizatonOption{ Name="Spanish (Mexico)", Value="es-MX"}, new LocalizatonOption{ Name="Swedish", Value="sv"}, diff --git a/MediaBrowser.Server.Implementations/Localization/Server/de.json b/MediaBrowser.Server.Implementations/Localization/Server/de.json index 7804cf296..b43150157 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/de.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/de.json @@ -32,7 +32,7 @@ "LabelEnableVideoImageExtraction": "Aktiviere Videobild-Extrahierung", "VideoImageExtractionHelp": "F\u00fcr Videos die noch keien Bilder haben, und f\u00fcr die wir keine Internetbilder finden k\u00f6nnen. Hierdurch wird der erste Bibliothekenscan etwas mehr Zeit beanspruchen, f\u00fchrt aber zu einer ansprechenderen Pr\u00e4sentation.", "LabelEnableChapterImageExtractionForMovies": "Extrahiere Kapitelbilder f\u00fcr Filme", - "LabelChapterImageExtractionForMoviesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs as a nightly scheduled task, although this is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", + "LabelChapterImageExtractionForMoviesHelp": "Das Extrahieren von Kapitel-Bildern erm\u00f6glicht es den Clients eine grafische Szenenauswahl anzubieten. Das Erstellen ist recht langsam, rechenintensiv und erfordert einige Gigabyte an freien Speicherplatz. Diese Aufgabe startet jede Nacht, das kann aber in den geplanten Aufgaben ge\u00e4ndert werden. Es wird nicht empfohlen diese Aufgabe in Zeiten hoher Server-Auslastung zu starten.", "LabelEnableAutomaticPortMapping": "Aktiviere automatische Portweiterleitung", "LabelEnableAutomaticPortMappingHelp": "UPnP erm\u00f6glicht die automatische Routerkonfiguration f\u00fcr den einfachen Remote-Zugriff. Diese Option ist nicht f\u00fcr jeden Router verf\u00fcgbar.", "HeaderTermsOfService": "Nutzungsbedingungen", @@ -46,7 +46,7 @@ "OptionEnableWebClientResourceMinification": "Aktiviere die Ressourcenminimierung des Web Clients", "LabelDashboardSourcePath": "Web Client Sourcepfad:", "LabelDashboardSourcePathHelp": "Spezifiziere den Pfad zum Dashboard-UI-Verzeichniss, falls der Server von der Source ausgef\u00fchrt wird. Alle Web-Client-Dateien werden von diesem Pfad aus bedient werden.", - "ButtonConvertMedia": "Convert media", + "ButtonConvertMedia": "Konvertiere Medien", "ButtonOrganize": "Organisieren", "ButtonOk": "Ok", "ButtonCancel": "Abbrechen", @@ -56,8 +56,8 @@ "HeaderVideo": "Video", "HeaderPaths": "Pfade", "CategorySync": "Sync", - "HeaderEasyPinCode": "Easy Pin Code", - "RegisterWithPayPal": "Register with PayPal", + "HeaderEasyPinCode": "Einfacher PIN Code", + "RegisterWithPayPal": "Registrieren mit PayPal", "HeaderSyncRequiresSupporterMembership": "Synchronisation ben\u00f6tigt eine Supporter-Mitgliedschaft", "HeaderEnjoyDayTrial": "Genie\u00dfen Sie eine 14 Tage Testversion", "LabelSyncTempPath": "Verzeichnis f\u00fcr tempor\u00e4re Dateien", @@ -346,7 +346,7 @@ "LabelAutomaticUpdatesTvdbHelp": "Falls aktviert, werden Bilder die unter TheTVDB.com neu hinzugef\u00fcgt wurden, automatisch geladen. Vorhandene Bilder werden nicht ersetzt.", "LabelFanartApiKey": "Pers\u00f6nlicher API Schl\u00fcssel:", "LabelFanartApiKeyHelp": "Fanart Anfragen ohne einen pers\u00f6nlichen API Schl\u00fcssel liefert Ergebnisse der letzten 7 Tage. Bei Verwendung eines pers\u00f6nlichen API Schl\u00fcssels werden Ergebnisse der letzten 48 Stunden, und als VIP Member, der letzten 10 Minuten geliefert.", - "ExtractChapterImagesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", + "ExtractChapterImagesHelp": "Das Extrahieren von Kapitel-Bildern erm\u00f6glicht es den Clients eine grafische Szenenauswahl anzubieten. Das Erstellen ist recht langsam, rechenintensiv und erfordert ggf. einige Gigabyte an freien Speicherplatz. Diese Aufgabe startet wenn neue Videos erkannt werden und ebenso als eine n\u00e4chtliche Aufgabe. Es wird nicht empfohlen diese Aufgabe in Zeiten hoher Server-Auslastung zu starten.", "LabelMetadataDownloadLanguage": "Bevorzugte Sprache f\u00fcr Downloads:", "ButtonAutoScroll": "Auto-scroll", "LabelImageSavingConvention": "Speicherconvention der Bilddatein:", @@ -669,7 +669,7 @@ "NotificationOptionInstallationFailed": "Installationsfehler", "NotificationOptionNewLibraryContent": "Neuer Inhalt hinzugef\u00fcgt", "NotificationOptionNewLibraryContentMultiple": "Neuen Inhalte hinzugef\u00fcgt (mehrere)", - "NotificationOptionCameraImageUploaded": "Camera image uploaded", + "NotificationOptionCameraImageUploaded": "Kamera Bild hochgeladen", "SendNotificationHelp": "Standardm\u00e4\u00dfig werden Benachrichtigungen in der Optionsleiste angezeigt. Durchsuche den Plugin Katalog f\u00fcr die Installation von weiteren Benachrichtigungsm\u00f6glichkeiten.", "NotificationOptionServerRestartRequired": "Serverneustart notwendig", "LabelNotificationEnabled": "Aktiviere diese Benachrichtigung", @@ -818,7 +818,7 @@ "HeaderDownloadSubtitlesFor": "Lade Untertitel runter f\u00fcr", "MessageNoChapterProviders": "Installiere ein Plugin f\u00fcr Kapitelinhalte, wie beispielsweise ChapterDb, um weitere Optionen f\u00fcr Kapitel zu erhalten.", "LabelSkipIfGraphicalSubsPresent": "\u00dcberspringen, falls das Video bereits grafische Untertitel enth\u00e4lt", - "LabelSkipIfGraphicalSubsPresentHelp": "Keeping text versions of subtitles will result in more efficient delivery and decrease the likelihood of video transcoding.", + "LabelSkipIfGraphicalSubsPresentHelp": "Das Vorhalten von textbasierten Untertiteln f\u00fchrt zu einer effizienteren Anzeige und verringert die Wahrscheinlichkeit einer Videotranskodierung.", "TabSubtitles": "Untertitel", "TabChapters": "Kapitel", "HeaderDownloadChaptersFor": "Lade Kapitelnamen herunter f\u00fcr:", @@ -888,7 +888,7 @@ "OptionCommunityMostWatchedSort": "Meistgesehen", "TabNextUp": "Als N\u00e4chstes", "HeaderBecomeMediaBrowserSupporter": "Werden Sie ein Media Browser Unterst\u00fctzer", - "TextEnjoyBonusFeatures": "Enjoy Bonus Features", + "TextEnjoyBonusFeatures": "Erleben Sie Bonus Funktionen", "MessageNoMovieSuggestionsAvailable": "Momentan sind keine Filmvorschl\u00e4ge verf\u00fcgbar. Schaue und bewerte zuerst deine Filme. Komme danach zur\u00fcck, um deine Filmvorschl\u00e4ge anzuschauen.", "MessageNoCollectionsAvailable": "Sammlungen erlauben Ihnen eine personalisierte Gruppierung von Filmen, Serien, Alben, B\u00fcchern und Spielen. Klicken Sie die + Schaltfl\u00e4che um Sammlungen zu erstellen.", "MessageNoPlaylistsAvailable": "Wiedergabeliste erlauben es dir eine Liste mit Inhalt zu erstellen der fortlaufend abgespielt wird. Um einer Wiedergabeliste Inhalte hinzuzuf\u00fcgen klicke rechts oder mache einen langen Tap und w\u00e4hle daraufhin \"Zur Wiedergabeliste hinzuf\u00fcgen\" aus.", @@ -953,9 +953,9 @@ "LabelProtocolInfo": "Protokoll Information:", "LabelProtocolInfoHelp": "Der Wert, der f\u00fcr die Beantwortung von GetProtocolInfo Anfragen durch die Endger\u00e4te benutzt wird.", "TabNfo": "Nfo", - "HeaderKodiMetadataHelp": "Media Browser includes native support for Nfo metadata files. To enable or disable Nfo metadata, use the Advanced tab to configure options for your media types.", + "HeaderKodiMetadataHelp": "Media Browser unterst\u00fctzt Nfo Metadaten von Haus aus. Zum Ein und Ausschalten der Nfo Metadaten verwenden Sie die Erweiterte Konfiguration ihrer Medientypen.", "LabelKodiMetadataUser": "Synchronisiere den \"Gesehen\" Status von Benutzern in NFO's f\u00fcr:", - "LabelKodiMetadataUserHelp": "Enable this to keep watch data in sync between Media Browser and Nfo files.", + "LabelKodiMetadataUserHelp": "Schalten Sie dies ein um den \"gesehen Status\" in Media Browser und Nfo-Dateien zu synchronisieren.", "LabelKodiMetadataDateFormat": "Ver\u00f6ffentlichungsdatum Format:", "LabelKodiMetadataDateFormatHelp": "Alle Daten in den NFO's werde unter Benutzung dieses Format gelesen und geschrieben.", "LabelKodiMetadataSaveImagePaths": "Speicher Bildpfade innerhalb der NFO Dateien", @@ -1120,14 +1120,14 @@ "LabelDisplayFoldersView": "Nutze die Verzeichnissansicht f\u00fcr die Darstellung der reinen Medienordner", "ViewTypeLiveTvRecordingGroups": "Aufnahmen", "ViewTypeLiveTvChannels": "Kan\u00e4le", - "LabelEasyPinCode": "Easy pin code:", - "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", - "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", - "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", + "LabelEasyPinCode": "Einfacher pin code:", + "EasyPasswordHelp": "Ihr einfacher PIN Code wird f\u00fcr den offline Zugriff mit unterst\u00fctzenden Media Browser Apps verwenden und kann ebenso verwendet werden wenn Sie sich im selben Netzwerk befinden.", + "LabelInNetworkSignInWithEasyPassword": "Schalte Login mit einfachen Passwort f\u00fcr das eigene Netzwerk ein.", + "LabelInNetworkSignInWithEasyPasswordHelp": "Wenn eingeschaltet k\u00f6nnen Sie sich mit Ihrem einfachen PIN innerhalb Ihres Heimnetzwerkes anmelden. Ihr regul\u00e4res Passwort wird nur dann verwendet, wenn Sie nicht Zuhause sind. Wenn Sie dieses Passwort frei lassen ben\u00f6tigen Sie kein Passwort in Ihrem Heimnetzwerk.", "HeaderPassword": "Passwort", "HeaderLocalAccess": "Lokaler Zugriff", "HeaderViewOrder": "Reihenfolge f\u00fcr Ansichten", - "ButtonResetEasyPassword": "Reset easy pin code", + "ButtonResetEasyPassword": "Einfachen PIN zur\u00fccksetzen", "LabelSelectUserViewOrder": "W\u00e4hle die Reihenfolge in der die Ansichten innerhalb von Media Browser Apps angezeigt werden.", "LabelMetadataRefreshMode": "Metadaten Aktualisierungsmethode:", "LabelImageRefreshMode": "Aktualisierungsmethode f\u00fcr Bilder:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json index 4c3c54c44..3ff603bb4 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json @@ -47,7 +47,7 @@ "LabelDashboardSourcePath": "Web client source path:", "LabelDashboardSourcePathHelp": "If running the server from source, specify the path to the dashboard-ui folder. All web client files will be served from this location.", "ButtonConvertMedia": "Convert media", - "ButtonOrganize": "Organize", + "ButtonOrganize": "Organise", "ButtonOk": "Ok", "ButtonCancel": "Cancel", "ButtonNew": "New", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/it.json b/MediaBrowser.Server.Implementations/Localization/Server/it.json index 1a1e5b852..50ea1b5b9 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/it.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/it.json @@ -32,7 +32,7 @@ "LabelEnableVideoImageExtraction": "Abilita estrazione immagine video", "VideoImageExtractionHelp": "Per i video che sono sprovvisti di immagini, e per i quali non siamo riusciti a trovare immagini su Internet.Questo aggiunger\u00e0 del tempo addizionale alla scansione della tua libreria ma si tradurr\u00e0 in una presentazione pi\u00f9 piacevole.", "LabelEnableChapterImageExtractionForMovies": "Estrazione immagine capitolo estratto per i Film", - "LabelChapterImageExtractionForMoviesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs as a nightly scheduled task, although this is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", + "LabelChapterImageExtractionForMoviesHelp": "L'estrazione delle immagini dai capitoli permetter\u00e0 ai client di avere un men\u00f9 grafico per la selezione delle scene. Il processo potrebbe essere lento, con uso intensivo della CPU e potrebbe richiedere diversi gigabyte di spazio. Viene avviato durante la notte, ad ogni modo \u00e8 configurabile nella sezione azioni pianificate. Non \u00e8 raccomandato l'avvio di questo processo durante le ore di massimo utilizzo.", "LabelEnableAutomaticPortMapping": "Abilita mappatura delle porte automatiche", "LabelEnableAutomaticPortMappingHelp": "UPnP consente la configurazione automatica del router per l'accesso remoto facile. Questo potrebbe non funzionare con alcuni modelli di router.", "HeaderTermsOfService": "Termini di servizio di Media Browser", @@ -346,7 +346,7 @@ "LabelAutomaticUpdatesTvdbHelp": "Se abilitato le nuove immagini verranno scaricate automaticamente da TheTvDB.com. Le immagini esistenti non verranno sovrascritte.", "LabelFanartApiKey": "Chiavi API personali", "LabelFanartApiKeyHelp": "I risultati di richieste per fanart senza una chiave API personale che sono state approvate pi\u00f9 di 7 giorni fa. Con una chiave API personale questo tempo scende a 48 ore, e se sei un membro VIP scender\u00e0 ulteriormente a circa 10 minuti.", - "ExtractChapterImagesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", + "ExtractChapterImagesHelp": "L'estrazione delle immagini dai capitoli permetter\u00e0 ai client di avere un men\u00f9 grafico per la selezione delle scene. Il processo potrebbe essere lento, con uso intensivo della CPU e potrebbe richiedere diversi gigabyte di spazio. Viene avviato quando vengono trovati nuovi video, e anche durante la notte, ad ogni modo \u00e8 configurabile nella sezione azioni pianificate. Non \u00e8 raccomandato l'avvio di questo processo durante le ore di massimo utilizzo.", "LabelMetadataDownloadLanguage": "Lingua preferita per il download:", "ButtonAutoScroll": "Scorrimento automatico", "LabelImageSavingConvention": "Convenzione per il salvataggio di immagini:", @@ -818,7 +818,7 @@ "HeaderDownloadSubtitlesFor": "Scarica sottotitoli per:", "MessageNoChapterProviders": "Installare un plugin provider capitoli come ChapterDb per attivare le opzioni capitolo aggiuntive.", "LabelSkipIfGraphicalSubsPresent": "Salta se il video contiene gi\u00e0 i sottotitoli grafici", - "LabelSkipIfGraphicalSubsPresentHelp": "Keeping text versions of subtitles will result in more efficient delivery and decrease the likelihood of video transcoding.", + "LabelSkipIfGraphicalSubsPresentHelp": "Mantenere le versioni testuali dei sottotitoli si tradurr\u00e0 in una riproduzione pi\u00f9 efficiente e diminuir\u00e0 la probabilit\u00e0 che sia necessaria la transcodifica video", "TabSubtitles": "Sottotitoli", "TabChapters": "capitoli", "HeaderDownloadChaptersFor": "Scarica i nomi dei capitoli per:", @@ -953,9 +953,9 @@ "LabelProtocolInfo": "Info protocollo:", "LabelProtocolInfoHelp": "Il valore che verr\u00e0 utilizzato quando si risponde a richieste GetProtocolInfo dal dispositivo.", "TabNfo": "Nfo", - "HeaderKodiMetadataHelp": "Media Browser includes native support for Nfo metadata files. To enable or disable Nfo metadata, use the Advanced tab to configure options for your media types.", + "HeaderKodiMetadataHelp": "Media Browser include il supporto nativo per i file metadati in formato Nfo. Per abilitare o disabilitare i metadati Nfo, utilizzare la sezione Avanzate per configurare le opzioni per i vostri tipi di file multimediali.", "LabelKodiMetadataUser": "Sincronizza i dati utente a nfo di per:", - "LabelKodiMetadataUserHelp": "Enable this to keep watch data in sync between Media Browser and Nfo files.", + "LabelKodiMetadataUserHelp": "Abilita questa opzione per tenere sincronizzati Media Browser e il file Nfo.", "LabelKodiMetadataDateFormat": "Data di uscita Formato:", "LabelKodiMetadataDateFormatHelp": "Tutte le date all'interno del nfo verranno letti e scritti utilizzando questo formato.", "LabelKodiMetadataSaveImagePaths": "Salva percorsi delle immagini all'interno dei file NFO", @@ -966,7 +966,7 @@ "LabelGroupChannelsIntoViews": "Visualizzare i seguenti canali direttamente dentro le mie visite:", "LabelGroupChannelsIntoViewsHelp": "Se abilitata, questi canali verranno visualizzati direttamente con altre viste. Se disattivato, saranno visualizzati all'interno di una sezione Canali separata.", "LabelDisplayCollectionsView": "Mostra le Collezioni di film", - "LabelDisplayCollectionsViewHelp": "This will create a separate view to display collections that you've created or have access to. To create a collection, right-click or tap-hold any movie and select 'Add to Collection'. ", + "LabelDisplayCollectionsViewHelp": "Questo creer\u00e0 una vista separata per le collezioni che si ha creato o alle quali si ha accesso. Per creare una collezione, cliccare con il tasto destro o effettuare un tocco prolungato su un film e selezionare \"Aggiungi alla collezione\" .", "LabelKodiMetadataEnableExtraThumbs": "Copia extrafanart in extrathumbs", "LabelKodiMetadataEnableExtraThumbsHelp": "Copia extrafanart in extrathumbs", "TabServices": "Servizi", @@ -1120,14 +1120,14 @@ "LabelDisplayFoldersView": "Visualizza cartelle come normali cartelle dei media", "ViewTypeLiveTvRecordingGroups": "Registrazioni", "ViewTypeLiveTvChannels": "canali", - "LabelEasyPinCode": "Easy pin code:", - "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", - "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", - "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", + "LabelEasyPinCode": "Codice Pin", + "EasyPasswordHelp": "Il tuo codice PIN viene usato per l'acceso offline alle app che supportano Media Browser, e pu\u00f2 anche essere utilizzato per un facile accesso tramite la rete locale.", + "LabelInNetworkSignInWithEasyPassword": "Abilita l'accesso da rete locale tramite codice PIN.", + "LabelInNetworkSignInWithEasyPasswordHelp": "se attivato, potrai usare il tuo pin per accedere alle app Media Browser dall'interno della tua rete domestica, La tua password sara necessaria soltanto quando accederai da fuori casa. Se il codice PIN viene lasciato in bianco, non avrai bisogno di alcuna password all'interno della tua rete domestica.", "HeaderPassword": "Password", "HeaderLocalAccess": "Accesso locale", "HeaderViewOrder": "Visualizza ordine", - "ButtonResetEasyPassword": "Reset easy pin code", + "ButtonResetEasyPassword": "Resetta codice PIN", "LabelSelectUserViewOrder": "Scegliere l'ordine vostre opinioni verranno visualizzati in applicazioni all'interno del browser media", "LabelMetadataRefreshMode": "Metadata (modo Aggiornamento)", "LabelImageRefreshMode": "Immagine (modo Aggiornamento)", @@ -1316,7 +1316,7 @@ "MessageNoTrailersFound": "Nessun Trailer trovato.Installa Il plug in dei trailer per importare la libreria dei trailer da internet", "HeaderNewUsers": "Nuovo Utente", "ButtonSignUp": "Iscriviti", - "ButtonForgotPassword": "Forgot password", + "ButtonForgotPassword": "Password Dimenticata", "OptionDisableUserPreferences": "Disabilitare l'accesso alle preferenze dell'utente", "OptionDisableUserPreferencesHelp": "Se abilitato, solo gli amministratori saranno in grado di configurare le immagini del profilo utente, password e preferenze di lingua.", "HeaderSelectServer": "Selezionare il server", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/kk.json b/MediaBrowser.Server.Implementations/Localization/Server/kk.json index 290bb5bdb..e9e1f4f65 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/kk.json @@ -593,7 +593,7 @@ "LabelDeleteLeftOverFiles": "\u041a\u0435\u043b\u0435\u0441\u0456 \u043a\u0435\u04a3\u0435\u0439\u0442\u0456\u043c\u0434\u0435\u0440\u0456 \u0431\u0430\u0440 \u049b\u0430\u043b\u0493\u0430\u043d \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u0434\u044b \u0436\u043e\u044e:", "LabelDeleteLeftOverFilesHelp": "\u041c\u044b\u043d\u0430\u043d\u044b (;) \u0430\u0440\u049b\u044b\u043b\u044b \u0431\u04e9\u043b\u0456\u043f \u0430\u043b\u044b\u04a3\u044b\u0437. \u041c\u044b\u0441\u0430\u043b\u044b: .nfo;.txt", "OptionOverwriteExistingEpisodes": "\u0411\u0430\u0440 \u044d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440\u0434\u044b \u049b\u0430\u0439\u0442\u0430 \u0436\u0430\u0437\u0443", - "LabelTransferMethod": "\u0422\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443 \u04d9\u0434\u0456\u0441\u0456", + "LabelTransferMethod": "\u0410\u0443\u044b\u0441\u0442\u044b\u0440\u0443 \u04d9\u0434\u0456\u0441\u0456", "OptionCopy": "\u041a\u04e9\u0448\u0456\u0440\u0443", "OptionMove": "\u0416\u044b\u043b\u0436\u044b\u0442\u0443", "LabelTransferMethodHelp": "\u049a\u0430\u0434\u0430\u0493\u0430\u043b\u0430\u0443\u0434\u0430\u0493\u044b \u049b\u0430\u043b\u0442\u0430\u0434\u0430\u043d \u0444\u0430\u0439\u043b\u0434\u0430\u0440\u0434\u044b \u043a\u04e9\u0448\u0456\u0440\u0443 \u043d\u0435 \u0436\u044b\u043b\u0436\u044b\u0442\u0443", @@ -616,7 +616,7 @@ "MessagePleaseRestartServerToFinishUpdating": "\u0416\u0430\u04a3\u0430\u0440\u0442\u0443\u043b\u0430\u0440\u0434\u044b\u04a3 \u049b\u043e\u043b\u0434\u0430\u043d\u0443\u044b\u043d \u0430\u044f\u049b\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \u0441\u0435\u0440\u0432\u0435\u0440\u0434\u0456 \u049b\u0430\u0439\u0442\u0430 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u04a3\u044b\u0437", "LabelDownMixAudioScale": "\u041a\u0435\u043c\u0456\u0442\u0456\u043b\u0456\u043f \u043c\u0438\u043a\u0448\u0435\u0440\u043b\u0435\u043d\u0433\u0435\u043d\u0434\u0435 \u0434\u044b\u0431\u044b\u0441 \u04e9\u0442\u0435\u043c\u0456:", "LabelDownMixAudioScaleHelp": "\u0414\u044b\u0431\u044b\u0441\u0442\u044b \u043a\u0435\u043c\u0456\u0442\u0456\u043b\u0456\u043f \u043c\u0438\u043a\u0448\u0435\u0440\u043b\u0435\u043d\u0433\u0435\u043d\u0434\u0435 \u04e9\u0442\u0435\u043c\u0434\u0435\u0443. \u0411\u0430\u0441\u0442\u0430\u043f\u049b\u044b \u0434\u0435\u04a3\u0433\u0435\u0439 \u043c\u04d9\u043d\u0456\u043d \u04e9\u0437\u0433\u0435\u0440\u0442\u043f\u0435\u0443 \u04af\u0448\u0456\u043d 1 \u0441\u0430\u043d\u044b\u043d \u043e\u0440\u043d\u0430\u0442\u044b\u04a3\u044b\u0437..", - "ButtonLinkKeys": "\u041a\u0456\u043b\u0442\u0442\u0435\u0440\u0434\u0456 \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443", + "ButtonLinkKeys": "\u041a\u0456\u043b\u0442\u0442\u0456 \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443", "LabelOldSupporterKey": "\u0416\u0430\u049b\u0442\u0430\u0443\u0448\u044b\u043d\u044b\u04a3 \u0435\u0441\u043a\u0456 \u043a\u0456\u043b\u0442\u0456", "LabelNewSupporterKey": "\u0416\u0430\u049b\u0442\u0430\u0443\u0448\u044b\u043d\u044b\u04a3 \u0436\u0430\u04a3\u0430 \u043a\u0456\u043b\u0442\u0456", "HeaderMultipleKeyLinking": "\u0416\u0430\u04a3\u0430 \u043a\u0456\u043b\u0442\u043a\u0435 \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ru.json b/MediaBrowser.Server.Implementations/Localization/Server/ru.json index 0ecad9dec..77e28b0cd 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ru.json @@ -593,7 +593,7 @@ "LabelDeleteLeftOverFiles": "\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438:", "LabelDeleteLeftOverFilesHelp": "\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0439\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00ab;\u00bb. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: .nfo;.txt", "OptionOverwriteExistingEpisodes": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b", - "LabelTransferMethod": "\u041c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430", + "LabelTransferMethod": "\u041c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430", "OptionCopy": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", "OptionMove": "\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435", "LabelTransferMethodHelp": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f", @@ -619,7 +619,7 @@ "ButtonLinkKeys": "\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043a\u043b\u044e\u0447", "LabelOldSupporterKey": "\u0421\u0442\u0430\u0440\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430", "LabelNewSupporterKey": "\u041d\u043e\u0432\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430", - "HeaderMultipleKeyLinking": "\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443", + "HeaderMultipleKeyLinking": "\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443", "MultipleKeyLinkingHelp": "\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u043e \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043a \u043d\u043e\u0432\u043e\u043c\u0443.", "LabelCurrentEmailAddress": "\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u042d-\u043f\u043e\u0447\u0442\u044b", "LabelCurrentEmailAddressHelp": "\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u042d-\u043f\u043e\u0447\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u044e\u0447.", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/sl_SI.json b/MediaBrowser.Server.Implementations/Localization/Server/sl_SI.json new file mode 100644 index 000000000..44ea51f80 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Localization/Server/sl_SI.json @@ -0,0 +1,1356 @@ +{ + "LabelExit": "Exit", + "LabelVisitCommunity": "Visit Community", + "LabelGithub": "Github", + "LabelSwagger": "Swagger", + "LabelStandard": "Standard", + "LabelApiDocumentation": "Api Documentation", + "LabelDeveloperResources": "Developer Resources", + "LabelBrowseLibrary": "Browse Library", + "LabelConfigureMediaBrowser": "Configure Media Browser", + "LabelOpenLibraryViewer": "Open Library Viewer", + "LabelRestartServer": "Restart Server", + "LabelShowLogWindow": "Show Log Window", + "LabelPrevious": "Previous", + "LabelFinish": "Finish", + "LabelNext": "Next", + "LabelYoureDone": "You're Done!", + "WelcomeToMediaBrowser": "Welcome to Media Browser!", + "TitleMediaBrowser": "Media Browser", + "ThisWizardWillGuideYou": "This wizard will help guide you through the setup process. To begin, please select your preferred language.", + "TellUsAboutYourself": "Tell us about yourself", + "ButtonQuickStartGuide": "Quick start guide", + "LabelYourFirstName": "Your first name:", + "MoreUsersCanBeAddedLater": "More users can be added later within the Dashboard.", + "UserProfilesIntro": "Media Browser includes built-in support for user profiles, enabling each user to have their own display settings, playstate and parental controls.", + "LabelWindowsService": "Windows Service", + "AWindowsServiceHasBeenInstalled": "A Windows Service has been installed.", + "WindowsServiceIntro1": "Media Browser Server normally runs as a desktop application with a tray icon, but if you prefer to run it as a background service, it can be started from the windows services control panel instead.", + "WindowsServiceIntro2": "If using the windows service, please note that it cannot be run at the same time as the tray icon, so you'll need to exit the tray in order to run the service. The service will also need to be configured with administrative privileges via the control panel. Please note that at this time the service is unable to self-update, so new versions will require manual interaction.", + "WizardCompleted": "That's all we need for now. Media Browser has begun collecting information about your media library. Check out some of our apps, and then click Finish<\/b> to view the Server Dashboard<\/b>.", + "LabelConfigureSettings": "Configure settings", + "LabelEnableVideoImageExtraction": "Enable video image extraction", + "VideoImageExtractionHelp": "For videos that don't already have images, and that we're unable to find internet images for. This will add some additional time to the initial library scan but will result in a more pleasing presentation.", + "LabelEnableChapterImageExtractionForMovies": "Extract chapter image extraction for Movies", + "LabelChapterImageExtractionForMoviesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs as a nightly scheduled task, although this is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", + "LabelEnableAutomaticPortMapping": "Enable automatic port mapping", + "LabelEnableAutomaticPortMappingHelp": "UPnP allows automated router configuration for easy remote access. This may not work with some router models.", + "HeaderTermsOfService": "Media Browser Terms of Service", + "MessagePleaseAcceptTermsOfService": "Please accept the terms of service and privacy policy before continuing.", + "OptionIAcceptTermsOfService": "I accept the terms of service", + "ButtonPrivacyPolicy": "Privacy policy", + "ButtonTermsOfService": "Terms of Service", + "HeaderDeveloperOptions": "Developer Options", + "OptionEnableWebClientResponseCache": "Enable web client response caching", + "OptionDisableForDevelopmentHelp": "Configure these as needed for web client development purposes.", + "OptionEnableWebClientResourceMinification": "Enable web client resource minification", + "LabelDashboardSourcePath": "Web client source path:", + "LabelDashboardSourcePathHelp": "If running the server from source, specify the path to the dashboard-ui folder. All web client files will be served from this location.", + "ButtonConvertMedia": "Convert media", + "ButtonOrganize": "Organize", + "ButtonOk": "Ok", + "ButtonCancel": "Cancel", + "ButtonNew": "New", + "HeaderTV": "TV", + "HeaderAudio": "Audio", + "HeaderVideo": "Video", + "HeaderPaths": "Paths", + "CategorySync": "Sync", + "HeaderEasyPinCode": "Easy Pin Code", + "RegisterWithPayPal": "Register with PayPal", + "HeaderSyncRequiresSupporterMembership": "Sync Requires a Supporter Membership", + "HeaderEnjoyDayTrial": "Enjoy a 14 Day Free Trial", + "LabelSyncTempPath": "Temporary file path:", + "LabelSyncTempPathHelp": "Specify a custom sync working folder. Converted media created during the sync process will be stored here.", + "LabelCustomCertificatePath": "Custom certificate path:", + "LabelCustomCertificatePathHelp": "Supply your own ssl certificate. If omitted, the server will create a self-signed certificate.", + "TitleNotifications": "Notifications", + "ButtonDonateWithPayPal": "Donate with PayPal", + "OptionDetectArchiveFilesAsMedia": "Detect archive files as media", + "OptionDetectArchiveFilesAsMediaHelp": "If enabled, files with .rar and .zip extensions will be detected as media files.", + "LabelEnterConnectUserName": "User name or email:", + "LabelEnterConnectUserNameHelp": "This is your Media Browser online account user name or password.", + "HeaderSyncJobInfo": "Sync Job", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", + "TitleScheduledTasks": "Scheduled Tasks", + "HeaderSetupLibrary": "Setup your media library", + "ButtonAddMediaFolder": "Add media folder", + "LabelFolderType": "Folder type:", + "ReferToMediaLibraryWiki": "Refer to the media library wiki.", + "LabelCountry": "Country:", + "LabelLanguage": "Language:", + "ButtonJoinTheDevelopmentTeam": "Join the Development Team", + "HeaderPreferredMetadataLanguage": "Preferred metadata language:", + "LabelSaveLocalMetadata": "Save artwork and metadata into media folders", + "LabelSaveLocalMetadataHelp": "Saving artwork and metadata directly into media folders will put them in a place where they can be easily edited.", + "LabelDownloadInternetMetadata": "Download artwork and metadata from the internet", + "LabelDownloadInternetMetadataHelp": "Media Browser can download information about your media to enable rich presentations.", + "TabPreferences": "Preferences", + "TabPassword": "Password", + "TabLibraryAccess": "Library Access", + "TabAccess": "Access", + "TabImage": "Image", + "TabProfile": "Profile", + "TabMetadata": "Metadata", + "TabImages": "Images", + "TabNotifications": "Notifications", + "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "OptionEnableAccessToAllChannels": "Enable access to all channels", + "OptionEnableAccessToAllLibraries": "Enable access to all libraries", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", + "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", + "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", + "HeaderVideoPlaybackSettings": "Video Playback Settings", + "HeaderPlaybackSettings": "Playback Settings", + "LabelAudioLanguagePreference": "Audio language preference:", + "LabelSubtitleLanguagePreference": "Subtitle language preference:", + "OptionDefaultSubtitles": "Default", + "OptionOnlyForcedSubtitles": "Only forced subtitles", + "OptionAlwaysPlaySubtitles": "Always play subtitles", + "OptionNoSubtitles": "No Subtitles", + "OptionDefaultSubtitlesHelp": "Subtitles matching the language preference will be loaded when the audio is in a foreign language.", + "OptionOnlyForcedSubtitlesHelp": "Only subtitles marked as forced will be loaded.", + "OptionAlwaysPlaySubtitlesHelp": "Subtitles matching the language preference will be loaded regardless of the audio language.", + "OptionNoSubtitlesHelp": "Subtitles will not be loaded by default.", + "TabProfiles": "Profiles", + "TabSecurity": "Security", + "ButtonAddUser": "Add User", + "ButtonAddLocalUser": "Add Local User", + "ButtonInviteUser": "Invite User", + "ButtonSave": "Save", + "ButtonResetPassword": "Reset Password", + "LabelNewPassword": "New password:", + "LabelNewPasswordConfirm": "New password confirm:", + "HeaderCreatePassword": "Create Password", + "LabelCurrentPassword": "Current password:", + "LabelMaxParentalRating": "Maximum allowed parental rating:", + "MaxParentalRatingHelp": "Content with a higher rating will be hidden from this user.", + "LibraryAccessHelp": "Select the media folders to share with this user. Administrators will be able to edit all folders using the metadata manager.", + "ChannelAccessHelp": "Select the channels to share with this user. Administrators will be able to edit all channels using the metadata manager.", + "ButtonDeleteImage": "Delete Image", + "LabelSelectUsers": "Select users:", + "ButtonUpload": "Upload", + "HeaderUploadNewImage": "Upload New Image", + "LabelDropImageHere": "Drop image here", + "ImageUploadAspectRatioHelp": "1:1 Aspect Ratio Recommended. JPG\/PNG only.", + "MessageNothingHere": "Nothing here.", + "MessagePleaseEnsureInternetMetadata": "Please ensure downloading of internet metadata is enabled.", + "TabSuggested": "Suggested", + "TabLatest": "Latest", + "TabUpcoming": "Upcoming", + "TabShows": "Shows", + "TabEpisodes": "Episodes", + "TabGenres": "Genres", + "TabPeople": "People", + "TabNetworks": "Networks", + "HeaderUsers": "Users", + "HeaderFilters": "Filters:", + "ButtonFilter": "Filter", + "OptionFavorite": "Favorites", + "OptionLikes": "Likes", + "OptionDislikes": "Dislikes", + "OptionActors": "Actors", + "OptionGuestStars": "Guest Stars", + "OptionDirectors": "Directors", + "OptionWriters": "Writers", + "OptionProducers": "Producers", + "HeaderResume": "Resume", + "HeaderNextUp": "Next Up", + "NoNextUpItemsMessage": "None found. Start watching your shows!", + "HeaderLatestEpisodes": "Latest Episodes", + "HeaderPersonTypes": "Person Types:", + "TabSongs": "Songs", + "TabAlbums": "Albums", + "TabArtists": "Artists", + "TabAlbumArtists": "Album Artists", + "TabMusicVideos": "Music Videos", + "ButtonSort": "Sort", + "HeaderSortBy": "Sort By:", + "HeaderSortOrder": "Sort Order:", + "OptionPlayed": "Played", + "OptionUnplayed": "Unplayed", + "OptionAscending": "Ascending", + "OptionDescending": "Descending", + "OptionRuntime": "Runtime", + "OptionReleaseDate": "Release Date", + "OptionPlayCount": "Play Count", + "OptionDatePlayed": "Date Played", + "OptionDateAdded": "Date Added", + "OptionAlbumArtist": "Album Artist", + "OptionArtist": "Artist", + "OptionAlbum": "Album", + "OptionTrackName": "Track Name", + "OptionCommunityRating": "Community Rating", + "OptionNameSort": "Name", + "OptionFolderSort": "Folders", + "OptionBudget": "Budget", + "OptionRevenue": "Revenue", + "OptionPoster": "Poster", + "OptionPosterCard": "Poster card", + "OptionBackdrop": "Backdrop", + "OptionTimeline": "Timeline", + "OptionThumb": "Thumb", + "OptionThumbCard": "Thumb card", + "OptionBanner": "Banner", + "OptionCriticRating": "Critic Rating", + "OptionVideoBitrate": "Video Bitrate", + "OptionResumable": "Resumable", + "ScheduledTasksHelp": "Click a task to adjust its schedule.", + "ScheduledTasksTitle": "Scheduled Tasks", + "TabMyPlugins": "My Plugins", + "TabCatalog": "Catalog", + "PluginsTitle": "Plugins", + "HeaderAutomaticUpdates": "Automatic Updates", + "HeaderNowPlaying": "Now Playing", + "HeaderLatestAlbums": "Latest Albums", + "HeaderLatestSongs": "Latest Songs", + "HeaderRecentlyPlayed": "Recently Played", + "HeaderFrequentlyPlayed": "Frequently Played", + "DevBuildWarning": "Dev builds are the bleeding edge. Released often, these build have not been tested. The application may crash and entire features may not work at all.", + "LabelVideoType": "Video Type:", + "OptionBluray": "Bluray", + "OptionDvd": "Dvd", + "OptionIso": "Iso", + "Option3D": "3D", + "LabelFeatures": "Features:", + "LabelService": "Service:", + "LabelStatus": "Status:", + "LabelVersion": "Version:", + "LabelLastResult": "Last result:", + "OptionHasSubtitles": "Subtitles", + "OptionHasTrailer": "Trailer", + "OptionHasThemeSong": "Theme Song", + "OptionHasThemeVideo": "Theme Video", + "TabMovies": "Movies", + "TabStudios": "Studios", + "TabTrailers": "Trailers", + "LabelArtists": "Artists:", + "LabelArtistsHelp": "Separate multiple using ;", + "HeaderLatestMovies": "Latest Movies", + "HeaderLatestTrailers": "Latest Trailers", + "OptionHasSpecialFeatures": "Special Features", + "OptionImdbRating": "IMDb Rating", + "OptionParentalRating": "Parental Rating", + "OptionPremiereDate": "Premiere Date", + "TabBasic": "Basic", + "TabAdvanced": "Advanced", + "HeaderStatus": "Status", + "OptionContinuing": "Continuing", + "OptionEnded": "Ended", + "HeaderAirDays": "Air Days", + "OptionSunday": "Sunday", + "OptionMonday": "Monday", + "OptionTuesday": "Tuesday", + "OptionWednesday": "Wednesday", + "OptionThursday": "Thursday", + "OptionFriday": "Friday", + "OptionSaturday": "Saturday", + "HeaderManagement": "Management", + "LabelManagement": "Management:", + "OptionMissingImdbId": "Missing IMDb Id", + "OptionMissingTvdbId": "Missing TheTVDB Id", + "OptionMissingOverview": "Missing Overview", + "OptionFileMetadataYearMismatch": "File\/Metadata Years Mismatched", + "TabGeneral": "General", + "TitleSupport": "Support", + "TabLog": "Log", + "TabAbout": "About", + "TabSupporterKey": "Supporter Key", + "TabBecomeSupporter": "Become a Supporter", + "MediaBrowserHasCommunity": "Media Browser has a thriving community of users and contributors.", + "CheckoutKnowledgeBase": "Check out our knowledge base to help you get the most out of Media Browser.", + "SearchKnowledgeBase": "Search the Knowledge Base", + "VisitTheCommunity": "Visit the Community", + "VisitMediaBrowserWebsite": "Visit the Media Browser Web Site", + "VisitMediaBrowserWebsiteLong": "Visit the Media Browser Web site to catch the latest news and keep up with the developer blog.", + "OptionHideUser": "Hide this user from login screens", + "OptionHideUserFromLoginHelp": "Useful for private or hidden administrator accounts. The user will need to sign in manually by entering their username and password.", + "OptionDisableUser": "Disable this user", + "OptionDisableUserHelp": "If disabled the server will not allow any connections from this user. Existing connections will be abruptly terminated.", + "HeaderAdvancedControl": "Advanced Control", + "LabelName": "Name:", + "ButtonHelp": "Help", + "OptionAllowUserToManageServer": "Allow this user to manage the server", + "HeaderFeatureAccess": "Feature Access", + "OptionAllowMediaPlayback": "Allow media playback", + "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", + "OptionAllowManageLiveTv": "Allow management of live tv recordings", + "OptionAllowRemoteControlOthers": "Allow remote control of other users", + "OptionAllowRemoteSharedDevices": "Allow remote control of shared devices", + "OptionAllowRemoteSharedDevicesHelp": "Dlna devices are considered shared until a user begins controlling it.", + "HeaderRemoteControl": "Remote Control", + "OptionMissingTmdbId": "Missing Tmdb Id", + "OptionIsHD": "HD", + "OptionIsSD": "SD", + "OptionMetascore": "Metascore", + "ButtonSelect": "Select", + "ButtonGroupVersions": "Group Versions", + "ButtonAddToCollection": "Add to Collection", + "PismoMessage": "Utilizing Pismo File Mount through a donated license.", + "TangibleSoftwareMessage": "Utilizing Tangible Solutions Java\/C# converters through a donated license.", + "HeaderCredits": "Credits", + "PleaseSupportOtherProduces": "Please support other free products we utilize:", + "VersionNumber": "Version {0}", + "TabPaths": "Paths", + "TabServer": "Server", + "TabTranscoding": "Transcoding", + "TitleAdvanced": "Advanced", + "LabelAutomaticUpdateLevel": "Automatic update level", + "OptionRelease": "Official Release", + "OptionBeta": "Beta", + "OptionDev": "Dev (Unstable)", + "LabelAllowServerAutoRestart": "Allow the server to restart automatically to apply updates", + "LabelAllowServerAutoRestartHelp": "The server will only restart during idle periods, when no users are active.", + "LabelEnableDebugLogging": "Enable debug logging", + "LabelRunServerAtStartup": "Run server at startup", + "LabelRunServerAtStartupHelp": "This will start the tray icon on windows startup. To start the windows service, uncheck this and run the service from the windows control panel. Please note that you cannot run both at the same time, so you will need to exit the tray icon before starting the service.", + "ButtonSelectDirectory": "Select Directory", + "LabelCustomPaths": "Specify custom paths where desired. Leave fields empty to use the defaults.", + "LabelCachePath": "Cache path:", + "LabelCachePathHelp": "Specify a custom location for server cache files, such as images.", + "LabelImagesByNamePath": "Images by name path:", + "LabelImagesByNamePathHelp": "Specify a custom location for downloaded actor, genre and studio images.", + "LabelMetadataPath": "Metadata path:", + "LabelMetadataPathHelp": "Specify a custom location for downloaded artwork and metadata, if not saving within media folders.", + "LabelTranscodingTempPath": "Transcoding temporary path:", + "LabelTranscodingTempPathHelp": "This folder contains working files used by the transcoder. Specify a custom path, or leave empty to use the default within the server's data folder.", + "TabBasics": "Basics", + "TabTV": "TV", + "TabGames": "Games", + "TabMusic": "Music", + "TabOthers": "Others", + "HeaderExtractChapterImagesFor": "Extract chapter images for:", + "OptionMovies": "Movies", + "OptionEpisodes": "Episodes", + "OptionOtherVideos": "Other Videos", + "TitleMetadata": "Metadata", + "LabelAutomaticUpdates": "Enable automatic updates", + "LabelAutomaticUpdatesTmdb": "Enable automatic updates from TheMovieDB.org", + "LabelAutomaticUpdatesTvdb": "Enable automatic updates from TheTVDB.com", + "LabelAutomaticUpdatesFanartHelp": "If enabled, new images will be downloaded automatically as they're added to fanart.tv. Existing images will not be replaced.", + "LabelAutomaticUpdatesTmdbHelp": "If enabled, new images will be downloaded automatically as they're added to TheMovieDB.org. Existing images will not be replaced.", + "LabelAutomaticUpdatesTvdbHelp": "If enabled, new images will be downloaded automatically as they're added to TheTVDB.com. Existing images will not be replaced.", + "LabelFanartApiKey": "Personal api key:", + "LabelFanartApiKeyHelp": "Requests to fanart without a personal API key return results that were approved over 7 days ago. With a personal API key that drops to 48 hours and if you are also a fanart VIP member that will further drop to around 10 minutes.", + "ExtractChapterImagesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", + "LabelMetadataDownloadLanguage": "Preferred download language:", + "ButtonAutoScroll": "Auto-scroll", + "LabelImageSavingConvention": "Image saving convention:", + "LabelImageSavingConventionHelp": "Media Browser recognizes images from most major media applications. Choosing your downloading convention is useful if you also use other products.", + "OptionImageSavingCompatible": "Compatible - Media Browser\/Kodi\/Plex", + "OptionImageSavingStandard": "Standard - MB2", + "ButtonSignIn": "Sign In", + "TitleSignIn": "Sign In", + "HeaderPleaseSignIn": "Please sign in", + "LabelUser": "User:", + "LabelPassword": "Password:", + "ButtonManualLogin": "Manual Login", + "PasswordLocalhostMessage": "Passwords are not required when logging in from localhost.", + "TabGuide": "Guide", + "TabChannels": "Channels", + "TabCollections": "Collections", + "HeaderChannels": "Channels", + "TabRecordings": "Recordings", + "TabScheduled": "Scheduled", + "TabSeries": "Series", + "TabFavorites": "Favorites", + "TabMyLibrary": "My Library", + "ButtonCancelRecording": "Cancel Recording", + "HeaderPrePostPadding": "Pre\/Post Padding", + "LabelPrePaddingMinutes": "Pre-padding minutes:", + "OptionPrePaddingRequired": "Pre-padding is required in order to record.", + "LabelPostPaddingMinutes": "Post-padding minutes:", + "OptionPostPaddingRequired": "Post-padding is required in order to record.", + "HeaderWhatsOnTV": "What's On", + "HeaderUpcomingTV": "Upcoming TV", + "TabStatus": "Status", + "TabSettings": "Settings", + "ButtonRefreshGuideData": "Refresh Guide Data", + "ButtonRefresh": "Refresh", + "ButtonAdvancedRefresh": "Advanced Refresh", + "OptionPriority": "Priority", + "OptionRecordOnAllChannels": "Record program on all channels", + "OptionRecordAnytime": "Record program at any time", + "OptionRecordOnlyNewEpisodes": "Record only new episodes", + "HeaderDays": "Days", + "HeaderActiveRecordings": "Active Recordings", + "HeaderLatestRecordings": "Latest Recordings", + "HeaderAllRecordings": "All Recordings", + "ButtonPlay": "Play", + "ButtonEdit": "Edit", + "ButtonRecord": "Record", + "ButtonDelete": "Delete", + "ButtonRemove": "Remove", + "OptionRecordSeries": "Record Series", + "HeaderDetails": "Details", + "TitleLiveTV": "Live TV", + "LabelNumberOfGuideDays": "Number of days of guide data to download:", + "LabelNumberOfGuideDaysHelp": "Downloading more days worth of guide data provides the ability to schedule out further in advance and view more listings, but it will also take longer to download. Auto will choose based on the number of channels.", + "LabelActiveService": "Active Service:", + "LabelActiveServiceHelp": "Multiple tv plugins can be installed but only one can be active at a time.", + "OptionAutomatic": "Auto", + "LiveTvPluginRequired": "A Live TV service provider plugin is required in order to continue.", + "LiveTvPluginRequiredHelp": "Please install one of our available plugins, such as Next Pvr or ServerWmc.", + "LabelCustomizeOptionsPerMediaType": "Customize for media type:", + "OptionDownloadThumbImage": "Thumb", + "OptionDownloadMenuImage": "Menu", + "OptionDownloadLogoImage": "Logo", + "OptionDownloadBoxImage": "Box", + "OptionDownloadDiscImage": "Disc", + "OptionDownloadBannerImage": "Banner", + "OptionDownloadBackImage": "Back", + "OptionDownloadArtImage": "Art", + "OptionDownloadPrimaryImage": "Primary", + "HeaderFetchImages": "Fetch Images:", + "HeaderImageSettings": "Image Settings", + "TabOther": "Other", + "LabelMaxBackdropsPerItem": "Maximum number of backdrops per item:", + "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", + "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", + "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", + "ButtonAdd": "Add", + "LabelTriggerType": "Trigger Type:", + "OptionDaily": "Daily", + "OptionWeekly": "Weekly", + "OptionOnInterval": "On an interval", + "OptionOnAppStartup": "On application startup", + "OptionAfterSystemEvent": "After a system event", + "LabelDay": "Day:", + "LabelTime": "Time:", + "LabelEvent": "Event:", + "OptionWakeFromSleep": "Wake from sleep", + "LabelEveryXMinutes": "Every:", + "HeaderTvTuners": "Tuners", + "HeaderGallery": "Gallery", + "HeaderLatestGames": "Latest Games", + "HeaderRecentlyPlayedGames": "Recently Played Games", + "TabGameSystems": "Game Systems", + "TitleMediaLibrary": "Media Library", + "TabFolders": "Folders", + "TabPathSubstitution": "Path Substitution", + "LabelSeasonZeroDisplayName": "Season 0 display name:", + "LabelEnableRealtimeMonitor": "Enable real time monitoring", + "LabelEnableRealtimeMonitorHelp": "Changes will be processed immediately, on supported file systems.", + "ButtonScanLibrary": "Scan Library", + "HeaderNumberOfPlayers": "Players:", + "OptionAnyNumberOfPlayers": "Any", + "Option1Player": "1+", + "Option2Player": "2+", + "Option3Player": "3+", + "Option4Player": "4+", + "HeaderMediaFolders": "Media Folders", + "HeaderThemeVideos": "Theme Videos", + "HeaderThemeSongs": "Theme Songs", + "HeaderScenes": "Scenes", + "HeaderAwardsAndReviews": "Awards and Reviews", + "HeaderSoundtracks": "Soundtracks", + "HeaderMusicVideos": "Music Videos", + "HeaderSpecialFeatures": "Special Features", + "HeaderCastCrew": "Cast & Crew", + "HeaderAdditionalParts": "Additional Parts", + "ButtonSplitVersionsApart": "Split Versions Apart", + "ButtonPlayTrailer": "Trailer", + "LabelMissing": "Missing", + "LabelOffline": "Offline", + "PathSubstitutionHelp": "Path substitutions are used for mapping a path on the server to a path that clients are able to access. By allowing clients direct access to media on the server they may be able to play them directly over the network and avoid using server resources to stream and transcode them.", + "HeaderFrom": "From", + "HeaderTo": "To", + "LabelFrom": "From:", + "LabelFromHelp": "Example: D:\\Movies (on the server)", + "LabelTo": "To:", + "LabelToHelp": "Example: \\\\MyServer\\Movies (a path clients can access)", + "ButtonAddPathSubstitution": "Add Substitution", + "OptionSpecialEpisode": "Specials", + "OptionMissingEpisode": "Missing Episodes", + "OptionUnairedEpisode": "Unaired Episodes", + "OptionEpisodeSortName": "Episode Sort Name", + "OptionSeriesSortName": "Series Name", + "OptionTvdbRating": "Tvdb Rating", + "HeaderTranscodingQualityPreference": "Transcoding Quality Preference:", + "OptionAutomaticTranscodingHelp": "The server will decide quality and speed", + "OptionHighSpeedTranscodingHelp": "Lower quality, but faster encoding", + "OptionHighQualityTranscodingHelp": "Higher quality, but slower encoding", + "OptionMaxQualityTranscodingHelp": "Best quality with slower encoding and high CPU usage", + "OptionHighSpeedTranscoding": "Higher speed", + "OptionHighQualityTranscoding": "Higher quality", + "OptionMaxQualityTranscoding": "Max quality", + "OptionEnableDebugTranscodingLogging": "Enable debug transcoding logging", + "OptionEnableDebugTranscodingLoggingHelp": "This will create very large log files and is only recommended as needed for troubleshooting purposes.", + "OptionUpscaling": "Allow clients to request upscaled video", + "OptionUpscalingHelp": "In some cases this will result in improved video quality but will increase CPU usage.", + "EditCollectionItemsHelp": "Add or remove any movies, series, albums, books or games you wish to group within this collection.", + "HeaderAddTitles": "Add Titles", + "LabelEnableDlnaPlayTo": "Enable DLNA Play To", + "LabelEnableDlnaPlayToHelp": "Media Browser can detect devices within your network and offer the ability to remote control them.", + "LabelEnableDlnaDebugLogging": "Enable DLNA debug logging", + "LabelEnableDlnaDebugLoggingHelp": "This will create large log files and should only be used as needed for troubleshooting purposes.", + "LabelEnableDlnaClientDiscoveryInterval": "Client discovery interval (seconds)", + "LabelEnableDlnaClientDiscoveryIntervalHelp": "Determines the duration in seconds between SSDP searches performed by Media Browser.", + "HeaderCustomDlnaProfiles": "Custom Profiles", + "HeaderSystemDlnaProfiles": "System Profiles", + "CustomDlnaProfilesHelp": "Create a custom profile to target a new device or override a system profile.", + "SystemDlnaProfilesHelp": "System profiles are read-only. Changes to a system profile will be saved to a new custom profile.", + "TitleDashboard": "Dashboard", + "TabHome": "Home", + "TabInfo": "Info", + "HeaderLinks": "Links", + "HeaderSystemPaths": "System Paths", + "LinkCommunity": "Community", + "LinkGithub": "Github", + "LinkApi": "Api", + "LinkApiDocumentation": "Api Documentation", + "LabelFriendlyServerName": "Friendly server name:", + "LabelFriendlyServerNameHelp": "This name will be used to identify this server. If left blank, the computer name will be used.", + "LabelPreferredDisplayLanguage": "Preferred display language:", + "LabelPreferredDisplayLanguageHelp": "Translating Media Browser is an ongoing project and is not yet complete.", + "LabelReadHowYouCanContribute": "Read about how you can contribute.", + "HeaderNewCollection": "New Collection", + "ButtonSubmit": "Submit", + "ButtonCreate": "Create", + "LabelCustomCss": "Custom css:", + "LabelCustomCssHelp": "Apply your own custom css to the web interface.", + "LabelLocalHttpServerPortNumber": "Local http port number:", + "LabelLocalHttpServerPortNumberHelp": "The tcp port number that Media Browser's http server should bind to.", + "LabelPublicHttpPort": "Public http port number:", + "LabelPublicHttpPortHelp": "The public port number that should be mapped to the local http port.", + "LabelPublicHttpsPort": "Public https port number:", + "LabelPublicHttpsPortHelp": "The public port number that should be mapped to the local https port.", + "LabelEnableHttps": "Report https as external address", + "LabelEnableHttpsHelp": "If enabled, the server will report an https url to clients as it's external address. This may break clients that do not yet support https.", + "LabelHttpsPort": "Local https port number:", + "LabelHttpsPortHelp": "The tcp port number that Media Browser's https server should bind to.", + "LabelWebSocketPortNumber": "Web socket port number:", + "LabelEnableAutomaticPortMap": "Enable automatic port mapping", + "LabelEnableAutomaticPortMapHelp": "Attempt to automatically map the public port to the local port via UPnP. This may not work with some router models.", + "LabelExternalDDNS": "External WAN Address:", + "LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here. Media Browser apps will use it when connecting remotely. Leave empty for automatic detection.", + "TabResume": "Resume", + "TabWeather": "Weather", + "TitleAppSettings": "App Settings", + "LabelMinResumePercentage": "Min resume percentage:", + "LabelMaxResumePercentage": "Max resume percentage:", + "LabelMinResumeDuration": "Min resume duration (seconds):", + "LabelMinResumePercentageHelp": "Titles are assumed unplayed if stopped before this time", + "LabelMaxResumePercentageHelp": "Titles are assumed fully played if stopped after this time", + "LabelMinResumeDurationHelp": "Titles shorter than this will not be resumable", + "TitleAutoOrganize": "Auto-Organize", + "TabActivityLog": "Activity Log", + "HeaderName": "Name", + "HeaderDate": "Date", + "HeaderSource": "Source", + "HeaderDestination": "Destination", + "HeaderProgram": "Program", + "HeaderClients": "Clients", + "LabelCompleted": "Completed", + "LabelFailed": "Failed", + "LabelSkipped": "Skipped", + "HeaderEpisodeOrganization": "Episode Organization", + "LabelSeries": "Series:", + "LabelSeasonNumber": "Season number:", + "LabelEpisodeNumber": "Episode number:", + "LabelEndingEpisodeNumber": "Ending episode number:", + "LabelEndingEpisodeNumberHelp": "Only required for multi-episode files", + "HeaderSupportTheTeam": "Support the Media Browser Team", + "LabelSupportAmount": "Amount (USD)", + "HeaderSupportTheTeamHelp": "Help ensure the continued development of this project by donating. A portion of all donations will be contributed to other free tools we depend on.", + "ButtonEnterSupporterKey": "Enter supporter key", + "DonationNextStep": "Once complete, please return and enter your supporter key, which you will receive by email.", + "AutoOrganizeHelp": "Auto-organize monitors your download folders for new files and moves them to your media directories.", + "AutoOrganizeTvHelp": "TV file organizing will only add episodes to existing series. It will not create new series folders.", + "OptionEnableEpisodeOrganization": "Enable new episode organization", + "LabelWatchFolder": "Watch folder:", + "LabelWatchFolderHelp": "The server will poll this folder during the 'Organize new media files' scheduled task.", + "ButtonViewScheduledTasks": "View scheduled tasks", + "LabelMinFileSizeForOrganize": "Minimum file size (MB):", + "LabelMinFileSizeForOrganizeHelp": "Files under this size will be ignored.", + "LabelSeasonFolderPattern": "Season folder pattern:", + "LabelSeasonZeroFolderName": "Season zero folder name:", + "HeaderEpisodeFilePattern": "Episode file pattern", + "LabelEpisodePattern": "Episode pattern:", + "LabelMultiEpisodePattern": "Multi-Episode pattern:", + "HeaderSupportedPatterns": "Supported Patterns", + "HeaderTerm": "Term", + "HeaderPattern": "Pattern", + "HeaderResult": "Result", + "LabelDeleteEmptyFolders": "Delete empty folders after organizing", + "LabelDeleteEmptyFoldersHelp": "Enable this to keep the download directory clean.", + "LabelDeleteLeftOverFiles": "Delete left over files with the following extensions:", + "LabelDeleteLeftOverFilesHelp": "Separate with ;. For example: .nfo;.txt", + "OptionOverwriteExistingEpisodes": "Overwrite existing episodes", + "LabelTransferMethod": "Transfer method", + "OptionCopy": "Copy", + "OptionMove": "Move", + "LabelTransferMethodHelp": "Copy or move files from the watch folder", + "HeaderLatestNews": "Latest News", + "HeaderHelpImproveMediaBrowser": "Help Improve Media Browser", + "HeaderRunningTasks": "Running Tasks", + "HeaderActiveDevices": "Active Devices", + "HeaderPendingInstallations": "Pending Installations", + "HeaderServerInformation": "Server Information", + "ButtonRestartNow": "Restart Now", + "ButtonRestart": "Restart", + "ButtonShutdown": "Shutdown", + "ButtonUpdateNow": "Update Now", + "TabHosting": "Hosting", + "PleaseUpdateManually": "Please shutdown the server and update manually.", + "NewServerVersionAvailable": "A new version of Media Browser Server is available!", + "ServerUpToDate": "Media Browser Server is up to date", + "ErrorConnectingToMediaBrowserRepository": "There was an error connecting to the remote Media Browser repository.", + "LabelComponentsUpdated": "The following components have been installed or updated:", + "MessagePleaseRestartServerToFinishUpdating": "Please restart the server to finish applying updates.", + "LabelDownMixAudioScale": "Audio boost when downmixing:", + "LabelDownMixAudioScaleHelp": "Boost audio when downmixing. Set to 1 to preserve original volume value.", + "ButtonLinkKeys": "Transfer Key", + "LabelOldSupporterKey": "Old supporter key", + "LabelNewSupporterKey": "New supporter key", + "HeaderMultipleKeyLinking": "Transfer to New Key", + "MultipleKeyLinkingHelp": "If you received a new supporter key, use this form to transfer the old key's registrations to your new one.", + "LabelCurrentEmailAddress": "Current email address", + "LabelCurrentEmailAddressHelp": "The current email address to which your new key was sent.", + "HeaderForgotKey": "Forgot Key", + "LabelEmailAddress": "Email address", + "LabelSupporterEmailAddress": "The email address that was used to purchase the key.", + "ButtonRetrieveKey": "Retrieve Key", + "LabelSupporterKey": "Supporter Key (paste from email)", + "LabelSupporterKeyHelp": "Enter your supporter key to start enjoying additional benefits the community has developed for Media Browser.", + "MessageInvalidKey": "Supporter key is missing or invalid.", + "ErrorMessageInvalidKey": "In order for any premium content to be registered, you must also be a Media Browser Supporter. Please donate and support the continued development of the core product. Thank you.", + "HeaderDisplaySettings": "Display Settings", + "TabPlayTo": "Play To", + "LabelEnableDlnaServer": "Enable Dlna server", + "LabelEnableDlnaServerHelp": "Allows UPnP devices on your network to browse and play Media Browser content.", + "LabelEnableBlastAliveMessages": "Blast alive messages", + "LabelEnableBlastAliveMessagesHelp": "Enable this if the server is not detected reliably by other UPnP devices on your network.", + "LabelBlastMessageInterval": "Alive message interval (seconds)", + "LabelBlastMessageIntervalHelp": "Determines the duration in seconds between server alive messages.", + "LabelDefaultUser": "Default user:", + "LabelDefaultUserHelp": "Determines which user library should be displayed on connected devices. This can be overridden for each device using profiles.", + "TitleDlna": "DLNA", + "TitleChannels": "Channels", + "HeaderServerSettings": "Server Settings", + "LabelWeatherDisplayLocation": "Weather display location:", + "LabelWeatherDisplayLocationHelp": "US zip code \/ City, State, Country \/ City, Country", + "LabelWeatherDisplayUnit": "Weather display unit:", + "OptionCelsius": "Celsius", + "OptionFahrenheit": "Fahrenheit", + "HeaderRequireManualLogin": "Require manual username entry for:", + "HeaderRequireManualLoginHelp": "When disabled clients may present a login screen with a visual selection of users.", + "OptionOtherApps": "Other apps", + "OptionMobileApps": "Mobile apps", + "HeaderNotificationList": "Click on a notification to configure it's sending options.", + "NotificationOptionApplicationUpdateAvailable": "Application update available", + "NotificationOptionApplicationUpdateInstalled": "Application update installed", + "NotificationOptionPluginUpdateInstalled": "Plugin update installed", + "NotificationOptionPluginInstalled": "Plugin installed", + "NotificationOptionPluginUninstalled": "Plugin uninstalled", + "NotificationOptionVideoPlayback": "Video playback started", + "NotificationOptionAudioPlayback": "Audio playback started", + "NotificationOptionGamePlayback": "Game playback started", + "NotificationOptionVideoPlaybackStopped": "Video playback stopped", + "NotificationOptionAudioPlaybackStopped": "Audio playback stopped", + "NotificationOptionGamePlaybackStopped": "Game playback stopped", + "NotificationOptionTaskFailed": "Scheduled task failure", + "NotificationOptionInstallationFailed": "Installation failure", + "NotificationOptionNewLibraryContent": "New content added", + "NotificationOptionNewLibraryContentMultiple": "New content added (multiple)", + "NotificationOptionCameraImageUploaded": "Camera image uploaded", + "SendNotificationHelp": "By default, notifications are delivered to the dashboard inbox. Browse the plugin catalog to install additional notification options.", + "NotificationOptionServerRestartRequired": "Server restart required", + "LabelNotificationEnabled": "Enable this notification", + "LabelMonitorUsers": "Monitor activity from:", + "LabelSendNotificationToUsers": "Send the notification to:", + "LabelUseNotificationServices": "Use the following services:", + "CategoryUser": "User", + "CategorySystem": "System", + "CategoryApplication": "Application", + "CategoryPlugin": "Plugin", + "LabelMessageTitle": "Message title:", + "LabelAvailableTokens": "Available tokens:", + "AdditionalNotificationServices": "Browse the plugin catalog to install additional notification services.", + "OptionAllUsers": "All users", + "OptionAdminUsers": "Administrators", + "OptionCustomUsers": "Custom", + "ButtonArrowUp": "Up", + "ButtonArrowDown": "Down", + "ButtonArrowLeft": "Left", + "ButtonArrowRight": "Right", + "ButtonBack": "Back", + "ButtonInfo": "Info", + "ButtonOsd": "On screen display", + "ButtonPageUp": "Page Up", + "ButtonPageDown": "Page Down", + "PageAbbreviation": "PG", + "ButtonHome": "Home", + "ButtonSearch": "Search", + "ButtonSettings": "Settings", + "ButtonTakeScreenshot": "Capture Screenshot", + "ButtonLetterUp": "Letter Up", + "ButtonLetterDown": "Letter Down", + "PageButtonAbbreviation": "PG", + "LetterButtonAbbreviation": "A", + "TabNowPlaying": "Now Playing", + "TabNavigation": "Navigation", + "TabControls": "Controls", + "ButtonFullscreen": "Toggle fullscreen", + "ButtonScenes": "Scenes", + "ButtonSubtitles": "Subtitles", + "ButtonAudioTracks": "Audio tracks", + "ButtonPreviousTrack": "Previous track", + "ButtonNextTrack": "Next track", + "ButtonStop": "Stop", + "ButtonPause": "Pause", + "ButtonNext": "Next", + "ButtonPrevious": "Previous", + "LabelGroupMoviesIntoCollections": "Group movies into collections", + "LabelGroupMoviesIntoCollectionsHelp": "When displaying movie lists, movies belonging to a collection will be displayed as one grouped item.", + "NotificationOptionPluginError": "Plugin failure", + "ButtonVolumeUp": "Volume up", + "ButtonVolumeDown": "Volume down", + "ButtonMute": "Mute", + "HeaderLatestMedia": "Latest Media", + "OptionSpecialFeatures": "Special Features", + "HeaderCollections": "Collections", + "LabelProfileCodecsHelp": "Separated by comma. This can be left empty to apply to all codecs.", + "LabelProfileContainersHelp": "Separated by comma. This can be left empty to apply to all containers.", + "HeaderResponseProfile": "Response Profile", + "LabelType": "Type:", + "LabelPersonRole": "Role:", + "LabelPersonRoleHelp": "Role is generally only applicable to actors.", + "LabelProfileContainer": "Container:", + "LabelProfileVideoCodecs": "Video codecs:", + "LabelProfileAudioCodecs": "Audio codecs:", + "LabelProfileCodecs": "Codecs:", + "HeaderDirectPlayProfile": "Direct Play Profile", + "HeaderTranscodingProfile": "Transcoding Profile", + "HeaderCodecProfile": "Codec Profile", + "HeaderCodecProfileHelp": "Codec profiles indicate the limitations of a device when playing specific codecs. If a limitation applies then the media will be transcoded, even if the codec is configured for direct play.", + "HeaderContainerProfile": "Container Profile", + "HeaderContainerProfileHelp": "Container profiles indicate the limitations of a device when playing specific formats. If a limitation applies then the media will be transcoded, even if the format is configured for direct play.", + "OptionProfileVideo": "Video", + "OptionProfileAudio": "Audio", + "OptionProfileVideoAudio": "Video Audio", + "OptionProfilePhoto": "Photo", + "LabelUserLibrary": "User library:", + "LabelUserLibraryHelp": "Select which user library to display to the device. Leave empty to inherit the default setting.", + "OptionPlainStorageFolders": "Display all folders as plain storage folders", + "OptionPlainStorageFoldersHelp": "If enabled, all folders are represented in DIDL as \"object.container.storageFolder\" instead of a more specific type, such as \"object.container.person.musicArtist\".", + "OptionPlainVideoItems": "Display all videos as plain video items", + "OptionPlainVideoItemsHelp": "If enabled, all videos are represented in DIDL as \"object.item.videoItem\" instead of a more specific type, such as \"object.item.videoItem.movie\".", + "LabelSupportedMediaTypes": "Supported Media Types:", + "TabIdentification": "Identification", + "HeaderIdentification": "Identification", + "TabDirectPlay": "Direct Play", + "TabContainers": "Containers", + "TabCodecs": "Codecs", + "TabResponses": "Responses", + "HeaderProfileInformation": "Profile Information", + "LabelEmbedAlbumArtDidl": "Embed album art in Didl", + "LabelEmbedAlbumArtDidlHelp": "Some devices prefer this method for obtaining album art. Others may fail to play with this option enabled.", + "LabelAlbumArtPN": "Album art PN:", + "LabelAlbumArtHelp": "PN used for album art, within the dlna:profileID attribute on upnp:albumArtURI. Some clients require a specific value, regardless of the size of the image.", + "LabelAlbumArtMaxWidth": "Album art max width:", + "LabelAlbumArtMaxWidthHelp": "Max resolution of album art exposed via upnp:albumArtURI.", + "LabelAlbumArtMaxHeight": "Album art max height:", + "LabelAlbumArtMaxHeightHelp": "Max resolution of album art exposed via upnp:albumArtURI.", + "LabelIconMaxWidth": "Icon max width:", + "LabelIconMaxWidthHelp": "Max resolution of icons exposed via upnp:icon.", + "LabelIconMaxHeight": "Icon max height:", + "LabelIconMaxHeightHelp": "Max resolution of icons exposed via upnp:icon.", + "LabelIdentificationFieldHelp": "A case-insensitive substring or regex expression.", + "HeaderProfileServerSettingsHelp": "These values control how Media Browser will present itself to the device.", + "LabelMaxBitrate": "Max bitrate:", + "LabelMaxBitrateHelp": "Specify a max bitrate in bandwidth constrained environments, or if the device imposes it's own limit.", + "LabelMaxStreamingBitrate": "Max streaming bitrate:", + "LabelMaxStreamingBitrateHelp": "Specify a max bitrate when streaming.", + "LabelMaxStaticBitrate": "Max sync bitrate:", + "LabelMaxStaticBitrateHelp": "Specify a max bitrate when syncing content at high quality.", + "LabelMusicStaticBitrate": "Music sync bitrate:", + "LabelMusicStaticBitrateHelp": "Specify a max bitrate when syncing music", + "LabelMusicStreamingTranscodingBitrate": "Music transcoding bitrate:", + "LabelMusicStreamingTranscodingBitrateHelp": "Specify a max bitrate when streaming music", + "OptionIgnoreTranscodeByteRangeRequests": "Ignore transcode byte range requests", + "OptionIgnoreTranscodeByteRangeRequestsHelp": "If enabled, these requests will be honored but will ignore the byte range header.", + "LabelFriendlyName": "Friendly name", + "LabelManufacturer": "Manufacturer", + "LabelManufacturerUrl": "Manufacturer url", + "LabelModelName": "Model name", + "LabelModelNumber": "Model number", + "LabelModelDescription": "Model description", + "LabelModelUrl": "Model url", + "LabelSerialNumber": "Serial number", + "LabelDeviceDescription": "Device description", + "HeaderIdentificationCriteriaHelp": "Enter at least one identification criteria.", + "HeaderDirectPlayProfileHelp": "Add direct play profiles to indicate which formats the device can handle natively.", + "HeaderTranscodingProfileHelp": "Add transcoding profiles to indicate which formats should be used when transcoding is required.", + "HeaderResponseProfileHelp": "Response profiles provide a way to customize information sent to the device when playing certain kinds of media.", + "LabelXDlnaCap": "X-Dlna cap:", + "LabelXDlnaCapHelp": "Determines the content of the X_DLNACAP element in the urn:schemas-dlna-org:device-1-0 namespace.", + "LabelXDlnaDoc": "X-Dlna doc:", + "LabelXDlnaDocHelp": "Determines the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.", + "LabelSonyAggregationFlags": "Sony aggregation flags:", + "LabelSonyAggregationFlagsHelp": "Determines the content of the aggregationFlags element in the urn:schemas-sonycom:av namespace.", + "LabelTranscodingContainer": "Container:", + "LabelTranscodingVideoCodec": "Video codec:", + "LabelTranscodingVideoProfile": "Video profile:", + "LabelTranscodingAudioCodec": "Audio codec:", + "OptionEnableM2tsMode": "Enable M2ts mode", + "OptionEnableM2tsModeHelp": "Enable m2ts mode when encoding to mpegts.", + "OptionEstimateContentLength": "Estimate content length when transcoding", + "OptionReportByteRangeSeekingWhenTranscoding": "Report that the server supports byte seeking when transcoding", + "OptionReportByteRangeSeekingWhenTranscodingHelp": "This is required for some devices that don't time seek very well.", + "HeaderSubtitleDownloadingHelp": "When Media Browser scans your video files it can search for missing subtitles, and download them using a subtitle provider such as OpenSubtitles.org.", + "HeaderDownloadSubtitlesFor": "Download subtitles for:", + "MessageNoChapterProviders": "Install a chapter provider plugin such as ChapterDb to enable additional chapter options.", + "LabelSkipIfGraphicalSubsPresent": "Skip if the video already contains graphical subtitles", + "LabelSkipIfGraphicalSubsPresentHelp": "Keeping text versions of subtitles will result in more efficient delivery and decrease the likelihood of video transcoding.", + "TabSubtitles": "Subtitles", + "TabChapters": "Chapters", + "HeaderDownloadChaptersFor": "Download chapter names for:", + "LabelOpenSubtitlesUsername": "Open Subtitles username:", + "LabelOpenSubtitlesPassword": "Open Subtitles password:", + "HeaderChapterDownloadingHelp": "When Media Browser scans your video files it can download friendly chapter names from the internet using chapter plugins such as ChapterDb.", + "LabelPlayDefaultAudioTrack": "Play default audio track regardless of language", + "LabelSubtitlePlaybackMode": "Subtitle mode:", + "LabelDownloadLanguages": "Download languages:", + "ButtonRegister": "Register", + "LabelSkipIfAudioTrackPresent": "Skip if the default audio track matches the download language", + "LabelSkipIfAudioTrackPresentHelp": "Uncheck this to ensure all videos have subtitles, regardless of audio language.", + "HeaderSendMessage": "Send Message", + "ButtonSend": "Send", + "LabelMessageText": "Message text:", + "MessageNoAvailablePlugins": "No available plugins.", + "LabelDisplayPluginsFor": "Display plugins for:", + "PluginTabMediaBrowserClassic": "MB Classic", + "PluginTabMediaBrowserTheater": "MB Theater", + "LabelEpisodeNamePlain": "Episode name", + "LabelSeriesNamePlain": "Series name", + "ValueSeriesNamePeriod": "Series.name", + "ValueSeriesNameUnderscore": "Series_name", + "ValueEpisodeNamePeriod": "Episode.name", + "ValueEpisodeNameUnderscore": "Episode_name", + "LabelSeasonNumberPlain": "Season number", + "LabelEpisodeNumberPlain": "Episode number", + "LabelEndingEpisodeNumberPlain": "Ending episode number", + "HeaderTypeText": "Enter Text", + "LabelTypeText": "Text", + "HeaderSearchForSubtitles": "Search for Subtitles", + "MessageNoSubtitleSearchResultsFound": "No search results founds.", + "TabDisplay": "Display", + "TabLanguages": "Languages", + "TabWebClient": "Web Client", + "LabelEnableThemeSongs": "Enable theme songs", + "LabelEnableBackdrops": "Enable backdrops", + "LabelEnableThemeSongsHelp": "If enabled, theme songs will be played in the background while browsing the library.", + "LabelEnableBackdropsHelp": "If enabled, backdrops will be displayed in the background of some pages while browsing the library.", + "HeaderHomePage": "Home Page", + "HeaderSettingsForThisDevice": "Settings for This Device", + "OptionAuto": "Auto", + "OptionYes": "Yes", + "OptionNo": "No", + "HeaderOptions": "Options", + "HeaderIdentificationResult": "Identification Result", + "LabelHomePageSection1": "Home page section 1:", + "LabelHomePageSection2": "Home page section 2:", + "LabelHomePageSection3": "Home page section 3:", + "LabelHomePageSection4": "Home page section 4:", + "OptionMyViewsButtons": "My views (buttons)", + "OptionMyViews": "My views", + "OptionMyViewsSmall": "My views (small)", + "OptionResumablemedia": "Resume", + "OptionLatestMedia": "Latest media", + "OptionLatestChannelMedia": "Latest channel items", + "HeaderLatestChannelItems": "Latest Channel Items", + "OptionNone": "None", + "HeaderLiveTv": "Live TV", + "HeaderReports": "Reports", + "HeaderMetadataManager": "Metadata Manager", + "HeaderPreferences": "Preferences", + "MessageLoadingChannels": "Loading channel content...", + "MessageLoadingContent": "Loading content...", + "ButtonMarkRead": "Mark Read", + "OptionDefaultSort": "Default", + "OptionCommunityMostWatchedSort": "Most Watched", + "TabNextUp": "Next Up", + "HeaderBecomeMediaBrowserSupporter": "Become a Media Browser Supporter", + "TextEnjoyBonusFeatures": "Enjoy Bonus Features", + "MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.", + "MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the + button to start creating Collections.", + "MessageNoPlaylistsAvailable": "Playlists allow you to create lists of content to play consecutively at a time. To add items to playlists, right click or tap and hold, then select Add to Playlist.", + "MessageNoPlaylistItemsAvailable": "This playlist is currently empty.", + "ButtonDismiss": "Dismiss", + "ButtonEditOtherUserPreferences": "Edit this user's profile, password and personal preferences.", + "LabelChannelStreamQuality": "Preferred internet stream quality:", + "LabelChannelStreamQualityHelp": "In a low bandwidth environment, limiting quality can help ensure a smooth streaming experience.", + "OptionBestAvailableStreamQuality": "Best available", + "LabelEnableChannelContentDownloadingFor": "Enable channel content downloading for:", + "LabelEnableChannelContentDownloadingForHelp": "Some channels support downloading content prior to viewing. Enable this in low bandwidth enviornments to download channel content during off hours. Content is downloaded as part of the channel download scheduled task.", + "LabelChannelDownloadPath": "Channel content download path:", + "LabelChannelDownloadPathHelp": "Specify a custom download path if desired. Leave empty to download to an internal program data folder.", + "LabelChannelDownloadAge": "Delete content after: (days)", + "LabelChannelDownloadAgeHelp": "Downloaded content older than this will be deleted. It will remain playable via internet streaming.", + "ChannelSettingsFormHelp": "Install channels such as Trailers and Vimeo in the plugin catalog.", + "ButtonOptions": "Options", + "ViewTypeMovies": "Movies", + "ViewTypeTvShows": "TV", + "ViewTypeGames": "Games", + "ViewTypeMusic": "Music", + "ViewTypeMusicGenres": "Genres", + "ViewTypeMusicArtists": "Artists", + "ViewTypeBoxSets": "Collections", + "ViewTypeChannels": "Channels", + "ViewTypeLiveTV": "Live TV", + "ViewTypeLiveTvNowPlaying": "Now Airing", + "ViewTypeLatestGames": "Latest Games", + "ViewTypeRecentlyPlayedGames": "Recently Played", + "ViewTypeGameFavorites": "Favorites", + "ViewTypeGameSystems": "Game Systems", + "ViewTypeGameGenres": "Genres", + "ViewTypeTvResume": "Resume", + "ViewTypeTvNextUp": "Next Up", + "ViewTypeTvLatest": "Latest", + "ViewTypeTvShowSeries": "Series", + "ViewTypeTvGenres": "Genres", + "ViewTypeTvFavoriteSeries": "Favorite Series", + "ViewTypeTvFavoriteEpisodes": "Favorite Episodes", + "ViewTypeMovieResume": "Resume", + "ViewTypeMovieLatest": "Latest", + "ViewTypeMovieMovies": "Movies", + "ViewTypeMovieCollections": "Collections", + "ViewTypeMovieFavorites": "Favorites", + "ViewTypeMovieGenres": "Genres", + "ViewTypeMusicLatest": "Latest", + "ViewTypeMusicAlbums": "Albums", + "ViewTypeMusicAlbumArtists": "Album Artists", + "HeaderOtherDisplaySettings": "Display Settings", + "ViewTypeMusicSongs": "Songs", + "ViewTypeMusicFavorites": "Favorites", + "ViewTypeMusicFavoriteAlbums": "Favorite Albums", + "ViewTypeMusicFavoriteArtists": "Favorite Artists", + "ViewTypeMusicFavoriteSongs": "Favorite Songs", + "HeaderMyViews": "My Views", + "LabelSelectFolderGroups": "Automatically group content from the following folders into views such as Movies, Music and TV:", + "LabelSelectFolderGroupsHelp": "Folders that are unchecked will be displayed by themselves in their own view.", + "OptionDisplayAdultContent": "Display adult content", + "OptionLibraryFolders": "Media folders", + "TitleRemoteControl": "Remote Control", + "OptionLatestTvRecordings": "Latest recordings", + "LabelProtocolInfo": "Protocol info:", + "LabelProtocolInfoHelp": "The value that will be used when responding to GetProtocolInfo requests from the device.", + "TabNfo": "Nfo", + "HeaderKodiMetadataHelp": "Media Browser includes native support for Nfo metadata files. To enable or disable Nfo metadata, use the Advanced tab to configure options for your media types.", + "LabelKodiMetadataUser": "Sync user watch data to nfo's for:", + "LabelKodiMetadataUserHelp": "Enable this to keep watch data in sync between Media Browser and Nfo files.", + "LabelKodiMetadataDateFormat": "Release date format:", + "LabelKodiMetadataDateFormatHelp": "All dates within nfo's will be read and written to using this format.", + "LabelKodiMetadataSaveImagePaths": "Save image paths within nfo files", + "LabelKodiMetadataSaveImagePathsHelp": "This is recommended if you have image file names that don't conform to Kodi guidelines.", + "LabelKodiMetadataEnablePathSubstitution": "Enable path substitution", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.", + "LabelKodiMetadataEnablePathSubstitutionHelp2": "See path substitution.", + "LabelGroupChannelsIntoViews": "Display the following channels directly within my views:", + "LabelGroupChannelsIntoViewsHelp": "If enabled, these channels will be displayed directly alongside other views. If disabled, they'll be displayed within a separate Channels view.", + "LabelDisplayCollectionsView": "Display a collections view to show movie collections", + "LabelDisplayCollectionsViewHelp": "This will create a separate view to display collections that you've created or have access to. To create a collection, right-click or tap-hold any movie and select 'Add to Collection'. ", + "LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs", + "LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs for maximum Kodi skin compatibility.", + "TabServices": "Services", + "TabLogs": "Logs", + "HeaderServerLogFiles": "Server log files:", + "TabBranding": "Branding", + "HeaderBrandingHelp": "Customize the appearance of Media Browser to fit the needs of your group or organization.", + "LabelLoginDisclaimer": "Login disclaimer:", + "LabelLoginDisclaimerHelp": "This will be displayed at the bottom of the login page.", + "LabelAutomaticallyDonate": "Automatically donate this amount every month", + "LabelAutomaticallyDonateHelp": "You can cancel at any time via your PayPal account.", + "OptionList": "List", + "TabDashboard": "Dashboard", + "TitleServer": "Server", + "LabelCache": "Cache:", + "LabelLogs": "Logs:", + "LabelMetadata": "Metadata:", + "LabelImagesByName": "Images by name:", + "LabelTranscodingTemporaryFiles": "Transcoding temporary files:", + "HeaderLatestMusic": "Latest Music", + "HeaderBranding": "Branding", + "HeaderApiKeys": "Api Keys", + "HeaderApiKeysHelp": "External applications are required to have an Api key in order to communicate with Media Browser. Keys are issued by logging in with a Media Browser account, or by manually granting the application a key.", + "HeaderApiKey": "Api Key", + "HeaderApp": "App", + "HeaderDevice": "Device", + "HeaderUser": "User", + "HeaderDateIssued": "Date Issued", + "LabelChapterName": "Chapter {0}", + "HeaderNewApiKey": "New Api Key", + "LabelAppName": "App name", + "LabelAppNameExample": "Example: Sickbeard, NzbDrone", + "HeaderNewApiKeyHelp": "Grant an application permission to communicate with Media Browser.", + "HeaderHttpHeaders": "Http Headers", + "HeaderIdentificationHeader": "Identification Header", + "LabelValue": "Value:", + "LabelMatchType": "Match type:", + "OptionEquals": "Equals", + "OptionRegex": "Regex", + "OptionSubstring": "Substring", + "TabView": "View", + "TabSort": "Sort", + "TabFilter": "Filter", + "ButtonView": "View", + "LabelPageSize": "Item limit:", + "LabelPath": "Path:", + "LabelView": "View:", + "TabUsers": "Users", + "LabelSortName": "Sort name:", + "LabelDateAdded": "Date added:", + "HeaderFeatures": "Features", + "HeaderAdvanced": "Advanced", + "ButtonSync": "Sync", + "TabScheduledTasks": "Scheduled Tasks", + "HeaderChapters": "Chapters", + "HeaderResumeSettings": "Resume Settings", + "TabSync": "Sync", + "TitleUsers": "Users", + "LabelProtocol": "Protocol:", + "OptionProtocolHttp": "Http", + "OptionProtocolHls": "Http Live Streaming", + "LabelContext": "Context:", + "OptionContextStreaming": "Streaming", + "OptionContextStatic": "Sync", + "ButtonAddToPlaylist": "Add to playlist", + "TabPlaylists": "Playlists", + "ButtonClose": "Close", + "LabelAllLanguages": "All languages", + "HeaderBrowseOnlineImages": "Browse Online Images", + "LabelSource": "Source:", + "OptionAll": "All", + "LabelImage": "Image:", + "ButtonBrowseImages": "Browse Images", + "HeaderImages": "Images", + "HeaderBackdrops": "Backdrops", + "HeaderScreenshots": "Screenshots", + "HeaderAddUpdateImage": "Add\/Update Image", + "LabelJpgPngOnly": "JPG\/PNG only", + "LabelImageType": "Image type:", + "OptionPrimary": "Primary", + "OptionArt": "Art", + "OptionBox": "Box", + "OptionBoxRear": "Box rear", + "OptionDisc": "Disc", + "OptionLogo": "Logo", + "OptionMenu": "Menu", + "OptionScreenshot": "Screenshot", + "OptionLocked": "Locked", + "OptionUnidentified": "Unidentified", + "OptionMissingParentalRating": "Missing parental rating", + "OptionStub": "Stub", + "HeaderEpisodes": "Episodes:", + "OptionSeason0": "Season 0", + "LabelReport": "Report:", + "OptionReportSongs": "Songs", + "OptionReportSeries": "Series", + "OptionReportSeasons": "Seasons", + "OptionReportTrailers": "Trailers", + "OptionReportMusicVideos": "Music videos", + "OptionReportMovies": "Movies", + "OptionReportHomeVideos": "Home videos", + "OptionReportGames": "Games", + "OptionReportEpisodes": "Episodes", + "OptionReportCollections": "Collections", + "OptionReportBooks": "Books", + "OptionReportArtists": "Artists", + "OptionReportAlbums": "Albums", + "OptionReportAdultVideos": "Adult videos", + "ButtonMore": "More", + "HeaderActivity": "Activity", + "ScheduledTaskStartedWithName": "{0} started", + "ScheduledTaskCancelledWithName": "{0} was cancelled", + "ScheduledTaskCompletedWithName": "{0} completed", + "ScheduledTaskFailed": "Scheduled task completed", + "PluginInstalledWithName": "{0} was installed", + "PluginUpdatedWithName": "{0} was updated", + "PluginUninstalledWithName": "{0} was uninstalled", + "ScheduledTaskFailedWithName": "{0} failed", + "ItemAddedWithName": "{0} was added to the library", + "ItemRemovedWithName": "{0} was removed from the library", + "DeviceOnlineWithName": "{0} is connected", + "UserOnlineFromDevice": "{0} is online from {1}", + "DeviceOfflineWithName": "{0} has disconnected", + "UserOfflineFromDevice": "{0} has disconnected from {1}", + "SubtitlesDownloadedForItem": "Subtitles downloaded for {0}", + "SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}", + "LabelRunningTimeValue": "Running time: {0}", + "LabelIpAddressValue": "Ip address: {0}", + "UserConfigurationUpdatedWithName": "User configuration has been updated for {0}", + "UserCreatedWithName": "User {0} has been created", + "UserPasswordChangedWithName": "Password has been changed for user {0}", + "UserDeletedWithName": "User {0} has been deleted", + "MessageServerConfigurationUpdated": "Server configuration has been updated", + "MessageNamedServerConfigurationUpdatedWithValue": "Server configuration section {0} has been updated", + "MessageApplicationUpdated": "Media Browser Server has been updated", + "AuthenticationSucceededWithUserName": "{0} successfully authenticated", + "FailedLoginAttemptWithUserName": "Failed login attempt from {0}", + "UserStartedPlayingItemWithValues": "{0} has started playing {1}", + "UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}", + "AppDeviceValues": "App: {0}, Device: {1}", + "ProviderValue": "Provider: {0}", + "LabelChannelDownloadSizeLimit": "Download size limit (GB):", + "LabelChannelDownloadSizeLimitHelpText": "Limit the size of the channel download folder.", + "HeaderRecentActivity": "Recent Activity", + "HeaderPeople": "People", + "HeaderDownloadPeopleMetadataFor": "Download biography and images for:", + "OptionComposers": "Composers", + "OptionOthers": "Others", + "HeaderDownloadPeopleMetadataForHelp": "Enabling additional options will provide more on-screen information but will result in slower library scans.", + "ViewTypeFolders": "Folders", + "LabelDisplayFoldersView": "Display a folders view to show plain media folders", + "ViewTypeLiveTvRecordingGroups": "Recordings", + "ViewTypeLiveTvChannels": "Channels", + "LabelEasyPinCode": "Easy pin code:", + "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", + "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", + "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", + "HeaderPassword": "Password", + "HeaderLocalAccess": "Local Access", + "HeaderViewOrder": "View Order", + "ButtonResetEasyPassword": "Reset easy pin code", + "LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", + "LabelMetadataRefreshMode": "Metadata refresh mode:", + "LabelImageRefreshMode": "Image refresh mode:", + "OptionDownloadMissingImages": "Download missing images", + "OptionReplaceExistingImages": "Replace existing images", + "OptionRefreshAllData": "Refresh all data", + "OptionAddMissingDataOnly": "Add missing data only", + "OptionLocalRefreshOnly": "Local refresh only", + "HeaderRefreshMetadata": "Refresh Metadata", + "HeaderPersonInfo": "Person Info", + "HeaderIdentifyItem": "Identify Item", + "HeaderIdentifyItemHelp": "Enter one or more search criteria. Remove criteria to increase search results.", + "HeaderConfirmDeletion": "Confirm Deletion", + "LabelFollowingFileWillBeDeleted": "The following file will be deleted:", + "LabelIfYouWishToContinueWithDeletion": "If you wish to continue, please confirm by entering the value of:", + "ButtonIdentify": "Identify", + "LabelAlbumArtist": "Album artist:", + "LabelAlbum": "Album:", + "LabelCommunityRating": "Community rating:", + "LabelVoteCount": "Vote count:", + "LabelMetascore": "Metascore:", + "LabelCriticRating": "Critic rating:", + "LabelCriticRatingSummary": "Critic rating summary:", + "LabelAwardSummary": "Award summary:", + "LabelWebsite": "Website:", + "LabelTagline": "Tagline:", + "LabelOverview": "Overview:", + "LabelShortOverview": "Short overview:", + "LabelReleaseDate": "Release date:", + "LabelYear": "Year:", + "LabelPlaceOfBirth": "Place of birth:", + "LabelEndDate": "End date:", + "LabelAirDate": "Air days:", + "LabelAirTime:": "Air time:", + "LabelRuntimeMinutes": "Run time (minutes):", + "LabelParentalRating": "Parental rating:", + "LabelCustomRating": "Custom rating:", + "LabelBudget": "Budget", + "LabelRevenue": "Revenue ($):", + "LabelOriginalAspectRatio": "Original aspect ratio:", + "LabelPlayers": "Players:", + "Label3DFormat": "3D format:", + "HeaderAlternateEpisodeNumbers": "Alternate Episode Numbers", + "HeaderSpecialEpisodeInfo": "Special Episode Info", + "HeaderExternalIds": "External Id's:", + "LabelDvdSeasonNumber": "Dvd season number:", + "LabelDvdEpisodeNumber": "Dvd episode number:", + "LabelAbsoluteEpisodeNumber": "Absolute episode number:", + "LabelAirsBeforeSeason": "Airs before season:", + "LabelAirsAfterSeason": "Airs after season:", + "LabelAirsBeforeEpisode": "Airs before episode:", + "LabelTreatImageAs": "Treat image as:", + "LabelDisplayOrder": "Display order:", + "LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in", + "HeaderCountries": "Countries", + "HeaderGenres": "Genres", + "HeaderPlotKeywords": "Plot Keywords", + "HeaderStudios": "Studios", + "HeaderTags": "Tags", + "HeaderMetadataSettings": "Metadata Settings", + "LabelLockItemToPreventChanges": "Lock this item to prevent future changes", + "MessageLeaveEmptyToInherit": "Leave empty to inherit settings from a parent item, or the global default value.", + "TabDonate": "Donate", + "HeaderDonationType": "Donation type:", + "OptionMakeOneTimeDonation": "Make a separate donation", + "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.", + "OptionLifeTimeSupporterMembership": "Lifetime supporter membership", + "OptionYearlySupporterMembership": "Yearly supporter membership", + "OptionMonthlySupporterMembership": "Monthly supporter membership", + "OptionNoTrailer": "No Trailer", + "OptionNoThemeSong": "No Theme Song", + "OptionNoThemeVideo": "No Theme Video", + "LabelOneTimeDonationAmount": "Donation amount:", + "ButtonDonate": "Donate", + "OptionActor": "Actor", + "OptionComposer": "Composer", + "OptionDirector": "Director", + "OptionGuestStar": "Guest star", + "OptionProducer": "Producer", + "OptionWriter": "Writer", + "LabelAirDays": "Air days:", + "LabelAirTime": "Air time:", + "HeaderMediaInfo": "Media Info", + "HeaderPhotoInfo": "Photo Info", + "HeaderInstall": "Install", + "LabelSelectVersionToInstall": "Select version to install:", + "LinkSupporterMembership": "Learn about the Supporter Membership", + "MessageSupporterPluginRequiresMembership": "This plugin will require an active supporter membership after the 14 day free trial.", + "MessagePremiumPluginRequiresMembership": "This plugin will require an active supporter membership in order to purchase after the 14 day free trial.", + "HeaderReviews": "Reviews", + "HeaderDeveloperInfo": "Developer Info", + "HeaderRevisionHistory": "Revision History", + "ButtonViewWebsite": "View website", + "LabelRecurringDonationCanBeCancelledHelp": "Recurring donations can be cancelled at any time from within your PayPal account.", + "HeaderXmlSettings": "Xml Settings", + "HeaderXmlDocumentAttributes": "Xml Document Attributes", + "HeaderXmlDocumentAttribute": "Xml Document Attribute", + "XmlDocumentAttributeListHelp": "These attributes are applied to the root element of every xml response.", + "OptionSaveMetadataAsHidden": "Save metadata and images as hidden files", + "LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan", + "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.", + "LabelConnectGuestUserName": "Their Media Browser username or email address:", + "LabelConnectUserName": "Media Browser username\/email:", + "LabelConnectUserNameHelp": "Connect this user to a Media Browser account to enable easy sign-in access from Media Browser any app without having to know the server ip address.", + "ButtonLearnMoreAboutMediaBrowserConnect": "Learn more about Media Browser Connect", + "LabelExternalPlayers": "External players:", + "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", + "HeaderSubtitleProfiles": "Subtitle Profiles", + "HeaderSubtitleProfilesHelp": "Subtitle profiles describe the subtitle formats supported by the device.", + "LabelFormat": "Format:", + "LabelMethod": "Method:", + "LabelDidlMode": "Didl mode:", + "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", + "OptionResElement": "res element", + "OptionEmbedSubtitles": "Embed within container", + "OptionExternallyDownloaded": "External download", + "OptionHlsSegmentedSubtitles": "Hls segmented subtitles", + "LabelSubtitleFormatHelp": "Example: srt", + "ButtonLearnMore": "Learn more", + "TabPlayback": "Playback", + "HeaderLanguagePreferences": "Language Preferences", + "TabCinemaMode": "Cinema Mode", + "TitlePlayback": "Playback", + "LabelEnableCinemaModeFor": "Enable cinema mode for:", + "CinemaModeConfigurationHelp": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", + "OptionTrailersFromMyMovies": "Include trailers from movies in my library", + "OptionUpcomingMoviesInTheaters": "Include trailers from new and upcoming movies", + "LabelLimitIntrosToUnwatchedContent": "Only use trailers from unwatched content", + "LabelEnableIntroParentalControl": "Enable smart parental control", + "LabelEnableIntroParentalControlHelp": "Trailers will only be selected with a parental rating equal to or less than the content being watched.", + "LabelTheseFeaturesRequireSupporterHelpAndTrailers": "These features require an active supporter membership and installation of the Trailer channel plugin.", + "OptionTrailersFromMyMoviesHelp": "Requires setup of local trailers.", + "LabelCustomIntrosPath": "Custom intros path:", + "LabelCustomIntrosPathHelp": "A folder containing video files. A video will be randomly selected and played after trailers.", + "ValueSpecialEpisodeName": "Special - {0}", + "LabelSelectInternetTrailersForCinemaMode": "Internet trailers:", + "OptionUpcomingDvdMovies": "Include trailers from new and upcoming movies on Dvd & Blu-ray", + "OptionUpcomingStreamingMovies": "Include trailers from new and upcoming movies on Netflix", + "LabelDisplayTrailersWithinMovieSuggestions": "Display trailers within movie suggestions", + "LabelDisplayTrailersWithinMovieSuggestionsHelp": "Requires installation of the Trailer channel.", + "CinemaModeConfigurationHelp2": "Individual users will have the ability to disable cinema mode within their own preferences.", + "LabelEnableCinemaMode": "Enable cinema mode", + "HeaderCinemaMode": "Cinema Mode", + "LabelDateAddedBehavior": "Date added behavior for new content:", + "OptionDateAddedImportTime": "Use date scanned into the library", + "OptionDateAddedFileTime": "Use file creation date", + "LabelDateAddedBehaviorHelp": "If a metadata value is present it will always be used before either of these options.", + "LabelNumberTrailerToPlay": "Number of trailers to play:", + "TitleDevices": "Devices", + "TabCameraUpload": "Camera Upload", + "TabDevices": "Devices", + "HeaderCameraUploadHelp": "Automatically upload photos and videos taken from your mobile devices into Media Browser.", + "MessageNoDevicesSupportCameraUpload": "You currently don't have any devices that support camera upload.", + "LabelCameraUploadPath": "Camera upload path:", + "LabelCameraUploadPathHelp": "Select a custom upload path, if desired. If unspecified a default folder will be used. If using a custom path it will also need to be added in the library setup area.", + "LabelCreateCameraUploadSubfolder": "Create a subfolder for each device", + "LabelCreateCameraUploadSubfolderHelp": "Specific folders can be assigned to a device by clicking on it from the Devices page.", + "LabelCustomDeviceDisplayName": "Display name:", + "LabelCustomDeviceDisplayNameHelp": "Supply a custom display name or leave empty to use the name reported by the device.", + "HeaderInviteUser": "Invite User", + "LabelConnectGuestUserNameHelp": "This is the username that your friend uses to sign in to the Media Browser website, or their email address.", + "HeaderInviteUserHelp": "Sharing your media with friends is easier than ever before with Media Browser Connect.", + "ButtonSendInvitation": "Send Invitation", + "HeaderSignInWithConnect": "Sign in with Media Browser Connect", + "HeaderGuests": "Guests", + "HeaderLocalUsers": "Local Users", + "HeaderPendingInvitations": "Pending Invitations", + "TabParentalControl": "Parental Control", + "HeaderAccessSchedule": "Access Schedule", + "HeaderAccessScheduleHelp": "Create an access schedule to limit access to certain hours.", + "ButtonAddSchedule": "Add Schedule", + "LabelAccessDay": "Day of week:", + "LabelAccessStart": "Start time:", + "LabelAccessEnd": "End time:", + "HeaderSchedule": "Schedule", + "OptionEveryday": "Every day", + "OptionWeekdays": "Weekdays", + "OptionWeekends": "Weekends", + "MessageProfileInfoSynced": "User profile information synced with Media Browser Connect.", + "HeaderOptionalLinkMediaBrowserAccount": "Optional: Link your Media Browser account", + "ButtonTrailerReel": "Trailer reel", + "HeaderTrailerReel": "Trailer Reel", + "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", + "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", + "HeaderNewUsers": "New Users", + "ButtonSignUp": "Sign up", + "ButtonForgotPassword": "Forgot password", + "OptionDisableUserPreferences": "Disable access to user preferences", + "OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.", + "HeaderSelectServer": "Select Server", + "MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to accept it below or by clicking the link in the email.", + "TitleNewUser": "New User", + "ButtonConfigurePassword": "Configure Password", + "HeaderDashboardUserPassword": "User passwords are managed within each user's personal profile settings.", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderLatestItems": "Latest Items", + "LabelSelectLastestItemsFolders": "Include media from the following sections in Latest Items", + "HeaderShareMediaFolders": "Share Media Folders", + "MessageGuestSharingPermissionsHelp": "Most features are initially unavailable to guests but can be enabled as needed.", + "HeaderInvitations": "Invitations", + "LabelForgotPasswordUsernameHelp": "Enter your username, if you remember it.", + "HeaderForgotPassword": "Forgot Password", + "TitleForgotPassword": "Forgot Password", + "TitlePasswordReset": "Password Reset", + "LabelPasswordRecoveryPinCode": "Pin code:", + "HeaderPasswordReset": "Password Reset", + "HeaderParentalRatings": "Parental Ratings", + "HeaderVideoTypes": "Video Types", + "HeaderYears": "Years", + "HeaderAddTag": "Add Tag", + "LabelBlockItemsWithTags": "Block items with tags:", + "LabelTag": "Tag:", + "LabelEnableSingleImageInDidlLimit": "Limit to single embedded image", + "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", + "TabActivity": "Activity", + "TitleSync": "Sync", + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)", + "TabJobs": "Jobs", + "TabSyncJobs": "Sync Jobs" +} \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 0247856b2..bf11e4ef6 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -420,6 +420,8 @@ + + diff --git a/MediaBrowser.Server.Implementations/Sync/CloudSyncProvider.cs b/MediaBrowser.Server.Implementations/Sync/CloudSyncProvider.cs index c48f62820..a84377238 100644 --- a/MediaBrowser.Server.Implementations/Sync/CloudSyncProvider.cs +++ b/MediaBrowser.Server.Implementations/Sync/CloudSyncProvider.cs @@ -12,7 +12,7 @@ namespace MediaBrowser.Server.Implementations.Sync { public class CloudSyncProvider : IServerSyncProvider { - private ICloudSyncProvider[] _providers = {}; + private readonly ICloudSyncProvider[] _providers = {}; public CloudSyncProvider(IApplicationHost appHost) { @@ -21,12 +21,14 @@ namespace MediaBrowser.Server.Implementations.Sync public IEnumerable GetSyncTargets() { - return new List(); + return _providers + .SelectMany(i => i.GetSyncAccounts().Select(a => GetSyncTarget(i, a))); } public IEnumerable GetSyncTargets(string userId) { - return new List(); + return _providers + .SelectMany(i => i.GetSyncAccounts().Where(a => a.UserIds.Contains(userId, StringComparer.OrdinalIgnoreCase)).Select(a => GetSyncTarget(i, a))); } public DeviceProfile GetDeviceProfile(SyncTarget target) @@ -34,6 +36,15 @@ namespace MediaBrowser.Server.Implementations.Sync return new DeviceProfile(); } + private SyncTarget GetSyncTarget(ICloudSyncProvider provider, SyncAccount account) + { + return new SyncTarget + { + Name = account.Name, + Id = account.Name + }; + } + public string Name { get { return "Cloud Sync"; } @@ -49,12 +60,7 @@ namespace MediaBrowser.Server.Implementations.Sync throw new NotImplementedException(); } - public Task TransferItemFile(string serverId, string itemId, string path, SyncTarget target, CancellationToken cancellationToken) - { - throw new NotImplementedException(); - } - - public Task TransferRelatedFile(string serverId, string itemId, string path, ItemFileType type, SyncTarget target, CancellationToken cancellationToken) + public Task TransferItemFile(string serverId, string itemId, string[] pathParts, string name, ItemFileType fileType, SyncTarget target, CancellationToken cancellationToken) { throw new NotImplementedException(); } diff --git a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs index 62bc6871b..efdfbb086 100644 --- a/MediaBrowser.Server.Implementations/Sync/MediaSync.cs +++ b/MediaBrowser.Server.Implementations/Sync/MediaSync.cs @@ -135,8 +135,8 @@ namespace MediaBrowser.Server.Implementations.Sync try { - await provider.TransferItemFile(serverId, libraryItem.Id, internalSyncJobItem.OutputPath, target, cancellationToken) - .ConfigureAwait(false); + //await provider.TransferItemFile(serverId, libraryItem.Id, internalSyncJobItem.OutputPath, target, cancellationToken) + // .ConfigureAwait(false); progress.Report(92); -- cgit v1.2.3 From 504e2099e2f11203c48dff94a67ec797a454d459 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 6 Feb 2015 22:25:23 -0500 Subject: update dlna profiles --- MediaBrowser.Api/UserLibrary/ArtistsService.cs | 4 +- MediaBrowser.Api/UserLibrary/ItemsService.cs | 45 +++++----------------- MediaBrowser.Controller/Entities/Folder.cs | 17 ++++++-- MediaBrowser.Dlna/Profiles/Xml/Default.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml | 2 - .../Profiles/Xml/Dish Hopper-Joey.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml | 2 - .../Profiles/Xml/Samsung Smart TV.xml | 2 - .../Profiles/Xml/Sony Blu-ray Player 2013.xml | 2 - .../Profiles/Xml/Sony Blu-ray Player.xml | 2 - .../Profiles/Xml/Sony Bravia (2010).xml | 2 - .../Profiles/Xml/Sony Bravia (2011).xml | 2 - .../Profiles/Xml/Sony Bravia (2012).xml | 2 - .../Profiles/Xml/Sony Bravia (2013).xml | 2 - .../Profiles/Xml/Sony PlayStation 3.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml | 2 - MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml | 2 - MediaBrowser.Model/ApiClient/IApiClient.cs | 31 +++++++++------ MediaBrowser.Model/Dlna/AudioOptions.cs | 11 ++++++ MediaBrowser.Model/Dlna/DeviceProfile.cs | 2 - MediaBrowser.Model/Dlna/StreamBuilder.cs | 9 +++-- .../HttpServer/Security/AuthService.cs | 11 +++++- .../Persistence/SqliteItemRepository.cs | 30 +++++++++++++++ .../Sync/SyncRepository.cs | 23 +++++++++++ 31 files changed, 124 insertions(+), 101 deletions(-) (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs index 2ab08fd8d..121d395ba 100644 --- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs +++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs @@ -130,8 +130,8 @@ namespace MediaBrowser.Api.UserLibrary if (request is GetAlbumArtists) { return items + .Where(i => !i.IsFolder) .OfType() - .Where(i => !(i is MusicAlbum)) .SelectMany(i => i.AlbumArtists) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(name => @@ -150,8 +150,8 @@ namespace MediaBrowser.Api.UserLibrary } return items + .Where(i => !i.IsFolder) .OfType() - .Where(i => !(i is MusicAlbum)) .SelectMany(i => i.AllArtists) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(name => diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 15b1f6dba..9b5ef3a98 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -169,8 +169,6 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "ExcludeLocationTypes", Description = "Optional. If specified, results will be filtered based on LocationType. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string ExcludeLocationTypes { get; set; } - public bool IncludeIndexContainers { get; set; } - [ApiMember(Name = "IsMissing", Description = "Optional filter by items that are missing episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool? IsMissing { get; set; } @@ -396,52 +394,29 @@ namespace MediaBrowser.Api.UserLibrary else if (request.Recursive) { - if (user == null) - { - items = ((Folder)item).GetRecursiveChildren(); + var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)).ConfigureAwait(false); - items = _libraryManager.ReplaceVideosWithPrimaryVersions(items); - } - else - { - var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)); - - return new Tuple, bool>(result, true); - } + return new Tuple, bool>(result, true); } else { if (user == null) { - items = ((Folder)item).Children; + var result = await ((Folder)item).GetItems(GetItemsQuery(request, null)).ConfigureAwait(false); - items = _libraryManager.ReplaceVideosWithPrimaryVersions(items); + return new Tuple, bool>(result, true); } - else - { - var userRoot = item as UserRootFolder; - if (userRoot == null) - { - var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)); + var userRoot = item as UserRootFolder; - return new Tuple, bool>(result, true); - } + if (userRoot == null) + { + var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)).ConfigureAwait(false); - items = ((Folder)item).GetChildren(user, true); + return new Tuple, bool>(result, true); } - } - - if (request.IncludeIndexContainers) - { - var list = items.ToList(); - - var containers = list.Select(i => i.IndexContainer) - .Where(i => i != null); - - list.AddRange(containers); - items = list.Distinct(); + items = ((Folder)item).GetChildren(user, true); } return new Tuple, bool>(new QueryResult diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 50f33f5c0..e85dee354 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -787,9 +787,20 @@ namespace MediaBrowser.Controller.Entities Func filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager); - var items = query.Recursive - ? GetRecursiveChildren(user, filter) - : GetChildren(user, true).Where(filter); + IEnumerable items; + + if (query.User == null) + { + items = query.Recursive + ? GetRecursiveChildren(filter) + : Children.Where(filter); + } + else + { + items = query.Recursive + ? GetRecursiveChildren(user, filter) + : GetChildren(user, true).Where(filter); + } var result = PostFilterAndSort(items, query); diff --git a/MediaBrowser.Dlna/Profiles/Xml/Default.xml b/MediaBrowser.Dlna/Profiles/Xml/Default.xml index b70cc10c2..7062afc69 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Default.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Default.xml @@ -26,8 +26,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml b/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml index 6250e0f0e..9ff1ae833 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml @@ -31,8 +31,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml b/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml index 0079b5f8d..746b7f5c4 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/DirecTV HD-DVR.xml @@ -32,8 +32,6 @@ 10 true true - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml b/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml index d338b2b6d..4a70e3d4c 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Dish Hopper-Joey.xml @@ -33,8 +33,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml b/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml index ba72f6306..471917a13 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/LG Smart TV.xml @@ -32,8 +32,6 @@ 10 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml b/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml index 829ce7068..5fe441945 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Linksys DMA2100.xml @@ -30,8 +30,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml b/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml index 78ba4aba3..35775892c 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/MediaMonkey.xml @@ -32,8 +32,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml b/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml index 88160b0ce..36c528929 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Panasonic Viera.xml @@ -33,8 +33,6 @@ 10 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml b/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml index d6acd65ca..0749dbeac 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Popcorn Hour.xml @@ -26,8 +26,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml b/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml index bd113b9c7..9e61df43e 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Samsung Smart TV.xml @@ -32,8 +32,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml index 3104f5c68..91aa767be 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player 2013.xml @@ -32,8 +32,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml index 57a32607e..a6ea10840 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Blu-ray Player.xml @@ -34,8 +34,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml index b7325c53c..0c3bdc4c5 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2010).xml @@ -34,8 +34,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml index 59157badd..0269c05c1 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2011).xml @@ -34,8 +34,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml index d2d9c181f..9aa614faa 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2012).xml @@ -34,8 +34,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml index 7b3d95b9d..231db2091 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony Bravia (2013).xml @@ -34,8 +34,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml index 454dabe5d..153b66be8 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml @@ -34,8 +34,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml b/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml index 2829bfb47..d51669cfb 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml @@ -33,8 +33,6 @@ 5 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml b/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml index 76e4a6c31..96b728bdc 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml @@ -33,8 +33,6 @@ 40 true true - false - false true diff --git a/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml b/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml index c8c0a5202..063cebebc 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml @@ -33,8 +33,6 @@ 40 false false - false - false false diff --git a/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml b/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml index 7a8f3a09d..de7c03c48 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml @@ -32,8 +32,6 @@ 0 false false - false - false false diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 03802fc28..8b489453e 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -41,7 +41,7 @@ namespace MediaBrowser.Model.ApiClient /// Occurs when [authenticated]. /// event EventHandler> Authenticated; - + /// /// Gets the API URL. /// @@ -201,7 +201,7 @@ namespace MediaBrowser.Model.ApiClient /// The cancellation token. /// Task<HttpResponse>. Task GetResponse(string url, CancellationToken cancellationToken = default(CancellationToken)); - + /// /// Updates the user configuration. /// @@ -225,7 +225,7 @@ namespace MediaBrowser.Model.ApiClient /// The query. /// Task<QueryResult<BaseItemDto>>. Task GetLatestItems(LatestItemsQuery query); - + /// /// Gets the intros async. /// @@ -324,7 +324,7 @@ namespace MediaBrowser.Model.ApiClient /// The cancellation token. /// Task<ItemsResult>. Task GetUserViews(string userId, CancellationToken cancellationToken = default(CancellationToken)); - + /// /// Gets the instant mix from song async. /// @@ -563,7 +563,7 @@ namespace MediaBrowser.Model.ApiClient /// The identifier. /// Task<UserDto>. Task GetOfflineUserAsync(string id); - + /// /// Gets the parental ratings async. /// @@ -761,7 +761,7 @@ namespace MediaBrowser.Model.ApiClient /// The password. /// Task. /// userId - Task AuthenticateUserAsync(string username, + Task AuthenticateUserAsync(string username, string password); /// @@ -874,7 +874,7 @@ namespace MediaBrowser.Model.ApiClient /// The access token. /// The user identifier. void SetAuthenticationInfo(string accessToken, string userId); - + /// /// Sets the authentication information. /// @@ -921,7 +921,7 @@ namespace MediaBrowser.Model.ApiClient /// /// Task. Task StopReceivingSyncJobsUpdates(); - + /// /// Starts the receiving session updates. /// @@ -934,7 +934,7 @@ namespace MediaBrowser.Model.ApiClient /// /// Task. Task StopReceivingSessionUpdates(); - + /// /// Gets the image URL. /// @@ -1378,7 +1378,7 @@ namespace MediaBrowser.Model.ApiClient /// The file. /// The cancellation token. /// Task. - Task UploadFile(Stream stream, + Task UploadFile(Stream stream, LocalFileInfo file, CancellationToken cancellationToken); @@ -1439,7 +1439,7 @@ namespace MediaBrowser.Model.ApiClient /// The cancellation token. /// Task<Stream>. Task GetSyncJobItemAdditionalFile(string id, string name, CancellationToken cancellationToken); - + /// /// Opens the web socket. /// @@ -1503,5 +1503,14 @@ namespace MediaBrowser.Model.ApiClient /// The identifier. /// Task. Task EnableCancelledSyncJobItem(string id); + /// + /// Gets the synchronize options. + /// + /// The user identifier. + /// The item ids. + /// The parent identifier. + /// The category. + /// Task<SyncOptions>. + Task GetSyncOptions(IEnumerable itemIds, string userId, string parentId = null, SyncCategory? category = null); } } \ No newline at end of file diff --git a/MediaBrowser.Model/Dlna/AudioOptions.cs b/MediaBrowser.Model/Dlna/AudioOptions.cs index dd6dad261..cddfd8955 100644 --- a/MediaBrowser.Model/Dlna/AudioOptions.cs +++ b/MediaBrowser.Model/Dlna/AudioOptions.cs @@ -47,6 +47,17 @@ namespace MediaBrowser.Model.Dlna /// The audio transcoding bitrate. public int? AudioTranscodingBitrate { get; set; } + /// + /// Gets or sets a value indicating whether [supports direct remote content]. + /// + /// true if [supports direct remote content]; otherwise, false. + public bool SupportsDirectRemoteContent { get; set; } + /// + /// Gets or sets a value indicating whether [supports custom HTTP headers]. + /// + /// true if [supports custom HTTP headers]; otherwise, false. + public bool SupportsCustomHttpHeaders { get; set; } + /// /// Gets the maximum bitrate. /// diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 3bbef28c5..4b137a268 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -76,8 +76,6 @@ namespace MediaBrowser.Model.Dlna public bool RequiresPlainVideoItems { get; set; } public bool RequiresPlainFolders { get; set; } - public bool SupportsDirectRemoteContent { get; set; } - public bool SupportsCustomHttpHeaders { get; set; } public bool EnableMSMediaReceiverRegistrar { get; set; } public XmlAttribute[] XmlRootAttributes { get; set; } diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 8b929425a..6076637b4 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -258,7 +258,7 @@ namespace MediaBrowser.Model.Dlna if (IsEligibleForDirectPlay(item, maxBitrateSetting, subtitleStream, options)) { // See if it can be direct played - var directPlay = GetVideoDirectPlayProfile(options.Profile, item, videoStream, audioStream); + var directPlay = GetVideoDirectPlayProfile(options, options.Profile, item, videoStream, audioStream); if (directPlay != null) { @@ -380,7 +380,8 @@ namespace MediaBrowser.Model.Dlna return 128000; } - private PlayMethod? GetVideoDirectPlayProfile(DeviceProfile profile, + private PlayMethod? GetVideoDirectPlayProfile(VideoOptions options, + DeviceProfile profile, MediaSourceInfo mediaSource, MediaStream videoStream, MediaStream audioStream) @@ -504,12 +505,12 @@ namespace MediaBrowser.Model.Dlna if (mediaSource.Protocol == MediaProtocol.Http) { - if (!profile.SupportsDirectRemoteContent) + if (!options.SupportsDirectRemoteContent) { return null; } - if (mediaSource.RequiredHttpHeaders.Count > 0 && !profile.SupportsCustomHttpHeaders) + if (mediaSource.RequiredHttpHeaders.Count > 0 && !options.SupportsCustomHttpHeaders) { return null; } diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs index 77953ee43..3903c62b1 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs @@ -74,7 +74,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security ValidateUserAccess(user, request, authAttribtues, auth); } - var info = (AuthenticationInfo)request.Items["OriginalAuthenticationInfo"]; + var info = GetTokenInfo(request); if (!IsExemptFromRoles(auth, authAttribtues, info)) { @@ -199,6 +199,13 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security } } + private AuthenticationInfo GetTokenInfo(IServiceRequest request) + { + object info; + request.Items.TryGetValue("OriginalAuthenticationInfo", out info); + return info as AuthenticationInfo; + } + private bool IsValidConnectKey(string token) { if (string.IsNullOrEmpty(token)) @@ -216,7 +223,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security throw new SecurityException("Access token is invalid or expired."); } - var info = (AuthenticationInfo)request.Items["OriginalAuthenticationInfo"]; + var info = GetTokenInfo(request); if (info == null) { diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 99c59abc5..3ffe31ed1 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -203,6 +203,8 @@ namespace MediaBrowser.Server.Implementations.Persistence cancellationToken.ThrowIfCancellationRequested(); + CheckDisposed(); + await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); IDbTransaction transaction = null; @@ -271,6 +273,8 @@ namespace MediaBrowser.Server.Implementations.Persistence throw new ArgumentNullException("id"); } + CheckDisposed(); + using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "select type,data from TypedBaseItems where guid = @guid"; @@ -355,6 +359,7 @@ namespace MediaBrowser.Server.Implementations.Persistence /// id public IEnumerable GetChapters(Guid id) { + CheckDisposed(); return _chapterRepository.GetChapters(id); } @@ -367,6 +372,7 @@ namespace MediaBrowser.Server.Implementations.Persistence /// id public ChapterInfo GetChapter(Guid id, int index) { + CheckDisposed(); return _chapterRepository.GetChapter(id, index); } @@ -386,6 +392,7 @@ namespace MediaBrowser.Server.Implementations.Persistence /// public Task SaveChapters(Guid id, IEnumerable chapters, CancellationToken cancellationToken) { + CheckDisposed(); return _chapterRepository.SaveChapters(id, chapters, cancellationToken); } @@ -400,6 +407,15 @@ namespace MediaBrowser.Server.Implementations.Persistence private readonly object _disposeLock = new object(); + private bool _disposed; + private void CheckDisposed() + { + if (_disposed) + { + throw new ObjectDisposedException(GetType().Name + " has been disposed and cannot be accessed."); + } + } + /// /// Releases unmanaged and - optionally - managed resources. /// @@ -408,6 +424,8 @@ namespace MediaBrowser.Server.Implementations.Persistence { if (dispose) { + _disposed = true; + try { lock (_disposeLock) @@ -456,6 +474,8 @@ namespace MediaBrowser.Server.Implementations.Persistence throw new ArgumentNullException("parentId"); } + CheckDisposed(); + using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "select ItemId from ChildrenIds where ParentId = @ParentId"; @@ -479,6 +499,8 @@ namespace MediaBrowser.Server.Implementations.Persistence throw new ArgumentNullException("parentId"); } + CheckDisposed(); + using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "select type,data from TypedBaseItems where guid in (select ItemId from ChildrenIds where ParentId = @ParentId)"; @@ -507,6 +529,8 @@ namespace MediaBrowser.Server.Implementations.Persistence throw new ArgumentNullException("type"); } + CheckDisposed(); + using (var cmd = _connection.CreateCommand()) { cmd.CommandText = "select type,data from TypedBaseItems where type = @type"; @@ -535,6 +559,8 @@ namespace MediaBrowser.Server.Implementations.Persistence throw new ArgumentNullException("id"); } + CheckDisposed(); + await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); IDbTransaction transaction = null; @@ -598,6 +624,8 @@ namespace MediaBrowser.Server.Implementations.Persistence throw new ArgumentNullException("children"); } + CheckDisposed(); + await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false); IDbTransaction transaction = null; @@ -659,11 +687,13 @@ namespace MediaBrowser.Server.Implementations.Persistence public IEnumerable GetMediaStreams(MediaStreamQuery query) { + CheckDisposed(); return _mediaStreamsRepository.GetMediaStreams(query); } public Task SaveMediaStreams(Guid id, IEnumerable streams, CancellationToken cancellationToken) { + CheckDisposed(); return _mediaStreamsRepository.SaveMediaStreams(id, streams, cancellationToken); } } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index 5a07a41e9..05d804cbb 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs @@ -172,6 +172,8 @@ namespace MediaBrowser.Server.Implementations.Sync throw new ArgumentNullException("id"); } + CheckDisposed(); + var guid = new Guid(id); if (guid == Guid.Empty) @@ -277,6 +279,8 @@ namespace MediaBrowser.Server.Implementations.Sync throw new ArgumentNullException("job"); } + CheckDisposed(); + await _writeLock.WaitAsync().ConfigureAwait(false); IDbTransaction transaction = null; @@ -348,6 +352,8 @@ namespace MediaBrowser.Server.Implementations.Sync throw new ArgumentNullException("id"); } + CheckDisposed(); + await _writeLock.WaitAsync().ConfigureAwait(false); IDbTransaction transaction = null; @@ -407,6 +413,8 @@ namespace MediaBrowser.Server.Implementations.Sync throw new ArgumentNullException("query"); } + CheckDisposed(); + using (var cmd = _connection.CreateCommand()) { cmd.CommandText = BaseJobSelectText; @@ -491,6 +499,8 @@ namespace MediaBrowser.Server.Implementations.Sync throw new ArgumentNullException("id"); } + CheckDisposed(); + var guid = new Guid(id); using (var cmd = _connection.CreateCommand()) @@ -618,6 +628,8 @@ namespace MediaBrowser.Server.Implementations.Sync throw new ArgumentNullException("jobItem"); } + CheckDisposed(); + await _writeLock.WaitAsync().ConfigureAwait(false); IDbTransaction transaction = null; @@ -764,6 +776,15 @@ namespace MediaBrowser.Server.Implementations.Sync GC.SuppressFinalize(this); } + private bool _disposed; + private void CheckDisposed() + { + if (_disposed) + { + throw new ObjectDisposedException(GetType().Name + " has been disposed and cannot be accessed."); + } + } + private readonly object _disposeLock = new object(); /// @@ -774,6 +795,8 @@ namespace MediaBrowser.Server.Implementations.Sync { if (dispose) { + _disposed = true; + try { lock (_disposeLock) -- cgit v1.2.3 From 49c0878a4b295e7882613b989953f2c753fc8bca Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 7 Feb 2015 08:43:44 -0500 Subject: updated nuget --- MediaBrowser.Api/Library/LibraryService.cs | 4 +-- .../ApiClient/ApiClientExtensions.cs | 6 ++++ MediaBrowser.Model/ApiClient/IApiClient.cs | 2 +- .../Localization/JavaScript/es_MX.json | 38 +++++++++++----------- .../Localization/JavaScript/fr.json | 6 ++-- .../Localization/Server/es_MX.json | 32 +++++++++--------- .../Localization/Server/fr.json | 12 +++---- .../Sync/SyncJobProcessor.cs | 5 +-- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +-- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +-- 12 files changed, 61 insertions(+), 56 deletions(-) (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index a97e2b52e..9027685b1 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -5,10 +5,8 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Persistence; -using MediaBrowser.Controller.Playlists; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; @@ -314,7 +312,7 @@ namespace MediaBrowser.Api.Library // Quotes are valid in linux. They'll possibly cause issues here var filename = Path.GetFileName(item.Path).Replace("\"", string.Empty); - headers["Content-Disposition"] = string.Format("inline; filename=\"{0}\"", filename); + headers["Content-Disposition"] = string.Format("attachment; filename=\"{0}\"", filename); return ResultFactory.GetStaticFileResult(Request, new StaticFileResultOptions { diff --git a/MediaBrowser.Model/ApiClient/ApiClientExtensions.cs b/MediaBrowser.Model/ApiClient/ApiClientExtensions.cs index 4b0effa55..b5bf29990 100644 --- a/MediaBrowser.Model/ApiClient/ApiClientExtensions.cs +++ b/MediaBrowser.Model/ApiClient/ApiClientExtensions.cs @@ -1,5 +1,6 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Sync; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -31,5 +32,10 @@ namespace MediaBrowser.Model.ApiClient { return apiClient.GetItemsAsync(query, CancellationToken.None); } + + public static Task GetSyncOptions(this IApiClient apiClient, SyncJob job) + { + return apiClient.GetSyncOptions(job.RequestedItemIds, job.UserId, job.ParentId, job.Category); + } } } diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 8b489453e..9eb4af206 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1511,6 +1511,6 @@ namespace MediaBrowser.Model.ApiClient /// The parent identifier. /// The category. /// Task<SyncOptions>. - Task GetSyncOptions(IEnumerable itemIds, string userId, string parentId = null, SyncCategory? category = null); + Task GetSyncOptions(IEnumerable itemIds, string userId, string parentId = null, SyncCategory? category = null); } } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json index 295ee1426..0a0ab4b3f 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -14,12 +14,12 @@ "FileReadError": "Ha ocurrido un error al leer el archivo.", "DeleteUser": "Eliminar Usuario", "DeleteUserConfirmation": "\u00bfEst\u00e1 seguro de querer eliminar este usuario?", - "PasswordResetHeader": "Reset Password", + "PasswordResetHeader": "Restablecer Contrase\u00f1a", "PasswordResetComplete": "La contrase\u00f1a ha sido restablecida.", - "PinCodeResetComplete": "The pin code has been reset.", + "PinCodeResetComplete": "El c\u00f3digo pin ha sido restablecido.", "PasswordResetConfirmation": "\u00bfEst\u00e1 seguro de querer restablecer la contrase\u00f1a?", - "PinCodeResetConfirmation": "Are you sure you wish to reset the pin code?", - "HeaderPinCodeReset": "Reset Pin Code", + "PinCodeResetConfirmation": "\u00bfEsta seguro de querer restablecer el c\u00f3digo pin?", + "HeaderPinCodeReset": "Restablecer C\u00f3digo Pin", "PasswordSaved": "Contrase\u00f1a guardada.", "PasswordMatchError": "La Contrase\u00f1a y la confirmaci\u00f3n de la contrase\u00f1a deben coincidir.", "OptionRelease": "Versi\u00f3n Oficial", @@ -49,15 +49,15 @@ "ButtonHelp": "Ayuda", "ButtonSave": "Guardar", "ButtonDownload": "Descargar", - "SyncJobStatusQueued": "Queued", - "SyncJobStatusConverting": "Converting", - "SyncJobStatusFailed": "Failed", - "SyncJobStatusCancelled": "Cancelled", - "SyncJobStatusCompleted": "Synced", - "SyncJobStatusReadyToTransfer": "Ready to Transfer", - "SyncJobStatusTransferring": "Transferring", - "SyncJobStatusCompletedWithError": "Synced with errors", - "SyncJobItemStatusReadyToTransfer": "Ready to Transfer", + "SyncJobStatusQueued": "En cola", + "SyncJobStatusConverting": "Convirti\u00e9ndo", + "SyncJobStatusFailed": "Fallido", + "SyncJobStatusCancelled": "Cancelado", + "SyncJobStatusCompleted": "Sincronizado", + "SyncJobStatusReadyToTransfer": "Listo para Transferir", + "SyncJobStatusTransferring": "Transfiri\u00e9ndo", + "SyncJobStatusCompletedWithError": "Sincronizado con errores", + "SyncJobItemStatusReadyToTransfer": "Listo para Transferir", "LabelCollection": "Colecci\u00f3n", "HeaderAddToCollection": "Agregar a Colecci\u00f3n.", "NewCollectionNameExample": "Ejemplo: Colecci\u00f3n Guerra de las Galaxias", @@ -95,9 +95,9 @@ "LabelFree": "Gratis", "HeaderSelectAudio": "Seleccionar Audio", "HeaderSelectSubtitles": "Seleccionar Subtitulos", - "ButtonMarkForRemoval": "Remove from device", - "ButtonUnmarkForRemoval": "Cancel removal from device", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", + "ButtonMarkForRemoval": "Remover de dispositivo", + "ButtonUnmarkForRemoval": "Cancelar remover de dispositivo", + "LabelSyncQualityHelp": "Use alta calidad para la calidad m\u00e1xima soportada por el dispositivo. Media y baja calidad para reducir la transferencia de datos permitida.", "LabelDefaultStream": "(Por defecto)", "LabelForcedStream": "(Forzado)", "LabelDefaultForcedStream": "(Por Defecto\/Forzado)", @@ -218,8 +218,8 @@ "MessageConfirmRestart": "\u00bfEst\u00e1 seguro de querer reiniciar el Servidor de Media Browser?", "MessageConfirmShutdown": "\u00bfEst\u00e1 seguro de querer apagar el Servidor de Media Browser?", "ButtonUpdateNow": "Actualizar Ahora", - "ValueItemCount": "{0} item", - "ValueItemCountPlural": "{0} items", + "ValueItemCount": "{0} \u00edtem", + "ValueItemCountPlural": "{0} \u00edtems", "NewVersionOfSomethingAvailable": "\u00a1Una nueva versi\u00f3n de {0} esta disponible!", "VersionXIsAvailableForDownload": "La versi\u00f3n {0} ahora esta disponible para descargar.", "LabelVersionNumber": "Versi\u00f3n {0}", @@ -684,7 +684,7 @@ "MessageForgotPasswordFileCreated": "El siguiente archivo fue creado en tu servidor y contiene instrucciones de como proceder.", "MessageForgotPasswordFileExpiration": "El pin de restablecimiento expirara en {0}.", "MessageInvalidForgotPasswordPin": "Se introdujo un pin expirado o invalido. Por favor intente de nuevo.", - "MessagePasswordResetForUsers": "Passwords have been removed for the following users:", + "MessagePasswordResetForUsers": "Las contrase\u00f1as han sido eliminadas de los siguientes usuarios:", "HeaderInviteGuest": "Agregar un Invitado", "ButtonLinkMyMediaBrowserAccount": "Enlazar mi cuenta ahora", "MessageConnectAccountRequiredToInviteGuest": "Para poder agregar invitados primero necesitas vincular tu cuenta de Media Browser a este servidor.", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json index 9a755449e..df7f58f0f 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json @@ -54,10 +54,10 @@ "SyncJobStatusFailed": "Echec", "SyncJobStatusCancelled": "Annul\u00e9", "SyncJobStatusCompleted": "Synchronis\u00e9", - "SyncJobStatusReadyToTransfer": "Ready to Transfer", + "SyncJobStatusReadyToTransfer": "Pr\u00eat pour le transfert", "SyncJobStatusTransferring": "Transfert en cours", "SyncJobStatusCompletedWithError": "Synchronis\u00e9, mais des erreurs sont apparues", - "SyncJobItemStatusReadyToTransfer": "Ready to Transfer", + "SyncJobItemStatusReadyToTransfer": "Pr\u00eat pour le transfert", "LabelCollection": "Collection", "HeaderAddToCollection": "Ajouter \u00e0 la collection", "NewCollectionNameExample": "Exemple: Collection Star Wars", @@ -97,7 +97,7 @@ "HeaderSelectSubtitles": "S\u00e9lectionner sous-titres", "ButtonMarkForRemoval": "Supprimer de l'appareil", "ButtonUnmarkForRemoval": "Annuler la suppression de l'appareil", - "LabelSyncQualityHelp": "Use high quality for the maximum supported quality by the device. Medium and low quality will reduce the allowed bitrate.", + "LabelSyncQualityHelp": "Choisissez haute qualit\u00e9 pour obtenir la qualit\u00e9 maximale support\u00e9e par l'appareil. Moyenne et basse qualit\u00e9 r\u00e9duiront le d\u00e9bit autoris\u00e9.", "LabelDefaultStream": "(Par d\u00e9faut)", "LabelForcedStream": "(Forc\u00e9)", "LabelDefaultForcedStream": "(Par d\u00e9faut\/Forc\u00e9)", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json index d6bcafe76..99534c60b 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json @@ -423,13 +423,13 @@ "ViewTypeLiveTvRecordingGroups": "Grabaciones", "ViewTypeLiveTvChannels": "Canales", "LabelEasyPinCode": "C\u00f3digo pin sencillo:", - "EasyPasswordHelp": "Your easy pin code is used for offline access with supported Media Browser apps, and can also be used for easy in-network sign in.", - "LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy pin code", - "LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy pin code to sign in to Media Browser apps from inside your home network. Your regular password will only be needed away from home. If the pin code is left blank, you won't need a password within your home network.", + "EasyPasswordHelp": "Tu c\u00f3digo pin sencillo es usado para el acceso fuera de linea con las aplicaciones Media Browser soportadas, y tambi\u00e9n puede ser usado para un inicio de sesi\u00f3n mas f\u00e1cil cuando esta conectado a su red.", + "LabelInNetworkSignInWithEasyPassword": "Habilitar inicio de sesi\u00f3n con mi c\u00f3digo pin sencillo para conexiones dentro de la red.", + "LabelInNetworkSignInWithEasyPasswordHelp": "Si esta habilitado. Podr\u00e1s usar tu c\u00f3digo pin sencillo para iniciar sesi\u00f3n en las aplicaciones Media Browser dentro de tu red de hogar. La contrase\u00f1a regular sera necesaria solamente cuando este fuera de casa. Si el c\u00f3digo pin se deja en blanco, no se necesitara contrase\u00f1a dentro de su casa.", "HeaderPassword": "Contrase\u00f1a", "HeaderLocalAccess": "Acceso Local", "HeaderViewOrder": "Orden de Despliegue", - "ButtonResetEasyPassword": "Reset easy pin code", + "ButtonResetEasyPassword": "Restaurar c\u00f3digo pin sencillo", "LabelSelectUserViewOrder": "Seleccione el orden en que sus vistas ser\u00e1n desplegadas dentro de las apps de Media Browser", "LabelMetadataRefreshMode": "Modo de actualizaci\u00f3n de metadatos:", "LabelImageRefreshMode": "Modo de actualizaci\u00f3n de im\u00e1genes:", @@ -649,8 +649,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Algunos dispositivos no renderisaran apropiadamente si hay m\u00faltiples im\u00e1genes incrustadas en el Didl", "TabActivity": "Actividad", "TitleSync": "Sinc", - "OptionAllowSyncContent": "Sync", - "OptionAllowContentDownloading": "Media downloading", + "OptionAllowSyncContent": "Sinc.", + "OptionAllowContentDownloading": "Descarga de medios", "NameSeasonUnknown": "Temporada Desconocida", "NameSeasonNumber": "Temporada {0}", "LabelNewUserNameHelp": "Los nombres de usuario pueden contener letras (a-z), n\u00fameros (0-9), guiones (-), guiones bajos (_) y puntos (.)", @@ -689,7 +689,7 @@ "LabelEnableVideoImageExtraction": "Habilitar extracci\u00f3n de im\u00e1genes de video", "VideoImageExtractionHelp": "Para videos que no cuenten con im\u00e1genes, y para los que no podemos encontrar im\u00e1genes en Internet. Esto incrementar\u00e1 un poco el tiempo de la exploraci\u00f3n inicial de las bibliotecas, pero resultar\u00e1 en una presentaci\u00f3n m\u00e1s agradable.", "LabelEnableChapterImageExtractionForMovies": "Extraer im\u00e1genes de cap\u00edtulos para Pel\u00edculas", - "LabelChapterImageExtractionForMoviesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs as a nightly scheduled task, although this is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", + "LabelChapterImageExtractionForMoviesHelp": "Extraer las im\u00e1genes de los cap\u00edtulos permitir\u00e1 a sus clientes mostrar gr\u00e1ficamente los men\u00fas de selecci\u00f3n de escenas. El proceso puede ser lento, hacer uso intensivo del cpu y requerir el uso de varios gigabytes de espacio. Se ejecuta como una tarea nocturna programada, aunque puede configurarse en el \u00e1rea de tareas programadas. No se recomienda ejecutarlo durante un horario de uso intensivo.", "LabelEnableAutomaticPortMapping": "Habilitar mapeo autom\u00e1tico de puertos", "LabelEnableAutomaticPortMappingHelp": "UPnP permite la configuraci\u00f3n de ruteador de manera autom\u00e1tica, para acceso remoto de manera f\u00e1cil. Eso puede no funcionar con algunos modelos de ruteadores.", "HeaderTermsOfService": "T\u00e9rminos del Servicio de Media Browser", @@ -712,9 +712,9 @@ "HeaderAudio": "Audio", "HeaderVideo": "Video", "HeaderPaths": "Rutas", - "CategorySync": "Sync", - "HeaderEasyPinCode": "Easy Pin Code", - "RegisterWithPayPal": "Register with PayPal", + "CategorySync": "Sinc.", + "HeaderEasyPinCode": "C\u00f3digo Pin Sencillo", + "RegisterWithPayPal": "Registrar con PayPal", "HeaderSyncRequiresSupporterMembership": "Sinc requiere de una Membres\u00eda de Aficionado", "HeaderEnjoyDayTrial": "Disfrute de una Prueba Gratuita por 14 D\u00edas", "LabelSyncTempPath": "Trayectoria de archivos temporales:", @@ -942,10 +942,10 @@ "ButtonHelp": "Ayuda", "OptionAllowUserToManageServer": "Permitir a este usuario administrar el servidor", "HeaderFeatureAccess": "Permisos de acceso", - "OptionAllowMediaPlayback": "Media playback", - "OptionAllowBrowsingLiveTv": "Live TV", - "OptionAllowDeleteLibraryContent": "Media deletion", - "OptionAllowManageLiveTv": "Live TV recording management", + "OptionAllowMediaPlayback": "Reproducci\u00f3n de medios", + "OptionAllowBrowsingLiveTv": "TV en vivo", + "OptionAllowDeleteLibraryContent": "Eliminaci\u00f3n de medios", + "OptionAllowManageLiveTv": "Administraci\u00f3n de grabaciones de TV en vivo", "OptionAllowRemoteControlOthers": "Permitir control remoto de otros usuarios", "OptionAllowRemoteSharedDevices": "Permitir control remoto de dispositivos compartidos", "OptionAllowRemoteSharedDevicesHelp": "Los dispositivos dnla son considerados como compartidos hasta que alg\u00fan usuario comienza a controlarlo.", @@ -1003,7 +1003,7 @@ "LabelAutomaticUpdatesTvdbHelp": "Al habilitarlo, se descargar\u00e1n autom\u00e1ticamente nuevas im\u00e1genes conforme son a\u00f1adidas a TheTVDB.com. Las im\u00e1genes existentes no ser\u00e1n reemplazadas.", "LabelFanartApiKey": "Clave api personal:", "LabelFanartApiKeyHelp": "Solicitar fanart sin una clave API personal muestra los resultados que fueron aprobados hace 7 d\u00edas. Con una clave API personal se reduce a 48 horas y si eres miembro VIP de fanart ser\u00e1 alrededor de 10 minutos.", - "ExtractChapterImagesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.", + "ExtractChapterImagesHelp": "Extraer las im\u00e1genes de los cap\u00edtulos permitir\u00e1 a sus clientes mostrar gr\u00e1ficamente los men\u00fas de selecci\u00f3n de escenas. El proceso puede ser lento, hacer uso intensivo del cpu y requerir el uso de varios gigabytes de espacio. Se ejecuta como una tarea nocturna programada, aunque puede configurarse en el \u00e1rea de tareas programadas. No se recomienda ejecutarlo durante un horario de uso intensivo.", "LabelMetadataDownloadLanguage": "Lenguaje preferido para descargas:", "ButtonAutoScroll": "Auto-desplazamiento", "LabelImageSavingConvention": "Convenci\u00f3n de almacenamiento de im\u00e1genes:", @@ -1325,7 +1325,7 @@ "NotificationOptionInstallationFailed": "Falla de instalaci\u00f3n", "NotificationOptionNewLibraryContent": "Nuevo contenido agregado", "NotificationOptionNewLibraryContentMultiple": "Nuevo contenido agregado (varios)", - "NotificationOptionCameraImageUploaded": "Camera image uploaded", + "NotificationOptionCameraImageUploaded": "Imagen de la c\u00e1mara subida", "SendNotificationHelp": "Por defecto, las notificaciones son enviadas a la bandeja de entrada del panel de control. Navegue el cat\u00e1logo de complementos para instalar opciones de notificaci\u00f3n adicionales.", "NotificationOptionServerRestartRequired": "Reinicio del servidor requerido", "LabelNotificationEnabled": "Habilitar esta notificaci\u00f3n", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fr.json b/MediaBrowser.Server.Implementations/Localization/Server/fr.json index 1f44b41c4..25aec7811 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fr.json @@ -649,8 +649,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Quelques p\u00e9riph\u00e9riques ne fourniront pas un rendu correct si plusieurs images sont int\u00e9gr\u00e9es dans Didl", "TabActivity": "Activit\u00e9", "TitleSync": "Sync.", - "OptionAllowSyncContent": "Sync", - "OptionAllowContentDownloading": "Media downloading", + "OptionAllowSyncContent": "Synchroniser", + "OptionAllowContentDownloading": "T\u00e9l\u00e9chargement du m\u00e9dia en cours", "NameSeasonUnknown": "Saison inconnue", "NameSeasonNumber": "Saison {0}", "LabelNewUserNameHelp": "Les noms d'utilisateur peuvent contenir des lettres (a-z), des chiffres (0-9), des tirets (-), des tirets bas (_), des apostrophes (') et des points (.).", @@ -942,10 +942,10 @@ "ButtonHelp": "Aide", "OptionAllowUserToManageServer": "Autoriser la gestion du serveur \u00e0 cet utilisateur", "HeaderFeatureAccess": "Acc\u00e8s aux fonctionnalit\u00e9s", - "OptionAllowMediaPlayback": "Media playback", - "OptionAllowBrowsingLiveTv": "Live TV", - "OptionAllowDeleteLibraryContent": "Media deletion", - "OptionAllowManageLiveTv": "Live TV recording management", + "OptionAllowMediaPlayback": "Lecture du m\u00e9dia en cours", + "OptionAllowBrowsingLiveTv": "TV Live", + "OptionAllowDeleteLibraryContent": "Suppression du m\u00e9dia", + "OptionAllowManageLiveTv": "Gestion des enregistrements TV Live", "OptionAllowRemoteControlOthers": "Autoriser le contr\u00f4le \u00e0 distance des autres utilisateurs", "OptionAllowRemoteSharedDevices": "Autoriser le contr\u00f4le \u00e0 distance des appareils partag\u00e9s", "OptionAllowRemoteSharedDevicesHelp": "Les p\u00e9riph\u00e9riques Dlna sont consid\u00e9r\u00e9s comme partag\u00e9s tant qu'un utilisateur ne commence pas \u00e0 le contr\u00f4ler.", diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 2fe5fe089..c299bf155 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -223,8 +223,9 @@ namespace MediaBrowser.Server.Implementations.Sync { var items = category.HasValue ? await GetItemsForSync(category.Value, parentId, user).ConfigureAwait(false) : - itemIds.SelectMany(i => GetItemsForSync(i, user)) - .Where(_syncManager.SupportsSync); + itemIds.SelectMany(i => GetItemsForSync(i, user)); + + items = items.Where(_syncManager.SupportsSync); if (unwatchedOnly) { diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 34759abd6..9e06a75bd 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.561 + 3.0.563 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index fb3992774..37f28945c 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.561 + 3.0.563 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 288293f29..a9a3792c8 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.561 + 3.0.563 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index be141bb4d..956906f64 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.561 + 3.0.563 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 067b18d067563c9ddde8910a8911be8d787abfe7 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 7 Feb 2015 18:15:51 -0500 Subject: updated nuget --- MediaBrowser.Model/ApiClient/IApiClient.cs | 13 +++++++++++++ Nuget/MediaBrowser.Common.Internal.nuspec | 4 ++-- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 ++-- 5 files changed, 19 insertions(+), 6 deletions(-) (limited to 'MediaBrowser.Model/ApiClient/IApiClient.cs') diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 9eb4af206..ca49c6c5a 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1402,6 +1402,13 @@ namespace MediaBrowser.Model.ApiClient /// Task<SyncJob>. Task CreateSyncJob(SyncJobRequest request); + /// + /// Updates the synchronize job. + /// + /// The job. + /// Task. + Task UpdateSyncJob(SyncJob job); + /// /// Gets the synchronize jobs. /// @@ -1492,6 +1499,12 @@ namespace MediaBrowser.Model.ApiClient /// Task. Task QueueFailedSyncJobItemForRetry(string id); /// + /// Cancels the synchronize job. + /// + /// The identifier. + /// Task. + Task CancelSyncJob(string id); + /// /// Cancels the synchronize job item. /// /// The identifier. diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 9e06a75bd..5a9c7c382 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.563 + 3.0.565 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 37f28945c..060bb7ff4 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.563 + 3.0.565 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index a9a3792c8..6981add56 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.563 + 3.0.565 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 956906f64..71cf8bffb 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.563 + 3.0.565 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3