diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index 37d00b9378..5e1619672f 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -467,7 +467,7 @@ namespace MediaBrowser.Api.Library var auth = _authContext.GetAuthorizationInfo(Request); var user = _userManager.GetUserById(auth.UserId); - if (item is Playlist) + if (item is Playlist || item is BoxSet) { // For now this is allowed if user can see the playlist } diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index 760cb07fd9..51a7584b8d 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Devices; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; @@ -216,16 +217,18 @@ namespace MediaBrowser.Api private readonly ISessionManager _sessionMananger; private readonly IServerConfigurationManager _config; private readonly INetworkManager _networkManager; + private readonly IDeviceManager _deviceManager; public IAuthorizationContext AuthorizationContext { get; set; } - public UserService(IUserManager userManager, IDtoService dtoService, ISessionManager sessionMananger, IServerConfigurationManager config, INetworkManager networkManager) + public UserService(IUserManager userManager, IDtoService dtoService, ISessionManager sessionMananger, IServerConfigurationManager config, INetworkManager networkManager, IDeviceManager deviceManager) { _userManager = userManager; _dtoService = dtoService; _sessionMananger = sessionMananger; _config = config; _networkManager = networkManager; + _deviceManager = deviceManager; } public object Get(GetPublicUsers request) @@ -239,18 +242,12 @@ namespace MediaBrowser.Api }); } - // TODO: Uncomment once clients can handle an empty user list (and below) - //if (Request.IsLocal || IsInLocalNetwork(Request.RemoteIp)) + return Get(new GetUsers { - return Get(new GetUsers - { - IsHidden = false, - IsDisabled = false - }); - } + IsHidden = false, + IsDisabled = false - //// Return empty when external - //return ToOptimizedResult(new List()); + }, true); } /// @@ -259,6 +256,11 @@ namespace MediaBrowser.Api /// The request. /// System.Object. public object Get(GetUsers request) + { + return Get(request, false); + } + + private object Get(GetUsers request, bool filterByDevice) { var users = _userManager.Users; @@ -274,10 +276,19 @@ namespace MediaBrowser.Api if (request.IsGuest.HasValue) { - users = users.Where(i => (i.ConnectLinkType.HasValue && i.ConnectLinkType.Value == UserLinkType.Guest) == request.IsGuest.Value); } + if (filterByDevice) + { + var deviceId = AuthorizationContext.GetAuthorizationInfo(Request).DeviceId; + + if (!string.IsNullOrWhiteSpace(deviceId)) + { + users = users.Where(i => _deviceManager.CanAccessDevice(i.Id.ToString("N"), deviceId)); + } + } + var result = users .OrderBy(u => u.Name) .Select(i => _userManager.GetUserDto(i, Request.RemoteIp)) diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 9e14d0ee82..4de1adcfa8 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -466,7 +466,7 @@ namespace MediaBrowser.Common.Implementations RegisterSingleInstance(FileSystemManager); - HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger, FileSystemManager, ConfigurationManager); + HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger, FileSystemManager); RegisterSingleInstance(HttpClient); NetworkManager = CreateNetworkManager(LogManager.GetLogger("NetworkManager")); diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index 89d00b87dc..1f82c5eb0c 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -41,7 +41,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager private readonly IApplicationPaths _appPaths; private readonly IFileSystem _fileSystem; - private readonly IConfigurationManager _config; /// /// Initializes a new instance of the class. @@ -52,7 +51,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager /// appPaths /// or /// logger - public HttpClientManager(IApplicationPaths appPaths, ILogger logger, IFileSystem fileSystem, IConfigurationManager config) + public HttpClientManager(IApplicationPaths appPaths, ILogger logger, IFileSystem fileSystem) { if (appPaths == null) { @@ -65,7 +64,6 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager _logger = logger; _fileSystem = fileSystem; - _config = config; _appPaths = appPaths; // http://stackoverflow.com/questions/566437/http-post-returns-the-error-417-expectation-failed-c diff --git a/MediaBrowser.Model/Sync/SyncHelper.cs b/MediaBrowser.Model/Sync/SyncHelper.cs index 28a36ed21c..c2a446fbe6 100644 --- a/MediaBrowser.Model/Sync/SyncHelper.cs +++ b/MediaBrowser.Model/Sync/SyncHelper.cs @@ -62,6 +62,7 @@ namespace MediaBrowser.Model.Sync { List options = new List(); + options.Add(SyncOptions.Name); options.Add(SyncOptions.Quality); options.Add(SyncOptions.UnwatchedOnly); options.Add(SyncOptions.SyncNewContent); diff --git a/MediaBrowser.Model/Sync/SyncJobItemQuery.cs b/MediaBrowser.Model/Sync/SyncJobItemQuery.cs index b85c21691e..d8fa348514 100644 --- a/MediaBrowser.Model/Sync/SyncJobItemQuery.cs +++ b/MediaBrowser.Model/Sync/SyncJobItemQuery.cs @@ -28,10 +28,5 @@ namespace MediaBrowser.Model.Sync /// /// The status. public SyncJobItemStatus? Status { get; set; } - /// - /// Gets or sets a value indicating whether this instance is completed. - /// - /// null if [is completed] contains no value, true if [is completed]; otherwise, false. - public bool? IsCompleted { get; set; } } } diff --git a/MediaBrowser.Model/Sync/SyncJobItemStatus.cs b/MediaBrowser.Model/Sync/SyncJobItemStatus.cs index 3d0579a3c0..606f8cde44 100644 --- a/MediaBrowser.Model/Sync/SyncJobItemStatus.cs +++ b/MediaBrowser.Model/Sync/SyncJobItemStatus.cs @@ -6,7 +6,8 @@ namespace MediaBrowser.Model.Sync Queued = 0, Converting = 1, Transferring = 2, - Completed = 3, - Failed = 4 + Synced = 3, + Failed = 4, + RemovedFromDevice = 5 } } diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs index 4d2d57b6ea..77d9684093 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs @@ -6,7 +6,6 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading; using System.Threading.Tasks; using WebSocketSharp.Net; @@ -15,7 +14,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp public class WebSocketSharpListener : IHttpListener { private HttpListener _listener; - private readonly ManualResetEventSlim _listenForNextRequest = new ManualResetEventSlim(false); private readonly ILogger _logger; private readonly Action _endpointListener; @@ -43,70 +41,13 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp _listener.Prefixes.Add(prefix); } + _listener.OnContext = ProcessContext; + _listener.Start(); - - Task.Factory.StartNew(Listen, TaskCreationOptions.LongRunning); } - private bool IsListening + private void ProcessContext(HttpListenerContext context) { - get { return _listener != null && _listener.IsListening; } - } - - // Loop here to begin processing of new requests. - private void Listen() - { - while (IsListening) - { - if (_listener == null) return; - _listenForNextRequest.Reset(); - - try - { - _listener.BeginGetContext(ListenerCallback, _listener); - _listenForNextRequest.Wait(); - } - catch (Exception ex) - { - _logger.Error("Listen()", ex); - return; - } - if (_listener == null) return; - } - } - - // Handle the processing of a request in here. - private void ListenerCallback(IAsyncResult asyncResult) - { - _listenForNextRequest.Set(); - - var listener = asyncResult.AsyncState as HttpListener; - HttpListenerContext context; - - if (listener == null) return; - var isListening = listener.IsListening; - - try - { - if (!isListening) - { - _logger.Debug("Ignoring ListenerCallback() as HttpListener is no longer listening"); return; - } - // The EndGetContext() method, as with all Begin/End asynchronous methods in the .NET Framework, - // blocks until there is a request to be processed or some type of data is available. - context = listener.EndGetContext(asyncResult); - } - catch (Exception ex) - { - // You will get an exception when httpListener.Stop() is called - // because there will be a thread stopped waiting on the .EndGetContext() - // method, and again, that is just the way most Begin/End asynchronous - // methods of the .NET Framework work. - var errMsg = ex + ": " + IsListening; - _logger.Warn(errMsg); - return; - } - Task.Factory.StartNew(() => InitTask(context)); } @@ -117,10 +58,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp var task = this.ProcessRequestAsync(context); task.ContinueWith(x => HandleError(x.Exception, context), TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.AttachedToParent); - if (task.Status == TaskStatus.Created) - { - task.RunSynchronously(); - } + //if (task.Status == TaskStatus.Created) + //{ + // task.RunSynchronously(); + //} } catch (Exception ex) { diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json index b6087812fa..f42b623adf 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json index 29de370adf..909f5ada6a 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json index fc416018d8..0e2af5e4e0 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json @@ -41,6 +41,10 @@ "LabelCancelled": "(zru\u0161eno)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json index a56d2d5b83..75e6a1b486 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json index b69b744b3f..051e8a7453 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json @@ -41,6 +41,10 @@ "LabelCancelled": "(abgebrochen)", "LabelFailed": "(fehlgeschlagen)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Bibliothekszugriff", + "HeaderChannelAccess": "Channelzugriff", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Durch herunterfahrenden Server abgebrochen)", "LabelScheduledTaskLastRan": "Zuletzt ausgef\u00fchrt vor: {0}. Ben\u00f6tigte Zeit: {1}.", "HeaderDeleteTaskTrigger": "Entferne Aufgabenausl\u00f6ser", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json index 4556492643..0e3340427a 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json index a667f6df97..0df62070cc 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json index 4c57d573b8..db2ddc4ec4 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json index 73b3098c13..c4c980ff58 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelado)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Abortado por cierre del servidor)", "LabelScheduledTaskLastRan": "\u00daltima ejecuci\u00f3n {0}, teniendo {1}.", "HeaderDeleteTaskTrigger": "Eliminar tarea de activaci\u00f3n", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json index 67e107c1b6..5d085ef492 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelado)", "LabelFailed": "(Fallido)", "ButtonHelp": "Ayuda", + "HeaderLibraryAccess": "Acceso a la Biblioteca", + "HeaderChannelAccess": "Acceso a los Canales", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Abortada por apagado del servidor)", "LabelScheduledTaskLastRan": "Ejecutado hace {0}, tomando {1}.", "HeaderDeleteTaskTrigger": "Borrar Disparador de Tarea", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json index 6173cfe78b..bdb51842fa 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json index 3cb2cbd152..262a255853 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json @@ -41,6 +41,10 @@ "LabelCancelled": "(annul\u00e9)", "LabelFailed": "(\u00e9chou\u00e9)", "ButtonHelp": "Aide", + "HeaderLibraryAccess": "Acc\u00e8s \u00e0 la librairie", + "HeaderChannelAccess": "Acc\u00e8s Cha\u00eene", + "HeaderDeviceAccess": "Acc\u00e8s \u00e0 l'appareil", + "HeaderSelectDevices": "S\u00e9lectionnez un appareil", "LabelAbortedByServerShutdown": "(Annul\u00e9 par fermeture du serveur)", "LabelScheduledTaskLastRan": "Derni\u00e8re ex\u00e9cution {0}, dur\u00e9e {1}.", "HeaderDeleteTaskTrigger": "Supprimer le d\u00e9clencheur de t\u00e2che", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json index adce0cb261..d20c54f9b8 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json index e849dd4532..ea7dfc4e99 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json index d94d8adfd7..f6d57b44cb 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancellato)", "LabelFailed": "(fallito)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Accesso libreria", + "HeaderChannelAccess": "Accesso canali", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Interrotto dalla chiusura del server)", "LabelScheduledTaskLastRan": "Ultima esecuzione {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Elimina Operazione pianificata", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index ca2a326ef2..ed52684c1a 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -422,7 +422,7 @@ "ButtonChangeType": "Change type", "ButtonRemove": "Remove", "HeaderMediaLocations": "Media Locations", - "LabelFolderTypeValue": "Folder type: {0}", + "LabelContentTypeValue": "Content type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json index 9f6f9312c1..b8fe0fa315 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json @@ -41,6 +41,10 @@ "LabelCancelled": "(\u0431\u043e\u043b\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0434\u044b)", "LabelFailed": "(\u0441\u04d9\u0442\u0441\u0456\u0437)", "ButtonHelp": "\u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430", + "HeaderLibraryAccess": "\u0422\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u0493\u0430 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443", + "HeaderChannelAccess": "\u0410\u0440\u043d\u0430\u0493\u0430 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(\u0421\u0435\u0440\u0432\u0435\u0440 \u0436\u04b1\u043c\u044b\u0441\u044b \u0430\u044f\u049b\u0442\u0430\u043b\u0443\u044b\u043d\u0430 \u0431\u0430\u0439\u043b\u0430\u043d\u044b\u0441\u0442\u044b \u04af\u0437\u0456\u043b\u0434\u0456)", "LabelScheduledTaskLastRan": "\u0421\u043e\u04a3\u0493\u044b \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u043b\u0493\u0430\u043d\u044b {0}, {1} \u0443\u0430\u049b\u044b\u0442 \u0430\u043b\u0434\u044b.", "HeaderDeleteTaskTrigger": "\u0422\u0430\u043f\u0441\u044b\u0440\u043c\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0456\u043d \u0436\u043e\u044e", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json index 2be125954a..4243d1f76c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json index 68f3430dca..2e53bc8a2e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json @@ -41,6 +41,10 @@ "LabelCancelled": "(kansellert)", "LabelFailed": "(Feilet)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Bibliotek tilgang", + "HeaderChannelAccess": "Kanal tilgang", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Avbrutt av server shutdown)", "LabelScheduledTaskLastRan": "Sist kj\u00f8rt {0}, tar {1}.", "HeaderDeleteTaskTrigger": "Slett Oppgave Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json index 78554eed8b..75a7d6bc26 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json @@ -41,6 +41,10 @@ "LabelCancelled": "(Geannuleerd)", "LabelFailed": "(mislukt)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Bibliotheek toegang", + "HeaderChannelAccess": "Kanaal toegang", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Afgebroken door afsluiten van de server)", "LabelScheduledTaskLastRan": "Laatste keer {0}, duur {1}.", "HeaderDeleteTaskTrigger": "Verwijderen Taak Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json index d957ab01f5..d703defa6e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json index fc26642b7f..96f55451cf 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelado)", "LabelFailed": "(falhou)", "ButtonHelp": "Ajuda", + "HeaderLibraryAccess": "Acesso \u00e0 Biblioteca", + "HeaderChannelAccess": "Acesso ao Canal", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Abortada pelo desligamento do servidor)", "LabelScheduledTaskLastRan": "\u00daltima execu\u00e7\u00e3o {0}, demorando {1}.", "HeaderDeleteTaskTrigger": "Excluir Disparador da Tarefa", @@ -413,7 +417,7 @@ "HeaderMediaLocations": "Localiza\u00e7\u00f5es de M\u00eddia", "LabelFolderTypeValue": "Tipo de pasta: {0}", "LabelPathSubstitutionHelp": "Opcional: Substitui\u00e7\u00e3o de caminho pode mapear caminhos do servidor para compartilhamentos de rede de forma a que os clientes possam acessar para reprodu\u00e7\u00e3o direta.", - "FolderTypeUnset": "Unset (mixed content)", + "FolderTypeUnset": "Indefinida (conte\u00fado misto)", "FolderTypeMovies": "Filmes", "FolderTypeMusic": "M\u00fasica", "FolderTypeAdultVideos": "V\u00eddeos adultos", @@ -652,5 +656,5 @@ "LabelItemLimitHelp": "Opcional. Defina o n\u00famero limite de itens que ser\u00e3o sincronizados.", "MessageBookPluginRequired": "Requer a instala\u00e7\u00e3o do plugin Bookshelf", "MessageGamePluginRequired": "Requer a instala\u00e7\u00e3o do plugin GameBrowser", - "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." + "MessageUnsetContentHelp": "O conte\u00fado ser\u00e1 exibido em pastas simples. Para melhor resultado, use o gerenciador de metadados para definir os tipos de conte\u00fado das sub-pastas." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json index 099db56d1a..cb7db972a3 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(falhou)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json index 3ca96a3b0f..e39e94f93c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json @@ -41,6 +41,10 @@ "LabelCancelled": "(\u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043e)", "LabelFailed": "(\u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e)", "ButtonHelp": "\u0421\u043f\u0440\u0430\u0432\u043a\u0430", + "HeaderLibraryAccess": "\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435", + "HeaderChannelAccess": "\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u0430\u043d\u0430\u043b\u0430\u043c", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(\u041f\u0440\u0435\u0440\u0432\u0430\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430)", "LabelScheduledTaskLastRan": "\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c {0}, \u0437\u0430\u043d\u044f\u043b\u0430 {1}.", "HeaderDeleteTaskTrigger": "\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 \u0437\u0430\u0434\u0430\u0447\u0438", @@ -413,7 +417,7 @@ "HeaderMediaLocations": "\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "LabelFolderTypeValue": "\u0422\u0438\u043f \u043f\u0430\u043f\u043a\u0438: {0}", "LabelPathSubstitutionHelp": "\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0443\u0442\u0435\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0441\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u043e\u0431\u0449\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.", - "FolderTypeUnset": "Unset (mixed content)", + "FolderTypeUnset": "\u041d\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 (\u0440\u0430\u0437\u043d\u043e\u0442\u0438\u043f\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435)", "FolderTypeMovies": "\u0424\u0438\u043b\u044c\u043c\u044b", "FolderTypeMusic": "\u041c\u0443\u0437\u044b\u043a\u0430", "FolderTypeAdultVideos": "\u0412\u0437\u0440\u043e\u0441\u043b\u044b\u0435 \u0432\u0438\u0434\u0435\u043e", @@ -652,5 +656,5 @@ "LabelItemLimitHelp": "\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0417\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.", "MessageBookPluginRequired": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 Bookshelf", "MessageGamePluginRequired": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 GameBrowser", - "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." + "MessageUnsetContentHelp": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438. \u0414\u043b\u044f \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0438\u043f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043f\u0430\u043f\u043e\u043a." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json index 5a3facbb61..9aa55bb90e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json @@ -41,6 +41,10 @@ "LabelCancelled": "(avbr\u00f6ts)", "LabelFailed": "(misslyckades)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(avbr\u00f6ts eftersom servern st\u00e4ngdes av)", "LabelScheduledTaskLastRan": "Senast k\u00f6rd {0}, tog {1}", "HeaderDeleteTaskTrigger": "Ta bort aktivitetsutl\u00f6sare", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json index e6f5b4d791..c6713f9488 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json index 22ccfacc26..351a69ceb3 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json index 3bf1bf2a7e..8df63af868 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json @@ -41,6 +41,10 @@ "LabelCancelled": "(\u5df2\u53d6\u6d88)", "LabelFailed": "(\u5931\u8d25)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(\u56e0\u4e3a\u670d\u52a1\u5668\u5173\u95ed\u88ab\u4e2d\u6b62)", "LabelScheduledTaskLastRan": "\u6700\u540e\u8fd0\u884c {0}, \u82b1\u8d39\u65f6\u95f4 {1}.", "HeaderDeleteTaskTrigger": "\u5220\u9664\u4efb\u52a1\u89e6\u53d1\u6761\u4ef6", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json index c7c4ecd882..2f4c18f7f6 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json @@ -41,6 +41,10 @@ "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", "ButtonHelp": "Help", + "HeaderLibraryAccess": "Library Access", + "HeaderChannelAccess": "Channel Access", + "HeaderDeviceAccess": "Device Access", + "HeaderSelectDevices": "Select Devices", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ar.json b/MediaBrowser.Server.Implementations/Localization/Server/ar.json index 2b2eea03f4..e8826e5f49 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ar.json @@ -63,12 +63,16 @@ "TabPreferences": "\u062a\u0641\u0636\u064a\u0644\u0627\u062a", "TabPassword": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631", "TabLibraryAccess": "\u0627\u0644\u062f\u062e\u0648\u0644 \u0627\u0644\u0649 \u0627\u0644\u0645\u0643\u062a\u0628\u0629", + "TabAccess": "Access", "TabImage": "\u0635\u0648\u0631\u0629", "TabProfile": "\u0633\u062c\u0644", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0641\u064a\u062f\u064a\u0648", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ca.json b/MediaBrowser.Server.Implementations/Localization/Server/ca.json index 9492845d3f..65464c2cea 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ca.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferences", "TabPassword": "Password", "TabLibraryAccess": "Library Access", + "TabAccess": "Access", "TabImage": "Image", "TabProfile": "Profile", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "Video Playback Settings", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/cs.json b/MediaBrowser.Server.Implementations/Localization/Server/cs.json index ca3a1c064b..bcedf0c9f5 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/cs.json @@ -63,12 +63,16 @@ "TabPreferences": "P\u0159edvolby", "TabPassword": "Heslo", "TabLibraryAccess": "P\u0159\u00edstup ke knihovn\u011b", + "TabAccess": "Access", "TabImage": "Obr\u00e1zek", "TabProfile": "Profil", "TabMetadata": "Metadata", "TabImages": "Obr\u00e1zky", "TabNotifications": "Notifications", "TabCollectionTitles": "N\u00e1zvy", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Zobrazit chyb\u011bj\u00edc\u00ed epizody", "LabelUnairedMissingEpisodesWithinSeasons": "Zobrazit neprov\u011btran\u00e9 epizody v r\u00e1mci sez\u00f3n", "HeaderVideoPlaybackSettings": "Nastaven\u00ed p\u0159ehr\u00e1v\u00e1n\u00ed videa", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/da.json b/MediaBrowser.Server.Implementations/Localization/Server/da.json index f03e3cdbdf..dcf5d69d7f 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/da.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/da.json @@ -63,12 +63,16 @@ "TabPreferences": "Indstillinger", "TabPassword": "Kode", "TabLibraryAccess": "Bibliotek adgang", + "TabAccess": "Access", "TabImage": "Billede", "TabProfile": "Profil", "TabMetadata": "Metadata", "TabImages": "Billeder", "TabNotifications": "Notifications", "TabCollectionTitles": "Titler", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Vis manglende episoder i s\u00e6soner", "LabelUnairedMissingEpisodesWithinSeasons": "Vis endnu ikke sendte episoder i s\u00e6soner", "HeaderVideoPlaybackSettings": "Video afspilnings indstillinger", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/de.json b/MediaBrowser.Server.Implementations/Localization/Server/de.json index cd1626f58d..fb886e32de 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/de.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/de.json @@ -63,12 +63,16 @@ "TabPreferences": "Einstellungen", "TabPassword": "Passwort", "TabLibraryAccess": "Bibliothekenzugriff", + "TabAccess": "Access", "TabImage": "Bild", "TabProfile": "Profil", "TabMetadata": "Metadata", "TabImages": "Bilder", "TabNotifications": "Benachrichtigungen", "TabCollectionTitles": "Titel", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Zeige fehlende Episoden innerhalb von Staffeln", "LabelUnairedMissingEpisodesWithinSeasons": "Zeige noch nicht ausgestahlte Episoden innerhalb von Staffeln", "HeaderVideoPlaybackSettings": "Videowiedergabe Einstellungen", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/el.json b/MediaBrowser.Server.Implementations/Localization/Server/el.json index 767ae97203..708daa6815 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/el.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/el.json @@ -63,12 +63,16 @@ "TabPreferences": "\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2 ", "TabPassword": "\u03c4\u03bf\u03bd \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc", "TabLibraryAccess": "\u03a0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b2\u03b9\u03b2\u03bb\u03b9\u03bf\u03b8\u03ae\u03ba\u03b7", + "TabAccess": "Access", "TabImage": "\u03b5\u03b9\u03ba\u03cc\u03bd\u03b1", "TabProfile": "\u03c0\u03c1\u03bf\u03c6\u03af\u03bb ", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "\u03b4\u03b5\u03af\u03c7\u03bd\u03bf\u03c5\u03bd \u03bb\u03b5\u03af\u03c0\u03b5\u03b9 \u03b5\u03c0\u03b5\u03b9\u03c3\u03cc\u03b4\u03b9\u03b1 \u03b5\u03bd\u03c4\u03cc\u03c2 \u03b5\u03c0\u03bf\u03c7\u03ad\u03c2", "LabelUnairedMissingEpisodesWithinSeasons": "\u03b4\u03b5\u03af\u03c7\u03bd\u03bf\u03c5\u03bd unaired \u03b5\u03c0\u03b5\u03b9\u03c3\u03cc\u03b4\u03b9\u03b1 \u03b5\u03bd\u03c4\u03cc\u03c2 \u03b5\u03c0\u03bf\u03c7\u03ad\u03c2", "HeaderVideoPlaybackSettings": "\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2.", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json index 52b11feadc..0063a3af67 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferences", "TabPassword": "Password", "TabLibraryAccess": "Library Access", + "TabAccess": "Access", "TabImage": "Image", "TabProfile": "Profile", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "Video Playback Settings", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json index b14e8fcaae..82fb1186e6 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferences", "TabPassword": "Password", "TabLibraryAccess": "Library Access", + "TabAccess": "Access", "TabImage": "Image", "TabProfile": "Profile", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "Video Playback Settings", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es.json b/MediaBrowser.Server.Implementations/Localization/Server/es.json index 4cd9d799b8..f4264b4fc5 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferencias", "TabPassword": "Contrase\u00f1a", "TabLibraryAccess": "Acceso a biblioteca", + "TabAccess": "Access", "TabImage": "imagen", "TabProfile": "Perfil", "TabMetadata": "Metadata", "TabImages": "Im\u00e1genes", "TabNotifications": "Notificaciones", "TabCollectionTitles": "T\u00edtulos", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Mostar episodios no disponibles en temporadas", "LabelUnairedMissingEpisodesWithinSeasons": "Mostrar episodios a\u00fan no emitidos en temporadas", "HeaderVideoPlaybackSettings": "Ajustes de Reproducci\u00f3n de Video", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json index 3b5c5add50..5a39eaf7b1 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferencias", "TabPassword": "Contrase\u00f1a", "TabLibraryAccess": "Acceso a biblioteca", + "TabAccess": "Access", "TabImage": "Imagen", "TabProfile": "Perf\u00edl", "TabMetadata": "Metadatos", "TabImages": "Im\u00e1genes", "TabNotifications": "Notificaciones", "TabCollectionTitles": "T\u00edtulos", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Mostar episodios no disponibles en las temporadas", "LabelUnairedMissingEpisodesWithinSeasons": "Mostrar episodios a\u00fan no emitidos en las temporadas", "HeaderVideoPlaybackSettings": "Ajustes de Reproducci\u00f3n de Video", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fi.json b/MediaBrowser.Server.Implementations/Localization/Server/fi.json index 3386f4da5b..ed49df1786 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fi.json @@ -63,12 +63,16 @@ "TabPreferences": "Asetukset", "TabPassword": "Salasana", "TabLibraryAccess": "Kirjaston P\u00e4\u00e4sy", + "TabAccess": "Access", "TabImage": "Kuva", "TabProfile": "Profiili", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "N\u00e4yt\u00e4 puuttuvat jaksot tuotantokausissa", "LabelUnairedMissingEpisodesWithinSeasons": "N\u00e4yt\u00e4 julkaisemattomat jaksot tuotantokausissa", "HeaderVideoPlaybackSettings": "Videon Toistamisen Asetukset", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fr.json b/MediaBrowser.Server.Implementations/Localization/Server/fr.json index f5fd910e8c..818dcb7264 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fr.json @@ -63,12 +63,16 @@ "TabPreferences": "Pr\u00e9f\u00e9rences", "TabPassword": "Mot de passe", "TabLibraryAccess": "Acc\u00e8s aux biblioth\u00e8ques", + "TabAccess": "Acc\u00e8s", "TabImage": "Image", "TabProfile": "Profil", "TabMetadata": "M\u00e9tadonn\u00e9es", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titres", + "HeaderDeviceAccess": "Acc\u00e8s \u00e0 l'appareil", + "OptionEnableAccessFromAllDevices": "Autoriser l'acc\u00e8s \u00e0 tous les appareils", + "DeviceAccessHelp": "Ceci ne s'applique qu'aux appareils qui peuvent \u00eatre identifi\u00e9s de mani\u00e8re unique et qui n'emp\u00eachent pas l'acc\u00e8s au navigateur. Le filtrage de l'acc\u00e8s aux appareil par utilisateur emp\u00eachera l'utilisation de nouveaux appareils jusqu'\u00e0 ce qu'ils soient approuv\u00e9s ici.", "LabelDisplayMissingEpisodesWithinSeasons": "Afficher les \u00e9pisodes manquants dans les saisons", "LabelUnairedMissingEpisodesWithinSeasons": "Afficher les \u00e9pisodes non diffus\u00e9s dans les saisons", "HeaderVideoPlaybackSettings": "Param\u00e8tres de lecture video", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/he.json b/MediaBrowser.Server.Implementations/Localization/Server/he.json index af862900b8..ae1a06bb3d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/he.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/he.json @@ -63,12 +63,16 @@ "TabPreferences": "\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea", "TabPassword": "\u05e1\u05d9\u05e1\u05de\u05d0", "TabLibraryAccess": "\u05d2\u05d9\u05e9\u05d4 \u05dc\u05ea\u05d9\u05e7\u05d9\u05d5\u05ea", + "TabAccess": "Access", "TabImage": "\u05ea\u05de\u05d5\u05e0\u05d4", "TabProfile": "\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc", "TabMetadata": "Metadata", "TabImages": "\u05ea\u05de\u05d5\u05e0\u05d5\u05ea", "TabNotifications": "\u05d4\u05ea\u05e8\u05d0\u05d5\u05ea", "TabCollectionTitles": "\u05db\u05d5\u05ea\u05e8\u05d9\u05dd", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "\u05d4\u05e6\u05d2 \u05e4\u05e8\u05e7\u05d9\u05dd \u05d7\u05e1\u05e8\u05d9\u05dd \u05d1\u05ea\u05d5\u05da \u05d4\u05e2\u05d5\u05e0\u05d5\u05ea", "LabelUnairedMissingEpisodesWithinSeasons": "\u05d4\u05e6\u05d2 \u05e4\u05e8\u05e7\u05d9\u05dd \u05e9\u05e2\u05d3\u05d9\u05df \u05d0\u05dc \u05e9\u05d5\u05d3\u05e8\u05d5 \u05d1\u05ea\u05d5\u05da \u05d4\u05e2\u05d5\u05e0\u05d5\u05ea", "HeaderVideoPlaybackSettings": "\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e0\u05d9\u05d2\u05d5\u05df", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/hr.json b/MediaBrowser.Server.Implementations/Localization/Server/hr.json index 683e91a345..e8f637fe26 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/hr.json @@ -63,12 +63,16 @@ "TabPreferences": "Postavke", "TabPassword": "Lozinka", "TabLibraryAccess": "Pristup biblioteci", + "TabAccess": "Access", "TabImage": "Slika", "TabProfile": "Profil", "TabMetadata": "Metadata", "TabImages": "Slike", "TabNotifications": "Obavijesti", "TabCollectionTitles": "Naslovi", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Prika\u017ei epizode koje nedostaju unutar sezone", "LabelUnairedMissingEpisodesWithinSeasons": "Prika\u017ei epizode koje nisu emitirane unutar sezone", "HeaderVideoPlaybackSettings": "Postavke video reprodukcije", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/it.json b/MediaBrowser.Server.Implementations/Localization/Server/it.json index e01e0d3f3a..c551052bd5 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/it.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/it.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferenze", "TabPassword": "Password", "TabLibraryAccess": "Accesso libreria", + "TabAccess": "Access", "TabImage": "Immagine", "TabProfile": "Profilo", "TabMetadata": "Metadata", "TabImages": "Immagini", "TabNotifications": "Notifiche", "TabCollectionTitles": "Titolo", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Visualizza gli episodi mancanti nelle stagioni", "LabelUnairedMissingEpisodesWithinSeasons": "Visualizzare episodi mai andati in onda all'interno stagioni", "HeaderVideoPlaybackSettings": "Impostazioni di riproduzione video", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/kk.json b/MediaBrowser.Server.Implementations/Localization/Server/kk.json index 0f26e5211d..1d997dbac1 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/kk.json @@ -63,12 +63,16 @@ "TabPreferences": "\u0422\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440", "TabPassword": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437", "TabLibraryAccess": "\u0422\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u0493\u0430 \u049b\u0430\u0442\u044b\u043d\u0430\u0441", + "TabAccess": "Access", "TabImage": "\u0421\u0443\u0440\u0435\u0442", "TabProfile": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c", "TabMetadata": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a", "TabImages": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u0440", "TabNotifications": "\u0425\u0430\u0431\u0430\u0440\u043b\u0430\u043d\u0434\u044b\u0440\u0443\u043b\u0430\u0440", "TabCollectionTitles": "\u0422\u0443\u044b\u043d\u0434\u044b\u043b\u0430\u0440", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "\u0416\u043e\u049b \u044d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440\u0434\u044b \u043c\u0430\u0443\u0441\u044b\u043c \u0456\u0448\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", "LabelUnairedMissingEpisodesWithinSeasons": "\u041a\u04e9\u0440\u0441\u0435\u0442\u0456\u043b\u043c\u0435\u0433\u0435\u043d \u044d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440\u0434\u044b \u043c\u0430\u0443\u0441\u044b\u043c \u0456\u0448\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", "HeaderVideoPlaybackSettings": "\u0411\u0435\u0439\u043d\u0435 \u043e\u0439\u043d\u0430\u0442\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440\u0456", @@ -376,8 +380,8 @@ "LabelMaxScreenshotsPerItem": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0435\u04a3 \u043a\u04e9\u043f \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0441\u0430\u043d\u044b:", "LabelMinBackdropDownloadWidth": "\u0410\u0440\u0442\u049b\u044b \u0441\u0443\u0440\u0435\u0442\u0442\u0456\u04a3 \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u044b\u043d\u0430\u0442\u044b\u043d \u0435\u04a3 \u0430\u0437 \u0435\u043d\u0456:", "LabelMinScreenshotDownloadWidth": "\u0416\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443 \u04af\u0448\u0456\u043d \u0435\u04a3 \u0430\u0437 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0435\u043d\u0456:", - "ButtonAddScheduledTaskTrigger": "\u0422\u0430\u043f\u0441\u044b\u0440\u043c\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0456\u043d \u04af\u0441\u0442\u0435\u0443", - "HeaderAddScheduledTaskTrigger": "\u0422\u0430\u043f\u0441\u044b\u0440\u043c\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0456\u043d \u04af\u0441\u0442\u0435\u0443", + "ButtonAddScheduledTaskTrigger": "\u0422\u0440\u0438\u0433\u0433\u0435\u0440\u0434\u0456 \u04af\u0441\u0442\u0435\u0443", + "HeaderAddScheduledTaskTrigger": "\u0422\u0440\u0438\u0433\u0433\u0435\u0440\u0434\u0456 \u04af\u0441\u0442\u0435\u0443", "ButtonAdd": "\u04ae\u0441\u0442\u0435\u0443", "LabelTriggerType": "\u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0442\u04af\u0440\u0456:", "OptionDaily": "\u041a\u04af\u043d \u0441\u0430\u0439\u044b\u043d", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ko.json b/MediaBrowser.Server.Implementations/Localization/Server/ko.json index 48852cdfe4..8336a5cdd9 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ko.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ko.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferences", "TabPassword": "Password", "TabLibraryAccess": "Library Access", + "TabAccess": "Access", "TabImage": "Image", "TabProfile": "Profile", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "Video Playback Settings", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ms.json b/MediaBrowser.Server.Implementations/Localization/Server/ms.json index a64d3b584b..3f91dbcccf 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ms.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferences", "TabPassword": "Password", "TabLibraryAccess": "Library Access", + "TabAccess": "Access", "TabImage": "Image", "TabProfile": "Profile", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "Video Playback Settings", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nb.json b/MediaBrowser.Server.Implementations/Localization/Server/nb.json index cd6228bc40..49073383c7 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nb.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferanser", "TabPassword": "Passord", "TabLibraryAccess": "Bibliotektilgang", + "TabAccess": "Access", "TabImage": "Bilde", "TabProfile": "profil", "TabMetadata": "Metadata", "TabImages": "Bilder", "TabNotifications": "Varslinger", "TabCollectionTitles": "Titler", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Vis episoder som sesongen mangler", "LabelUnairedMissingEpisodesWithinSeasons": "Vis episoder som enn\u00e5 ikke har blitt sendt", "HeaderVideoPlaybackSettings": "Innstillinger for video-avspilling", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nl.json b/MediaBrowser.Server.Implementations/Localization/Server/nl.json index 2a8eb8fe4d..a4245f9aba 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nl.json @@ -63,12 +63,16 @@ "TabPreferences": "Voorkeuren", "TabPassword": "Wachtwoord", "TabLibraryAccess": "Bibliotheek toegang", + "TabAccess": "Access", "TabImage": "Afbeelding", "TabProfile": "Profiel", "TabMetadata": "Metagegevens", "TabImages": "Afbeeldingen", "TabNotifications": "Meldingen", "TabCollectionTitles": "Titels", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Toon ontbrekende afleveringen binnen een seizoen", "LabelUnairedMissingEpisodesWithinSeasons": "Toon komende afleveringen binnen een seizoen", "HeaderVideoPlaybackSettings": "Video afspeel instellingen", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pl.json b/MediaBrowser.Server.Implementations/Localization/Server/pl.json index 1abcb52ffc..091033f151 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pl.json @@ -63,12 +63,16 @@ "TabPreferences": "Preferencje", "TabPassword": "Has\u0142o", "TabLibraryAccess": "Dost\u0119p do biblioteki", + "TabAccess": "Access", "TabImage": "Obraz", "TabProfile": "Profil", "TabMetadata": "Metadata", "TabImages": "Images", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Wy\u015bwietl brakuj\u0105ce odcinki w sezonach", "LabelUnairedMissingEpisodesWithinSeasons": "Wy\u015bwietl nie wydanie odcinki w sezonach", "HeaderVideoPlaybackSettings": "Ustawienia odtwarzania wideo", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json index 4eb9be8c27..4c3b9c6bbe 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json @@ -63,12 +63,16 @@ "TabPreferences": "Prefer\u00eancias", "TabPassword": "Senha", "TabLibraryAccess": "Acesso \u00e0 Biblioteca", + "TabAccess": "Acesso", "TabImage": "Imagem", "TabProfile": "Perfil", "TabMetadata": "Metadados", "TabImages": "Imagens", "TabNotifications": "Notifica\u00e7\u00f5es", "TabCollectionTitles": "T\u00edtulos", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Exibir epis\u00f3dios que faltam dentro das temporadas", "LabelUnairedMissingEpisodesWithinSeasons": "Exibir epis\u00f3dios por estrear dentro das temporadas", "HeaderVideoPlaybackSettings": "Ajustes da Reprodu\u00e7\u00e3o de V\u00eddeo", @@ -376,8 +380,8 @@ "LabelMaxScreenshotsPerItem": "N\u00famero m\u00e1ximo de imagens de tela por item:", "LabelMinBackdropDownloadWidth": "Tamanho m\u00ednimo da imagem de fundo para download:", "LabelMinScreenshotDownloadWidth": "Tamanho m\u00ednimo da imagem de tela para download:", - "ButtonAddScheduledTaskTrigger": "Adicionar Disparador da Tarefa", - "HeaderAddScheduledTaskTrigger": "Adicionar Disparador da Tarefa", + "ButtonAddScheduledTaskTrigger": "Adicionar Disparador", + "HeaderAddScheduledTaskTrigger": "Adicionar Disparador", "ButtonAdd": "Adicionar", "LabelTriggerType": "Tipo de Disparador:", "OptionDaily": "Di\u00e1rio", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json index 3ce498c35c..a13ce75653 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json @@ -63,12 +63,16 @@ "TabPreferences": "Prefer\u00eancias", "TabPassword": "Senha", "TabLibraryAccess": "Aceder \u00e0 Biblioteca", + "TabAccess": "Access", "TabImage": "Imagem", "TabProfile": "Perfil", "TabMetadata": "Metadados", "TabImages": "Imagens", "TabNotifications": "Notifica\u00e7\u00f5es", "TabCollectionTitles": "T\u00edtulos", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Mostrar epis\u00f3dios em falta dentro das temporadas", "LabelUnairedMissingEpisodesWithinSeasons": "Mostrar epis\u00f3dios por estrear dentro das temporadas", "HeaderVideoPlaybackSettings": "Configura\u00e7\u00f5es de Reprodu\u00e7\u00e3o de V\u00eddeo", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ru.json b/MediaBrowser.Server.Implementations/Localization/Server/ru.json index 3c0df4acd7..e7604ba6f8 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ru.json @@ -63,12 +63,16 @@ "TabPreferences": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", "TabPassword": "\u041f\u0430\u0440\u043e\u043b\u044c", "TabLibraryAccess": "\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435", + "TabAccess": "Access", "TabImage": "\u0420\u0438\u0441\u0443\u043d\u043e\u043a", "TabProfile": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c", "TabMetadata": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435", "TabImages": "\u0420\u0438\u0441\u0443\u043d\u043a\u0438", "TabNotifications": "\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f", "TabCollectionTitles": "\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0441\u0435\u0437\u043e\u043d\u043e\u0432", "LabelUnairedMissingEpisodesWithinSeasons": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0441\u0435\u0437\u043e\u043d\u043e\u0432", "HeaderVideoPlaybackSettings": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e", @@ -376,8 +380,8 @@ "LabelMaxScreenshotsPerItem": "\u041c\u0430\u043a\u0441. \u0447\u0438\u0441\u043b\u043e \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442:", "LabelMinBackdropDownloadWidth": "\u041c\u0438\u043d. \u0448\u0438\u0440\u0438\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u0430\u0434\u043d\u0438\u043a\u0430:", "LabelMinScreenshotDownloadWidth": "\u041c\u0438\u043d. \u0448\u0438\u0440\u0438\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u043d\u0438\u043c\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430:", - "ButtonAddScheduledTaskTrigger": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0437\u0430\u0434\u0430\u0447\u0438", - "HeaderAddScheduledTaskTrigger": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 \u0437\u0430\u0434\u0430\u0447\u0438", + "ButtonAddScheduledTaskTrigger": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440", + "HeaderAddScheduledTaskTrigger": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430", "ButtonAdd": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c", "LabelTriggerType": "\u0422\u0438\u043f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430:", "OptionDaily": "\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 25d16f5a4c..839c22ecf2 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -72,7 +72,7 @@ "TabCollectionTitles": "Titles", "HeaderDeviceAccess": "Device Access", "OptionEnableAccessFromAllDevices": "Enable access from all devices", - "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access.", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "Video Playback Settings", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/sv.json b/MediaBrowser.Server.Implementations/Localization/Server/sv.json index 9d3ad70c24..3f3886ffe5 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/sv.json @@ -63,12 +63,16 @@ "TabPreferences": "Inst\u00e4llningar", "TabPassword": "L\u00f6senord", "TabLibraryAccess": "\u00c5tkomst till biblioteket", + "TabAccess": "Access", "TabImage": "Bild", "TabProfile": "Profil", "TabMetadata": "Metadata", "TabImages": "Bilder", "TabNotifications": "Meddelanden", "TabCollectionTitles": "Titlar", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Visa saknade avsnitt i s\u00e4songer", "LabelUnairedMissingEpisodesWithinSeasons": "Visa \u00e4nnu ej s\u00e4nda avsnitt i s\u00e4songer", "HeaderVideoPlaybackSettings": "Inst\u00e4llningar f\u00f6r videouppspelning", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/tr.json b/MediaBrowser.Server.Implementations/Localization/Server/tr.json index baa91c9596..63f9e61dbc 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/tr.json @@ -63,12 +63,16 @@ "TabPreferences": "Tercihler", "TabPassword": "\u015eifre", "TabLibraryAccess": "K\u00fct\u00fcphane Eri\u015fim", + "TabAccess": "Access", "TabImage": "Resim", "TabProfile": "Profil", "TabMetadata": "Metadata", "TabImages": "Resimler", "TabNotifications": "Notifications", "TabCollectionTitles": "Titles", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Sezondaki kay\u0131p b\u00f6l\u00fcmleri g\u00f6ster", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "Video Oynatma Ayarlar\u0131", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/vi.json b/MediaBrowser.Server.Implementations/Localization/Server/vi.json index 0636e0a81d..1197cda71c 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/vi.json @@ -63,12 +63,16 @@ "TabPreferences": "\u01afa th\u00edch", "TabPassword": "M\u1eadt kh\u1ea9u", "TabLibraryAccess": "Truy c\u1eadp th\u01b0 vi\u1ec7n", + "TabAccess": "Access", "TabImage": "H\u00ecnh \u1ea3nh", "TabProfile": "H\u1ed3 s\u01a1", "TabMetadata": "Metadata", "TabImages": "H\u00ecnh \u1ea3nh", "TabNotifications": "Notifications", "TabCollectionTitles": "Ti\u00eau \u0111\u1ec1", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons", "LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons", "HeaderVideoPlaybackSettings": "C\u00e1c c\u00e0i \u0111\u1eb7t ph\u00e1t Video", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json index bc76e65751..29f65fe2a0 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json @@ -63,12 +63,16 @@ "TabPreferences": "\u504f\u597d", "TabPassword": "\u5bc6\u7801", "TabLibraryAccess": "\u5a92\u4f53\u5e93\u8bbf\u95ee\u6743\u9650", + "TabAccess": "Access", "TabImage": "\u56fe\u7247", "TabProfile": "\u4e2a\u4eba\u914d\u7f6e", "TabMetadata": "\u5a92\u4f53\u8d44\u6599", "TabImages": "\u56fe\u50cf", "TabNotifications": "\u901a\u77e5", "TabCollectionTitles": "\u6807\u9898", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "\u663e\u793a\u6bcf\u5b63\u91cc\u7f3a\u5c11\u7684\u5267\u96c6", "LabelUnairedMissingEpisodesWithinSeasons": "\u663e\u793a\u6bcf\u5b63\u91cc\u672a\u53d1\u5e03\u7684\u5267\u96c6", "HeaderVideoPlaybackSettings": "\u89c6\u9891\u56de\u653e\u8bbe\u7f6e", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json index 29fb94c4b5..4800c54918 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json @@ -63,12 +63,16 @@ "TabPreferences": "\u504f\u597d", "TabPassword": "\u5bc6\u78bc", "TabLibraryAccess": "\u5a92\u9ad4\u5eab\u700f\u89bd\u6b0a\u9650", + "TabAccess": "Access", "TabImage": "\u5716\u50cf", "TabProfile": "\u914d\u7f6e", "TabMetadata": "\u5a92\u9ad4\u8cc7\u6599", "TabImages": "\u5716\u50cf", "TabNotifications": "Notifications", "TabCollectionTitles": "\u6a19\u984c", + "HeaderDeviceAccess": "Device Access", + "OptionEnableAccessFromAllDevices": "Enable access from all devices", + "DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.", "LabelDisplayMissingEpisodesWithinSeasons": "\u986f\u793a\u7bc0\u76ee\u5b63\u5ea6\u5167\u7f3a\u5c11\u7684\u55ae\u5143", "LabelUnairedMissingEpisodesWithinSeasons": "\u5728\u7bc0\u76ee\u5b63\u5ea6\u5167\u986f\u793a\u9084\u672a\u767c\u4f48\u7684\u55ae\u5143", "HeaderVideoPlaybackSettings": "\u8996\u983b\u56de\u653e\u8a2d\u7f6e", diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 5e129d9a19..6f3e926c0b 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -2,10 +2,13 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Sync; +using MediaBrowser.Controller.TV; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; +using MediaBrowser.Model.Querying; using MediaBrowser.Model.Session; using MediaBrowser.Model.Sync; using MoreLinq; @@ -24,19 +27,16 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly ISyncManager _syncManager; private readonly ILogger _logger; private readonly IUserManager _userManager; + private readonly ITVSeriesManager _tvSeriesManager; - public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager) + public SyncJobProcessor(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager) { _libraryManager = libraryManager; _syncRepo = syncRepo; _syncManager = syncManager; _logger = logger; _userManager = userManager; - } - - public void ProcessJobItem(SyncJob job, SyncJobItem jobItem, SyncTarget target) - { - + _tvSeriesManager = tvSeriesManager; } public async Task EnsureJobItems(SyncJob job) @@ -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, job.UnwatchedOnly) + var items = (await GetItemsForSync(job.Category, job.ParentId, job.RequestedItemIds, user, job.UnwatchedOnly).ConfigureAwait(false)) .ToList(); var jobItems = _syncRepo.GetJobItems(new SyncJobItemQuery @@ -128,7 +128,7 @@ namespace MediaBrowser.Server.Implementations.Sync foreach (var item in jobItems) { - if (item.Status == SyncJobItemStatus.Failed || item.Status == SyncJobItemStatus.Completed) + if (item.Status == SyncJobItemStatus.Failed || item.Status == SyncJobItemStatus.Synced || item.Status == SyncJobItemStatus.RemovedFromDevice) { pct += 100; } @@ -171,10 +171,11 @@ namespace MediaBrowser.Server.Implementations.Sync return _syncRepo.Update(job); } - public IEnumerable GetItemsForSync(IEnumerable itemIds, User user, bool unwatchedOnly) + public async Task> GetItemsForSync(SyncCategory? category, string parentId, IEnumerable itemIds, User user, bool unwatchedOnly) { - var items = itemIds - .SelectMany(i => GetItemsForSync(i, user)) + var items = category.HasValue ? + await GetItemsForSync(category.Value, parentId, user).ConfigureAwait(false) : + itemIds.SelectMany(i => GetItemsForSync(i, user)) .Where(_syncManager.SupportsSync); if (unwatchedOnly) @@ -198,6 +199,54 @@ namespace MediaBrowser.Server.Implementations.Sync return items.DistinctBy(i => i.Id); } + private async Task> GetItemsForSync(SyncCategory category, string parentId, User user) + { + var parent = string.IsNullOrWhiteSpace(parentId) + ? user.RootFolder + : (Folder)_libraryManager.GetItemById(parentId); + + InternalItemsQuery query; + + switch (category) + { + case SyncCategory.Latest: + query = new InternalItemsQuery + { + IsFolder = false, + SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName }, + SortOrder = SortOrder.Descending, + Recursive = true + }; + break; + case SyncCategory.Resume: + query = new InternalItemsQuery + { + IsFolder = false, + SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName }, + SortOrder = SortOrder.Descending, + Recursive = true, + IsResumable = true, + MediaTypes = new[] { MediaType.Video } + }; + break; + + case SyncCategory.NextUp: + return _tvSeriesManager.GetNextUp(new NextUpQuery + { + ParentId = parentId, + UserId = user.Id.ToString("N") + }).Items; + + default: + throw new ArgumentException("Unrecognized category: " + category); + } + + query.User = user; + + var result = await parent.GetItems(query).ConfigureAwait(false); + return result.Items; + } + private IEnumerable GetItemsForSync(string id, User user) { var item = _libraryManager.GetItemById(id); @@ -263,7 +312,7 @@ namespace MediaBrowser.Server.Implementations.Sync var result = _syncRepo.GetJobItems(new SyncJobItemQuery { - IsCompleted = false + Status = SyncJobItemStatus.Queued }); var jobItems = result.Items; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 3f30dcb1ce..9cb697c812 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -9,6 +9,7 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Sync; +using MediaBrowser.Controller.TV; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; @@ -34,10 +35,11 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly IUserManager _userManager; private readonly Func _dtoService; private readonly IApplicationHost _appHost; + private readonly ITVSeriesManager _tvSeriesManager; private ISyncProvider[] _providers = { }; - public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func dtoService, IApplicationHost appHost) + public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func dtoService, IApplicationHost appHost, ITVSeriesManager tvSeriesManager) { _libraryManager = libraryManager; _repo = repo; @@ -46,6 +48,7 @@ namespace MediaBrowser.Server.Implementations.Sync _userManager = userManager; _dtoService = dtoService; _appHost = appHost; + _tvSeriesManager = tvSeriesManager; } public void AddParts(IEnumerable providers) @@ -55,12 +58,12 @@ namespace MediaBrowser.Server.Implementations.Sync public async Task CreateJob(SyncJobRequest request) { - var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager); + var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager, _tvSeriesManager); var user = _userManager.GetUserById(request.UserId); - var items = processor - .GetItemsForSync(request.ItemIds, user, request.UnwatchedOnly) + var items = (await processor + .GetItemsForSync(request.Category, request.ParentId, request.ItemIds, user, request.UnwatchedOnly).ConfigureAwait(false)) .ToList(); if (items.Any(i => !SupportsSync(i))) @@ -68,9 +71,16 @@ namespace MediaBrowser.Server.Implementations.Sync throw new ArgumentException("Item does not support sync."); } - if (string.IsNullOrWhiteSpace(request.Name) && request.ItemIds.Count == 1) + if (string.IsNullOrWhiteSpace(request.Name)) { - request.Name = GetDefaultName(_libraryManager.GetItemById(request.ItemIds[0])); + if (request.Category.HasValue) + { + request.Name = request.Category.Value.ToString(); + } + else if (request.ItemIds.Count == 1) + { + request.Name = GetDefaultName(_libraryManager.GetItemById(request.ItemIds[0])); + } } if (string.IsNullOrWhiteSpace(request.Name)) @@ -96,7 +106,7 @@ namespace MediaBrowser.Server.Implementations.Sync UserId = request.UserId, UnwatchedOnly = request.UnwatchedOnly, ItemLimit = request.ItemLimit, - RequestedItemIds = request.ItemIds, + RequestedItemIds = request.ItemIds ?? new List { }, DateCreated = DateTime.UtcNow, DateLastModified = DateTime.UtcNow, SyncNewContent = request.SyncNewContent, @@ -303,12 +313,12 @@ namespace MediaBrowser.Server.Implementations.Sync { var jobItem = _repo.GetJobItem(id); - jobItem.Status = SyncJobItemStatus.Completed; + jobItem.Status = SyncJobItemStatus.Synced; jobItem.Progress = 100; await _repo.Update(jobItem).ConfigureAwait(false); - var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager); + var processor = new SyncJobProcessor(_libraryManager, _repo, this, _logger, _userManager, _tvSeriesManager); await processor.UpdateJobStatus(jobItem.JobId).ConfigureAwait(false); } @@ -391,6 +401,21 @@ namespace MediaBrowser.Server.Implementations.Sync public async Task SyncData(SyncDataRequest request) { + var jobItemResult = GetJobItems(new SyncJobItemQuery + { + TargetId = request.TargetId, + Status = SyncJobItemStatus.Synced + }); + + foreach (var jobItem in jobItemResult.Items) + { + if (!request.LocalItemIds.Contains(jobItem.ItemId, StringComparer.OrdinalIgnoreCase)) + { + jobItem.Status = SyncJobItemStatus.RemovedFromDevice; + await _repo.Update(jobItem).ConfigureAwait(false); + } + } + var response = new SyncDataResponse(); return response; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index e5b323725c..a10e9a7e68 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs @@ -36,7 +36,7 @@ namespace MediaBrowser.Server.Implementations.Sync public async Task Initialize() { - var dbFile = Path.Combine(_appPaths.DataPath, "sync8.db"); + var dbFile = Path.Combine(_appPaths.DataPath, "sync9.db"); _connection = await SqliteExtensions.ConnectToDb(dbFile, _logger).ConfigureAwait(false); @@ -68,7 +68,7 @@ namespace MediaBrowser.Server.Implementations.Sync _deleteJobItemsCommand = _connection.CreateCommand(); _deleteJobItemsCommand.CommandText = "delete from SyncJobItems where JobId=@JobId"; _deleteJobItemsCommand.Parameters.Add(_deleteJobItemsCommand, "@JobId"); - + _saveJobCommand = _connection.CreateCommand(); _saveJobCommand.CommandText = "replace into SyncJobs (Id, TargetId, Name, Quality, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount) values (@Id, @TargetId, @Name, @Quality, @Status, @Progress, @UserId, @ItemIds, @Category, @ParentId, @UnwatchedOnly, @ItemLimit, @SyncNewContent, @DateCreated, @DateLastModified, @ItemCount)"; @@ -119,7 +119,7 @@ namespace MediaBrowser.Server.Implementations.Sync { throw new ArgumentNullException("id"); } - + using (var cmd = _connection.CreateCommand()) { cmd.CommandText = BaseJobSelectText + " where Id=@Id"; @@ -169,7 +169,7 @@ namespace MediaBrowser.Server.Implementations.Sync if (!reader.IsDBNull(7)) { - info.RequestedItemIds = reader.GetString(7).Split(',').ToList(); + info.RequestedItemIds = reader.GetString(7).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); } if (!reader.IsDBNull(8)) @@ -302,7 +302,7 @@ namespace MediaBrowser.Server.Implementations.Sync _deleteJobItemsCommand.GetParameter(index++).Value = id; _deleteJobItemsCommand.Transaction = transaction; _deleteJobItemsCommand.ExecuteNonQuery(); - + transaction.Commit(); } catch (OperationCanceledException) @@ -473,19 +473,6 @@ namespace MediaBrowser.Server.Implementations.Sync cmd.Parameters.Add(cmd, "@Status", DbType.String).Value = query.Status.Value.ToString(); } - else if (query.IsCompleted.HasValue) - { - if (query.IsCompleted.Value) - { - whereClauses.Add("Status=@Status"); - } - else - { - whereClauses.Add("Status<>@Status"); - } - cmd.Parameters.Add(cmd, "@Status", DbType.String).Value = SyncJobStatus.Completed.ToString(); - } - var whereTextWithoutPaging = whereClauses.Count == 0 ? string.Empty : " where " + string.Join(" AND ", whereClauses.ToArray()); @@ -616,9 +603,9 @@ namespace MediaBrowser.Server.Implementations.Sync { info.MediaSourceId = reader.GetString(2); } - + info.JobId = reader.GetString(3); - + if (!reader.IsDBNull(4)) { info.OutputPath = reader.GetString(4); @@ -637,7 +624,7 @@ namespace MediaBrowser.Server.Implementations.Sync { info.Progress = reader.GetDouble(8); } - + return info; } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs index 2127e9c466..e7e30b8572 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Sync; +using MediaBrowser.Controller.TV; using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; @@ -16,14 +17,16 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly ISyncManager _syncManager; private readonly ILogger _logger; private readonly IUserManager _userManager; + private readonly ITVSeriesManager _tvSeriesManager; - public SyncScheduledTask(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager) + public SyncScheduledTask(ILibraryManager libraryManager, ISyncRepository syncRepo, ISyncManager syncManager, ILogger logger, IUserManager userManager, ITVSeriesManager tvSeriesManager) { _libraryManager = libraryManager; _syncRepo = syncRepo; _syncManager = syncManager; _logger = logger; _userManager = userManager; + _tvSeriesManager = tvSeriesManager; } public string Name @@ -46,7 +49,7 @@ namespace MediaBrowser.Server.Implementations.Sync public Task Execute(CancellationToken cancellationToken, IProgress progress) { - return new SyncJobProcessor(_libraryManager, _syncRepo, _syncManager, _logger, _userManager).Sync(progress, + return new SyncJobProcessor(_libraryManager, _syncRepo, _syncManager, _logger, _userManager, _tvSeriesManager).Sync(progress, cancellationToken); } diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index c9b5dba68a..ed54413360 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -482,7 +482,10 @@ namespace MediaBrowser.Server.Startup.Common ImageProcessor = new ImageProcessor(LogManager.GetLogger("ImageProcessor"), ServerConfigurationManager.ApplicationPaths, FileSystemManager, JsonSerializer, MediaEncoder); RegisterSingleInstance(ImageProcessor); - SyncManager = new SyncManager(LibraryManager, SyncRepository, ImageProcessor, LogManager.GetLogger("SyncManager"), UserManager, () => DtoService, this); + TVSeriesManager = new TVSeriesManager(UserManager, UserDataManager, LibraryManager); + RegisterSingleInstance(TVSeriesManager); + + SyncManager = new SyncManager(LibraryManager, SyncRepository, ImageProcessor, LogManager.GetLogger("SyncManager"), UserManager, () => DtoService, this, TVSeriesManager); RegisterSingleInstance(SyncManager); DtoService = new DtoService(Logger, LibraryManager, UserDataManager, ItemRepository, ImageProcessor, ServerConfigurationManager, FileSystemManager, ProviderManager, () => ChannelManager, SyncManager, this); @@ -511,9 +514,6 @@ namespace MediaBrowser.Server.Startup.Common ChannelManager = new ChannelManager(UserManager, DtoService, LibraryManager, Logger, ServerConfigurationManager, FileSystemManager, UserDataManager, JsonSerializer, LocalizationManager, HttpClient); RegisterSingleInstance(ChannelManager); - TVSeriesManager = new TVSeriesManager(UserManager, UserDataManager, LibraryManager); - RegisterSingleInstance(TVSeriesManager); - var appThemeManager = new AppThemeManager(ApplicationPaths, FileSystemManager, JsonSerializer, Logger); RegisterSingleInstance(appThemeManager);