From febaab13bf96ded1ded80d5595b138cf5ef1da54 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 16 Dec 2014 01:05:28 -0500 Subject: [PATCH 1/4] re-enable sync --- MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs | 2 +- SharedVersion.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs index df03ab6f7a..47bab6e53c 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs @@ -61,7 +61,7 @@ namespace MediaBrowser.Server.Implementations.Sync public bool IsHidden { - get { return true; } + get { return false; } } public bool IsEnabled diff --git a/SharedVersion.cs b/SharedVersion.cs index 48946f3303..33a1a70b92 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; -//[assembly: AssemblyVersion("3.0.*")] -[assembly: AssemblyVersion("3.0.5463.3000")] +[assembly: AssemblyVersion("3.0.*")] +//[assembly: AssemblyVersion("3.0.5463.3000")] From 13274348e9e2162eca84dc8f20c4d80ade29e8bf Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 17 Dec 2014 00:30:31 -0500 Subject: [PATCH 2/4] sync updates --- MediaBrowser.Api/PackageReviewService.cs | 2 +- MediaBrowser.Api/Sync/SyncService.cs | 84 ++++++++++++++++++- ...MediaBrowser.Common.Implementations.csproj | 1 + .../Security/MbAdmin.cs | 13 +++ .../Security/PluginSecurityManager.cs | 6 +- .../Updates/InstallationManager.cs | 7 +- MediaBrowser.Controller/Entities/BaseItem.cs | 15 ---- MediaBrowser.Controller/Entities/Video.cs | 6 +- MediaBrowser.Controller/Sync/ISyncManager.cs | 14 ++++ .../Subtitles/SubtitleEncoder.cs | 23 ++--- .../MediaBrowser.Model.Portable.csproj | 6 ++ .../MediaBrowser.Model.net35.csproj | 6 ++ MediaBrowser.Model/ApiClient/IApiClient.cs | 28 +++++++ MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + MediaBrowser.Model/Sync/SyncDialogOptions.cs | 24 ++++++ MediaBrowser.Model/Sync/SyncHelper.cs | 11 ++- MediaBrowser.Model/Sync/SyncJobItemQuery.cs | 10 +++ MediaBrowser.Model/Sync/SyncJobQuery.cs | 5 ++ .../EntryPoints/UsageReporter.cs | 2 +- .../Localization/JavaScript/de.json | 32 +++---- .../Localization/JavaScript/es_MX.json | 8 +- .../Localization/JavaScript/fr.json | 16 ++-- .../Localization/JavaScript/javascript.json | 4 +- .../Localization/JavaScript/kk.json | 32 +++---- .../Localization/JavaScript/nl.json | 30 +++---- .../Localization/JavaScript/ru.json | 14 ++-- .../Localization/Server/ar.json | 6 +- .../Localization/Server/ca.json | 6 +- .../Localization/Server/cs.json | 6 +- .../Localization/Server/da.json | 6 +- .../Localization/Server/de.json | 10 +-- .../Localization/Server/el.json | 6 +- .../Localization/Server/en_GB.json | 6 +- .../Localization/Server/en_US.json | 6 +- .../Localization/Server/es.json | 6 +- .../Localization/Server/es_MX.json | 12 +-- .../Localization/Server/fi.json | 6 +- .../Localization/Server/fr.json | 16 ++-- .../Localization/Server/he.json | 6 +- .../Localization/Server/hr.json | 6 +- .../Localization/Server/it.json | 6 +- .../Localization/Server/kk.json | 10 +-- .../Localization/Server/ko.json | 6 +- .../Localization/Server/ms.json | 6 +- .../Localization/Server/nb.json | 6 +- .../Localization/Server/nl.json | 10 +-- .../Localization/Server/pl.json | 6 +- .../Localization/Server/pt_BR.json | 6 +- .../Localization/Server/pt_PT.json | 6 +- .../Localization/Server/ru.json | 22 ++--- .../Localization/Server/sv.json | 6 +- .../Localization/Server/tr.json | 6 +- .../Localization/Server/vi.json | 6 +- .../Localization/Server/zh_CN.json | 6 +- .../Localization/Server/zh_TW.json | 6 +- .../Sync/SyncJobProcessor.cs | 16 ++++ .../Sync/SyncManager.cs | 19 +++++ .../Sync/SyncRepository.cs | 15 ++++ Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 62 files changed, 456 insertions(+), 224 deletions(-) create mode 100644 MediaBrowser.Common.Implementations/Security/MbAdmin.cs create mode 100644 MediaBrowser.Model/Sync/SyncDialogOptions.cs diff --git a/MediaBrowser.Api/PackageReviewService.cs b/MediaBrowser.Api/PackageReviewService.cs index ce366ccd4c..c4cf1eac31 100644 --- a/MediaBrowser.Api/PackageReviewService.cs +++ b/MediaBrowser.Api/PackageReviewService.cs @@ -102,7 +102,7 @@ namespace MediaBrowser.Api private readonly IHttpClient _httpClient; private readonly INetworkManager _netManager; private readonly IJsonSerializer _serializer; - private const string MbAdminUrl = "https://www.mb3admin.com/admin/"; + private const string MbAdminUrl = "http://www.mb3admin.com/admin/"; public PackageReviewService(IHttpClient client, INetworkManager net, IJsonSerializer serializer) { diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index a3c2004fc5..d4d1106ec7 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -1,9 +1,14 @@ -using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Dto; +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 ServiceStack; +using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; namespace MediaBrowser.Api.Sync @@ -52,14 +57,42 @@ namespace MediaBrowser.Api.Sync public string UserId { get; set; } } + [Route("/Sync/Options", "GET", Summary = "Gets a list of available sync targets.")] + public class GetSyncDialogOptions : IReturn + { + [ApiMember(Name = "UserId", Description = "UserId", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public string UserId { get; set; } + + [ApiMember(Name = "ItemIds", Description = "ItemIds", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public string ItemIds { get; set; } + } + + [Route("/Sync/JobItems/{Id}/Transferred", "POST", Summary = "Reports that a sync job item has successfully been transferred.")] + public class ReportSyncJobItemTransferred : IReturnVoid + { + [ApiMember(Name = "Id", Description = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + public string Id { get; set; } + } + + [Route("/Sync/JobItems/{Id}/File", "GET", Summary = "Gets a sync job item file")] + public class GetSyncJobItemFile + { + [ApiMember(Name = "Id", Description = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + } + [Authenticated] public class SyncService : BaseApiService { private readonly ISyncManager _syncManager; + private readonly IDtoService _dtoService; + private readonly ILibraryManager _libraryManager; - public SyncService(ISyncManager syncManager) + public SyncService(ISyncManager syncManager, IDtoService dtoService, ILibraryManager libraryManager) { _syncManager = syncManager; + _dtoService = dtoService; + _libraryManager = libraryManager; } public object Get(GetSyncTargets request) @@ -73,8 +106,8 @@ namespace MediaBrowser.Api.Sync { var result = _syncManager.GetJobs(new SyncJobQuery { - StartIndex = request.StartIndex, - Limit = request.Limit + StartIndex = request.StartIndex, + Limit = request.Limit }); return ToOptimizedResult(result); @@ -100,5 +133,48 @@ namespace MediaBrowser.Api.Sync return ToOptimizedResult(result); } + + public void Post(ReportSyncJobItemTransferred request) + { + var task = _syncManager.ReportSyncJobItemTransferred(request.Id); + + Task.WaitAll(task); + } + + public object Get(GetSyncJobItemFile request) + { + var jobItem = _syncManager.GetJobItem(request.Id); + + if (jobItem.Status != SyncJobItemStatus.Transferring) + { + throw new ArgumentException("The job item is not yet ready for transfer."); + } + + return ToStaticFileResult(jobItem.OutputPath); + } + + public object Get(GetSyncDialogOptions request) + { + var result = new SyncDialogOptions(); + + result.Targets = _syncManager.GetSyncTargets(request.UserId) + .ToList(); + + var dtos = request.ItemIds.Split(',') + .Select(_libraryManager.GetItemById) + .Where(i => i != null) + .Select(i => _dtoService.GetBaseItemDto(i, new DtoOptions + { + Fields = new List + { + ItemFields.SyncInfo + } + })) + .ToList(); + + result.Options = SyncHelper.GetSyncOptions(dtos); + + return ToOptimizedResult(result); + } } } diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 58ffb93bcc..42a4029407 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -95,6 +95,7 @@ + diff --git a/MediaBrowser.Common.Implementations/Security/MbAdmin.cs b/MediaBrowser.Common.Implementations/Security/MbAdmin.cs new file mode 100644 index 0000000000..9171e9e13e --- /dev/null +++ b/MediaBrowser.Common.Implementations/Security/MbAdmin.cs @@ -0,0 +1,13 @@ + +namespace MediaBrowser.Common.Implementations.Security +{ + public class MbAdmin + { + public const string HttpUrl = "https://www.mb3admin.com/admin/"; + + /// + /// Leaving as http for now until we get it squared away + /// + public const string HttpsUrl = "http://www.mb3admin.com/admin/"; + } +} diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs index dfdf61016e..3e81e839fc 100644 --- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs +++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs @@ -17,9 +17,7 @@ namespace MediaBrowser.Common.Implementations.Security /// public class PluginSecurityManager : ISecurityManager { - private const string MbAdminUrl = "https://www.mb3admin.com/admin/"; - - private const string MBValidateUrl = MbAdminUrl + "service/registration/validate"; + private const string MBValidateUrl = MbAdmin.HttpsUrl + "service/registration/validate"; /// /// The _is MB supporter @@ -162,7 +160,7 @@ namespace MediaBrowser.Common.Implementations.Security return new SupporterInfo(); } - var url = MbAdminUrl + "/service/supporter/retrieve?key=" + key; + var url = MbAdmin.HttpsUrl + "/service/supporter/retrieve?key=" + key; using (var stream = await _httpClient.Get(url, CancellationToken.None).ConfigureAwait(false)) { diff --git a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs index e707129c14..f3a9859681 100644 --- a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs +++ b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Events; +using MediaBrowser.Common.Implementations.Security; using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Progress; @@ -161,7 +162,7 @@ namespace MediaBrowser.Common.Implementations.Updates { "systemid", _applicationHost.SystemId } }; - using (var json = await _httpClient.Post(MbAdminUrlHttps + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false)) + using (var json = await _httpClient.Post(MbAdmin.HttpsUrl + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false)) { cancellationToken.ThrowIfCancellationRequested(); @@ -172,8 +173,6 @@ namespace MediaBrowser.Common.Implementations.Updates } private Tuple, DateTime> _lastPackageListResult; - private const string MbAdminUrlHttp = "http://www.mb3admin.com/admin/"; - private const string MbAdminUrlHttps = "https://www.mb3admin.com/admin/"; /// /// Gets all available packages. @@ -205,7 +204,7 @@ namespace MediaBrowser.Common.Implementations.Updates } } - using (var json = await _httpClient.Get(MbAdminUrlHttp + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false)) + using (var json = await _httpClient.Get(MbAdmin.HttpUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false)) { cancellationToken.ThrowIfCancellationRequested(); diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index e01b8857f6..ed950b1c5e 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -899,21 +899,6 @@ namespace MediaBrowser.Controller.Entities { var current = this; - var currentAsPlaceHolder = current as ISupportsPlaceHolders; - - if (currentAsPlaceHolder != null) - { - var newHasPlaceHolder = newItem as ISupportsPlaceHolders; - - if (newHasPlaceHolder != null) - { - if (currentAsPlaceHolder.IsPlaceHolder != newHasPlaceHolder.IsPlaceHolder) - { - return false; - } - } - } - return current.IsInMixedFolder == newItem.IsInMixedFolder; } diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 6b098cbd82..0c6125dbe5 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -363,7 +363,11 @@ namespace MediaBrowser.Controller.Entities { await base.UpdateToRepository(updateReason, cancellationToken).ConfigureAwait(false); - foreach (var item in GetLocalAlternateVersionIds().Select(i => LibraryManager.GetItemById(i))) + var localAlternates = GetLocalAlternateVersionIds() + .Select(i => LibraryManager.GetItemById(i)) + .Where(i => i != null); + + foreach (var item in localAlternates) { item.ImageInfos = ImageInfos; item.Overview = Overview; diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs index 31c3c0c6d2..5814daf2d2 100644 --- a/MediaBrowser.Controller/Sync/ISyncManager.cs +++ b/MediaBrowser.Controller/Sync/ISyncManager.cs @@ -59,5 +59,19 @@ namespace MediaBrowser.Controller.Sync /// The target identifier. /// DeviceProfile. DeviceProfile GetDeviceProfile(string targetId); + + /// + /// Reports the synchronize job item transferred. + /// + /// The identifier. + /// Task. + Task ReportSyncJobItemTransferred(string id); + + /// + /// Gets the job item. + /// + /// The identifier. + /// SyncJobItem. + SyncJobItem GetJobItem(string id); } } diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs index e3eb33ec50..7c512840b7 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs @@ -550,7 +550,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles } }; - _logger.Debug("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments); + _logger.Info("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments); var logFilePath = Path.Combine(_appPaths.LogDirectoryPath, "ffmpeg-sub-extract-" + Guid.NewGuid() + ".txt"); Directory.CreateDirectory(Path.GetDirectoryName(logFilePath)); @@ -604,17 +604,18 @@ namespace MediaBrowser.MediaEncoding.Subtitles { failed = true; - if (File.Exists(outputPath)) + try { - try - { - _logger.Info("Deleting extracted subtitle due to failure: ", outputPath); - File.Delete(outputPath); - } - catch (IOException ex) - { - _logger.ErrorException("Error deleting extracted subtitle {0}", ex, outputPath); - } + _logger.Info("Deleting extracted subtitle due to failure: {0}", outputPath); + File.Delete(outputPath); + } + catch (FileNotFoundException) + { + + } + catch (IOException ex) + { + _logger.ErrorException("Error deleting extracted subtitle {0}", ex, outputPath); } } else if (!File.Exists(outputPath)) diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 8ad8ecbc93..2629dac8b1 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -1031,6 +1031,9 @@ Sync\SyncCategory.cs + + Sync\SyncDialogOptions.cs + Sync\SyncJob.cs @@ -1055,6 +1058,9 @@ Sync\SyncJobStatus.cs + + Sync\SyncOptions.cs + Sync\SyncQuality.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 04c61c8470..4840777a5c 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -990,6 +990,9 @@ Sync\SyncCategory.cs + + Sync\SyncDialogOptions.cs + Sync\SyncJob.cs @@ -1014,6 +1017,9 @@ Sync\SyncJobStatus.cs + + Sync\SyncOptions.cs + Sync\SyncQuality.cs diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 0fb92d3ae9..5560e19acc 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1386,6 +1386,34 @@ namespace MediaBrowser.Model.ApiClient /// Task<SyncJob>. Task CreateSyncJob(SyncJobRequest request); + /// + /// Gets the synchronize jobs. + /// + /// The query. + /// Task<QueryResult<SyncJob>>. + Task> GetSyncJobs(SyncJobQuery query); + + /// + /// Gets the synchronize job items. + /// + /// The query. + /// Task<QueryResult<SyncJobItem>>. + Task> GetSyncJobItems(SyncJobItemQuery query); + + /// + /// Reports the synchronize job item transferred. + /// + /// The identifier. + /// Task. + Task ReportSyncJobItemTransferred(string id); + + /// + /// Gets the synchronize job item file. + /// + /// The identifier. + /// Task<Stream>. + Task GetSyncJobItemFile(string id); + /// /// Opens the web socket. /// diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index fbf45e0aee..b81b4c1fd6 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -364,6 +364,7 @@ + diff --git a/MediaBrowser.Model/Sync/SyncDialogOptions.cs b/MediaBrowser.Model/Sync/SyncDialogOptions.cs new file mode 100644 index 0000000000..0154b16ec1 --- /dev/null +++ b/MediaBrowser.Model/Sync/SyncDialogOptions.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Model.Sync +{ + public class SyncDialogOptions + { + /// + /// Gets or sets the targets. + /// + /// The targets. + public List Targets { get; set; } + /// + /// Gets or sets the options. + /// + /// The options. + public List Options { get; set; } + + public SyncDialogOptions() + { + Targets = new List(); + Options = new List(); + } + } +} diff --git a/MediaBrowser.Model/Sync/SyncHelper.cs b/MediaBrowser.Model/Sync/SyncHelper.cs index 64dc024e13..28a36ed21c 100644 --- a/MediaBrowser.Model/Sync/SyncHelper.cs +++ b/MediaBrowser.Model/Sync/SyncHelper.cs @@ -21,7 +21,10 @@ namespace MediaBrowser.Model.Sync if (item.IsVideo) { options.Add(SyncOptions.Quality); - options.Add(SyncOptions.UnwatchedOnly); + if (items.Count > 1) + { + options.Add(SyncOptions.UnwatchedOnly); + } break; } if (item.IsFolder && !item.IsMusicGenre && !item.IsArtist && !item.IsType("musicalbum") && !item.IsGameGenre) @@ -30,6 +33,12 @@ namespace MediaBrowser.Model.Sync options.Add(SyncOptions.UnwatchedOnly); break; } + if (item.IsGenre) + { + options.Add(SyncOptions.SyncNewContent); + options.Add(SyncOptions.ItemLimit); + break; + } } } diff --git a/MediaBrowser.Model/Sync/SyncJobItemQuery.cs b/MediaBrowser.Model/Sync/SyncJobItemQuery.cs index e9af642acd..b85c21691e 100644 --- a/MediaBrowser.Model/Sync/SyncJobItemQuery.cs +++ b/MediaBrowser.Model/Sync/SyncJobItemQuery.cs @@ -19,6 +19,16 @@ namespace MediaBrowser.Model.Sync /// The job identifier. public string JobId { get; set; } /// + /// Gets or sets the target identifier. + /// + /// The target identifier. + public string TargetId { get; set; } + /// + /// Gets or sets the status. + /// + /// The status. + public SyncJobItemStatus? Status { get; set; } + /// /// Gets or sets a value indicating whether this instance is completed. /// /// null if [is completed] contains no value, true if [is completed]; otherwise, false. diff --git a/MediaBrowser.Model/Sync/SyncJobQuery.cs b/MediaBrowser.Model/Sync/SyncJobQuery.cs index 218b3823e9..2af06bcfa4 100644 --- a/MediaBrowser.Model/Sync/SyncJobQuery.cs +++ b/MediaBrowser.Model/Sync/SyncJobQuery.cs @@ -18,5 +18,10 @@ namespace MediaBrowser.Model.Sync /// /// null if [is completed] contains no value, true if [is completed]; otherwise, false. public bool? IsCompleted { get; set; } + /// + /// Gets or sets the target identifier. + /// + /// The target identifier. + public string TargetId { get; set; } } } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs index b7bb482e0d..36ba55828a 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs @@ -12,7 +12,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints private readonly IApplicationHost _applicationHost; private readonly INetworkManager _networkManager; private readonly IHttpClient _httpClient; - private const string MbAdminUrl = "https://www.mb3admin.com/admin/"; + private const string MbAdminUrl = "http://www.mb3admin.com/admin/"; public UsageReporter(IApplicationHost applicationHost, INetworkManager networkManager, IHttpClient httpClient) { diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json index 9065404b60..d8a8036b0f 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json @@ -628,21 +628,21 @@ "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.", "ButtonSync": "Synchronisieren", - "SyncMedia": "Sync Media", - "HeaderCancelSyncJob": "Cancel Sync", - "CancelSyncJobConfirmation": "Are you sure you wish to cancel this sync job?", + "SyncMedia": "Synchronisiere Medien", + "HeaderCancelSyncJob": "Synchronisierung abbrechen", + "CancelSyncJobConfirmation": "M\u00f6chten Sie die Synchronisations-Aufgabe wirklich abbrechen?", "TabSync": "Synchronisieren", - "MessagePleaseSelectDeviceToSyncTo": "Please select a device to sync to.", - "MessageSyncJobCreated": "Sync job created.", - "LabelSyncTo": "Sync to:", - "LabelSyncJobName": "Sync job name:", - "LabelQuality": "Quality:", - "OptionHigh": "High", - "OptionMedium": "Medium", - "OptionLow": "Low", - "HeaderSettings": "Settings", - "OptionAutomaticallySyncNewContent": "Automatically sync new content", - "OptionAutomaticallySyncNewContentHelp": "New content added to these folders will be automatically synced to the device.", - "OptionSyncUnwatchedVideosOnly": "Sync unwatched videos only", - "OptionSyncUnwatchedVideosOnlyHelp": "Only unwatched videos will be synced, and videos will be removed from the device as they are watched." + "MessagePleaseSelectDeviceToSyncTo": "Bitte w\u00e4hlen Sie ein zu synchronisierendes Ger\u00e4t.", + "MessageSyncJobCreated": "Synchronisations-Aufgabe erstellt.", + "LabelSyncTo": "Synchronisiere mit:", + "LabelSyncJobName": "Synchronisations-Aufgabe:", + "LabelQuality": "Qualit\u00e4t:", + "OptionHigh": "Hoch", + "OptionMedium": "Mittel", + "OptionLow": "Niedrig", + "HeaderSettings": "Einstellungen", + "OptionAutomaticallySyncNewContent": "Synchronisiere neue Inhalte automatisch", + "OptionAutomaticallySyncNewContentHelp": "Neu hinzugef\u00fcgte Inhalte zu diesen Verzeichnissen werden automatisch zum Ger\u00e4t synchronisiert.", + "OptionSyncUnwatchedVideosOnly": "Synchronisiere nur ungesehene Videos.", + "OptionSyncUnwatchedVideosOnlyHelp": "Nur ungesehene Video werden synchronisiert. Videos werden entfernt sobald diese auf dem Ger\u00e4t angeschaut wurden." } \ 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 f53bd74c42..fda5b65b31 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -627,15 +627,15 @@ "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.", - "ButtonSync": "Sinc", + "ButtonSync": "SInc", "SyncMedia": "Sincronizar Medios", - "HeaderCancelSyncJob": "Cancelar Sincronizaci\u00f3n", + "HeaderCancelSyncJob": "Cancelar Sinc", "CancelSyncJobConfirmation": "\u00bfEsta seguro de querer cancelar este trabajo de sincronizaci\u00f3n?", "TabSync": "Sinc", "MessagePleaseSelectDeviceToSyncTo": "Por favor seleccione un dispositivo con el que desea sincronizar.", - "MessageSyncJobCreated": "Trabajo de sincornizaci\u00f3n creado.", + "MessageSyncJobCreated": "Trabajo de sinc creado.", "LabelSyncTo": "Sincronizar con:", - "LabelSyncJobName": "Nombre del trabajo de sincronizaci\u00f3n:", + "LabelSyncJobName": "Nombre del trabajo de sinc:", "LabelQuality": "Calidad:", "OptionHigh": "Alta", "OptionMedium": "Media", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json index 2c0acb241b..d3c95bfa45 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json @@ -628,18 +628,18 @@ "ButtonLinkMyMediaBrowserAccount": "Lier \u00e0 mon compte maintenant", "MessageConnectAccountRequiredToInviteGuest": "Pour inviter des personnes vous devez d'abord lier votre compte Media Browser \u00e0 ce serveur.", "ButtonSync": "Sync", - "SyncMedia": "Sync Media", - "HeaderCancelSyncJob": "Cancel Sync", - "CancelSyncJobConfirmation": "Are you sure you wish to cancel this sync job?", + "SyncMedia": "Sync. les m\u00e9dias", + "HeaderCancelSyncJob": "Annuler la sync.", + "CancelSyncJobConfirmation": "\u00cates vous sure de vouloir annuler cette synchronisation?", "TabSync": "Sync", - "MessagePleaseSelectDeviceToSyncTo": "Please select a device to sync to.", - "MessageSyncJobCreated": "Sync job created.", - "LabelSyncTo": "Sync to:", - "LabelSyncJobName": "Sync job name:", + "MessagePleaseSelectDeviceToSyncTo": "Veuillez s\u00e9lectionner un p\u00e9riph\u00e9rique avec lequel se synchroniser.", + "MessageSyncJobCreated": "Job de synchronisation cr\u00e9\u00e9.", + "LabelSyncTo": "Synchronis\u00e9 avec:", + "LabelSyncJobName": "Nom du job de synchronisation:", "LabelQuality": "Quality:", "OptionHigh": "High", "OptionMedium": "Medium", - "OptionLow": "Low", + "OptionLow": "Basse", "HeaderSettings": "Param\u00e8tres", "OptionAutomaticallySyncNewContent": "Synchroniser automatiquement le nouveau contenu", "OptionAutomaticallySyncNewContentHelp": "Le nouveau contenu ajout\u00e9 \u00e0 ces r\u00e9pertoires sera automatiquement synchronis\u00e9 \u00e0 votre p\u00e9riph\u00e9rique.", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index 8505ed2817..b903702463 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -652,5 +652,7 @@ "OptionAutomaticallySyncNewContent": "Automatically sync new content", "OptionAutomaticallySyncNewContentHelp": "New content added to these folders will be automatically synced to the device.", "OptionSyncUnwatchedVideosOnly": "Sync unwatched videos only", - "OptionSyncUnwatchedVideosOnlyHelp": "Only unwatched videos will be synced, and videos will be removed from the device as they are watched." + "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." } diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json index a3f9dc49e5..85cd90d119 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json @@ -628,21 +628,21 @@ "ButtonLinkMyMediaBrowserAccount": "\u0422\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u043c\u0434\u0456 \u0431\u0430\u0439\u043b\u0430\u043d\u044b\u0441\u0442\u044b\u0440\u0443", "MessageConnectAccountRequiredToInviteGuest": "\u049a\u043e\u043d\u0430\u049b\u0442\u0430\u0440\u0434\u044b \u0448\u0430\u049b\u044b\u0440\u0443 \u04af\u0448\u0456\u043d \u0435\u04a3 \u0430\u043b\u0434\u044b\u043d\u0434\u0430 \u043e\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0433\u0435 Media Browser \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u04a3\u0456\u0437\u0434\u0456 \u0431\u0430\u0439\u043b\u0430\u043d\u044b\u0441\u0442\u0440\u0443\u044b\u04a3\u044b\u0437 \u049b\u0430\u0436\u0435\u0442.", "ButtonSync": "\u0421\u0438\u043d\u0445\u0440\u043e", - "SyncMedia": "Sync Media", - "HeaderCancelSyncJob": "Cancel Sync", - "CancelSyncJobConfirmation": "Are you sure you wish to cancel this sync job?", + "SyncMedia": "\u0422\u0430\u0441\u0443\u0448\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443", + "HeaderCancelSyncJob": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443\u0434\u044b \u0431\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443", + "CancelSyncJobConfirmation": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d \u043e\u0441\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443 \u0436\u04b1\u043c\u044b\u0441\u0442\u044b \u0431\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443 \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?", "TabSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443", - "MessagePleaseSelectDeviceToSyncTo": "Please select a device to sync to.", - "MessageSyncJobCreated": "Sync job created.", - "LabelSyncTo": "Sync to:", - "LabelSyncJobName": "Sync job name:", - "LabelQuality": "Quality:", - "OptionHigh": "High", - "OptionMedium": "Medium", - "OptionLow": "Low", - "HeaderSettings": "Settings", - "OptionAutomaticallySyncNewContent": "Automatically sync new content", - "OptionAutomaticallySyncNewContentHelp": "New content added to these folders will be automatically synced to the device.", - "OptionSyncUnwatchedVideosOnly": "Sync unwatched videos only", - "OptionSyncUnwatchedVideosOnlyHelp": "Only unwatched videos will be synced, and videos will be removed from the device as they are watched." + "MessagePleaseSelectDeviceToSyncTo": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0439\u0442\u044b\u043d \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043d\u044b \u0442\u0430\u04a3\u0434\u0430\u04a3\u044b\u0437.", + "MessageSyncJobCreated": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443 \u0436\u04b1\u043c\u044b\u0441\u044b \u0436\u0430\u0441\u0430\u043b\u0434\u044b.", + "LabelSyncTo": "\u041c\u044b\u043d\u0430\u0493\u0430\u043d \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443:", + "LabelSyncJobName": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443 \u0436\u04b1\u043c\u044b\u0441\u044b\u043d\u044b\u04a3 \u0430\u0442\u044b:", + "LabelQuality": "\u0421\u0430\u043f\u0430\u0441\u044b:", + "OptionHigh": "\u0416\u043e\u0493\u0430\u0440\u044b", + "OptionMedium": "\u041e\u0440\u0442\u0430\u0448\u0430", + "OptionLow": "\u0422\u04e9\u043c\u0435\u043d", + "HeaderSettings": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440", + "OptionAutomaticallySyncNewContent": "\u0416\u0430\u04a3\u0430 \u043c\u0430\u0437\u043c\u04b1\u043d\u0434\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443", + "OptionAutomaticallySyncNewContentHelp": "\u041e\u0441\u044b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u0493\u0430 \u04af\u0441\u0442\u0435\u043b\u0456\u043d\u0433\u0435\u043d \u0436\u0430\u04a3\u0430 \u043c\u0430\u0437\u043c\u04b1\u043d \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043c\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u043b\u0430\u0434\u044b.", + "OptionSyncUnwatchedVideosOnly": "\u0422\u0435\u043a \u049b\u0430\u043d\u0430 \u043a\u04e9\u0440\u0456\u043b\u043c\u0435\u0433\u0435\u043d \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0434\u0456 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443", + "OptionSyncUnwatchedVideosOnlyHelp": "\u0422\u0435\u043a \u049b\u0430\u043d\u0430 \u049b\u0430\u0440\u0430\u0440\u043c\u0430\u0493\u0430\u043d \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u043b\u0430\u0434\u044b, \u0436\u04d9\u043d\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440 \u049b\u0430\u0440\u0430\u043b\u0493\u0430\u043d\u043d\u0430\u043d \u043a\u0435\u0439\u0456\u043d \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u0434\u0430\u043d \u0430\u043b\u0430\u0441\u0442\u0430\u043b\u0430\u0434\u044b." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json index c8569dc9fe..53445c3701 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json @@ -628,21 +628,21 @@ "ButtonLinkMyMediaBrowserAccount": "Koppel mijn account nu", "MessageConnectAccountRequiredToInviteGuest": "Om gasten uit te kunnen nodigen moet je Media Browser account aan deze server gekoppeld worden.", "ButtonSync": "Synchronisatie", - "SyncMedia": "Sync Media", - "HeaderCancelSyncJob": "Cancel Sync", - "CancelSyncJobConfirmation": "Are you sure you wish to cancel this sync job?", + "SyncMedia": "Synchroniseer media", + "HeaderCancelSyncJob": "Annuleer synchronisatie", + "CancelSyncJobConfirmation": "Weet je zeker dat je het synchroniseren wilt afbreken?", "TabSync": "Synchronisatie", - "MessagePleaseSelectDeviceToSyncTo": "Please select a device to sync to.", - "MessageSyncJobCreated": "Sync job created.", - "LabelSyncTo": "Sync to:", - "LabelSyncJobName": "Sync job name:", - "LabelQuality": "Quality:", - "OptionHigh": "High", + "MessagePleaseSelectDeviceToSyncTo": "Selecteer een apparaat om mee te synchroniseren.", + "MessageSyncJobCreated": "Synchroniseer taak gemaakt.", + "LabelSyncTo": "Synchroniseer naar:", + "LabelSyncJobName": "Naam synchroniseer taak:", + "LabelQuality": "Kwaliteit", + "OptionHigh": "Hoog", "OptionMedium": "Medium", - "OptionLow": "Low", - "HeaderSettings": "Settings", - "OptionAutomaticallySyncNewContent": "Automatically sync new content", - "OptionAutomaticallySyncNewContentHelp": "New content added to these folders will be automatically synced to the device.", - "OptionSyncUnwatchedVideosOnly": "Sync unwatched videos only", - "OptionSyncUnwatchedVideosOnlyHelp": "Only unwatched videos will be synced, and videos will be removed from the device as they are watched." + "OptionLow": "Laag", + "HeaderSettings": "Instellingen", + "OptionAutomaticallySyncNewContent": "Nieuwe inhoud automatisch synchroniseren", + "OptionAutomaticallySyncNewContentHelp": "Nieuwe inhoud in deze mappen zal automatisch gesynchroniseerd worden met het apparaat.", + "OptionSyncUnwatchedVideosOnly": "Synchroniseer alleen ongeziene video's", + "OptionSyncUnwatchedVideosOnlyHelp": "Alleen ongeziene video's zulle gesynchroniseerd worden en van het apparaat verwijderd worden als ze gezien zijn." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json index ca307fd53e..15e489fb35 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json @@ -228,8 +228,8 @@ "OptionBlockMovies": "\u0424\u0438\u043b\u044c\u043c\u044b", "OptionBlockBooks": "\u041a\u043d\u0438\u0433\u0438", "OptionBlockGames": "\u0418\u0433\u0440\u044b", - "OptionBlockLiveTvPrograms": "\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0422\u0412", - "OptionBlockLiveTvChannels": "\u041a\u0430\u043d\u0430\u043b\u044b \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0422\u0412", + "OptionBlockLiveTvPrograms": "\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0422\u0412-\u044d\u0444\u0438\u0440\u0430", + "OptionBlockLiveTvChannels": "\u041a\u0430\u043d\u0430\u043b\u044b \u0422\u0412-\u044d\u0444\u0438\u0440\u0430", "OptionBlockChannelContent": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043a\u0430\u043d\u0430\u043b\u0430", "ButtonRevoke": "\u041e\u0442\u043e\u0437\u0432\u0430\u0442\u044c", "MessageConfirmRevokeApiKey": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043e\u0437\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 API-\u043a\u043b\u044e\u0447? \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a Media Browser \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0437\u043a\u043e \u043e\u0431\u043e\u0440\u0432\u0430\u043d\u043e.", @@ -259,7 +259,7 @@ "OptionOn": "\u0412\u043a\u043b", "HeaderFields": "\u041f\u043e\u043b\u044f", "HeaderFieldsHelp": "\u0421\u0434\u0432\u0438\u043d\u044c\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u043a \u00ab\u0412\u042b\u041a\u041b\u00bb, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435 \u0438 \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f.", - "HeaderLiveTV": "\u042d\u0444\u0438\u0440\u043d\u043e\u0435 \u0422\u0412", + "HeaderLiveTV": "\u0422\u0412-\u044d\u0444\u0438\u0440", "MissingLocalTrailer": "\u041d\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u0430.", "MissingPrimaryImage": "\u041d\u0435\u0442 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u0430.", "MissingBackdropImage": "\u041d\u0435\u0442 \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0437\u0430\u0434\u043d\u0438\u043a\u0430.", @@ -305,7 +305,7 @@ "TabLibrary": "\u041c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0430", "TabMetadata": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435", "TabDLNA": "DLNA", - "TabLiveTV": "\u042d\u0444\u0438\u0440\u043d\u043e\u0435 \u0422\u0412", + "TabLiveTV": "\u0422\u0412-\u044d\u0444\u0438\u0440", "TabAutoOrganize": "\u0410\u0432\u0442\u043e\u0440\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f", "TabPlugins": "\u041f\u043b\u0430\u0433\u0438\u043d\u044b", "TabAdvanced": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e", @@ -591,7 +591,7 @@ "DashboardTourCinemaMode": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u043d\u043e\u0437\u0430\u043b\u0430 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0432 \u0432\u0430\u0448\u0443 \u0433\u043e\u0441\u0442\u0438\u043d\u0443\u044e, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.", "DashboardTourChapters": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0441\u0446\u0435\u043d \u043a \u0432\u0438\u0434\u0435\u043e, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", "DashboardTourSubtitles": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0439\u0442\u0435 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435.", - "DashboardTourPlugins": "\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432\u0438\u0434\u0435\u043e, \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0442\u0432, \u0441\u043a\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0442.\u043f.", + "DashboardTourPlugins": "\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432\u0438\u0434\u0435\u043e, \u0422\u0412-\u044d\u0444\u0438\u0440\u0430, \u0441\u043a\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0442.\u043f.", "DashboardTourNotifications": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u043d\u0430 \u0432\u0430\u0448\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u044d-\u043f\u043e\u0447\u0442\u0443 \u0438 \u0442.\u043f.", "DashboardTourScheduledTasks": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f, \u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u043e.", "DashboardTourMobile": "\u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c Media Browser \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0441 \u0432\u0430\u0448\u0435\u0439 \u043b\u0430\u0434\u043e\u043d\u0438 \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435.", @@ -627,11 +627,11 @@ "HeaderInviteGuest": "\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0433\u043e\u0441\u0442\u044f", "ButtonLinkMyMediaBrowserAccount": "\u0421\u0432\u044f\u0437\u0430\u0442\u044c \u043c\u043e\u044e \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c", "MessageConnectAccountRequiredToInviteGuest": "\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0442\u044c \u0433\u043e\u0441\u0442\u0435\u0439, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Media Browser \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.", - "ButtonSync": "Sync", + "ButtonSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c", "SyncMedia": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "HeaderCancelSyncJob": "\u041e\u0442\u043c\u0435\u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438", "CancelSyncJobConfirmation": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438?", - "TabSync": "Sync", + "TabSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f", "MessagePleaseSelectDeviceToSyncTo": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.", "MessageSyncJobCreated": "\u0417\u0430\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043e.", "LabelSyncTo": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441:", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ar.json b/MediaBrowser.Server.Implementations/Localization/Server/ar.json index cb66848d72..97302a0ff0 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ar.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ca.json b/MediaBrowser.Server.Implementations/Localization/Server/ca.json index 8af1873921..655cabcaf7 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ca.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/cs.json b/MediaBrowser.Server.Implementations/Localization/Server/cs.json index 240475943e..74aa0cd37d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/cs.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "P\u0159\u00edstup k funkc\u00edm", "OptionAllowMediaPlayback": "Povolit p\u0159ehr\u00e1v\u00e1n\u00ed medi\u00ed", "OptionAllowBrowsingLiveTv": "Provolit \u017eiv\u00e9 vys\u00edl\u00e1n\u00ed", - "OptionAllowDeleteLibraryContent": "Povolit tomuto u\u017eivateli odstra\u0148ovat obsah z knihovny m\u00e9di\u00ed", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Povolit spr\u00e1vu nahr\u00e1vek \u017eiv\u00e9ho vys\u00edl\u00e1n\u00ed", - "OptionAllowRemoteControlOthers": "Povolit tomuto u\u017eivateli vzd\u00e1lenou kontrolu ostatn\u00edch u\u017eivatel\u016f", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "Chyb\u011bj\u00edc\u00ed Tmdb Id", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/da.json b/MediaBrowser.Server.Implementations/Localization/Server/da.json index c9f2b9cc09..db4c6d5350 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/da.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/da.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Funktion Adgang", "OptionAllowMediaPlayback": "Tillad medie afspilning", "OptionAllowBrowsingLiveTv": "Tillad gennemsyn af direkte tv", - "OptionAllowDeleteLibraryContent": "Tillad denne bruger at slette biblioteks indhold", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Tillad administration af direkte tv optagelser", - "OptionAllowRemoteControlOthers": "Tillad denne bruger af fjern kontrollerer andre brugere", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "Manglende Tmdb Id", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/de.json b/MediaBrowser.Server.Implementations/Localization/Server/de.json index e4b88c9bd8..c5e0715ff0 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/de.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/de.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Funktionszugriff", "OptionAllowMediaPlayback": "Erlaube das Abspielen von Medien", "OptionAllowBrowsingLiveTv": "Erlaube das durchsuchen von Live-TV", - "OptionAllowDeleteLibraryContent": "Erlaube diesem Benutzer das L\u00f6schen von Bibliothelkeninhalten", + "OptionAllowDeleteLibraryContent": "Erlaube L\u00f6schen von Bibliotheken-Inhalten.", "OptionAllowManageLiveTv": "Erlaube die Verwaltung von Live-TV Aufnahmen", - "OptionAllowRemoteControlOthers": "Erlaube diesem Benutzer, andere Benutzer fernzusteuern", - "OptionAllowRemoteSharedDevices": "Erlaube diesem Benutzer geteilte Ger\u00e4te fernzusteuern", + "OptionAllowRemoteControlOthers": "Erlaube Fernsteuerung anderer Benutzer", + "OptionAllowRemoteSharedDevices": "Erlaube Fernsteuerung geteilter Ger\u00e4te", "OptionAllowRemoteSharedDevicesHelp": "DLNA-Ger\u00e4te werden gemeinsam genutzt, bis ein Benutzer die Steuerung \u00fcbernimmt.", "HeaderRemoteControl": "Fernsteuerung", "OptionMissingTmdbId": "Fehlende Tmdb Id", @@ -1278,6 +1278,6 @@ "LabelTag": "Tag:", "LabelEnableSingleImageInDidlLimit": "Begrenze auf ein eingebundenes Bild", "LabelEnableSingleImageInDidlLimitHelp": "Einige Ger\u00e4te zeigen m\u00f6glicherweise Darstellungsfehler wenn mehrere Bilder mit Didl eingebunden wurden.", - "TabActivity": "Activity", - "TitleSync": "Sync" + "TabActivity": "Aktivit\u00e4t", + "TitleSync": "Synchronisation" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/el.json b/MediaBrowser.Server.Implementations/Localization/Server/el.json index 7f7213735c..41239b912d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/el.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/el.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json index 5b5d6f46ec..9eeac0f857 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json index 2230ee9720..9cb4fb6c5f 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es.json b/MediaBrowser.Server.Implementations/Localization/Server/es.json index f4bdae125e..a720a15102 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Permisos de acceso", "OptionAllowMediaPlayback": "Permitir reproducci\u00f3n de medios", "OptionAllowBrowsingLiveTv": "Acceso a TV en vivo", - "OptionAllowDeleteLibraryContent": "Permitir a este usuario eliminar contenido de la biblioteca", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Permitir la gesti\u00f3n de las grabaciones de TV en vivo", - "OptionAllowRemoteControlOthers": "Permitir a este usuario controlar rem\u00f3tamente a otros usuarios", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "Falta Tmdb Id", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json index 9707bb1562..7c532182b1 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Permisos de acceso", "OptionAllowMediaPlayback": "Permitir reproducci\u00f3n de medios", "OptionAllowBrowsingLiveTv": "Permitir acceder a TV en vivo", - "OptionAllowDeleteLibraryContent": "Permitir a este usuario eliminar contenido de la librer\u00eda", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Permitir administrar grabaciones de TV en vivo", - "OptionAllowRemoteControlOthers": "Permitir a este usuario controlar remotamente a otros usuarios", - "OptionAllowRemoteSharedDevices": "Permitir a este usuario controlar dispositivos remotamente", + "OptionAllowRemoteControlOthers": "Allow remote control of other users", + "OptionAllowRemoteSharedDevices": "Allow remote control of shared devices", "OptionAllowRemoteSharedDevicesHelp": "Los dispositivos dnla son considerados como compartidos hasta que alg\u00fan usuario comienza a controlarlo.", "HeaderRemoteControl": "Control Remoto", "OptionMissingTmdbId": "Falta Id de Tmdb", @@ -714,7 +714,7 @@ "LabelMaxStreamingBitrate": "Tasa de bits m\u00e1xima para transmisi\u00f3n:", "LabelMaxStreamingBitrateHelp": "Especifique una tasa de bits m\u00e1xima al transferir en tiempo real.", "LabelMaxStaticBitrate": "Tasa m\u00e1xima de bits de sinc", - "LabelMaxStaticBitrateHelp": "Especifique una tasa de bits cuando se sincronice contenido en alta calidad.", + "LabelMaxStaticBitrateHelp": "Especifique una tasa de bits cuando al sincronizar contenido en alta calidad.", "LabelMusicStaticBitrate": "Tasa de bits de sinc de m\u00fascia", "LabelMusicStaticBitrateHelp": "Especifique la tasa de bits m\u00e1xima al sincronizar m\u00fasica", "LabelMusicStreamingTranscodingBitrate": "Tasa de transcodificaci\u00f3n de m\u00fasica:", @@ -952,7 +952,7 @@ "LabelDateAdded": "Fecha de adici\u00f3n:", "HeaderFeatures": "Caracter\u00edsticas", "HeaderAdvanced": "Avanzado", - "ButtonSync": "Sinc", + "ButtonSync": "SInc", "TabScheduledTasks": "Tareas Programadas", "HeaderChapters": "Cap\u00edtulos", "HeaderResumeSettings": "Configuraci\u00f3n para Continuar", @@ -1279,5 +1279,5 @@ "LabelEnableSingleImageInDidlLimit": "Limitar a una sola imagen incrustada.", "LabelEnableSingleImageInDidlLimitHelp": "Algunos dispositivos no renderisaran apropiadamente si hay m\u00faltiples im\u00e1genes incrustadas en el Didl", "TabActivity": "Actividad", - "TitleSync": "Sincronizando" + "TitleSync": "Sinc" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fi.json b/MediaBrowser.Server.Implementations/Localization/Server/fi.json index c23d5a7086..c2c6c86124 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fi.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fr.json b/MediaBrowser.Server.Implementations/Localization/Server/fr.json index 0361928b4b..b3f6ead82e 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fr.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Acc\u00e8s aux caract\u00e9ristiques", "OptionAllowMediaPlayback": "Autoriser la lecture du m\u00e9dia", "OptionAllowBrowsingLiveTv": "Autoriser la TV en direct", - "OptionAllowDeleteLibraryContent": "Autoriser cet utilisateur \u00e0 supprimer du contenu de la biblioth\u00e8que", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Autoriser la gestion des enregistrements de la TV en direct", - "OptionAllowRemoteControlOthers": "Autoriser cet utilisateur \u00e0 cont\u00f4ler \u00e0 distance d'autres utilisateurs", - "OptionAllowRemoteSharedDevices": "Permettre \u00e0 cet utilisateur de contr\u00f4ler \u00e0 distance les p\u00e9riph\u00e9riques partag\u00e9s", + "OptionAllowRemoteControlOthers": "Allow remote control of other users", + "OptionAllowRemoteSharedDevices": "Allow remote control of shared devices", "OptionAllowRemoteSharedDevicesHelp": "Les p\u00e9riph\u00e9riques Dlna sont consid\u00e9r\u00e9s comme partag\u00e9s tant qu'un utilisateur ne commence pas \u00e0 le contr\u00f4ler.", "HeaderRemoteControl": "Contr\u00f4le \u00e0 distance", "OptionMissingTmdbId": "ID TMDb manquant", @@ -539,7 +539,7 @@ "HeaderRunningTasks": "T\u00e2ches en ex\u00e9cution", "HeaderActiveDevices": "P\u00e9riph\u00e9riques actifs", "HeaderPendingInstallations": "Installations en suspens", - "HeaderServerInformation": "Server Information", + "HeaderServerInformation": "Information du serveur", "ButtonRestartNow": "Red\u00e9marrer maintenant", "ButtonRestart": "Red\u00e9marrer", "ButtonShutdown": "\u00c9teindre", @@ -1276,8 +1276,8 @@ "HeaderAddTag": "Ajouter un tag", "LabelBlockItemsWithTags": "Bloquer les \u00e9l\u00e9ments contenant les 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" + "LabelEnableSingleImageInDidlLimit": "Limiter \u00e0 une seule image int\u00e9gr\u00e9e", + "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." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/he.json b/MediaBrowser.Server.Implementations/Localization/Server/he.json index 2e90ed5df6..cecde20226 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/he.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/he.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "\u05d2\u05d9\u05e9\u05d4 \u05dc\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9\u05dd", "OptionAllowMediaPlayback": "\u05d0\u05e4\u05e9\u05e8 \u05e0\u05d9\u05d2\u05d5\u05df \u05de\u05d3\u05d9\u05d4", "OptionAllowBrowsingLiveTv": "\u05d0\u05e4\u05e9\u05e8 \u05d3\u05e4\u05d3\u05d5\u05e3 \u05d1\u05d8\u05dc\u05d5\u05d5\u05d9\u05d6\u05d9\u05d4 \u05d7\u05d9\u05d4", - "OptionAllowDeleteLibraryContent": "\u05d0\u05e4\u05e9\u05e8 \u05dc\u05de\u05e9\u05ea\u05de\u05e9 \u05d6\u05d4 \u05dc\u05de\u05d7\u05d5\u05e7 \u05e1\u05e4\u05e8\u05d9\u05d5\u05ea \u05ea\u05d5\u05db\u05df", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "\u05d0\u05e4\u05e9\u05e8 \u05e0\u05d9\u05d4\u05d5\u05dc \u05e9\u05dc \u05d4\u05e7\u05dc\u05d8\u05d5\u05ea \u05d8\u05dc\u05d5\u05d5\u05d9\u05d6\u05d9\u05d4 \u05d7\u05d9\u05d4", - "OptionAllowRemoteControlOthers": "\u05d0\u05e4\u05e9\u05e8 \u05dc\u05de\u05e9\u05ea\u05de\u05e9 \u05d6\u05d4 \u05dc\u05e9\u05dc\u05d5\u05d8 \u05de\u05e8\u05d7\u05d5\u05e7 \u05d1\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "\u05d7\u05d6\u05e8 \u05de\u05d6\u05d4\u05d4 Tmdb", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/hr.json b/MediaBrowser.Server.Implementations/Localization/Server/hr.json index 2a4612d34f..f7589ff009 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/hr.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Pristup opcijama", "OptionAllowMediaPlayback": "Dopusti reprodukciju medijskog sadr\u017eaja", "OptionAllowBrowsingLiveTv": "Omogu\u0107i pregled TV programa", - "OptionAllowDeleteLibraryContent": "Omogu\u0107i ovom korisniku da mo\u017ee brisati sadr\u017eaj biblioteke", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Dopusti upravljanje snimljenim TV sadr\u017eajem", - "OptionAllowRemoteControlOthers": "Omogu\u0107i ovom korisniku da upravlja na daljinu, sa drugim korisnicima", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "Nedostaje Tmdb Id", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/it.json b/MediaBrowser.Server.Implementations/Localization/Server/it.json index b306eb3720..5daab33d8c 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/it.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/it.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Caratteristiche di accesso", "OptionAllowMediaPlayback": "Consenti la riproduzione", "OptionAllowBrowsingLiveTv": "Consenti la navigazione sulla Tv indiretta", - "OptionAllowDeleteLibraryContent": "Consenti a questo utente di eliminare il contenuti della libreria", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Consenti la modifica delle operazioni pianificate della TV", - "OptionAllowRemoteControlOthers": "Consenti a questo utente di controllare in remoto altri utenti", - "OptionAllowRemoteSharedDevices": "Consenti a questo utente di dispositivi di controllo remoto condivisi", + "OptionAllowRemoteControlOthers": "Allow remote control of other users", + "OptionAllowRemoteSharedDevices": "Allow remote control of shared devices", "OptionAllowRemoteSharedDevicesHelp": "Dispositivi DLNA sono considerati condivisa fino a quando un utente inizia controllarlo.", "HeaderRemoteControl": "telecomando", "OptionMissingTmdbId": "Tmdb Id mancante", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/kk.json b/MediaBrowser.Server.Implementations/Localization/Server/kk.json index c017c3b8fd..2d9e4053d3 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/kk.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "\u041c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u043a\u0442\u0435\u0440\u0433\u0435 \u049b\u0430\u0442\u044b\u043d\u0430\u0441", "OptionAllowMediaPlayback": "\u0422\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u043e\u0439\u043d\u0430\u0442\u0443\u044b\u043d\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", "OptionAllowBrowsingLiveTv": "\u042d\u0444\u0438\u0440\u043b\u0456\u043a \u0422\u0414 \u0448\u043e\u043b\u0443\u044b\u043d\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", - "OptionAllowDeleteLibraryContent": "\u0411\u04b1\u043b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u0493\u0430 \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430 \u043c\u0430\u0437\u043c\u04b1\u043d\u044b\u043d \u0436\u043e\u044e \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", + "OptionAllowDeleteLibraryContent": "\u0422\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430 \u043c\u0430\u0437\u043c\u04b1\u043d\u044b\u043d \u0436\u043e\u044e \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", "OptionAllowManageLiveTv": "\u042d\u0444\u0438\u0440\u043b\u0456\u043a \u0422\u0414 \u0436\u0430\u0437\u0443\u0434\u044b \u0431\u0430\u0441\u049b\u0430\u0440\u0443\u044b\u043d\u0430 \u0440\u0443\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", - "OptionAllowRemoteControlOthers": "\u0411\u04b1\u043b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u0493\u0430 \u0431\u0430\u0441\u049b\u0430 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440\u0434\u044b \u049b\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", - "OptionAllowRemoteSharedDevices": "\u0411\u04b1\u043b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u0493\u0430 \u043e\u0440\u0442\u0430\u049b \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u0434\u044b \u049b\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", + "OptionAllowRemoteControlOthers": "\u0411\u0430\u0441\u049b\u0430 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440\u0434\u044b \u049b\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", + "OptionAllowRemoteSharedDevices": "\u041e\u0440\u0442\u0430\u049b \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u0434\u044b \u049b\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", "OptionAllowRemoteSharedDevicesHelp": "DLNA-\u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0431\u0430\u0441\u049b\u0430\u0440\u0493\u0430\u043d\u0448\u0430 \u0434\u0435\u0439\u0456\u043d \u043e\u0440\u0442\u0430\u049b \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0435\u0441\u0435\u043f\u0442\u0435\u043b\u0456\u043d\u0435\u0434\u0456.", "HeaderRemoteControl": "\u049a\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443", "OptionMissingTmdbId": "TMDb Id \u0436\u043e\u049b", @@ -1278,6 +1278,6 @@ "LabelTag": "\u0422\u0435\u0433:", "LabelEnableSingleImageInDidlLimit": "\u0416\u0430\u043b\u0493\u044b\u0437 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0456\u043b\u0433\u0435\u043d \u0441\u0443\u0440\u0435\u0442\u043a\u0435 \u0448\u0435\u043a\u0442\u0435\u0443", "LabelEnableSingleImageInDidlLimitHelp": "\u0415\u0433\u0435\u0440 \u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0443\u0440\u0435\u0442 Didl \u0456\u0448\u0456\u043d\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0456\u043b\u0441\u0435, \u043a\u0435\u0439\u0431\u0456\u0440 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u0434\u0430 \u0442\u0438\u0456\u0441\u0442\u0456 \u0442\u04af\u0440\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0431\u0435\u0439\u0434\u0456.", - "TabActivity": "Activity", - "TitleSync": "Sync" + "TabActivity": "\u04d8\u0440\u0435\u043a\u0435\u0442\u0442\u0435\u0440", + "TitleSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ko.json b/MediaBrowser.Server.Implementations/Localization/Server/ko.json index a4b1ad5bac..2a0bcc74f3 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ko.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ko.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ms.json b/MediaBrowser.Server.Implementations/Localization/Server/ms.json index dddcb2ef19..adbe36a92e 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ms.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nb.json b/MediaBrowser.Server.Implementations/Localization/Server/nb.json index d8351e587d..a6a1fa3c49 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nb.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Funksjon Tilgang", "OptionAllowMediaPlayback": "Tillatt medieavspilling", "OptionAllowBrowsingLiveTv": "Tillat surfing av Live TV", - "OptionAllowDeleteLibraryContent": "Tillatt denne brukeren \u00e5 slette bibliotek-elementer", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Tillat styring av Live TV opptak", - "OptionAllowRemoteControlOthers": "Tillatt denne brukeren \u00e5 fjernstyre andre", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "Mangler Tmdb id", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nl.json b/MediaBrowser.Server.Implementations/Localization/Server/nl.json index 86369aa95d..c4f65de2cd 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nl.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Functie toegang", "OptionAllowMediaPlayback": "Afspelen van media toestaan", "OptionAllowBrowsingLiveTv": "Bladeren door live tv toestaan", - "OptionAllowDeleteLibraryContent": "Deze gebruiker kan inhoud uit de bibliotheek verwijderen", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Beheer van live tv-opnames toestaan", - "OptionAllowRemoteControlOthers": "Deze gebruiker kan andere gebruikers op afstand besturen", - "OptionAllowRemoteSharedDevices": "Sta deze gebruiker toe om gedeelde apparaten te gebruiken", + "OptionAllowRemoteControlOthers": "Allow remote control of other users", + "OptionAllowRemoteSharedDevices": "Allow remote control of shared devices", "OptionAllowRemoteSharedDevicesHelp": "Dlna apparaten worden als gedeeld apparaat gezien totdat een gebruiker deze gaat gebruiken.", "HeaderRemoteControl": "Gebruik op afstand", "OptionMissingTmdbId": "TMDB Id ontbreekt", @@ -1278,6 +1278,6 @@ "LabelTag": "Tag:", "LabelEnableSingleImageInDidlLimit": "Beperk tot \u00e9\u00e9n enkele ingesloten afbeelding", "LabelEnableSingleImageInDidlLimitHelp": "Sommige apparaten zullen niet goed weergeven als er meerdere afbeeldingen ingesloten zijn in Didl.", - "TabActivity": "Activity", - "TitleSync": "Sync" + "TabActivity": "Activiteit", + "TitleSync": "Synchroniseer" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pl.json b/MediaBrowser.Server.Implementations/Localization/Server/pl.json index 677d94d96b..a0d70f6c63 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pl.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json index 1cc4471f94..134059fafa 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Acesso aos Recursos", "OptionAllowMediaPlayback": "Permitir reprodu\u00e7\u00e3o de m\u00eddia", "OptionAllowBrowsingLiveTv": "Permitir navega\u00e7\u00e3o na tv ao vivo", - "OptionAllowDeleteLibraryContent": "Permitir a este usu\u00e1rio excluir conte\u00fado da biblioteca", + "OptionAllowDeleteLibraryContent": "Permitir que conte\u00fado da biblioteca seja apagado", "OptionAllowManageLiveTv": "Permitir a administra\u00e7\u00e3o de grava\u00e7\u00f5es da tv ao vivo", - "OptionAllowRemoteControlOthers": "Permitir a este usu\u00e1rio controlar remotamente outros usu\u00e1rios", - "OptionAllowRemoteSharedDevices": "Permitir a este usu\u00e1rio controlar dispositivos compartilhados", + "OptionAllowRemoteControlOthers": "Permitir controle remoto de outros usu\u00e1rios", + "OptionAllowRemoteSharedDevices": "Permitir controle remoto de dispositivos compartilhados", "OptionAllowRemoteSharedDevicesHelp": "Dispositivos dlna s\u00e3o considerados compartilhados at\u00e9 que um usu\u00e1rio comece a control\u00e1-lo.", "HeaderRemoteControl": "Controle Remoto", "OptionMissingTmdbId": "Faltando Id Tmdb", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json index 0fdcba3495..792a9eb0f3 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Acesso a Caracter\u00edsticas", "OptionAllowMediaPlayback": "Permitir reprodu\u00e7\u00e3o de multim\u00e9dia", "OptionAllowBrowsingLiveTv": "Permitir navega\u00e7\u00e3o da tv ao vivo", - "OptionAllowDeleteLibraryContent": "Permitir a este utilizador remover conte\u00fados da biblioteca", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Permitir gest\u00e3o das grava\u00e7\u00f5es da tv ao vivo", - "OptionAllowRemoteControlOthers": "Permitir a este utilizador controlar remotamente outros utilizadores", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "Id Tmdb em falta", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ru.json b/MediaBrowser.Server.Implementations/Localization/Server/ru.json index 1aefd919e6..e35d8a0977 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ru.json @@ -231,11 +231,11 @@ "OptionAllowUserToManageServer": "\u042d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c", "HeaderFeatureAccess": "\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438", "OptionAllowMediaPlayback": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445", - "OptionAllowBrowsingLiveTv": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0442\u0432", - "OptionAllowDeleteLibraryContent": "\u042d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438", - "OptionAllowManageLiveTv": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0442\u0432", - "OptionAllowRemoteControlOthers": "\u042d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438", - "OptionAllowRemoteSharedDevices": "\u042d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438", + "OptionAllowBrowsingLiveTv": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0422\u0412-\u044d\u0444\u0438\u0440\u0430", + "OptionAllowDeleteLibraryContent": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438", + "OptionAllowManageLiveTv": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0441 \u0422\u0412-\u044d\u0444\u0438\u0440\u0430", + "OptionAllowRemoteControlOthers": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438", + "OptionAllowRemoteSharedDevices": "\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438", "OptionAllowRemoteSharedDevicesHelp": "DLNA-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0449\u0438\u043c\u0438, \u043f\u043e\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438.", "HeaderRemoteControl": "\u0423\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435", "OptionMissingTmdbId": "\u041d\u0435\u0442 TMDb Id", @@ -340,13 +340,13 @@ "ButtonRemove": "\u0418\u0437\u044a\u044f\u0442\u044c", "OptionRecordSeries": "\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b", "HeaderDetails": "\u0414\u0435\u0442\u0430\u043b\u0438", - "TitleLiveTV": "\u0422\u0412 \u044d\u0444\u0438\u0440", + "TitleLiveTV": "\u0422\u0412-\u044d\u0444\u0438\u0440", "LabelNumberOfGuideDays": "\u0427\u0438\u0441\u043b\u043e \u0434\u043d\u0435\u0439 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u0438\u0434\u0430:", "LabelNumberOfGuideDaysHelp": "\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0434\u043d\u0435\u0439, \u0442\u0435\u043c \u0446\u0435\u043d\u043d\u0435\u0435 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u0438\u0434\u0430, \u0434\u0430\u0432\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447, \u043d\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0434\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u041f\u0440\u0438 \u0440\u0435\u0436\u0438\u043c\u0435 \u00ab\u0410\u0432\u0442\u043e\u00bb \u0432\u044b\u0431\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u0430\u043d\u0430\u043b\u043e\u0432.", "LabelActiveService": "\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u043b\u0443\u0436\u0431\u0430:", "LabelActiveServiceHelp": "\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0442\u0432, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445.", "OptionAutomatic": "\u0410\u0432\u0442\u043e", - "LiveTvPluginRequired": "\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d-\u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \u0443\u0441\u043b\u0443\u0433 \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0422\u0412.", + "LiveTvPluginRequired": "\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d-\u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \u0443\u0441\u043b\u0443\u0433 \u0422\u0412-\u044d\u0444\u0438\u0440\u0430.", "LiveTvPluginRequiredHelp": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, NextPVR \u0438\u043b\u0438 ServerWMC.", "LabelCustomizeOptionsPerMediaType": "\u041f\u043e\u0434\u0433\u043e\u043d\u043a\u0430 \u043f\u043e \u0442\u0438\u043f\u0443 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445:", "OptionDownloadThumbImage": "\u0411\u0435\u0433\u0443\u043d\u043e\u043a", @@ -810,7 +810,7 @@ "OptionLatestChannelMedia": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432", "HeaderLatestChannelItems": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432", "OptionNone": "\u041d\u0438\u0447\u0435\u0433\u043e", - "HeaderLiveTv": "\u0422\u0412 \u044d\u0444\u0438\u0440", + "HeaderLiveTv": "\u0422\u0412-\u044d\u0444\u0438\u0440", "HeaderReports": "\u041e\u0442\u0447\u0451\u0442\u044b", "HeaderMetadataManager": "\u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "HeaderPreferences": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", @@ -848,7 +848,7 @@ "ViewTypeMusicArtists": "\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0438", "ViewTypeBoxSets": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438", "ViewTypeChannels": "\u041a\u0430\u043d\u0430\u043b\u044b", - "ViewTypeLiveTV": "\u0422\u0412 \u044d\u0444\u0438\u0440", + "ViewTypeLiveTV": "\u0422\u0412-\u044d\u0444\u0438\u0440", "ViewTypeLiveTvNowPlaying": "\u0412 \u044d\u0444\u0438\u0440\u0435", "ViewTypeLatestGames": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0438\u0433\u0440\u044b", "ViewTypeRecentlyPlayedGames": "C\u044b\u0433\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u0434\u0430\u0432\u043d\u043e", @@ -952,11 +952,11 @@ "LabelDateAdded": "\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f:", "HeaderFeatures": "\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b", "HeaderAdvanced": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e", - "ButtonSync": "Sync", + "ButtonSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c", "TabScheduledTasks": "\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a", "HeaderChapters": "\u0421\u0446\u0435\u043d\u044b", "HeaderResumeSettings": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f", - "TabSync": "Sync", + "TabSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f", "TitleUsers": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438", "LabelProtocol": "\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b:", "OptionProtocolHttp": "HTTP", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/sv.json b/MediaBrowser.Server.Implementations/Localization/Server/sv.json index 47bd0edab9..b3831a097c 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/sv.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Tillg\u00e5ng till funktioner", "OptionAllowMediaPlayback": "Till\u00e5t mediauppspelning", "OptionAllowBrowsingLiveTv": "Till\u00e5t bl\u00e4ddring i live-TV", - "OptionAllowDeleteLibraryContent": "Till\u00e5t denna anv\u00e4ndare att ta bort objekt fr\u00e5n biblioteket", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Till\u00e5t denna anv\u00e4ndare att administrera TV-inspelningar", - "OptionAllowRemoteControlOthers": "Till\u00e5t denna anv\u00e4ndare att fj\u00e4rrstyra andra anv\u00e4ndare", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "TMDB-ID saknas", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/tr.json b/MediaBrowser.Server.Implementations/Localization/Server/tr.json index 7b2c6fd1cf..51644f3891 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/tr.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Feature Access", "OptionAllowMediaPlayback": "Allow media playback", "OptionAllowBrowsingLiveTv": "Allow browsing of live tv", - "OptionAllowDeleteLibraryContent": "Allow this user to delete library content", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Allow management of live tv recordings", - "OptionAllowRemoteControlOthers": "Allow this user to remote control other users", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/vi.json b/MediaBrowser.Server.Implementations/Localization/Server/vi.json index 687faab0e2..93a725d19a 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/vi.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "Truy c\u1eadp t\u00ednh n\u0103ng", "OptionAllowMediaPlayback": "Cho ph\u00e9p ch\u1ea1y media", "OptionAllowBrowsingLiveTv": "Cho ph\u00e9p duy\u1ec7t ch\u01b0\u01a1ng tr\u00ecnh truy\u1ec1n h\u00ecnh tr\u1ef1c ti\u1ebfp", - "OptionAllowDeleteLibraryContent": "Cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng n\u00e0y x\u00f3a n\u1ed9i dung th\u01b0 vi\u1ec7n", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "Cho ph\u00e9p qu\u1ea3n l\u00fd b\u1ea3n ghi c\u1ee7a truy\u1ec1n h\u00ecnh tr\u1ef1c ti\u1ebfp", - "OptionAllowRemoteControlOthers": "Cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng n\u00e0y ki\u1ec3m so\u00e1t t\u1eeb xa c\u00e1c ng\u01b0\u1eddi d\u00f9ng kh\u00e1c", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "Thi\u1ebfu Tmdb ID", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json index 15324d40f6..bfc16efb86 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "\u53ef\u4f7f\u7528\u7684\u529f\u80fd", "OptionAllowMediaPlayback": "\u5141\u8bb8\u5a92\u4f53\u64ad\u653e", "OptionAllowBrowsingLiveTv": "\u5141\u8bb8\u4f7f\u7528\u7535\u89c6\u76f4\u64ad", - "OptionAllowDeleteLibraryContent": "\u5141\u8bb8\u8be5\u7528\u6237\u5220\u9664\u5a92\u4f53\u5e93\u5185\u5bb9", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "\u5141\u8bb8\u7ba1\u7406\u7535\u89c6\u8282\u76ee\u5f55\u5236", - "OptionAllowRemoteControlOthers": "\u5141\u8bb8\u6b64\u7528\u6237\u8fdc\u7a0b\u63a7\u5236\u5176\u4ed6\u7528\u6237", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "\u7f3a\u5c11Tmdb \u7f16\u53f7", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json index 7f52d8d730..8d87c68970 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json @@ -232,10 +232,10 @@ "HeaderFeatureAccess": "\u53ef\u4ee5\u4f7f\u7528\u7684\u529f\u80fd", "OptionAllowMediaPlayback": "\u5141\u8a31\u5a92\u9ad4\u64ad\u653e", "OptionAllowBrowsingLiveTv": "\u5141\u8a31\u4f7f\u7528\u96fb\u8996\u529f\u80fd", - "OptionAllowDeleteLibraryContent": "\u5141\u8a31\u9019\u7528\u6236\u522a\u9664\u5a92\u9ad4\u5eab\u7684\u5167\u5bb9", + "OptionAllowDeleteLibraryContent": "Allow deletion of library content", "OptionAllowManageLiveTv": "\u5141\u8a31\u7ba1\u7406\u96fb\u8996\u7bc0\u76ee\u9304\u5f71", - "OptionAllowRemoteControlOthers": "\u5141\u8a31\u9019\u7528\u6236\u9060\u7a0b\u63a7\u5236\u5176\u4ed6\u7528\u6236", - "OptionAllowRemoteSharedDevices": "Allow this user to remote control shared devices", + "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": "\u7f3a\u5c11TMDB\u7de8\u865f", diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 1976c05404..e7631069fe 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -59,6 +59,15 @@ namespace MediaBrowser.Server.Implementations.Sync foreach (var item in items) { + // Respect ItemLimit, if set + if (job.ItemLimit.HasValue) + { + if (jobItems.Count >= job.ItemLimit.Value) + { + break; + } + } + var itemId = item.Id.ToString("N"); var jobItem = jobItems.FirstOrDefault(i => string.Equals(i.ItemId, itemId, StringComparison.OrdinalIgnoreCase)); @@ -89,6 +98,13 @@ namespace MediaBrowser.Server.Implementations.Sync await UpdateJobStatus(job, jobItems).ConfigureAwait(false); } + public Task UpdateJobStatus(string id) + { + var job = _syncRepo.GetJob(id); + + return UpdateJobStatus(job); + } + private Task UpdateJobStatus(SyncJob job) { if (job == null) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index c2f004f0b3..6043e8344b 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -265,5 +265,24 @@ namespace MediaBrowser.Server.Implementations.Sync return null; } + + public async Task ReportSyncJobItemTransferred(string id) + { + var jobItem = _repo.GetJobItem(id); + + jobItem.Status = SyncJobItemStatus.Completed; + jobItem.Progress = 100; + + await _repo.Update(jobItem).ConfigureAwait(false); + + var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager); + + await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false); + } + + public SyncJobItem GetJobItem(string id) + { + return _repo.GetJobItem(id); + } } } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index a9e319cc46..7825b9e9a4 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs @@ -352,6 +352,11 @@ namespace MediaBrowser.Server.Implementations.Sync } cmd.Parameters.Add(cmd, "@Status", DbType.String).Value = SyncJobStatus.Completed.ToString(); } + if (!string.IsNullOrWhiteSpace(query.TargetId)) + { + whereClauses.Add("TargetId=@TargetId"); + cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId; + } var whereTextWithoutPaging = whereClauses.Count == 0 ? string.Empty : @@ -447,6 +452,16 @@ namespace MediaBrowser.Server.Implementations.Sync whereClauses.Add("JobId=@JobId"); cmd.Parameters.Add(cmd, "@JobId", DbType.String).Value = query.JobId; } + if (!string.IsNullOrWhiteSpace(query.TargetId)) + { + whereClauses.Add("TargetId=@TargetId"); + cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId; + } + if (query.Status.HasValue) + { + whereClauses.Add("Status=@Status"); + cmd.Parameters.Add(cmd, "@Status", DbType.String).Value = query.Status.Value.ToString(); + } if (query.IsCompleted.HasValue) { diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index b72992d4d5..3ecc9f9a97 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.520 + 3.0.521 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 6e00e223c7..da3e29b2a5 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.520 + 3.0.521 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 986ad497d8..b0fe2b2c46 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.520 + 3.0.521 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 cbc8b37007..57d224fd4c 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.520 + 3.0.521 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 - + From 3763f7d912cd38740d053d677d064a480fba6d23 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 17 Dec 2014 00:52:34 -0500 Subject: [PATCH 3/4] resolve update check errors --- MediaBrowser.Api/Sync/SyncService.cs | 33 ++++++++----------- .../Security/MbAdmin.cs | 2 +- MediaBrowser.Controller/Sync/ISyncManager.cs | 7 ++++ MediaBrowser.Model/ApiClient/IApiClient.cs | 3 +- .../Sync/SyncManager.cs | 5 +++ 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index d4d1106ec7..cefb0e46e8 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -27,22 +27,14 @@ namespace MediaBrowser.Api.Sync public string Id { get; set; } } - [Route("/Sync/Jobs", "GET", Summary = "Gets sync jobs.")] - public class GetSyncJobs : IReturn> + [Route("/Sync/JobItems", "GET", Summary = "Gets sync job items.")] + public class GetSyncJobItems : SyncJobItemQuery, IReturn> { - /// - /// Skips over a given number of items within the results. Use for paging. - /// - /// The start index. - [ApiMember(Name = "StartIndex", Description = "Optional. The record index to start at. All items with a lower index will be dropped from the results.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] - public int? StartIndex { get; set; } + } - /// - /// The maximum number of items to return - /// - /// The limit. - [ApiMember(Name = "Limit", Description = "Optional. The maximum number of records to return", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] - public int? Limit { get; set; } + [Route("/Sync/Jobs", "GET", Summary = "Gets sync jobs.")] + public class GetSyncJobs : SyncJobQuery, IReturn> + { } [Route("/Sync/Jobs", "POST", Summary = "Gets sync jobs.")] @@ -104,11 +96,14 @@ namespace MediaBrowser.Api.Sync public object Get(GetSyncJobs request) { - var result = _syncManager.GetJobs(new SyncJobQuery - { - StartIndex = request.StartIndex, - Limit = request.Limit - }); + var result = _syncManager.GetJobs(request); + + return ToOptimizedResult(result); + } + + public object Get(GetSyncJobItems request) + { + var result = _syncManager.GetJobItems(request); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Common.Implementations/Security/MbAdmin.cs b/MediaBrowser.Common.Implementations/Security/MbAdmin.cs index 9171e9e13e..ab4a83257c 100644 --- a/MediaBrowser.Common.Implementations/Security/MbAdmin.cs +++ b/MediaBrowser.Common.Implementations/Security/MbAdmin.cs @@ -3,7 +3,7 @@ namespace MediaBrowser.Common.Implementations.Security { public class MbAdmin { - public const string HttpUrl = "https://www.mb3admin.com/admin/"; + public const string HttpUrl = "http://www.mb3admin.com/admin/"; /// /// Leaving as http for now until we get it squared away diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs index 5814daf2d2..47339f6773 100644 --- a/MediaBrowser.Controller/Sync/ISyncManager.cs +++ b/MediaBrowser.Controller/Sync/ISyncManager.cs @@ -22,6 +22,13 @@ namespace MediaBrowser.Controller.Sync /// QueryResult<SyncJob>. QueryResult GetJobs(SyncJobQuery query); + /// + /// Gets the job items. + /// + /// The query. + /// QueryResult<SyncJobItem>. + QueryResult GetJobItems(SyncJobItemQuery query); + /// /// Gets the job. /// diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 5560e19acc..9521f85381 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1411,8 +1411,9 @@ namespace MediaBrowser.Model.ApiClient /// Gets the synchronize job item file. /// /// The identifier. + /// The cancellation token. /// Task<Stream>. - Task GetSyncJobItemFile(string id); + Task GetSyncJobItemFile(string id, CancellationToken cancellationToken); /// /// Opens the web socket. diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 6043e8344b..5c699f0102 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -284,5 +284,10 @@ namespace MediaBrowser.Server.Implementations.Sync { return _repo.GetJobItem(id); } + + public QueryResult GetJobItems(SyncJobItemQuery query) + { + return _repo.GetJobItems(query); + } } } From e3484bdcc204ae39e0bfdf08e758012a048d539c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 17 Dec 2014 17:39:17 -0500 Subject: [PATCH 4/4] 3.0.5464.40000 --- .../BaseApplicationHost.cs | 33 ++++++++++--------- .../Logging/NLogger.cs | 13 +++++++- .../Logging/NlogManager.cs | 8 ++++- MediaBrowser.Model/Logging/ILogManager.cs | 6 ++++ .../Sync/SyncJobProcessor.cs | 33 +++++++++++++++---- .../Sync/SyncManager.cs | 2 +- .../Sync/SyncScheduledTask.cs | 2 +- .../ApplicationHost.cs | 19 +++++++++++ MediaBrowser.ServerApplication/MainStartup.cs | 3 +- SharedVersion.cs | 4 +-- 10 files changed, 92 insertions(+), 31 deletions(-) diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 891a03d395..9e14d0ee82 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -294,19 +294,20 @@ namespace MediaBrowser.Common.Implementations public static void LogEnvironmentInfo(ILogger logger, IApplicationPaths appPaths, bool isStartup) { - if (isStartup) - { - logger.Info("Media Browser Server started"); - } + logger.LogMultiline("Media Browser", LogSeverity.Info, GetBaseExceptionMessage(appPaths)); + } - logger.Info("Command line: {0}", string.Join(" ", Environment.GetCommandLineArgs())); + protected static StringBuilder GetBaseExceptionMessage(IApplicationPaths appPaths) + { + var builder = new StringBuilder(); - logger.Info("Server: {0}", Environment.MachineName); - logger.Info("Operating system: {0}", Environment.OSVersion.ToString()); - logger.Info("Processor count: {0}", Environment.ProcessorCount); - logger.Info("64-Bit OS: {0}", Environment.Is64BitOperatingSystem); - logger.Info("64-Bit Process: {0}", Environment.Is64BitProcess); - logger.Info("Program data path: {0}", appPaths.ProgramDataPath); + builder.AppendLine(string.Format("Command line: {0}", string.Join(" ", Environment.GetCommandLineArgs()))); + + builder.AppendLine(string.Format("Operating system: {0}", Environment.OSVersion)); + builder.AppendLine(string.Format("Processor count: {0}", Environment.ProcessorCount)); + builder.AppendLine(string.Format("64-Bit OS: {0}", Environment.Is64BitOperatingSystem)); + builder.AppendLine(string.Format("64-Bit Process: {0}", Environment.Is64BitProcess)); + builder.AppendLine(string.Format("Program data path: {0}", appPaths.ProgramDataPath)); Type type = Type.GetType("Mono.Runtime"); if (type != null) @@ -314,13 +315,13 @@ namespace MediaBrowser.Common.Implementations MethodInfo displayName = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static); if (displayName != null) { - logger.Info("Mono: " + displayName.Invoke(null, null)); + builder.AppendLine("Mono: " + displayName.Invoke(null, null)); } - } - - logger.Info("Application Path: {0}", appPaths.ApplicationPath); + } - logger.Info("*** When reporting issues please include the entire log file. ***".ToUpper()); + builder.AppendLine(string.Format("Application Path: {0}", appPaths.ApplicationPath)); + + return builder; } protected virtual IJsonSerializer CreateJsonSerializer() diff --git a/MediaBrowser.Common.Implementations/Logging/NLogger.cs b/MediaBrowser.Common.Implementations/Logging/NLogger.cs index c87b58f70a..29b6188903 100644 --- a/MediaBrowser.Common.Implementations/Logging/NLogger.cs +++ b/MediaBrowser.Common.Implementations/Logging/NLogger.cs @@ -14,6 +14,8 @@ namespace MediaBrowser.Common.Implementations.Logging /// private readonly NLog.Logger _logger; + private readonly ILogManager _logManager; + /// /// The _lock object /// @@ -23,8 +25,10 @@ namespace MediaBrowser.Common.Implementations.Logging /// Initializes a new instance of the class. /// /// The name. - public NLogger(string name) + /// The log manager. + public NLogger(string name, ILogManager logManager) { + _logManager = logManager; lock (LockObject) { _logger = NLog.LogManager.GetLogger(name); @@ -96,6 +100,13 @@ namespace MediaBrowser.Common.Implementations.Logging var messageText = LogHelper.GetLogMessage(exception); + var prefix = _logManager.ExceptionMessagePrefix; + + if (!string.IsNullOrWhiteSpace(prefix)) + { + messageText.Insert(0, prefix); + } + LogMultiline(message, level, messageText); } diff --git a/MediaBrowser.Common.Implementations/Logging/NlogManager.cs b/MediaBrowser.Common.Implementations/Logging/NlogManager.cs index b18c6b95a6..77d9f80f9f 100644 --- a/MediaBrowser.Common.Implementations/Logging/NlogManager.cs +++ b/MediaBrowser.Common.Implementations/Logging/NlogManager.cs @@ -34,6 +34,12 @@ namespace MediaBrowser.Common.Implementations.Logging /// The log file path. public string LogFilePath { get; private set; } + /// + /// Gets or sets the exception message prefix. + /// + /// The exception message prefix. + public string ExceptionMessagePrefix { get; set; } + /// /// Initializes a new instance of the class. /// @@ -159,7 +165,7 @@ namespace MediaBrowser.Common.Implementations.Logging /// ILogger. public ILogger GetLogger(string name) { - return new NLogger(name); + return new NLogger(name, this); } /// diff --git a/MediaBrowser.Model/Logging/ILogManager.cs b/MediaBrowser.Model/Logging/ILogManager.cs index 674d8fd165..59bb867563 100644 --- a/MediaBrowser.Model/Logging/ILogManager.cs +++ b/MediaBrowser.Model/Logging/ILogManager.cs @@ -13,6 +13,12 @@ namespace MediaBrowser.Model.Logging /// The log level. LogSeverity LogSeverity { get; set; } + /// + /// Gets or sets the exception message prefix. + /// + /// The exception message prefix. + string ExceptionMessagePrefix { get; set; } + /// /// Gets the logger. /// diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index e7631069fe..6dda869eee 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -48,7 +48,7 @@ namespace MediaBrowser.Server.Implementations.Sync throw new InvalidOperationException("Cannot proceed with sync because user no longer exists."); } - var items = GetItemsForSync(job.RequestedItemIds, user) + var items = GetItemsForSync(job.RequestedItemIds, user, job.UnwatchedOnly) .ToList(); var jobItems = _syncRepo.GetJobItems(new SyncJobItemQuery @@ -171,12 +171,31 @@ namespace MediaBrowser.Server.Implementations.Sync return _syncRepo.Update(job); } - public IEnumerable GetItemsForSync(IEnumerable itemIds, User user) + public IEnumerable GetItemsForSync(IEnumerable itemIds, User user, bool unwatchedOnly) { - return itemIds + var items = itemIds .SelectMany(i => GetItemsForSync(i, user)) - .Where(_syncManager.SupportsSync) - .DistinctBy(i => i.Id); + .Where(_syncManager.SupportsSync); + + if (unwatchedOnly) + { + // Avoid implicitly captured closure + var currentUser = user; + + items = items.Where(i => + { + var video = i as Video; + + if (video != null) + { + return !video.IsPlayed(currentUser); + } + + return true; + }); + } + + return items.DistinctBy(i => i.Id); } private IEnumerable GetItemsForSync(string id, User user) @@ -200,8 +219,8 @@ namespace MediaBrowser.Server.Implementations.Sync .GetRecursiveChildren(user); return itemByName.GetTaggedItems(items); - } - + } + if (item.IsFolder) { var folder = (Folder)item; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 5c699f0102..664ec4038c 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -49,7 +49,7 @@ namespace MediaBrowser.Server.Implementations.Sync var user = _userManager.GetUserById(request.UserId); var items = processor - .GetItemsForSync(request.ItemIds, user) + .GetItemsForSync(request.ItemIds, user, request.UnwatchedOnly) .ToList(); if (items.Any(i => !SupportsSync(i))) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs index 47bab6e53c..df03ab6f7a 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs @@ -61,7 +61,7 @@ namespace MediaBrowser.Server.Implementations.Sync public bool IsHidden { - get { return false; } + get { return true; } } public bool IsEnabled diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 0db7893e59..eca600b331 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -251,6 +251,8 @@ namespace MediaBrowser.Server.Startup.Common _remotePackageName = remotePackageName; _supportsNativeWebSocket = supportsNativeWebSocket; NativeApp = nativeApp; + + SetBaseExceptionMessage(); } private Version _version; @@ -307,6 +309,23 @@ namespace MediaBrowser.Server.Startup.Common get { return NativeApp.SupportsAutoRunAtStartup; } } + private void SetBaseExceptionMessage() + { + var builder = GetBaseExceptionMessage(ApplicationPaths); + + // Skip if plugins haven't been loaded yet + //if (Plugins != null) + //{ + // var pluginString = string.Join("|", Plugins.Select(i => i.Name + "-" + i.Version.ToString()).ToArray()); + // builder.Insert(0, string.Format("Plugins: {0}{1}", pluginString, Environment.NewLine)); + //} + + builder.Insert(0, string.Format("Version: {0}{1}", ApplicationVersion, Environment.NewLine)); + builder.Insert(0, "*** Error Report ***" + Environment.NewLine); + + LogManager.ExceptionMessagePrefix = builder.ToString(); + } + /// /// Runs the startup tasks. /// diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index af0219bda9..adc8eecb1d 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Implementations.Logging; +using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Startup.Common; diff --git a/SharedVersion.cs b/SharedVersion.cs index 33a1a70b92..d323dc7bce 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("3.0.*")] -//[assembly: AssemblyVersion("3.0.5463.3000")] +//[assembly: AssemblyVersion("3.0.*")] +[assembly: AssemblyVersion("3.0.5464.40000")]