aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/PackageReviewService.cs2
-rw-r--r--MediaBrowser.Api/Sync/SyncService.cs113
-rw-r--r--MediaBrowser.Common.Implementations/BaseApplicationHost.cs33
-rw-r--r--MediaBrowser.Common.Implementations/Logging/NLogger.cs13
-rw-r--r--MediaBrowser.Common.Implementations/Logging/NlogManager.cs8
-rw-r--r--MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj1
-rw-r--r--MediaBrowser.Common.Implementations/Security/MbAdmin.cs13
-rw-r--r--MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs6
-rw-r--r--MediaBrowser.Common.Implementations/Updates/InstallationManager.cs7
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs15
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs6
-rw-r--r--MediaBrowser.Controller/Sync/ISyncManager.cs21
-rw-r--r--MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs23
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj6
-rw-r--r--MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj6
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs29
-rw-r--r--MediaBrowser.Model/Logging/ILogManager.cs6
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj1
-rw-r--r--MediaBrowser.Model/Sync/SyncDialogOptions.cs24
-rw-r--r--MediaBrowser.Model/Sync/SyncHelper.cs11
-rw-r--r--MediaBrowser.Model/Sync/SyncJobItemQuery.cs10
-rw-r--r--MediaBrowser.Model/Sync/SyncJobQuery.cs5
-rw-r--r--MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/de.json32
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json8
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json16
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json4
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json32
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json30
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json14
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/ar.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/ca.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/cs.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/da.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/de.json10
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/el.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/en_GB.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/en_US.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/es.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/es_MX.json12
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/fi.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/fr.json16
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/he.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/hr.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/it.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/kk.json10
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/ko.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/ms.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/nb.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/nl.json10
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/pl.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/ru.json22
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/sv.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/tr.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/vi.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json6
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json6
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs49
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs26
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncRepository.cs15
-rw-r--r--MediaBrowser.Server.Startup.Common/ApplicationHost.cs19
-rw-r--r--MediaBrowser.ServerApplication/MainStartup.cs3
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Model.Signed.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
-rw-r--r--SharedVersion.cs2
69 files changed, 571 insertions, 270 deletions
diff --git a/MediaBrowser.Api/PackageReviewService.cs b/MediaBrowser.Api/PackageReviewService.cs
index ce366ccd4..c4cf1eac3 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 a3c2004fc..cefb0e46e 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
@@ -22,22 +27,14 @@ namespace MediaBrowser.Api.Sync
public string Id { get; set; }
}
+ [Route("/Sync/JobItems", "GET", Summary = "Gets sync job items.")]
+ public class GetSyncJobItems : SyncJobItemQuery, IReturn<QueryResult<SyncJobItem>>
+ {
+ }
+
[Route("/Sync/Jobs", "GET", Summary = "Gets sync jobs.")]
- public class GetSyncJobs : IReturn<QueryResult<SyncJob>>
+ public class GetSyncJobs : SyncJobQuery, IReturn<QueryResult<SyncJob>>
{
- /// <summary>
- /// Skips over a given number of items within the results. Use for paging.
- /// </summary>
- /// <value>The start index.</value>
- [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; }
-
- /// <summary>
- /// The maximum number of items to return
- /// </summary>
- /// <value>The limit.</value>
- [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", "POST", Summary = "Gets sync jobs.")]
@@ -52,14 +49,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<SyncDialogOptions>
+ {
+ [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)
@@ -71,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);
}
@@ -100,5 +128,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>
+ {
+ ItemFields.SyncInfo
+ }
+ }))
+ .ToList();
+
+ result.Options = SyncHelper.GetSyncOptions(dtos);
+
+ return ToOptimizedResult(result);
+ }
}
}
diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
index 891a03d39..9e14d0ee8 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);
+ }
+
+ builder.AppendLine(string.Format("Application Path: {0}", appPaths.ApplicationPath));
- logger.Info("*** When reporting issues please include the entire log file. ***".ToUpper());
+ return builder;
}
protected virtual IJsonSerializer CreateJsonSerializer()
diff --git a/MediaBrowser.Common.Implementations/Logging/NLogger.cs b/MediaBrowser.Common.Implementations/Logging/NLogger.cs
index c87b58f70..29b618890 100644
--- a/MediaBrowser.Common.Implementations/Logging/NLogger.cs
+++ b/MediaBrowser.Common.Implementations/Logging/NLogger.cs
@@ -14,6 +14,8 @@ namespace MediaBrowser.Common.Implementations.Logging
/// </summary>
private readonly NLog.Logger _logger;
+ private readonly ILogManager _logManager;
+
/// <summary>
/// The _lock object
/// </summary>
@@ -23,8 +25,10 @@ namespace MediaBrowser.Common.Implementations.Logging
/// Initializes a new instance of the <see cref="NLogger" /> class.
/// </summary>
/// <param name="name">The name.</param>
- public NLogger(string name)
+ /// <param name="logManager">The log manager.</param>
+ 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 b18c6b95a..77d9f80f9 100644
--- a/MediaBrowser.Common.Implementations/Logging/NlogManager.cs
+++ b/MediaBrowser.Common.Implementations/Logging/NlogManager.cs
@@ -35,6 +35,12 @@ namespace MediaBrowser.Common.Implementations.Logging
public string LogFilePath { get; private set; }
/// <summary>
+ /// Gets or sets the exception message prefix.
+ /// </summary>
+ /// <value>The exception message prefix.</value>
+ public string ExceptionMessagePrefix { get; set; }
+
+ /// <summary>
/// Initializes a new instance of the <see cref="NlogManager" /> class.
/// </summary>
/// <param name="logDirectory">The log directory.</param>
@@ -159,7 +165,7 @@ namespace MediaBrowser.Common.Implementations.Logging
/// <returns>ILogger.</returns>
public ILogger GetLogger(string name)
{
- return new NLogger(name);
+ return new NLogger(name, this);
}
/// <summary>
diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj
index 58ffb93bc..42a402940 100644
--- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj
+++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj
@@ -95,6 +95,7 @@
<Compile Include="ScheduledTasks\Tasks\DeleteCacheFileTask.cs" />
<Compile Include="ScheduledTasks\Tasks\DeleteLogFileTask.cs" />
<Compile Include="ScheduledTasks\Tasks\ReloadLoggerFileTask.cs" />
+ <Compile Include="Security\MbAdmin.cs" />
<Compile Include="Security\MBLicenseFile.cs" />
<Compile Include="Security\PluginSecurityManager.cs" />
<Compile Include="Security\RegRecord.cs" />
diff --git a/MediaBrowser.Common.Implementations/Security/MbAdmin.cs b/MediaBrowser.Common.Implementations/Security/MbAdmin.cs
new file mode 100644
index 000000000..ab4a83257
--- /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 = "http://www.mb3admin.com/admin/";
+
+ /// <summary>
+ /// Leaving as http for now until we get it squared away
+ /// </summary>
+ 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 dfdf61016..3e81e839f 100644
--- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
+++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs
@@ -17,9 +17,7 @@ namespace MediaBrowser.Common.Implementations.Security
/// </summary>
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";
/// <summary>
/// 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 e707129c1..f3a985968 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<List<PackageInfo>, DateTime> _lastPackageListResult;
- private const string MbAdminUrlHttp = "http://www.mb3admin.com/admin/";
- private const string MbAdminUrlHttps = "https://www.mb3admin.com/admin/";
/// <summary>
/// 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 e01b8857f..ed950b1c5 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 6b098cbd8..0c6125dbe 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 31c3c0c6d..47339f677 100644
--- a/MediaBrowser.Controller/Sync/ISyncManager.cs
+++ b/MediaBrowser.Controller/Sync/ISyncManager.cs
@@ -23,6 +23,13 @@ namespace MediaBrowser.Controller.Sync
QueryResult<SyncJob> GetJobs(SyncJobQuery query);
/// <summary>
+ /// Gets the job items.
+ /// </summary>
+ /// <param name="query">The query.</param>
+ /// <returns>QueryResult&lt;SyncJobItem&gt;.</returns>
+ QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query);
+
+ /// <summary>
/// Gets the job.
/// </summary>
/// <param name="id">The identifier.</param>
@@ -59,5 +66,19 @@ namespace MediaBrowser.Controller.Sync
/// <param name="targetId">The target identifier.</param>
/// <returns>DeviceProfile.</returns>
DeviceProfile GetDeviceProfile(string targetId);
+
+ /// <summary>
+ /// Reports the synchronize job item transferred.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task ReportSyncJobItemTransferred(string id);
+
+ /// <summary>
+ /// Gets the job item.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>SyncJobItem.</returns>
+ SyncJobItem GetJobItem(string id);
}
}
diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
index e3eb33ec5..7c512840b 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 8ad8ecbc9..2629dac8b 100644
--- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
+++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj
@@ -1031,6 +1031,9 @@
<Compile Include="..\MediaBrowser.Model\Sync\SyncCategory.cs">
<Link>Sync\SyncCategory.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\Sync\SyncDialogOptions.cs">
+ <Link>Sync\SyncDialogOptions.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\Sync\SyncJob.cs">
<Link>Sync\SyncJob.cs</Link>
</Compile>
@@ -1055,6 +1058,9 @@
<Compile Include="..\MediaBrowser.Model\Sync\SyncJobStatus.cs">
<Link>Sync\SyncJobStatus.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\Sync\SyncOptions.cs">
+ <Link>Sync\SyncOptions.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\Sync\SyncQuality.cs">
<Link>Sync\SyncQuality.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
index 04c61c847..4840777a5 100644
--- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
+++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj
@@ -990,6 +990,9 @@
<Compile Include="..\MediaBrowser.Model\Sync\SyncCategory.cs">
<Link>Sync\SyncCategory.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\Sync\SyncDialogOptions.cs">
+ <Link>Sync\SyncDialogOptions.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\Sync\SyncJob.cs">
<Link>Sync\SyncJob.cs</Link>
</Compile>
@@ -1014,6 +1017,9 @@
<Compile Include="..\MediaBrowser.Model\Sync\SyncJobStatus.cs">
<Link>Sync\SyncJobStatus.cs</Link>
</Compile>
+ <Compile Include="..\MediaBrowser.Model\Sync\SyncOptions.cs">
+ <Link>Sync\SyncOptions.cs</Link>
+ </Compile>
<Compile Include="..\MediaBrowser.Model\Sync\SyncQuality.cs">
<Link>Sync\SyncQuality.cs</Link>
</Compile>
diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs
index 0fb92d3ae..9521f8538 100644
--- a/MediaBrowser.Model/ApiClient/IApiClient.cs
+++ b/MediaBrowser.Model/ApiClient/IApiClient.cs
@@ -1387,6 +1387,35 @@ namespace MediaBrowser.Model.ApiClient
Task<SyncJob> CreateSyncJob(SyncJobRequest request);
/// <summary>
+ /// Gets the synchronize jobs.
+ /// </summary>
+ /// <param name="query">The query.</param>
+ /// <returns>Task&lt;QueryResult&lt;SyncJob&gt;&gt;.</returns>
+ Task<QueryResult<SyncJob>> GetSyncJobs(SyncJobQuery query);
+
+ /// <summary>
+ /// Gets the synchronize job items.
+ /// </summary>
+ /// <param name="query">The query.</param>
+ /// <returns>Task&lt;QueryResult&lt;SyncJobItem&gt;&gt;.</returns>
+ Task<QueryResult<SyncJobItem>> GetSyncJobItems(SyncJobItemQuery query);
+
+ /// <summary>
+ /// Reports the synchronize job item transferred.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>Task.</returns>
+ Task ReportSyncJobItemTransferred(string id);
+
+ /// <summary>
+ /// Gets the synchronize job item file.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task&lt;Stream&gt;.</returns>
+ Task<Stream> GetSyncJobItemFile(string id, CancellationToken cancellationToken);
+
+ /// <summary>
/// Opens the web socket.
/// </summary>
/// <param name="webSocketFactory">The web socket factory.</param>
diff --git a/MediaBrowser.Model/Logging/ILogManager.cs b/MediaBrowser.Model/Logging/ILogManager.cs
index 674d8fd16..59bb86756 100644
--- a/MediaBrowser.Model/Logging/ILogManager.cs
+++ b/MediaBrowser.Model/Logging/ILogManager.cs
@@ -14,6 +14,12 @@ namespace MediaBrowser.Model.Logging
LogSeverity LogSeverity { get; set; }
/// <summary>
+ /// Gets or sets the exception message prefix.
+ /// </summary>
+ /// <value>The exception message prefix.</value>
+ string ExceptionMessagePrefix { get; set; }
+
+ /// <summary>
/// Gets the logger.
/// </summary>
/// <param name="name">The name.</param>
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index fbf45e0ae..b81b4c1fd 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -364,6 +364,7 @@
<Compile Include="Session\UserDataChangeInfo.cs" />
<Compile Include="Devices\ContentUploadHistory.cs" />
<Compile Include="Sync\SyncCategory.cs" />
+ <Compile Include="Sync\SyncDialogOptions.cs" />
<Compile Include="Sync\SyncHelper.cs" />
<Compile Include="Sync\SyncJob.cs" />
<Compile Include="Sync\SyncJobCreationResult.cs" />
diff --git a/MediaBrowser.Model/Sync/SyncDialogOptions.cs b/MediaBrowser.Model/Sync/SyncDialogOptions.cs
new file mode 100644
index 000000000..0154b16ec
--- /dev/null
+++ b/MediaBrowser.Model/Sync/SyncDialogOptions.cs
@@ -0,0 +1,24 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Model.Sync
+{
+ public class SyncDialogOptions
+ {
+ /// <summary>
+ /// Gets or sets the targets.
+ /// </summary>
+ /// <value>The targets.</value>
+ public List<SyncTarget> Targets { get; set; }
+ /// <summary>
+ /// Gets or sets the options.
+ /// </summary>
+ /// <value>The options.</value>
+ public List<SyncOptions> Options { get; set; }
+
+ public SyncDialogOptions()
+ {
+ Targets = new List<SyncTarget>();
+ Options = new List<SyncOptions>();
+ }
+ }
+}
diff --git a/MediaBrowser.Model/Sync/SyncHelper.cs b/MediaBrowser.Model/Sync/SyncHelper.cs
index 64dc024e1..28a36ed21 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 e9af642ac..b85c21691 100644
--- a/MediaBrowser.Model/Sync/SyncJobItemQuery.cs
+++ b/MediaBrowser.Model/Sync/SyncJobItemQuery.cs
@@ -19,6 +19,16 @@ namespace MediaBrowser.Model.Sync
/// <value>The job identifier.</value>
public string JobId { get; set; }
/// <summary>
+ /// Gets or sets the target identifier.
+ /// </summary>
+ /// <value>The target identifier.</value>
+ public string TargetId { get; set; }
+ /// <summary>
+ /// Gets or sets the status.
+ /// </summary>
+ /// <value>The status.</value>
+ public SyncJobItemStatus? Status { get; set; }
+ /// <summary>
/// Gets or sets a value indicating whether this instance is completed.
/// </summary>
/// <value><c>null</c> if [is completed] contains no value, <c>true</c> if [is completed]; otherwise, <c>false</c>.</value>
diff --git a/MediaBrowser.Model/Sync/SyncJobQuery.cs b/MediaBrowser.Model/Sync/SyncJobQuery.cs
index 218b3823e..2af06bcfa 100644
--- a/MediaBrowser.Model/Sync/SyncJobQuery.cs
+++ b/MediaBrowser.Model/Sync/SyncJobQuery.cs
@@ -18,5 +18,10 @@ namespace MediaBrowser.Model.Sync
/// </summary>
/// <value><c>null</c> if [is completed] contains no value, <c>true</c> if [is completed]; otherwise, <c>false</c>.</value>
public bool? IsCompleted { get; set; }
+ /// <summary>
+ /// Gets or sets the target identifier.
+ /// </summary>
+ /// <value>The target identifier.</value>
+ public string TargetId { get; set; }
}
}
diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs
index b7bb482e0..36ba55828 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 9065404b6..d8a8036b0 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 f53bd74c4..fda5b65b3 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 2c0acb241..d3c95bfa4 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 8505ed281..b90370246 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 a3f9dc49e..85cd90d11 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 c8569dc9f..53445c370 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 ca307fd53..15e489fb3 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 cb66848d7..97302a0ff 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 8af187392..655cabcaf 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 240475943..74aa0cd37 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 c9f2b9cc0..db4c6d535 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 e4b88c9bd..c5e0715ff 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 7f7213735..41239b912 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 5b5d6f46e..9eeac0f85 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 2230ee972..9cb4fb6c5 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 f4bdae125..a720a1510 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 9707bb156..7c532182b 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 c23d5a708..c2c6c8612 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 0361928b4..b3f6ead82 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 2e90ed5df..cecde2022 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 2a4612d34..f7589ff00 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 b306eb372..5daab33d8 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 c017c3b8f..2d9e4053d 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 a4b1ad5ba..2a0bcc74f 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 dddcb2ef1..adbe36a92 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 d8351e587..a6a1fa3c4 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 86369aa95..c4f65de2c 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 677d94d96..a0d70f6c6 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 1cc4471f9..134059faf 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 0fdcba349..792a9eb0f 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 1aefd919e..e35d8a097 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 47bd0edab..b3831a097 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 7b2c6fd1c..51644f389 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 687faab0e..93a725d19 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 15324d40f..bfc16efb8 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 7f52d8d73..8d87c6897 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 1976c0540..6dda869ee 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
@@ -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)
@@ -155,12 +171,31 @@ namespace MediaBrowser.Server.Implementations.Sync
return _syncRepo.Update(job);
}
- public IEnumerable<BaseItem> GetItemsForSync(IEnumerable<string> itemIds, User user)
+ public IEnumerable<BaseItem> GetItemsForSync(IEnumerable<string> 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<BaseItem> GetItemsForSync(string id, User user)
@@ -184,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 c2f004f0b..664ec4038 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)))
@@ -265,5 +265,29 @@ 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);
+ }
+
+ public QueryResult<SyncJobItem> GetJobItems(SyncJobItemQuery query)
+ {
+ return _repo.GetJobItems(query);
+ }
}
}
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
index a9e319cc4..7825b9e9a 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/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs
index 0db7893e5..eca600b33 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();
+ }
+
/// <summary>
/// Runs the startup tasks.
/// </summary>
diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs
index af0219bda..adc8eecb1 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/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index b72992d4d..3ecc9f9a9 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common.Internal</id>
- <version>3.0.520</version>
+ <version>3.0.521</version>
<title>MediaBrowser.Common.Internal</title>
<authors>Luke</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.520" />
+ <dependency id="MediaBrowser.Common" version="3.0.521" />
<dependency id="NLog" version="3.1.0.0" />
<dependency id="SimpleInjector" version="2.6.1" />
<dependency id="sharpcompress" version="0.10.2" />
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index 6e00e223c..da3e29b2a 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common</id>
- <version>3.0.520</version>
+ <version>3.0.521</version>
<title>MediaBrowser.Common</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec
index 986ad497d..b0fe2b2c4 100644
--- a/Nuget/MediaBrowser.Model.Signed.nuspec
+++ b/Nuget/MediaBrowser.Model.Signed.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Model.Signed</id>
- <version>3.0.520</version>
+ <version>3.0.521</version>
<title>MediaBrowser.Model - Signed Edition</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index cbc8b3700..57d224fd4 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MediaBrowser.Server.Core</id>
- <version>3.0.520</version>
+ <version>3.0.521</version>
<title>Media Browser.Server.Core</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains core components required to build plugins for Media Browser Server.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.520" />
+ <dependency id="MediaBrowser.Common" version="3.0.521" />
</dependencies>
</metadata>
<files>
diff --git a/SharedVersion.cs b/SharedVersion.cs
index 48946f330..d323dc7bc 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.5464.40000")]