From e55ab989d2077d70568965198139793ca7c116b4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 18 Dec 2014 23:20:07 -0500 Subject: add more sync buttons --- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Nuget/MediaBrowser.Model.Signed.nuspec') diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index b0fe2b2c4..5df3ccb03 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.521 + 3.0.522 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool -- cgit v1.2.3 From 36577ac42ea9a38a155ca7cd0d17d2d43563a27f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 24 Dec 2014 01:28:40 -0500 Subject: sync updates --- MediaBrowser.Api/Playback/BaseStreamingService.cs | 3 +- .../Entities/CollectionFolder.cs | 16 +++++++++ MediaBrowser.Controller/Sync/ISyncProvider.cs | 5 +++ .../Images/LocalImageProvider.cs | 1 - .../Savers/XmlSaverHelpers.cs | 2 +- .../MediaBrowser.Model.Portable.csproj | 3 ++ .../MediaBrowser.Model.net35.csproj | 3 ++ MediaBrowser.Model/Dlna/StreamInfo.cs | 14 ++++++-- .../Library/Resolvers/TV/SeriesResolver.cs | 40 +++++----------------- .../Sync/AppSyncProvider.cs | 2 +- .../Sync/SyncManager.cs | 21 +++++++++--- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +-- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +-- 15 files changed, 73 insertions(+), 49 deletions(-) (limited to 'Nuget/MediaBrowser.Model.Signed.nuspec') diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 7b18fb379..03106b6e7 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -729,7 +729,8 @@ namespace MediaBrowser.Api.Playback return Math.Min(request.MaxAudioChannels.Value, audioStream.Channels.Value); } - return request.MaxAudioChannels.Value; + // If we don't have any media info then limit it to 5 to prevent encoding errors due to asking for too many channels + return Math.Min(request.MaxAudioChannels.Value, 5); } return request.AudioChannels; diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs index a10742f01..f47a439a7 100644 --- a/MediaBrowser.Controller/Entities/CollectionFolder.cs +++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs @@ -66,6 +66,22 @@ namespace MediaBrowser.Controller.Entities return CreateResolveArgs(directoryService).FileSystemChildren; } + internal override bool IsValidFromResolver(BaseItem newItem) + { + var newCollectionFolder = newItem as CollectionFolder; + + if (newCollectionFolder != null) + { + if (!string.Equals(CollectionType, newCollectionFolder.CollectionType, StringComparison.OrdinalIgnoreCase)) + { + return false; + } + } + + + return base.IsValidFromResolver(newItem); + } + private ItemResolveArgs CreateResolveArgs(IDirectoryService directoryService) { var path = ContainingFolderPath; diff --git a/MediaBrowser.Controller/Sync/ISyncProvider.cs b/MediaBrowser.Controller/Sync/ISyncProvider.cs index 89f61b80e..5ebdee207 100644 --- a/MediaBrowser.Controller/Sync/ISyncProvider.cs +++ b/MediaBrowser.Controller/Sync/ISyncProvider.cs @@ -25,4 +25,9 @@ namespace MediaBrowser.Controller.Sync /// DeviceProfile. DeviceProfile GetDeviceProfile(SyncTarget target); } + + public interface IHasUniqueTargetIds + { + + } } diff --git a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs index 9b1cce915..a131e7016 100644 --- a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; diff --git a/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs b/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs index 3e11c994b..4388ec964 100644 --- a/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs +++ b/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs @@ -649,7 +649,7 @@ namespace MediaBrowser.LocalMetadata.Savers var hasShares = item as IHasShares; if (hasShares != null) { - + AddShares(hasShares, builder); } } diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 9900484cd..a388e0edb 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -1043,6 +1043,9 @@ Sync\SyncDialogOptions.cs + + Sync\SyncHelper.cs + Sync\SyncItem.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index bd98b5b86..5bacb73d7 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -1002,6 +1002,9 @@ Sync\SyncDialogOptions.cs + + Sync\SyncHelper.cs + Sync\SyncItem.cs diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs index 7ca8ab6b0..703c73566 100644 --- a/MediaBrowser.Model/Dlna/StreamInfo.cs +++ b/MediaBrowser.Model/Dlna/StreamInfo.cs @@ -374,9 +374,17 @@ namespace MediaBrowser.Model.Dlna MediaStream stream = TargetAudioStream; int? streamChannels = stream == null ? null : stream.Channels; - return MaxAudioChannels.HasValue && !IsDirectStream - ? (streamChannels.HasValue ? Math.Min(MaxAudioChannels.Value, streamChannels.Value) : MaxAudioChannels.Value) - : streamChannels; + if (MaxAudioChannels.HasValue && !IsDirectStream) + { + if (streamChannels.HasValue) + { + return Math.Min(MaxAudioChannels.Value, streamChannels.Value); + } + + return MaxAudioChannels.Value; + } + + return streamChannels; } } diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs index 00bed4086..582412562 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs @@ -1,17 +1,15 @@ using MediaBrowser.Common.IO; -using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Naming.Common; +using MediaBrowser.Naming.TV; using System; using System.Collections.Generic; using System.IO; -using MediaBrowser.Naming.Common; -using MediaBrowser.Naming.IO; -using MediaBrowser.Naming.TV; namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV { @@ -60,10 +58,8 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV var collectionType = args.GetCollectionType(); - var isTvShowsFolder = string.Equals(collectionType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase); - // If there's a collection type and it's not tv, it can't be a series - if (!isTvShowsFolder) + if (!string.Equals(collectionType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase)) { return null; } @@ -73,7 +69,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV return null; } - if (IsSeriesFolder(args.Path, collectionType, args.FileSystemChildren, args.DirectoryService, _fileSystem, _logger, _libraryManager)) + if (IsSeriesFolder(args.Path, args.FileSystemChildren, args.DirectoryService, _fileSystem, _logger, _libraryManager)) { return new Series { @@ -90,14 +86,13 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV /// Determines whether [is series folder] [the specified path]. /// /// The path. - /// Type of the collection. /// The file system children. /// The directory service. /// The file system. /// The logger. /// The library manager. /// true if [is series folder] [the specified path]; otherwise, false. - public static bool IsSeriesFolder(string path, string collectionType, IEnumerable fileSystemChildren, IDirectoryService directoryService, IFileSystem fileSystem, ILogger logger, ILibraryManager libraryManager) + public static bool IsSeriesFolder(string path, IEnumerable fileSystemChildren, IDirectoryService directoryService, IFileSystem fileSystem, ILogger logger, ILibraryManager libraryManager) { foreach (var child in fileSystemChildren) { @@ -118,7 +113,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV if ((attributes & FileAttributes.Directory) == FileAttributes.Directory) { - if (IsSeasonFolder(child.FullName, collectionType)) + if (IsSeasonFolder(child.FullName)) { //logger.Debug("{0} is a series because of season folder {1}.", path, child.FullName); return true; @@ -130,22 +125,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV if (libraryManager.IsVideoFile(fullName) || IsVideoPlaceHolder(fullName)) { - var isTvShowsFolder = string.Equals(collectionType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase); - - // We can fast track this for known tv folders - if (isTvShowsFolder) - { - return true; - } - - var resolver = new Naming.TV.EpisodeResolver(new ExtendedNamingOptions(), new Naming.Logging.NullLogger()); - - var episodeInfo = resolver.Resolve(fullName, FileInfoType.File, isTvShowsFolder, false); - - if (episodeInfo != null && (episodeInfo.EpisodeNumber.HasValue || episodeInfo.IsByDate)) - { - return true; - } + return true; } } } @@ -176,12 +156,10 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV /// Determines whether [is season folder] [the specified path]. /// /// The path. - /// Type of the collection. /// true if [is season folder] [the specified path]; otherwise, false. - private static bool IsSeasonFolder(string path, string collectionType) + private static bool IsSeasonFolder(string path) { - var isTvFolder = string.Equals(collectionType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase); - var seasonNumber = new SeasonPathParser(new ExtendedNamingOptions(), new RegexProvider()).Parse(path, isTvFolder).SeasonNumber; + var seasonNumber = new SeasonPathParser(new ExtendedNamingOptions(), new RegexProvider()).Parse(path, true).SeasonNumber; return seasonNumber.HasValue; } diff --git a/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs b/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs index 94eed50f6..deef503ea 100644 --- a/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs +++ b/MediaBrowser.Server.Implementations/Sync/AppSyncProvider.cs @@ -8,7 +8,7 @@ using System.Linq; namespace MediaBrowser.Server.Implementations.Sync { - public class AppSyncProvider : ISyncProvider + public class AppSyncProvider : ISyncProvider, IHasUniqueTargetIds { private readonly IDeviceManager _deviceManager; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 6b15aaed7..3006c1be9 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -69,7 +69,12 @@ namespace MediaBrowser.Server.Implementations.Sync } var target = GetSyncTargets(request.UserId) - .First(i => string.Equals(request.TargetId, i.Id)); + .FirstOrDefault(i => string.Equals(request.TargetId, i.Id)); + + if (target == null) + { + throw new ArgumentException("Sync target not found."); + } var jobId = Guid.NewGuid().ToString("N"); @@ -173,17 +178,23 @@ namespace MediaBrowser.Server.Implementations.Sync private IEnumerable GetSyncTargets(ISyncProvider provider, string userId) { - var providerId = GetSyncProviderId(provider); - return provider.GetSyncTargets().Select(i => new SyncTarget { Name = i.Name, - Id = GetSyncTargetId(providerId, i) + Id = GetSyncTargetId(provider, i) }); } - private string GetSyncTargetId(string providerId, SyncTarget target) + private string GetSyncTargetId(ISyncProvider provider, SyncTarget target) { + var hasUniqueId = provider as IHasUniqueTargetIds; + + if (hasUniqueId != null) + { + return target.Id; + } + + var providerId = GetSyncProviderId(provider); return (providerId + "-" + target.Id).GetMD5().ToString("N"); } diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 7d2adb590..6dfb39b4c 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.522 + 3.0.523 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 705b3444a..49fd835c3 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.522 + 3.0.523 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 5df3ccb03..d5164f025 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.522 + 3.0.523 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 9e463b7ab..297b0f07e 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.522 + 3.0.523 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 0ec3d217e71ea20a9e377e479db88c4d4cd39baf Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 26 Dec 2014 12:45:06 -0500 Subject: sync updates --- MediaBrowser.Api/Images/ImageService.cs | 13 +- MediaBrowser.Api/Playback/Hls/BaseHlsService.cs | 1 + MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 20 +- MediaBrowser.Api/Playback/Hls/MpegDashService.cs | 16 +- MediaBrowser.Api/Playback/Hls/VideoHlsService.cs | 15 +- .../Playback/Progressive/VideoService.cs | 12 +- MediaBrowser.Api/Playback/StreamState.cs | 1 + MediaBrowser.Api/Subtitles/SubtitleService.cs | 7 +- MediaBrowser.Api/Sync/SyncService.cs | 29 +- MediaBrowser.Common/MediaBrowser.Common.csproj | 1 - MediaBrowser.Common/Net/MimeTypes.cs | 338 --------------------- .../Library/IUserDataManager.cs | 4 + MediaBrowser.Controller/Sync/ISyncManager.cs | 15 + MediaBrowser.Dlna/Didl/DidlBuilder.cs | 1 + .../Images/LocalImageProvider.cs | 2 +- .../MediaBrowser.Model.Portable.csproj | 31 +- .../MediaBrowser.Model.net35.csproj | 27 +- MediaBrowser.Model/ApiClient/IApiClient.cs | 40 ++- MediaBrowser.Model/Dto/StreamOptions.cs | 67 ---- MediaBrowser.Model/Dto/VideoStreamOptions.cs | 58 +++- MediaBrowser.Model/MediaBrowser.Model.csproj | 9 +- MediaBrowser.Model/Net/HttpResponse.cs | 64 ++++ MediaBrowser.Model/Net/MimeTypes.cs | 273 +++++++++++++++++ MediaBrowser.Model/Sync/ItemFIleInfo.cs | 28 ++ MediaBrowser.Model/Sync/ItemFileType.cs | 19 ++ MediaBrowser.Model/Sync/SyncItem.cs | 9 - MediaBrowser.Model/Sync/SyncJobItem.cs | 6 + MediaBrowser.Model/Sync/SyncedItem.cs | 38 +++ MediaBrowser.Model/Users/UserAction.cs | 14 + MediaBrowser.Model/Users/UserActionType.cs | 8 + MediaBrowser.Providers/Manager/ImageSaver.cs | 1 + .../Connect/ConnectEntryPoint.cs | 2 +- .../HttpServer/HttpResultFactory.cs | 2 +- .../Library/Resolvers/Movies/BoxSetResolver.cs | 6 - .../Library/UserDataManager.cs | 76 +++-- .../Localization/JavaScript/en_US.json | 1 - .../Localization/JavaScript/javascript.json | 2 +- .../Session/SessionManager.cs | 80 +---- .../Sync/SyncJobProcessor.cs | 6 + .../Sync/SyncManager.cs | 68 ++++- .../Sync/SyncRepository.cs | 29 +- .../ApplicationHost.cs | 6 +- MediaBrowser.WebDashboard/Api/DashboardService.cs | 1 + Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 47 files changed, 859 insertions(+), 599 deletions(-) delete mode 100644 MediaBrowser.Common/Net/MimeTypes.cs delete mode 100644 MediaBrowser.Model/Dto/StreamOptions.cs create mode 100644 MediaBrowser.Model/Net/HttpResponse.cs create mode 100644 MediaBrowser.Model/Net/MimeTypes.cs create mode 100644 MediaBrowser.Model/Sync/ItemFIleInfo.cs create mode 100644 MediaBrowser.Model/Sync/ItemFileType.cs delete mode 100644 MediaBrowser.Model/Sync/SyncItem.cs create mode 100644 MediaBrowser.Model/Sync/SyncedItem.cs create mode 100644 MediaBrowser.Model/Users/UserAction.cs create mode 100644 MediaBrowser.Model/Users/UserActionType.cs (limited to 'Nuget/MediaBrowser.Model.Signed.nuspec') diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 0e4ccf0b1..f2586b043 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -18,6 +18,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MimeTypes = MediaBrowser.Model.Net.MimeTypes; namespace MediaBrowser.Api.Images { @@ -668,26 +669,26 @@ namespace MediaBrowser.Api.Images { if (format == ImageFormat.Bmp) { - return Common.Net.MimeTypes.GetMimeType("i.bmp"); + return MimeTypes.GetMimeType("i.bmp"); } if (format == ImageFormat.Gif) { - return Common.Net.MimeTypes.GetMimeType("i.gif"); + return MimeTypes.GetMimeType("i.gif"); } if (format == ImageFormat.Jpg) { - return Common.Net.MimeTypes.GetMimeType("i.jpg"); + return MimeTypes.GetMimeType("i.jpg"); } if (format == ImageFormat.Png) { - return Common.Net.MimeTypes.GetMimeType("i.png"); + return MimeTypes.GetMimeType("i.png"); } if (format == ImageFormat.Webp) { - return Common.Net.MimeTypes.GetMimeType("i.webp"); + return MimeTypes.GetMimeType("i.webp"); } - return Common.Net.MimeTypes.GetMimeType(path); + return MimeTypes.GetMimeType(path); } /// diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs index 94198d974..8a33a88f2 100644 --- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs @@ -14,6 +14,7 @@ using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Net; namespace MediaBrowser.Api.Playback.Hls { diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 489259334..86866bdf5 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -20,6 +20,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; +using MimeTypes = MediaBrowser.Model.Net.MimeTypes; namespace MediaBrowser.Api.Playback.Hls { @@ -387,7 +388,7 @@ namespace MediaBrowser.Api.Playback.Hls playlistText = GetMasterPlaylistFileText(state, videoBitrate + audioBitrate); } - return ResultFactory.GetResult(playlistText, Common.Net.MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary()); + return ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary()); } private string GetMasterPlaylistFileText(StreamState state, int totalBitrate) @@ -603,7 +604,7 @@ namespace MediaBrowser.Api.Playback.Hls var playlistText = builder.ToString(); - return ResultFactory.GetResult(playlistText, Common.Net.MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary()); + return ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary()); } protected override string GetAudioArguments(StreamState state) @@ -640,10 +641,19 @@ namespace MediaBrowser.Api.Playback.Hls { var codec = state.OutputVideoCodec; + var args = "-codec:v:0 " + codec; + + if (state.EnableMpegtsM2TsMode) + { + args += " -mpegts_m2ts_mode 1"; + } + // See if we can save come cpu cycles by avoiding encoding - if (string.Equals(codec, "copy", StringComparison.OrdinalIgnoreCase)) + if (codec.Equals("copy", StringComparison.OrdinalIgnoreCase)) { - return state.VideoStream != null && IsH264(state.VideoStream) ? "-codec:v:0 copy -bsf:v h264_mp4toannexb" : "-codec:v:0 copy"; + return state.VideoStream != null && IsH264(state.VideoStream) ? + args + " -bsf:v h264_mp4toannexb" : + args; } var keyFrameArg = string.Format(" -force_key_frames expr:gte(t,n_forced*{0})", @@ -651,7 +661,7 @@ namespace MediaBrowser.Api.Playback.Hls var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream; - var args = "-codec:v:0 " + codec + " " + GetVideoQualityParam(state, H264Encoder, true) + keyFrameArg; + args += " " + GetVideoQualityParam(state, H264Encoder, true) + keyFrameArg; // Add resolution params, if specified if (!hasGraphicalSubs) diff --git a/MediaBrowser.Api/Playback/Hls/MpegDashService.cs b/MediaBrowser.Api/Playback/Hls/MpegDashService.cs index e91ed98d1..87e2eedcf 100644 --- a/MediaBrowser.Api/Playback/Hls/MpegDashService.cs +++ b/MediaBrowser.Api/Playback/Hls/MpegDashService.cs @@ -18,6 +18,7 @@ using System.Security; using System.Text; using System.Threading; using System.Threading.Tasks; +using MimeTypes = MediaBrowser.Model.Net.MimeTypes; namespace MediaBrowser.Api.Playback.Hls { @@ -97,7 +98,7 @@ namespace MediaBrowser.Api.Playback.Hls playlistText = GetManifestText(state); } - return ResultFactory.GetResult(playlistText, Common.Net.MimeTypes.GetMimeType("playlist.mpd"), new Dictionary()); + return ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.mpd"), new Dictionary()); } private string GetManifestText(StreamState state) @@ -583,10 +584,19 @@ namespace MediaBrowser.Api.Playback.Hls { var codec = state.OutputVideoCodec; + var args = "-codec:v:0 " + codec; + + if (state.EnableMpegtsM2TsMode) + { + args += " -mpegts_m2ts_mode 1"; + } + // See if we can save come cpu cycles by avoiding encoding if (codec.Equals("copy", StringComparison.OrdinalIgnoreCase)) { - return IsH264(state.VideoStream) ? "-codec:v:0 copy -bsf:v h264_mp4toannexb" : "-codec:v:0 copy"; + return state.VideoStream != null && IsH264(state.VideoStream) ? + args + " -bsf:v h264_mp4toannexb" : + args; } var keyFrameArg = string.Format(" -force_key_frames expr:gte(t,n_forced*{0})", @@ -594,7 +604,7 @@ namespace MediaBrowser.Api.Playback.Hls var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream; - var args = "-codec:v:0 " + codec + " " + GetVideoQualityParam(state, H264Encoder, true) + keyFrameArg; + args+= " " + GetVideoQualityParam(state, H264Encoder, true) + keyFrameArg; args += " -r 24 -g 24"; diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index 14f7175a9..de845c88d 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -134,18 +134,27 @@ namespace MediaBrowser.Api.Playback.Hls { var codec = state.OutputVideoCodec; + var args = "-codec:v:0 " + codec; + + if (state.EnableMpegtsM2TsMode) + { + args += " -mpegts_m2ts_mode 1"; + } + // See if we can save come cpu cycles by avoiding encoding if (codec.Equals("copy", StringComparison.OrdinalIgnoreCase)) { - return state.VideoStream != null && IsH264(state.VideoStream) ? "-codec:v:0 copy -bsf:v h264_mp4toannexb" : "-codec:v:0 copy"; + return state.VideoStream != null && IsH264(state.VideoStream) ? + args + " -bsf:v h264_mp4toannexb" : + args; } - + var keyFrameArg = string.Format(" -force_key_frames expr:gte(t,n_forced*{0})", state.SegmentLength.ToString(UsCulture)); var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsTextSubtitleStream; - var args = "-codec:v:0 " + codec + " " + GetVideoQualityParam(state, H264Encoder, true) + keyFrameArg; + args += " " + GetVideoQualityParam(state, H264Encoder, true) + keyFrameArg; // Add resolution params, if specified if (!hasGraphicalSubs) diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index fb2d30732..5ef72a495 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -124,7 +124,7 @@ namespace MediaBrowser.Api.Playback.Progressive /// System.String. private string GetVideoArguments(StreamState state, string codec) { - var args = "-vcodec " + codec; + var args = "-codec:v:0 " + codec; if (state.EnableMpegtsM2TsMode) { @@ -134,7 +134,9 @@ namespace MediaBrowser.Api.Playback.Progressive // See if we can save come cpu cycles by avoiding encoding if (codec.Equals("copy", StringComparison.OrdinalIgnoreCase)) { - return state.VideoStream != null && IsH264(state.VideoStream) ? args + " -bsf:v h264_mp4toannexb" : args; + return state.VideoStream != null && IsH264(state.VideoStream) && string.Equals(state.OutputContainer, "ts", StringComparison.OrdinalIgnoreCase) ? + args + " -bsf:v h264_mp4toannexb" : + args; } var keyFrameArg = string.Format(" -force_key_frames expr:gte(t,n_forced*{0})", @@ -182,13 +184,13 @@ namespace MediaBrowser.Api.Playback.Progressive // Get the output codec name var codec = state.OutputAudioCodec; + var args = "-codec:a:0 " + codec; + if (codec.Equals("copy", StringComparison.OrdinalIgnoreCase)) { - return "-acodec copy"; + return args; } - var args = "-acodec " + codec; - // Add the number of audio channels var channels = state.OutputAudioChannels; diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs index d26259a3a..40e765f1a 100644 --- a/MediaBrowser.Api/Playback/StreamState.cs +++ b/MediaBrowser.Api/Playback/StreamState.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; using System.Threading; +using MediaBrowser.Model.Net; namespace MediaBrowser.Api.Playback { diff --git a/MediaBrowser.Api/Subtitles/SubtitleService.cs b/MediaBrowser.Api/Subtitles/SubtitleService.cs index a2a93d50e..32e6ba076 100644 --- a/MediaBrowser.Api/Subtitles/SubtitleService.cs +++ b/MediaBrowser.Api/Subtitles/SubtitleService.cs @@ -15,6 +15,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; +using MimeTypes = MediaBrowser.Model.Net.MimeTypes; namespace MediaBrowser.Api.Subtitles { @@ -175,7 +176,7 @@ namespace MediaBrowser.Api.Subtitles builder.AppendLine("#EXT-X-ENDLIST"); - return ResultFactory.GetResult(builder.ToString(), Common.Net.MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary()); + return ResultFactory.GetResult(builder.ToString(), MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary()); } public object Get(GetSubtitle request) @@ -199,7 +200,7 @@ namespace MediaBrowser.Api.Subtitles var stream = GetSubtitles(request).Result; - return ResultFactory.GetResult(stream, Common.Net.MimeTypes.GetMimeType("file." + request.Format)); + return ResultFactory.GetResult(stream, MimeTypes.GetMimeType("file." + request.Format)); } private async Task GetSubtitles(GetSubtitle request) @@ -240,7 +241,7 @@ namespace MediaBrowser.Api.Subtitles { var result = _subtitleManager.GetRemoteSubtitles(request.Id, CancellationToken.None).Result; - return ResultFactory.GetResult(result.Stream, Common.Net.MimeTypes.GetMimeType("file." + result.Format)); + return ResultFactory.GetResult(result.Stream, MimeTypes.GetMimeType("file." + result.Format)); } public void Post(DownloadRemoteSubtitles request) diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index 26e4a2669..29172ef05 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Sync; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Querying; using MediaBrowser.Model.Sync; +using MediaBrowser.Model.Users; using ServiceStack; using System; using System.Collections.Generic; @@ -60,7 +61,7 @@ namespace MediaBrowser.Api.Sync [ApiMember(Name = "ParentId", Description = "ParentId", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string ParentId { get; set; } - + [ApiMember(Name = "Category", Description = "Category", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public SyncCategory? Category { get; set; } } @@ -79,6 +80,11 @@ namespace MediaBrowser.Api.Sync public string Id { get; set; } } + [Route("/Sync/OfflineActions", "POST", Summary = "Reports an action that occurred while offline.")] + public class ReportOfflineActions : List, IReturnVoid + { + } + [Authenticated] public class SyncService : BaseApiService { @@ -173,9 +179,9 @@ namespace MediaBrowser.Api.Sync .Select(i => _dtoService.GetBaseItemDto(i, new DtoOptions { Fields = new List - { - ItemFields.SyncInfo - } + { + ItemFields.SyncInfo + } })) .ToList(); @@ -184,5 +190,20 @@ namespace MediaBrowser.Api.Sync return ToOptimizedResult(result); } + + public void Post(ReportOfflineActions request) + { + var task = PostAsync(request); + + Task.WaitAll(task); + } + + public async Task PostAsync(ReportOfflineActions request) + { + foreach (var action in request) + { + await _syncManager.ReportOfflineAction(action).ConfigureAwait(false); + } + } } } diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 9fdfccaaf..140a4ae0e 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -74,7 +74,6 @@ - diff --git a/MediaBrowser.Common/Net/MimeTypes.cs b/MediaBrowser.Common/Net/MimeTypes.cs deleted file mode 100644 index 14052e759..000000000 --- a/MediaBrowser.Common/Net/MimeTypes.cs +++ /dev/null @@ -1,338 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace MediaBrowser.Common.Net -{ - /// - /// Class MimeTypes - /// - public static class MimeTypes - { - /// - /// The json MIME type - /// - public static string JsonMimeType = "application/json"; - - /// - /// Any extension in this list is considered a video file - can be added to at runtime for extensibility - /// - private static readonly List VideoFileExtensions = new List - { - ".mkv", - ".m2t", - ".m2ts", - ".img", - ".iso", - ".mk3d", - ".ts", - ".rmvb", - ".mov", - ".avi", - ".mpg", - ".mpeg", - ".wmv", - ".mp4", - ".divx", - ".dvr-ms", - ".wtv", - ".ogm", - ".ogv", - ".asf", - ".m4v", - ".flv", - ".f4v", - ".3gp", - ".webm", - ".mts", - ".m2v", - ".rec" - }; - - private static readonly Dictionary VideoFileExtensionsDictionary = VideoFileExtensions.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); - - /// - /// Determines whether [is video file] [the specified path]. - /// - /// The path. - /// true if [is video file] [the specified path]; otherwise, false. - public static bool IsVideoFile(string path) - { - if (string.IsNullOrEmpty(path)) - { - throw new ArgumentNullException("path"); - } - - var extension = Path.GetExtension(path); - - if (string.IsNullOrEmpty(extension)) - { - return false; - } - - return VideoFileExtensionsDictionary.ContainsKey(extension); - } - - /// - /// Gets the type of the MIME. - /// - /// The path. - /// System.String. - /// path - /// Argument not supported: + path - public static string GetMimeType(string path) - { - if (string.IsNullOrEmpty(path)) - { - throw new ArgumentNullException("path"); - } - - var ext = Path.GetExtension(path) ?? string.Empty; - - // http://en.wikipedia.org/wiki/Internet_media_type - // Add more as needed - - // Type video - if (ext.Equals(".mpg", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("mpeg", StringComparison.OrdinalIgnoreCase)) - { - return "video/mpeg"; - } - if (ext.Equals(".ogv", StringComparison.OrdinalIgnoreCase)) - { - return "video/ogg"; - } - if (ext.Equals(".mov", StringComparison.OrdinalIgnoreCase)) - { - return "video/quicktime"; - } - if (ext.Equals(".webm", StringComparison.OrdinalIgnoreCase)) - { - return "video/webm"; - } - if (ext.Equals(".mkv", StringComparison.OrdinalIgnoreCase)) - { - return "video/x-matroska"; - } - if (ext.Equals(".wmv", StringComparison.OrdinalIgnoreCase)) - { - return "video/x-ms-wmv"; - } - if (ext.Equals(".flv", StringComparison.OrdinalIgnoreCase)) - { - return "video/x-flv"; - } - if (ext.Equals(".avi", StringComparison.OrdinalIgnoreCase)) - { - return "video/x-msvideo"; - } - if (ext.Equals(".m4v", StringComparison.OrdinalIgnoreCase)) - { - return "video/x-m4v"; - } - if (ext.EndsWith("asf", StringComparison.OrdinalIgnoreCase)) - { - return "video/x-ms-asf"; - } - if (ext.Equals(".3gp", StringComparison.OrdinalIgnoreCase)) - { - return "video/3gpp"; - } - if (ext.Equals(".3g2", StringComparison.OrdinalIgnoreCase)) - { - return "video/3gpp2"; - } - if (ext.Equals(".ts", StringComparison.OrdinalIgnoreCase)) - { - return "video/mp2t"; - } - if (ext.Equals(".mpd", StringComparison.OrdinalIgnoreCase)) - { - return "video/vnd.mpeg.dash.mpd"; - } - - // Catch-all for all video types that don't require specific mime types - if (VideoFileExtensionsDictionary.ContainsKey(ext)) - { - return "video/" + ext.TrimStart('.').ToLower(); - } - - // Type text - if (ext.Equals(".css", StringComparison.OrdinalIgnoreCase)) - { - return "text/css"; - } - if (ext.Equals(".csv", StringComparison.OrdinalIgnoreCase)) - { - return "text/csv"; - } - if (ext.Equals(".html", StringComparison.OrdinalIgnoreCase) || ext.Equals(".htm", StringComparison.OrdinalIgnoreCase)) - { - return "text/html; charset=UTF-8"; - } - if (ext.Equals(".txt", StringComparison.OrdinalIgnoreCase)) - { - return "text/plain"; - } - if (ext.Equals(".xml", StringComparison.OrdinalIgnoreCase)) - { - return "application/xml"; - } - - // Type document - if (ext.Equals(".pdf", StringComparison.OrdinalIgnoreCase)) - { - return "application/pdf"; - } - if (ext.Equals(".mobi", StringComparison.OrdinalIgnoreCase)) - { - return "application/x-mobipocket-ebook"; - } - if (ext.Equals(".epub", StringComparison.OrdinalIgnoreCase)) - { - return "application/epub+zip"; - } - if (ext.Equals(".cbz", StringComparison.OrdinalIgnoreCase) || ext.Equals(".cbr", StringComparison.OrdinalIgnoreCase)) - { - return "application/x-cdisplay"; - } - - // Type image - if (ext.Equals(".gif", StringComparison.OrdinalIgnoreCase)) - { - return "image/gif"; - } - if (ext.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".jpeg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".tbn", StringComparison.OrdinalIgnoreCase)) - { - return "image/jpeg"; - } - if (ext.Equals(".png", StringComparison.OrdinalIgnoreCase)) - { - return "image/png"; - } - if (ext.Equals(".webp", StringComparison.OrdinalIgnoreCase)) - { - return "image/webp"; - } - if (ext.Equals(".ico", StringComparison.OrdinalIgnoreCase)) - { - return "image/vnd.microsoft.icon"; - } - - // Type audio - if (ext.Equals(".mp3", StringComparison.OrdinalIgnoreCase)) - { - return "audio/mpeg"; - } - if (ext.Equals(".m4a", StringComparison.OrdinalIgnoreCase) || ext.Equals(".aac", StringComparison.OrdinalIgnoreCase)) - { - return "audio/mp4"; - } - if (ext.Equals(".webma", StringComparison.OrdinalIgnoreCase)) - { - return "audio/webm"; - } - if (ext.Equals(".wav", StringComparison.OrdinalIgnoreCase)) - { - return "audio/wav"; - } - if (ext.Equals(".wma", StringComparison.OrdinalIgnoreCase)) - { - return "audio/x-ms-wma"; - } - if (ext.Equals(".flac", StringComparison.OrdinalIgnoreCase)) - { - return "audio/flac"; - } - if (ext.Equals(".aac", StringComparison.OrdinalIgnoreCase)) - { - return "audio/x-aac"; - } - if (ext.Equals(".ogg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".oga", StringComparison.OrdinalIgnoreCase)) - { - return "audio/ogg"; - } - - // Playlists - if (ext.Equals(".m3u8", StringComparison.OrdinalIgnoreCase)) - { - return "application/x-mpegURL"; - } - - // Misc - if (ext.Equals(".dll", StringComparison.OrdinalIgnoreCase)) - { - return "application/octet-stream"; - } - - // Web - if (ext.Equals(".js", StringComparison.OrdinalIgnoreCase)) - { - return "application/x-javascript"; - } - if (ext.Equals(".json", StringComparison.OrdinalIgnoreCase)) - { - return JsonMimeType; - } - if (ext.Equals(".map", StringComparison.OrdinalIgnoreCase)) - { - return "application/x-javascript"; - } - - if (ext.Equals(".woff", StringComparison.OrdinalIgnoreCase)) - { - return "font/woff"; - } - - if (ext.Equals(".ttf", StringComparison.OrdinalIgnoreCase)) - { - return "font/ttf"; - } - if (ext.Equals(".eot", StringComparison.OrdinalIgnoreCase)) - { - return "application/vnd.ms-fontobject"; - } - if (ext.Equals(".svg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".svgz", StringComparison.OrdinalIgnoreCase)) - { - return "image/svg+xml"; - } - - if (ext.Equals(".srt", StringComparison.OrdinalIgnoreCase)) - { - return "text/plain"; - } - - if (ext.Equals(".vtt", StringComparison.OrdinalIgnoreCase)) - { - return "text/vtt"; - } - - if (ext.Equals(".ttml", StringComparison.OrdinalIgnoreCase)) - { - return "application/ttml+xml"; - } - - if (ext.Equals(".bif", StringComparison.OrdinalIgnoreCase)) - { - return "application/octet-stream"; - } - - throw new ArgumentException("Argument not supported: " + path); - } - - private static readonly Dictionary MimeExtensions = - new Dictionary(StringComparer.OrdinalIgnoreCase) - { - {"image/jpeg", "jpg"}, - {"image/jpg", "jpg"}, - {"image/png", "png"}, - {"image/gif", "gif"}, - {"image/webp", "webp"} - }; - - public static string ToExtension(string mimeType) - { - return "." + MimeExtensions[mimeType]; - } - } -} diff --git a/MediaBrowser.Controller/Library/IUserDataManager.cs b/MediaBrowser.Controller/Library/IUserDataManager.cs index 226f77525..06e7d1763 100644 --- a/MediaBrowser.Controller/Library/IUserDataManager.cs +++ b/MediaBrowser.Controller/Library/IUserDataManager.cs @@ -61,5 +61,9 @@ namespace MediaBrowser.Controller.Library /// Task SaveAllUserData(Guid userId, IEnumerable userData, CancellationToken cancellationToken); + /// + /// Updates playstate for an item and returns true or false indicating if it was played to completion + /// + bool UpdatePlayState(BaseItem item, UserItemData data, long positionTicks); } } diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs index 47339f677..e16a978c3 100644 --- a/MediaBrowser.Controller/Sync/ISyncManager.cs +++ b/MediaBrowser.Controller/Sync/ISyncManager.cs @@ -4,6 +4,7 @@ using MediaBrowser.Model.Querying; using MediaBrowser.Model.Sync; using System.Collections.Generic; using System.Threading.Tasks; +using MediaBrowser.Model.Users; namespace MediaBrowser.Controller.Sync { @@ -80,5 +81,19 @@ namespace MediaBrowser.Controller.Sync /// The identifier. /// SyncJobItem. SyncJobItem GetJobItem(string id); + + /// + /// Gets the job item information. + /// + /// The identifier. + /// SyncedItem. + SyncedItem GetJobItemInfo(string id); + + /// + /// Reports the offline action. + /// + /// The action. + /// Task. + Task ReportOfflineAction(UserAction action); } } diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs index bdb1c4cbf..d1941c856 100644 --- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs +++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs @@ -18,6 +18,7 @@ using System.Globalization; using System.IO; using System.Linq; using System.Xml; +using MediaBrowser.Model.Net; namespace MediaBrowser.Dlna.Didl { diff --git a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs index a131e7016..7f83aa61d 100644 --- a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs @@ -169,8 +169,8 @@ namespace MediaBrowser.LocalMetadata.Images var names = new List { "folder", - "cover", "poster", + "cover", "default" }; diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index a388e0edb..68df777bd 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -10,8 +10,8 @@ Properties MediaBrowser.Model MediaBrowser.Model - v4.0 - Profile344 + v4.5 + Profile259 512 {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} ..\ @@ -479,9 +479,6 @@ Dto\RecommendationType.cs - - Dto\StreamOptions.cs - Dto\StudioDto.cs @@ -797,6 +794,12 @@ Net\HttpException.cs + + Net\HttpResponse.cs + + + Net\MimeTypes.cs + Net\NetworkShare.cs @@ -1037,18 +1040,24 @@ Session\UserDataChangeInfo.cs + + Sync\ItemFIleInfo.cs + + + Sync\ItemFileType.cs + Sync\SyncCategory.cs Sync\SyncDialogOptions.cs + + Sync\SyncedItem.cs + Sync\SyncHelper.cs - - Sync\SyncItem.cs - Sync\SyncJob.cs @@ -1151,6 +1160,12 @@ Users\PinRedeemResult.cs + + Users\UserAction.cs + + + Users\UserActionType.cs + Users\UserPolicy.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 5bacb73d7..bc4e58233 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -444,9 +444,6 @@ Dto\RecommendationType.cs - - Dto\StreamOptions.cs - Dto\StudioDto.cs @@ -756,6 +753,12 @@ Net\HttpException.cs + + Net\HttpResponse.cs + + + Net\MimeTypes.cs + Net\NetworkShare.cs @@ -996,18 +999,24 @@ Session\UserDataChangeInfo.cs + + Sync\ItemFIleInfo.cs + + + Sync\ItemFileType.cs + Sync\SyncCategory.cs Sync\SyncDialogOptions.cs + + Sync\SyncedItem.cs + Sync\SyncHelper.cs - - Sync\SyncItem.cs - Sync\SyncJob.cs @@ -1110,6 +1119,12 @@ Users\PinRedeemResult.cs + + Users\UserAction.cs + + + Users\UserActionType.cs + Users\UserPolicy.cs diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 0181325fe..883e54308 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -7,6 +7,7 @@ using MediaBrowser.Model.Events; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.MediaInfo; +using MediaBrowser.Model.Net; using MediaBrowser.Model.Notifications; using MediaBrowser.Model.Playlists; using MediaBrowser.Model.Plugins; @@ -185,6 +186,22 @@ namespace MediaBrowser.Model.ApiClient /// url Task GetImageStreamAsync(string url, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Gets the stream. + /// + /// The URL. + /// The cancellation token. + /// Task<Stream>. + Task GetStream(string url, CancellationToken cancellationToken = default(CancellationToken)); + + /// + /// Gets the response. + /// + /// The URL. + /// The cancellation token. + /// Task<HttpResponse>. + Task GetResponse(string url, CancellationToken cancellationToken = default(CancellationToken)); + /// /// Updates the user configuration. /// @@ -1299,15 +1316,6 @@ namespace MediaBrowser.Model.ApiClient /// Task<QueryResult<BaseItemDto>>. Task> GetPlaylistItems(PlaylistItemQuery query); - /// - /// Gets the url needed to stream an audio file - /// - /// The options. - /// System.String. - /// options - [Obsolete] - string GetAudioStreamUrl(StreamOptions options); - /// /// Gets the url needed to stream a video file /// @@ -1411,5 +1419,19 @@ namespace MediaBrowser.Model.ApiClient /// The web socket factory. /// The keep alive timer ms. void OpenWebSocket(Func webSocketFactory, int keepAliveTimerMs = 60000); + + /// + /// Reports the offline actions. + /// + /// The actions. + /// Task. + Task ReportOfflineActions(List actions); + + /// + /// Gets the ready synchronize items. + /// + /// The target identifier. + /// List<SyncedItem>. + Task> GetReadySyncItems(string targetId); } } \ No newline at end of file diff --git a/MediaBrowser.Model/Dto/StreamOptions.cs b/MediaBrowser.Model/Dto/StreamOptions.cs deleted file mode 100644 index 5b7cdc6fb..000000000 --- a/MediaBrowser.Model/Dto/StreamOptions.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; - -namespace MediaBrowser.Model.Dto -{ - /// - /// Class StreamOptions - /// - [Obsolete] - public class StreamOptions - { - /// - /// Gets or sets the audio bit rate. - /// - /// The audio bit rate. - public int? AudioBitRate { get; set; } - - /// - /// Gets or sets the audio codec. - /// Omit to copy the original stream - /// - /// The audio encoding format. - public string AudioCodec { get; set; } - - /// - /// Gets or sets the item id. - /// - /// The item id. - public string ItemId { get; set; } - - /// - /// Gets or sets the max audio channels. - /// - /// The max audio channels. - public int? MaxAudioChannels { get; set; } - - /// - /// Gets or sets the max audio sample rate. - /// - /// The max audio sample rate. - public int? MaxAudioSampleRate { get; set; } - - /// - /// Gets or sets the start time ticks. - /// - /// The start time ticks. - public long? StartTimeTicks { get; set; } - - /// - /// Gets or sets a value indicating whether the original media should be served statically - /// Only used with progressive streaming - /// - /// true if static; otherwise, false. - public bool? Static { get; set; } - - /// - /// Gets or sets the output file extension. - /// - /// The output file extension. - public string OutputFileExtension { get; set; } - - /// - /// Gets or sets the device id. - /// - /// The device id. - public string DeviceId { get; set; } - } -} diff --git a/MediaBrowser.Model/Dto/VideoStreamOptions.cs b/MediaBrowser.Model/Dto/VideoStreamOptions.cs index 606e928f2..e9a83bd12 100644 --- a/MediaBrowser.Model/Dto/VideoStreamOptions.cs +++ b/MediaBrowser.Model/Dto/VideoStreamOptions.cs @@ -6,8 +6,64 @@ namespace MediaBrowser.Model.Dto /// Class VideoStreamOptions /// [Obsolete] - public class VideoStreamOptions : StreamOptions + public class VideoStreamOptions { + /// + /// Gets or sets the audio bit rate. + /// + /// The audio bit rate. + public int? AudioBitRate { get; set; } + + /// + /// Gets or sets the audio codec. + /// Omit to copy the original stream + /// + /// The audio encoding format. + public string AudioCodec { get; set; } + + /// + /// Gets or sets the item id. + /// + /// The item id. + public string ItemId { get; set; } + + /// + /// Gets or sets the max audio channels. + /// + /// The max audio channels. + public int? MaxAudioChannels { get; set; } + + /// + /// Gets or sets the max audio sample rate. + /// + /// The max audio sample rate. + public int? MaxAudioSampleRate { get; set; } + + /// + /// Gets or sets the start time ticks. + /// + /// The start time ticks. + public long? StartTimeTicks { get; set; } + + /// + /// Gets or sets a value indicating whether the original media should be served statically + /// Only used with progressive streaming + /// + /// true if static; otherwise, false. + public bool? Static { get; set; } + + /// + /// Gets or sets the output file extension. + /// + /// The output file extension. + public string OutputFileExtension { get; set; } + + /// + /// Gets or sets the device id. + /// + /// The device id. + public string DeviceId { get; set; } + /// /// Gets or sets the video codec. /// Omit to copy diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index e1f0e78f4..47a31853b 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -133,7 +133,6 @@ - @@ -155,6 +154,8 @@ + + @@ -366,10 +367,12 @@ + + + - @@ -423,6 +426,8 @@ + + diff --git a/MediaBrowser.Model/Net/HttpResponse.cs b/MediaBrowser.Model/Net/HttpResponse.cs new file mode 100644 index 000000000..f4bd8e681 --- /dev/null +++ b/MediaBrowser.Model/Net/HttpResponse.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; + +namespace MediaBrowser.Model.Net +{ + public class HttpResponse : IDisposable + { + /// + /// Gets or sets the type of the content. + /// + /// The type of the content. + public string ContentType { get; set; } + + /// + /// Gets or sets the response URL. + /// + /// The response URL. + public string ResponseUrl { get; set; } + + /// + /// Gets or sets the content. + /// + /// The content. + public Stream Content { get; set; } + + /// + /// Gets or sets the status code. + /// + /// The status code. + public HttpStatusCode StatusCode { get; set; } + + /// + /// Gets or sets the length of the content. + /// + /// The length of the content. + public long? ContentLength { get; set; } + + /// + /// Gets or sets the headers. + /// + /// The headers. + public Dictionary Headers { get; set; } + + private readonly IDisposable _disposable; + + public HttpResponse(IDisposable disposable) + { + _disposable = disposable; + } + public HttpResponse() + { + } + + public void Dispose() + { + if (_disposable != null) + { + _disposable.Dispose(); + } + } + } +} diff --git a/MediaBrowser.Model/Net/MimeTypes.cs b/MediaBrowser.Model/Net/MimeTypes.cs new file mode 100644 index 000000000..6eaac8f03 --- /dev/null +++ b/MediaBrowser.Model/Net/MimeTypes.cs @@ -0,0 +1,273 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace MediaBrowser.Model.Net +{ + /// + /// Class MimeTypes + /// + public static class MimeTypes + { + /// + /// Any extension in this list is considered a video file - can be added to at runtime for extensibility + /// + private static readonly List VideoFileExtensions = new List + { + ".mkv", + ".m2t", + ".m2ts", + ".img", + ".iso", + ".mk3d", + ".ts", + ".rmvb", + ".mov", + ".avi", + ".mpg", + ".mpeg", + ".wmv", + ".mp4", + ".divx", + ".dvr-ms", + ".wtv", + ".ogm", + ".ogv", + ".asf", + ".m4v", + ".flv", + ".f4v", + ".3gp", + ".webm", + ".mts", + ".m2v", + ".rec" + }; + + private static readonly Dictionary VideoFileExtensionsDictionary = VideoFileExtensions.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); + + // http://en.wikipedia.org/wiki/Internet_media_type + // Add more as needed + + private static readonly Dictionary MimeTypeLookup = + new Dictionary(StringComparer.OrdinalIgnoreCase) + { + {".jpg", "image/jpeg"}, + {".jpeg", "image/jpeg"}, + {".tbn", "image/jpeg"}, + {".png", "image/png"}, + {".gif", "image/gif"}, + {".webp", "image/webp"}, + {".ico", "image/vnd.microsoft.icon"}, + {".mpg", "video/mpeg"}, + {".mpeg", "video/mpeg"}, + {".ogv", "video/ogg"}, + {".mov", "video/quicktime"}, + {".webm", "video/webm"}, + {".mkv", "video/x-matroska"}, + {".wmv", "video/x-ms-wmv"}, + {".flv", "video/x-flv"}, + {".avi", "video/x-msvideo"}, + {".asf", "video/x-ms-asf"}, + {".m4v", "video/x-m4v"} + }; + + private static readonly Dictionary ExtensionLookup = + MimeTypeLookup + .GroupBy(i => i.Value) + .ToDictionary(x => x.Key, x => x.First().Key, StringComparer.OrdinalIgnoreCase); + + /// + /// Gets the type of the MIME. + /// + /// The path. + /// System.String. + /// path + /// Argument not supported: + path + public static string GetMimeType(string path) + { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + + var ext = Path.GetExtension(path) ?? string.Empty; + + string result; + if (MimeTypeLookup.TryGetValue(ext, out result)) + { + return result; + } + + // Type video + if (ext.Equals(".3gp", StringComparison.OrdinalIgnoreCase)) + { + return "video/3gpp"; + } + if (ext.Equals(".3g2", StringComparison.OrdinalIgnoreCase)) + { + return "video/3gpp2"; + } + if (ext.Equals(".ts", StringComparison.OrdinalIgnoreCase)) + { + return "video/mp2t"; + } + if (ext.Equals(".mpd", StringComparison.OrdinalIgnoreCase)) + { + return "video/vnd.mpeg.dash.mpd"; + } + + // Catch-all for all video types that don't require specific mime types + if (VideoFileExtensionsDictionary.ContainsKey(ext)) + { + return "video/" + ext.TrimStart('.').ToLower(); + } + + // Type text + if (ext.Equals(".css", StringComparison.OrdinalIgnoreCase)) + { + return "text/css"; + } + if (ext.Equals(".csv", StringComparison.OrdinalIgnoreCase)) + { + return "text/csv"; + } + if (ext.Equals(".html", StringComparison.OrdinalIgnoreCase) || ext.Equals(".htm", StringComparison.OrdinalIgnoreCase)) + { + return "text/html; charset=UTF-8"; + } + if (ext.Equals(".txt", StringComparison.OrdinalIgnoreCase)) + { + return "text/plain"; + } + if (ext.Equals(".xml", StringComparison.OrdinalIgnoreCase)) + { + return "application/xml"; + } + + // Type document + if (ext.Equals(".pdf", StringComparison.OrdinalIgnoreCase)) + { + return "application/pdf"; + } + if (ext.Equals(".mobi", StringComparison.OrdinalIgnoreCase)) + { + return "application/x-mobipocket-ebook"; + } + if (ext.Equals(".epub", StringComparison.OrdinalIgnoreCase)) + { + return "application/epub+zip"; + } + if (ext.Equals(".cbz", StringComparison.OrdinalIgnoreCase) || ext.Equals(".cbr", StringComparison.OrdinalIgnoreCase)) + { + return "application/x-cdisplay"; + } + + // Type audio + if (ext.Equals(".mp3", StringComparison.OrdinalIgnoreCase)) + { + return "audio/mpeg"; + } + if (ext.Equals(".m4a", StringComparison.OrdinalIgnoreCase) || ext.Equals(".aac", StringComparison.OrdinalIgnoreCase)) + { + return "audio/mp4"; + } + if (ext.Equals(".webma", StringComparison.OrdinalIgnoreCase)) + { + return "audio/webm"; + } + if (ext.Equals(".wav", StringComparison.OrdinalIgnoreCase)) + { + return "audio/wav"; + } + if (ext.Equals(".wma", StringComparison.OrdinalIgnoreCase)) + { + return "audio/x-ms-wma"; + } + if (ext.Equals(".flac", StringComparison.OrdinalIgnoreCase)) + { + return "audio/flac"; + } + if (ext.Equals(".aac", StringComparison.OrdinalIgnoreCase)) + { + return "audio/x-aac"; + } + if (ext.Equals(".ogg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".oga", StringComparison.OrdinalIgnoreCase)) + { + return "audio/ogg"; + } + + // Playlists + if (ext.Equals(".m3u8", StringComparison.OrdinalIgnoreCase)) + { + return "application/x-mpegURL"; + } + + // Misc + if (ext.Equals(".dll", StringComparison.OrdinalIgnoreCase)) + { + return "application/octet-stream"; + } + + // Web + if (ext.Equals(".js", StringComparison.OrdinalIgnoreCase)) + { + return "application/x-javascript"; + } + if (ext.Equals(".json", StringComparison.OrdinalIgnoreCase)) + { + return "application/json"; + } + if (ext.Equals(".map", StringComparison.OrdinalIgnoreCase)) + { + return "application/x-javascript"; + } + + if (ext.Equals(".woff", StringComparison.OrdinalIgnoreCase)) + { + return "font/woff"; + } + + if (ext.Equals(".ttf", StringComparison.OrdinalIgnoreCase)) + { + return "font/ttf"; + } + if (ext.Equals(".eot", StringComparison.OrdinalIgnoreCase)) + { + return "application/vnd.ms-fontobject"; + } + if (ext.Equals(".svg", StringComparison.OrdinalIgnoreCase) || ext.Equals(".svgz", StringComparison.OrdinalIgnoreCase)) + { + return "image/svg+xml"; + } + + if (ext.Equals(".srt", StringComparison.OrdinalIgnoreCase)) + { + return "text/plain"; + } + + if (ext.Equals(".vtt", StringComparison.OrdinalIgnoreCase)) + { + return "text/vtt"; + } + + if (ext.Equals(".ttml", StringComparison.OrdinalIgnoreCase)) + { + return "application/ttml+xml"; + } + + if (ext.Equals(".bif", StringComparison.OrdinalIgnoreCase)) + { + return "application/octet-stream"; + } + + throw new ArgumentException("Argument not supported: " + path); + } + + public static string ToExtension(string mimeType) + { + return ExtensionLookup[mimeType]; + } + } +} diff --git a/MediaBrowser.Model/Sync/ItemFIleInfo.cs b/MediaBrowser.Model/Sync/ItemFIleInfo.cs new file mode 100644 index 000000000..6ae9ceb18 --- /dev/null +++ b/MediaBrowser.Model/Sync/ItemFIleInfo.cs @@ -0,0 +1,28 @@ +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Model.Sync +{ + public class ItemFileInfo + { + /// + /// Gets or sets the type. + /// + /// The type. + public ItemFileType Type { get; set; } + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public string ItemId { get; set; } + /// + /// Gets or sets the name. + /// + /// The name. + public string Name { get; set; } + /// + /// Gets or sets the type of the image. + /// + /// The type of the image. + public ImageType ImageType { get; set; } + } +} diff --git a/MediaBrowser.Model/Sync/ItemFileType.cs b/MediaBrowser.Model/Sync/ItemFileType.cs new file mode 100644 index 000000000..305f4c502 --- /dev/null +++ b/MediaBrowser.Model/Sync/ItemFileType.cs @@ -0,0 +1,19 @@ + +namespace MediaBrowser.Model.Sync +{ + public enum ItemFileType + { + /// + /// The media + /// + Media = 0, + /// + /// The image + /// + Image = 1, + /// + /// The subtitles + /// + Subtitles = 2 + } +} diff --git a/MediaBrowser.Model/Sync/SyncItem.cs b/MediaBrowser.Model/Sync/SyncItem.cs deleted file mode 100644 index d50ae98c9..000000000 --- a/MediaBrowser.Model/Sync/SyncItem.cs +++ /dev/null @@ -1,9 +0,0 @@ -using MediaBrowser.Model.Dto; - -namespace MediaBrowser.Model.Sync -{ - public class SyncItem - { - public BaseItemDto Item { get; set; } - } -} diff --git a/MediaBrowser.Model/Sync/SyncJobItem.cs b/MediaBrowser.Model/Sync/SyncJobItem.cs index 063f7feb2..d9fb1ed09 100644 --- a/MediaBrowser.Model/Sync/SyncJobItem.cs +++ b/MediaBrowser.Model/Sync/SyncJobItem.cs @@ -22,6 +22,12 @@ namespace MediaBrowser.Model.Sync /// The item identifier. public string ItemId { get; set; } + /// + /// Gets or sets the media source identifier. + /// + /// The media source identifier. + public string MediaSourceId { get; set; } + /// /// Gets or sets the target identifier. /// diff --git a/MediaBrowser.Model/Sync/SyncedItem.cs b/MediaBrowser.Model/Sync/SyncedItem.cs new file mode 100644 index 000000000..784a12bc9 --- /dev/null +++ b/MediaBrowser.Model/Sync/SyncedItem.cs @@ -0,0 +1,38 @@ +using MediaBrowser.Model.Dto; + +namespace MediaBrowser.Model.Sync +{ + public class SyncedItem + { + /// + /// Gets or sets the server identifier. + /// + /// The server identifier. + public string ServerId { get; set; } + /// + /// Gets or sets the synchronize job identifier. + /// + /// The synchronize job identifier. + public string SyncJobId { get; set; } + /// + /// Gets or sets the synchronize job item identifier. + /// + /// The synchronize job item identifier. + public string SyncJobItemId { get; set; } + /// + /// Gets or sets the name of the original file. + /// + /// The name of the original file. + public string OriginalFileName { get; set; } + /// + /// Gets or sets the item. + /// + /// The item. + public BaseItemDto Item { get; set; } + /// + /// Gets or sets the user identifier. + /// + /// The user identifier. + public string UserId { get; set; } + } +} diff --git a/MediaBrowser.Model/Users/UserAction.cs b/MediaBrowser.Model/Users/UserAction.cs new file mode 100644 index 000000000..93c22d726 --- /dev/null +++ b/MediaBrowser.Model/Users/UserAction.cs @@ -0,0 +1,14 @@ +using System; + +namespace MediaBrowser.Model.Users +{ + public class UserAction + { + public string ServerId { get; set; } + public string UserId { get; set; } + public string ItemId { get; set; } + public UserActionType Type { get; set; } + public DateTime Date { get; set; } + public long? PositionTicks { get; set; } + } +} diff --git a/MediaBrowser.Model/Users/UserActionType.cs b/MediaBrowser.Model/Users/UserActionType.cs new file mode 100644 index 000000000..493de6272 --- /dev/null +++ b/MediaBrowser.Model/Users/UserActionType.cs @@ -0,0 +1,8 @@ + +namespace MediaBrowser.Model.Users +{ + public enum UserActionType + { + PlayedItem = 0 + } +} diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs index 2c97f2c16..700bca0fa 100644 --- a/MediaBrowser.Providers/Manager/ImageSaver.cs +++ b/MediaBrowser.Providers/Manager/ImageSaver.cs @@ -16,6 +16,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Net; namespace MediaBrowser.Providers.Manager { diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs index 52c252d24..52ec5c9b1 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs @@ -34,7 +34,7 @@ namespace MediaBrowser.Server.Implementations.Connect { LoadCachedAddress(); - _timer = new Timer(TimerCallback, null, TimeSpan.FromSeconds(10), TimeSpan.FromHours(6)); + _timer = new Timer(TimerCallback, null, TimeSpan.FromSeconds(5), TimeSpan.FromHours(3)); } private async void TimerCallback(object state) diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs index e13e27d5a..681d3ac5e 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpResultFactory.cs @@ -12,7 +12,7 @@ using System.IO; using System.Net; using System.Text; using System.Threading.Tasks; -using MimeTypes = MediaBrowser.Common.Net.MimeTypes; +using MimeTypes = MediaBrowser.Model.Net.MimeTypes; namespace MediaBrowser.Server.Implementations.HttpServer { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs index cc261c3e7..e3447afc9 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs @@ -30,12 +30,6 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies { return null; } - - // This is a bit of a one-off but it's here to combat MCM's over-aggressive placement of collection.xml files where they don't belong, including in series folders. - if (args.ContainsMetaFileByName("series.xml")) - { - return null; - } if (filename.IndexOf("[boxset]", StringComparison.OrdinalIgnoreCase) != -1 || args.ContainsFileSystemEntryByName("collection.xml")) diff --git a/MediaBrowser.Server.Implementations/Library/UserDataManager.cs b/MediaBrowser.Server.Implementations/Library/UserDataManager.cs index 3f132ab7f..ed3503c1b 100644 --- a/MediaBrowser.Server.Implementations/Library/UserDataManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserDataManager.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; using MediaBrowser.Common.Events; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Dto; @@ -23,9 +25,11 @@ namespace MediaBrowser.Server.Implementations.Library private readonly ConcurrentDictionary _userData = new ConcurrentDictionary(); private readonly ILogger _logger; + private readonly IServerConfigurationManager _config; - public UserDataManager(ILogManager logManager) + public UserDataManager(ILogManager logManager, IServerConfigurationManager config) { + _config = config; _logger = logManager.GetLogger(GetType().Name); } @@ -35,22 +39,6 @@ namespace MediaBrowser.Server.Implementations.Library /// The repository. public IUserDataRepository Repository { get; set; } - /// - /// Saves the user data. - /// - /// The user id. - /// The item. - /// The user data. - /// The reason. - /// The cancellation token. - /// Task. - /// userData - /// or - /// cancellationToken - /// or - /// userId - /// or - /// key public async Task SaveUserData(Guid userId, IHasUserData item, UserItemData userData, UserDataSaveReason reason, CancellationToken cancellationToken) { if (userData == null) @@ -219,5 +207,59 @@ namespace MediaBrowser.Server.Implementations.Library Key = data.Key }; } + + public bool UpdatePlayState(BaseItem item, UserItemData data, long positionTicks) + { + var playedToCompletion = false; + + var hasRuntime = item.RunTimeTicks.HasValue && item.RunTimeTicks > 0; + + // If a position has been reported, and if we know the duration + if (positionTicks > 0 && hasRuntime) + { + var pctIn = Decimal.Divide(positionTicks, item.RunTimeTicks.Value) * 100; + + // Don't track in very beginning + if (pctIn < _config.Configuration.MinResumePct) + { + positionTicks = 0; + } + + // If we're at the end, assume completed + else if (pctIn > _config.Configuration.MaxResumePct || positionTicks >= item.RunTimeTicks.Value) + { + positionTicks = 0; + data.Played = playedToCompletion = true; + } + + else + { + // Enforce MinResumeDuration + var durationSeconds = TimeSpan.FromTicks(item.RunTimeTicks.Value).TotalSeconds; + + if (durationSeconds < _config.Configuration.MinResumeDurationSeconds) + { + positionTicks = 0; + data.Played = playedToCompletion = true; + } + } + } + else if (!hasRuntime) + { + // If we don't know the runtime we'll just have to assume it was fully played + data.Played = playedToCompletion = true; + positionTicks = 0; + } + + if (item is Audio) + { + positionTicks = 0; + } + + data.PlaybackPositionTicks = positionTicks; + + return playedToCompletion; + } + } } diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json index 7a0b1e46a..ad12450df 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json @@ -251,7 +251,6 @@ "HeaderDeleteItem": "Delete Item", "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", - "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", "OptionEnded": "Ended", "OptionContinuing": "Continuing", diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index b5c1ea0d3..f70e110b0 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -252,7 +252,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 1f294c325..4c587d1ab 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -67,12 +67,6 @@ namespace MediaBrowser.Server.Implementations.Session private readonly IAuthenticationRepository _authRepo; private readonly IDeviceManager _deviceManager; - /// - /// Gets or sets the configuration manager. - /// - /// The configuration manager. - private readonly IServerConfigurationManager _configurationManager; - /// /// The _active connections /// @@ -105,18 +99,9 @@ namespace MediaBrowser.Server.Implementations.Session private readonly SemaphoreSlim _sessionLock = new SemaphoreSlim(1, 1); - /// - /// Initializes a new instance of the class. - /// - /// The user data repository. - /// The configuration manager. - /// The logger. - /// The user repository. - /// The library manager. - public SessionManager(IUserDataManager userDataRepository, IServerConfigurationManager configurationManager, ILogger logger, IUserRepository userRepository, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor, IItemRepository itemRepo, IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IHttpClient httpClient, IAuthenticationRepository authRepo, IDeviceManager deviceManager) + public SessionManager(IUserDataManager userDataRepository, ILogger logger, IUserRepository userRepository, ILibraryManager libraryManager, IUserManager userManager, IMusicManager musicManager, IDtoService dtoService, IImageProcessor imageProcessor, IItemRepository itemRepo, IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IHttpClient httpClient, IAuthenticationRepository authRepo, IDeviceManager deviceManager) { _userDataRepository = userDataRepository; - _configurationManager = configurationManager; _logger = logger; _userRepository = userRepository; _libraryManager = libraryManager; @@ -689,7 +674,7 @@ namespace MediaBrowser.Server.Implementations.Session if (positionTicks.HasValue) { - UpdatePlayState(item, data, positionTicks.Value); + _userDataRepository.UpdatePlayState(item, data, positionTicks.Value); await _userDataRepository.SaveUserData(userId, item, data, UserDataSaveReason.PlaybackProgress, CancellationToken.None).ConfigureAwait(false); } @@ -779,7 +764,7 @@ namespace MediaBrowser.Server.Implementations.Session if (positionTicks.HasValue) { - playedToCompletion = UpdatePlayState(item, data, positionTicks.Value); + playedToCompletion = _userDataRepository.UpdatePlayState(item, data, positionTicks.Value); } else { @@ -795,65 +780,6 @@ namespace MediaBrowser.Server.Implementations.Session return playedToCompletion; } - /// - /// Updates playstate position for an item but does not save - /// - /// The item - /// User data for the item - /// The current playback position - private bool UpdatePlayState(BaseItem item, UserItemData data, long positionTicks) - { - var playedToCompletion = false; - - var hasRuntime = item.RunTimeTicks.HasValue && item.RunTimeTicks > 0; - - // If a position has been reported, and if we know the duration - if (positionTicks > 0 && hasRuntime) - { - var pctIn = Decimal.Divide(positionTicks, item.RunTimeTicks.Value) * 100; - - // Don't track in very beginning - if (pctIn < _configurationManager.Configuration.MinResumePct) - { - positionTicks = 0; - } - - // If we're at the end, assume completed - else if (pctIn > _configurationManager.Configuration.MaxResumePct || positionTicks >= item.RunTimeTicks.Value) - { - positionTicks = 0; - data.Played = playedToCompletion = true; - } - - else - { - // Enforce MinResumeDuration - var durationSeconds = TimeSpan.FromTicks(item.RunTimeTicks.Value).TotalSeconds; - - if (durationSeconds < _configurationManager.Configuration.MinResumeDurationSeconds) - { - positionTicks = 0; - data.Played = playedToCompletion = true; - } - } - } - else if (!hasRuntime) - { - // If we don't know the runtime we'll just have to assume it was fully played - data.Played = playedToCompletion = true; - positionTicks = 0; - } - - if (item is Audio) - { - positionTicks = 0; - } - - data.PlaybackPositionTicks = positionTicks; - - return playedToCompletion; - } - /// /// Gets the session. /// diff --git a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs index 6dda869ee..5c933b4bd 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncJobProcessor.cs @@ -358,6 +358,9 @@ namespace MediaBrowser.Server.Implementations.Sync var streamInfo = new StreamBuilder().BuildVideoItem(options); var mediaSource = streamInfo.MediaSource; + jobItem.MediaSourceId = streamInfo.MediaSourceId; + await _syncRepo.Update(jobItem).ConfigureAwait(false); + if (streamInfo.PlayMethod != PlayMethod.Transcode) { if (mediaSource.Protocol == MediaProtocol.File) @@ -389,6 +392,9 @@ namespace MediaBrowser.Server.Implementations.Sync var streamInfo = new StreamBuilder().BuildAudioItem(options); var mediaSource = streamInfo.MediaSource; + jobItem.MediaSourceId = streamInfo.MediaSourceId; + await _syncRepo.Update(jobItem).ConfigureAwait(false); + if (streamInfo.PlayMethod != PlayMethod.Transcode) { if (mediaSource.Protocol == MediaProtocol.File) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 3006c1be9..f92cbeda3 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -1,5 +1,9 @@ -using MediaBrowser.Common.Extensions; +using System.IO; +using MediaBrowser.Common; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Drawing; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.TV; @@ -7,10 +11,12 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Sync; using MediaBrowser.Model.Dlna; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Querying; using MediaBrowser.Model.Sync; +using MediaBrowser.Model.Users; using MoreLinq; using System; using System.Collections.Generic; @@ -26,16 +32,20 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly IImageProcessor _imageProcessor; private readonly ILogger _logger; private readonly IUserManager _userManager; + private readonly IDtoService _dtoService; + private readonly IApplicationHost _appHost; private ISyncProvider[] _providers = { }; - public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager) + public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, IDtoService dtoService, IApplicationHost appHost) { _libraryManager = libraryManager; _repo = repo; _imageProcessor = imageProcessor; _logger = logger; _userManager = userManager; + _dtoService = dtoService; + _appHost = appHost; } public void AddParts(IEnumerable providers) @@ -251,6 +261,11 @@ namespace MediaBrowser.Server.Implementations.Sync } } + if (item is LiveTvChannel || item is IChannelItem || item is ILiveTvRecording) + { + return false; + } + return true; } @@ -301,5 +316,54 @@ namespace MediaBrowser.Server.Implementations.Sync { return _repo.GetJobItems(query); } + + public SyncedItem GetJobItemInfo(string id) + { + var jobItem = GetJobItem(id); + var job = _repo.GetJob(jobItem.JobId); + + var libraryItem = _libraryManager.GetItemById(jobItem.ItemId); + + var syncedItem = new SyncedItem + { + SyncJobId = jobItem.JobId, + SyncJobItemId = jobItem.Id, + ServerId = _appHost.SystemId, + UserId = job.UserId + }; + + // Get everything + var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); + + syncedItem.Item = _dtoService.GetBaseItemDto(libraryItem, new DtoOptions + { + Fields = fields + }); + + // TODO: this should be the media source of the transcoded output + syncedItem.Item.MediaSources = syncedItem.Item.MediaSources + .Where(i => string.Equals(i.Id, jobItem.MediaSourceId)) + .ToList(); + + var mediaSource = syncedItem.Item.MediaSources + .FirstOrDefault(i => string.Equals(i.Id, jobItem.MediaSourceId)); + + // This will be null for items that are not audio/video + if (mediaSource == null) + { + syncedItem.OriginalFileName = Path.GetFileName(libraryItem.Path); + } + else + { + syncedItem.OriginalFileName = Path.GetFileName(mediaSource.Path); + } + + return syncedItem; + } + + public Task ReportOfflineAction(UserAction action) + { + return Task.FromResult(true); + } } } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index e65d4c66e..2ff6d7ae6 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, "sync6.db"); + var dbFile = Path.Combine(_appPaths.DataPath, "sync7.db"); _connection = await SqliteExtensions.ConnectToDb(dbFile, _logger).ConfigureAwait(false); @@ -45,7 +45,7 @@ namespace MediaBrowser.Server.Implementations.Sync "create table if not exists SyncJobs (Id GUID PRIMARY KEY, TargetId TEXT NOT NULL, Name TEXT NOT NULL, Quality TEXT NOT NULL, Status TEXT NOT NULL, Progress FLOAT, UserId TEXT NOT NULL, ItemIds TEXT NOT NULL, Category TEXT, ParentId TEXT, UnwatchedOnly BIT, ItemLimit INT, SyncNewContent BIT, DateCreated DateTime, DateLastModified DateTime, ItemCount int)", "create index if not exists idx_SyncJobs on SyncJobs(Id)", - "create table if not exists SyncJobItems (Id GUID PRIMARY KEY, ItemId TEXT, JobId TEXT, OutputPath TEXT, Status TEXT, TargetId TEXT, DateCreated DateTime, Progress FLOAT)", + "create table if not exists SyncJobItems (Id GUID PRIMARY KEY, ItemId TEXT, MediaSourceId TEXT, JobId TEXT, OutputPath TEXT, Status TEXT, TargetId TEXT, DateCreated DateTime, Progress FLOAT)", "create index if not exists idx_SyncJobItems on SyncJobs(Id)", //pragmas @@ -90,10 +90,11 @@ namespace MediaBrowser.Server.Implementations.Sync _saveJobCommand.Parameters.Add(_saveJobCommand, "@ItemCount"); _saveJobItemCommand = _connection.CreateCommand(); - _saveJobItemCommand.CommandText = "replace into SyncJobItems (Id, ItemId, JobId, OutputPath, Status, TargetId, DateCreated, Progress) values (@Id, @ItemId, @JobId, @OutputPath, @Status, @TargetId, @DateCreated, @Progress)"; + _saveJobItemCommand.CommandText = "replace into SyncJobItems (Id, ItemId, MediaSourceId, JobId, OutputPath, Status, TargetId, DateCreated, Progress) values (@Id, @ItemId, @MediaSourceId, @JobId, @OutputPath, @Status, @TargetId, @DateCreated, @Progress)"; _saveJobItemCommand.Parameters.Add(_saveJobCommand, "@Id"); _saveJobItemCommand.Parameters.Add(_saveJobCommand, "@ItemId"); + _saveJobItemCommand.Parameters.Add(_saveJobCommand, "@MediaSourceId"); _saveJobItemCommand.Parameters.Add(_saveJobCommand, "@JobId"); _saveJobItemCommand.Parameters.Add(_saveJobCommand, "@OutputPath"); _saveJobItemCommand.Parameters.Add(_saveJobCommand, "@Status"); @@ -103,7 +104,7 @@ namespace MediaBrowser.Server.Implementations.Sync } private const string BaseJobSelectText = "select Id, TargetId, Name, Quality, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount from SyncJobs"; - private const string BaseJobItemSelectText = "select Id, ItemId, JobId, OutputPath, Status, TargetId, DateCreated, Progress from SyncJobItems"; + private const string BaseJobItemSelectText = "select Id, ItemId, MediaSourceId, JobId, OutputPath, Status, TargetId, DateCreated, Progress from SyncJobItems"; public SyncJob GetJob(string id) { @@ -556,6 +557,7 @@ namespace MediaBrowser.Server.Implementations.Sync _saveJobItemCommand.GetParameter(index++).Value = new Guid(jobItem.Id); _saveJobItemCommand.GetParameter(index++).Value = jobItem.ItemId; + _saveJobItemCommand.GetParameter(index++).Value = jobItem.MediaSourceId; _saveJobItemCommand.GetParameter(index++).Value = jobItem.JobId; _saveJobItemCommand.GetParameter(index++).Value = jobItem.OutputPath; _saveJobItemCommand.GetParameter(index++).Value = jobItem.Status; @@ -606,26 +608,27 @@ namespace MediaBrowser.Server.Implementations.Sync { Id = reader.GetGuid(0).ToString("N"), ItemId = reader.GetString(1), - JobId = reader.GetString(2) + MediaSourceId = reader.GetString(2), + JobId = reader.GetString(3) }; - if (!reader.IsDBNull(3)) + if (!reader.IsDBNull(4)) { - info.OutputPath = reader.GetString(3); + info.OutputPath = reader.GetString(4); } - if (!reader.IsDBNull(4)) + if (!reader.IsDBNull(5)) { - info.Status = (SyncJobItemStatus)Enum.Parse(typeof(SyncJobItemStatus), reader.GetString(4), true); + info.Status = (SyncJobItemStatus)Enum.Parse(typeof(SyncJobItemStatus), reader.GetString(5), true); } - info.TargetId = reader.GetString(5); + info.TargetId = reader.GetString(6); - info.DateCreated = reader.GetDateTime(6); + info.DateCreated = reader.GetDateTime(7); - if (!reader.IsDBNull(7)) + if (!reader.IsDBNull(8)) { - info.Progress = reader.GetDouble(7); + info.Progress = reader.GetDouble(8); } return info; diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index c2520ff6b..06d63b355 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -410,7 +410,7 @@ namespace MediaBrowser.Server.Startup.Common RegisterSingleInstance(() => new BdInfoExaminer()); - UserDataManager = new UserDataManager(LogManager); + UserDataManager = new UserDataManager(LogManager, ServerConfigurationManager); RegisterSingleInstance(UserDataManager); UserRepository = await GetUserRepository().ConfigureAwait(false); @@ -470,7 +470,7 @@ 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); + SyncManager = new SyncManager(LibraryManager, SyncRepository, ImageProcessor, LogManager.GetLogger("SyncManager"), UserManager, DtoService, this); RegisterSingleInstance(SyncManager); DtoService = new DtoService(Logger, LibraryManager, UserDataManager, ItemRepository, ImageProcessor, ServerConfigurationManager, FileSystemManager, ProviderManager, () => ChannelManager, SyncManager, this); @@ -485,7 +485,7 @@ namespace MediaBrowser.Server.Startup.Common DeviceManager = new DeviceManager(new DeviceRepository(ApplicationPaths, JsonSerializer, Logger), UserManager, FileSystemManager, LibraryMonitor, ConfigurationManager, LogManager.GetLogger("DeviceManager")); RegisterSingleInstance(DeviceManager); - SessionManager = new SessionManager(UserDataManager, ServerConfigurationManager, Logger, UserRepository, LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, ItemRepository, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager); + SessionManager = new SessionManager(UserDataManager, Logger, UserRepository, LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, ItemRepository, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager); RegisterSingleInstance(SessionManager); var newsService = new Implementations.News.NewsService(ApplicationPaths, JsonSerializer); diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index eb44f6d35..6e3439079 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -8,6 +8,7 @@ using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Plugins; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Net; using MediaBrowser.Model.Serialization; using ServiceStack; using ServiceStack.Web; diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 6dfb39b4c..8f4e916dd 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.523 + 3.0.530 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 49fd835c3..01fe110fb 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.523 + 3.0.530 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index d5164f025..86a6d19d3 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.523 + 3.0.530 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 297b0f07e..686396f89 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.523 + 3.0.530 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 52caa0def1a0afe21674a965b85a9e773ec797a2 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 27 Dec 2014 01:24:46 -0500 Subject: sync updates --- .../MediaBrowser.Model.Portable.csproj | 3 ++ .../MediaBrowser.Model.net35.csproj | 3 ++ MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + MediaBrowser.Model/Sync/DeviceFileInfo.cs | 9 ++++++ MediaBrowser.Model/Sync/ItemFIleInfo.cs | 15 ++++++---- MediaBrowser.Model/Users/UserAction.cs | 1 + .../Localization/JavaScript/ar.json | 8 ++++-- .../Localization/JavaScript/ca.json | 8 ++++-- .../Localization/JavaScript/cs.json | 8 ++++-- .../Localization/JavaScript/da.json | 8 ++++-- .../Localization/JavaScript/de.json | 20 +++++++------ .../Localization/JavaScript/el.json | 8 ++++-- .../Localization/JavaScript/en_GB.json | 8 ++++-- .../Localization/JavaScript/en_US.json | 9 ++++-- .../Localization/JavaScript/es.json | 8 ++++-- .../Localization/JavaScript/es_MX.json | 8 ++++-- .../Localization/JavaScript/fi.json | 8 ++++-- .../Localization/JavaScript/fr.json | 10 ++++--- .../Localization/JavaScript/he.json | 8 ++++-- .../Localization/JavaScript/hr.json | 8 ++++-- .../Localization/JavaScript/it.json | 8 ++++-- .../Localization/JavaScript/kk.json | 8 ++++-- .../Localization/JavaScript/ms.json | 8 ++++-- .../Localization/JavaScript/nb.json | 8 ++++-- .../Localization/JavaScript/nl.json | 20 +++++++------ .../Localization/JavaScript/pl.json | 8 ++++-- .../Localization/JavaScript/pt_BR.json | 8 ++++-- .../Localization/JavaScript/pt_PT.json | 16 ++++++----- .../Localization/JavaScript/ru.json | 12 ++++---- .../Localization/JavaScript/sv.json | 8 ++++-- .../Localization/JavaScript/tr.json | 8 ++++-- .../Localization/JavaScript/vi.json | 8 ++++-- .../Localization/JavaScript/zh_CN.json | 8 ++++-- .../Localization/JavaScript/zh_TW.json | 8 ++++-- .../Localization/Server/ar.json | 19 +++++++++++-- .../Localization/Server/ca.json | 19 +++++++++++-- .../Localization/Server/cs.json | 19 +++++++++++-- .../Localization/Server/da.json | 19 +++++++++++-- .../Localization/Server/de.json | 19 +++++++++++-- .../Localization/Server/el.json | 19 +++++++++++-- .../Localization/Server/en_GB.json | 19 +++++++++++-- .../Localization/Server/en_US.json | 19 +++++++++++-- .../Localization/Server/es.json | 19 +++++++++++-- .../Localization/Server/es_MX.json | 19 +++++++++++-- .../Localization/Server/fi.json | 19 +++++++++++-- .../Localization/Server/fr.json | 19 +++++++++++-- .../Localization/Server/he.json | 19 +++++++++++-- .../Localization/Server/hr.json | 19 +++++++++++-- .../Localization/Server/it.json | 19 +++++++++++-- .../Localization/Server/kk.json | 25 ++++++++++++---- .../Localization/Server/ko.json | 19 +++++++++++-- .../Localization/Server/ms.json | 19 +++++++++++-- .../Localization/Server/nb.json | 19 +++++++++++-- .../Localization/Server/nl.json | 25 ++++++++++++---- .../Localization/Server/pl.json | 19 +++++++++++-- .../Localization/Server/pt_BR.json | 19 +++++++++++-- .../Localization/Server/pt_PT.json | 33 ++++++++++++++++------ .../Localization/Server/ru.json | 31 ++++++++++++++------ .../Localization/Server/sv.json | 19 +++++++++++-- .../Localization/Server/tr.json | 19 +++++++++++-- .../Localization/Server/vi.json | 19 +++++++++++-- .../Localization/Server/zh_CN.json | 19 +++++++++++-- .../Localization/Server/zh_TW.json | 19 +++++++++++-- .../Sync/SyncManager.cs | 6 ++++ Nuget/MediaBrowser.Common.Internal.nuspec | 4 +-- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +-- 68 files changed, 711 insertions(+), 191 deletions(-) create mode 100644 MediaBrowser.Model/Sync/DeviceFileInfo.cs (limited to 'Nuget/MediaBrowser.Model.Signed.nuspec') diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 68df777bd..919e2f8ee 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -1040,6 +1040,9 @@ Session\UserDataChangeInfo.cs + + Sync\DeviceFileInfo.cs + Sync\ItemFIleInfo.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index bc4e58233..9aab90766 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -999,6 +999,9 @@ Session\UserDataChangeInfo.cs + + Sync\DeviceFileInfo.cs + Sync\ItemFIleInfo.cs diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 47a31853b..cf6aaa529 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -367,6 +367,7 @@ + diff --git a/MediaBrowser.Model/Sync/DeviceFileInfo.cs b/MediaBrowser.Model/Sync/DeviceFileInfo.cs new file mode 100644 index 000000000..bc93b69bc --- /dev/null +++ b/MediaBrowser.Model/Sync/DeviceFileInfo.cs @@ -0,0 +1,9 @@ + +namespace MediaBrowser.Model.Sync +{ + public class DeviceFileInfo + { + public string Path { get; set; } + public string Name { get; set; } + } +} diff --git a/MediaBrowser.Model/Sync/ItemFIleInfo.cs b/MediaBrowser.Model/Sync/ItemFIleInfo.cs index 6ae9ceb18..8095b0cff 100644 --- a/MediaBrowser.Model/Sync/ItemFIleInfo.cs +++ b/MediaBrowser.Model/Sync/ItemFIleInfo.cs @@ -10,19 +10,24 @@ namespace MediaBrowser.Model.Sync /// The type. public ItemFileType Type { get; set; } /// - /// Gets or sets the item identifier. - /// - /// The item identifier. - public string ItemId { get; set; } - /// /// Gets or sets the name. /// /// The name. public string Name { get; set; } /// + /// Gets or sets the path. + /// + /// The path. + public string Path { get; set; } + /// /// Gets or sets the type of the image. /// /// The type of the image. public ImageType ImageType { get; set; } + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public string ItemId { get; set; } } } diff --git a/MediaBrowser.Model/Users/UserAction.cs b/MediaBrowser.Model/Users/UserAction.cs index 93c22d726..680835364 100644 --- a/MediaBrowser.Model/Users/UserAction.cs +++ b/MediaBrowser.Model/Users/UserAction.cs @@ -4,6 +4,7 @@ namespace MediaBrowser.Model.Users { public class UserAction { + public string Id { get; set; } public string ServerId { get; set; } public string UserId { get; set; } public string ItemId { get; set; } diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json index 4246a1ac0..f9db86337 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json index 1617535c2..e12d1140d 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json index 673dc37cd..025e5f1f1 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(zru\u0161eno)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json index 2adcf1f35..1d6114d93 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json index 3ea1bcbf1..f630a4460 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json @@ -40,6 +40,7 @@ "LabelStopping": "Stoppe", "LabelCancelled": "(abgebrochen)", "LabelFailed": "(fehlgeschlagen)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Durch herunterfahrenden Server abgebrochen)", "LabelScheduledTaskLastRan": "Zuletzt ausgef\u00fchrt vor: {0}. Ben\u00f6tigte Zeit: {1}.", "HeaderDeleteTaskTrigger": "Entferne Aufgabenausl\u00f6ser", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Nach rechts", "ButtonBrowseOnlineImages": "Durchsuche Onlinebilder", "HeaderDeleteItem": "L\u00f6sche Element", - "ConfirmDeleteItem": "Bist du dir sicher dieses Element aus deiner Bibliothek zu l\u00f6schen?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Bitte gib einen Namen oder eine externe Id an.", "MessageValueNotCorrect": "Der eingegeben Wert ist nicht korrekt. Bitte versuche es noch einmal.", "MessageItemSaved": "Element gespeichert", @@ -396,7 +397,7 @@ "LabelYear": "Jahr:", "LabelDateOfBirth": "Geburtsatum:", "LabelBirthYear": "Geburtsjahr:", - "LabelBirthDate": "Birth date:", + "LabelBirthDate": "Geburtsdatum:", "LabelDeathDate": "Todesdatum:", "HeaderRemoveMediaLocation": "Entferne Medienquelle", "MessageConfirmRemoveMediaLocation": "Bist du dir sicher diese Medienquelle entfernen zu wollen?", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Medienquellen", "LabelFolderTypeValue": "Verzeichnistyp: {0}", "LabelPathSubstitutionHelp": "Optional: Die Pfadersetzung kann Serverpfade zu Netzwerkfreigaben umleiten, die von Endger\u00e4ten f\u00fcr die direkte Wiedergabe genutzt werden k\u00f6nnen.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Gemischte Inhalte", "FolderTypeMovies": "Filme", "FolderTypeMusic": "Musik", "FolderTypeAdultVideos": "Videos f\u00fcr Erwachsene", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "und steuert einfach andere Ger\u00e4te und Media Browser Anwendungen", "MessageEnjoyYourStay": "Genie\u00dfe deinen Aufenthalt", "DashboardTourDashboard": "Die Server\u00fcbersicht erlaubt es dir deinen Server und dessen Benutzer im Blick zu behalten. Somit wei\u00dft du immer wer gerade was macht und wo er sich befindet.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Erstelle einfach Benutzeraccounts f\u00fcr Freunde und Familie. Jeder mit seinen individuellen Einstellungen bei Berechtigungen, Blibliothekenzugriff, Kindersicherung und mehr.", "DashboardTourCinemaMode": "Der Kino-Modus bringt das Kinoerlebnis direkt in dein Wohnzimmer, mit der F\u00e4higkeit Trailer und benutzerdefinierte Intros vor dem Hauptfilm zu spielen.", "DashboardTourChapters": "Aktiviere die Bildgenerierung f\u00fcr die Kapitel deiner Videos f\u00fcr eine bessere Darstellung w\u00e4hrend des Ansehens.", @@ -643,12 +645,12 @@ "OptionLow": "Niedrig", "HeaderSettings": "Einstellungen", "OptionAutomaticallySyncNewContent": "Synchronisiere neue Inhalte automatisch", - "OptionAutomaticallySyncNewContentHelp": "New content added to this category will be automatically synced to the device.", + "OptionAutomaticallySyncNewContentHelp": "Neue Inhalte dieser Kategorie werden automatisch mit dem Ger\u00e4t synchronisiert.", "OptionSyncUnwatchedVideosOnly": "Synchronisiere nur ungesehene Videos.", "OptionSyncUnwatchedVideosOnlyHelp": "Nur ungesehene Video werden synchronisiert. Videos werden entfernt sobald diese auf dem Ger\u00e4t angeschaut wurden.", - "LabelItemLimit": "Item limit:", - "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", - "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", - "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "LabelItemLimit": "Maximale Anzahl:", + "LabelItemLimitHelp": "Optional. Legen Sie die maximale Anzahl der zu synchronisierenden Eintr\u00e4ge fest.", + "MessageBookPluginRequired": "Setzt die Installation des Bookshelf-Plugins voraus.", + "MessageGamePluginRequired": "Setzt die Installation des GameBrowser-Plugins voraus.", + "MessageMixedContentHelp": "Inhalt wird als Verzeichnisstruktur angezeigt." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json index cba4166bc..83d75387f 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json index 04a669fe2..3bdc566fa 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json index ad12450df..92b5d3886 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,8 +250,9 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", + "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", "OptionEnded": "Ended", "OptionContinuing": "Continuing", @@ -411,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -587,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -649,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json index 8e8904ff5..470c2da3e 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json @@ -40,6 +40,7 @@ "LabelStopping": "Deteniendo", "LabelCancelled": "(cancelado)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Abortado por cierre del servidor)", "LabelScheduledTaskLastRan": "\u00daltima ejecuci\u00f3n {0}, teniendo {1}.", "HeaderDeleteTaskTrigger": "Eliminar tarea de activaci\u00f3n", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Mover derecha", "ButtonBrowseOnlineImages": "Navegar im\u00e1genes online", "HeaderDeleteItem": "Borrar elemento", - "ConfirmDeleteItem": "\u00bfEst\u00e1 seguro que desea borrar este elemento de su biblioteca?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Introduzca un nombre o un identificador externo.", "MessageValueNotCorrect": "El valor introducido no es correcto. Intentelo de nuevo.", "MessageItemSaved": "Elemento grabado.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json index 972fd07b6..8b4346aac 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -40,6 +40,7 @@ "LabelStopping": "Deteniendo", "LabelCancelled": "(cancelado)", "LabelFailed": "(Fallido)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Abortada por apagado del servidor)", "LabelScheduledTaskLastRan": "Ejecutado hace {0}, tomando {1}.", "HeaderDeleteTaskTrigger": "Borrar Disparador de Tarea", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Mover a la derecha", "ButtonBrowseOnlineImages": "Buscar im\u00e1genes en l\u00ednea", "HeaderDeleteItem": "Eliminar \u00cdtem", - "ConfirmDeleteItem": "\u00bfEst\u00e1 seguro de querer eleiminar este \u00edtem de su biblioteca?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Por favor ingrese un nombre o id externo.", "MessageValueNotCorrect": "El valor ingresado no es correcto. Intente nuevamente por favor.", "MessageItemSaved": "\u00cdtem guardado.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Ubicaciones de Medios", "LabelFolderTypeValue": "Tipo de carpeta: {0}", "LabelPathSubstitutionHelp": "Opcional: La sustituci\u00f3n de trayectoras puede mapear trayectorias del servidor a recursos de red comaprtidos que los clientes pueden acceder para reproducir de manera directa.", - "FolderTypeMixed": "Videos mezclados", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Pel\u00edculas", "FolderTypeMusic": "M\u00fasica", "FolderTypeAdultVideos": "Videos para adultos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "y controla f\u00e1cilmente otros dispositivos y apps de Media Browser", "MessageEnjoyYourStay": "Disfrute su visita", "DashboardTourDashboard": "El panel de control del servidor le permite monitorear su servidor y sus usuarios. Siempre sabr\u00e1 quien est\u00e1 haciendo qu\u00e9 y donde se encuentran.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Cree cuentas f\u00e1cilmente para sus amigos y familia, cada una con sus propios permisos, accesos a la biblioteca, controles parentales y m\u00e1s.", "DashboardTourCinemaMode": "El modo cine trae la experiencia del cine directo a su sala de TV con la capacidad de reproducir avances e intros personalizados antes de la presentaci\u00f3n estelar.", "DashboardTourChapters": "Active la generaci\u00f3n de im\u00e1genes de cap\u00edtulos de sus videos para una presentaci\u00f3n m\u00e1s agradable al desplegar.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Opcional. Establece un l\u00edmite en el n\u00famero de \u00edtems que ser\u00e1n sincronizados.", "MessageBookPluginRequired": "Requiere instalaci\u00f3n del complemento Bookshelf", "MessageGamePluginRequired": "Requiere instalaci\u00f3n del complemento de GameBrowser", - "MessageMixedContentHelp": "El contenido ser\u00e1 desplegado como una estructura de carpetas simples" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json index a5c584321..47be20fee 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json index 7a2f4ae78..6d36705d4 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json @@ -40,6 +40,7 @@ "LabelStopping": "En cours d'arr\u00eat", "LabelCancelled": "(annul\u00e9)", "LabelFailed": "(\u00e9chou\u00e9)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Annul\u00e9 par fermeture du serveur)", "LabelScheduledTaskLastRan": "Derni\u00e8re ex\u00e9cution {0}, dur\u00e9e {1}.", "HeaderDeleteTaskTrigger": "Supprimer le d\u00e9clencheur de t\u00e2che", @@ -249,7 +250,7 @@ "ButtonMoveRight": "D\u00e9placer \u00e0 droite", "ButtonBrowseOnlineImages": "Parcourir les images en ligne", "HeaderDeleteItem": "Supprimer l'item", - "ConfirmDeleteItem": "\u00cates-vous s\u00fbr de vouloir supprimer cet item de votre biblioth\u00e8que ?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Merci de saisir un nom ou un ID externe.", "MessageValueNotCorrect": "La valeur saisie est incorrecte. Merci de r\u00e9\u00e9ssayer.", "MessageItemSaved": "Item sauvegard\u00e9.", @@ -396,7 +397,7 @@ "LabelYear": "Ann\u00e9e :", "LabelDateOfBirth": "Date de naissance :", "LabelBirthYear": "Ann\u00e9e de naissance :", - "LabelBirthDate": "Birth date:", + "LabelBirthDate": "Date de naissance :", "LabelDeathDate": "Date de d\u00e9c\u00e8s :", "HeaderRemoveMediaLocation": "Supprimer l'emplacement m\u00e9dia", "MessageConfirmRemoveMediaLocation": "Etes vous sur de vouloir supprimer cet emplacement?", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Emplacement des M\u00e9dias", "LabelFolderTypeValue": "Type de r\u00e9pertoire: {0}", "LabelPathSubstitutionHelp": "Optionnel: La substitution de chemin peut rediriger les r\u00e9pertoires serveurs vers des partages r\u00e9seau afin que le client acc\u00e8de directement \u00e0 la lecture.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Films", "FolderTypeMusic": "Musique", "FolderTypeAdultVideos": "Vid\u00e9os Adultes", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "et controles facilement les autres p\u00e9riph\u00e9riques et applications Medi Browser", "MessageEnjoyYourStay": "Profitez en bien", "DashboardTourDashboard": "Le tableau de bord du serveur vous permet de g\u00e9rer votre serveur et vos utilisateurs. Vous saurez toujours qui fait quoi et o\u00f9 ils sont.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Cr\u00e9er facilement des comptes utilisateurs pour vos amis et votre famille, chacun avec ses propres droits, biblioth\u00e8ques accessibles, contr\u00f4le parental et plus encore.", "DashboardTourCinemaMode": "Le mode cin\u00e9ma apporte l'exp\u00e9rience du cin\u00e9ma directement dans votre salon avec l'abilit\u00e9 de lire les bandes-annonces et les introductions personnalis\u00e9es avant le programme principal.", "DashboardTourChapters": "Autoriser la g\u00e9n\u00e9ration des images des chapitres de vos vid\u00e9os pour une pr\u00e9sentation plus agr\u00e9able pendant le visionnage", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json index 8aa10f97a..f0de0d006 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json index 724db6574..7ab7fa28c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json index 99349b8a8..f0664075c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json @@ -40,6 +40,7 @@ "LabelStopping": "Sto fermando", "LabelCancelled": "(cancellato)", "LabelFailed": "(fallito)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Interrotto dalla chiusura del server)", "LabelScheduledTaskLastRan": "Ultima esecuzione {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Elimina Operazione pianificata", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Muovi a destra", "ButtonBrowseOnlineImages": "Sfoglia le immagini Online", "HeaderDeleteItem": "Elimina elemento", - "ConfirmDeleteItem": "Sei sicuro di voler eliminare questo elemento dalla tua libreria?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Inserisci il nome o id esterno.", "MessageValueNotCorrect": "Il valore inserito non \u00e8 corretto.Riprova di nuovo.", "MessageItemSaved": "Elemento salvato.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Posizioni Media", "LabelFolderTypeValue": "Tipo cartella: {0}", "LabelPathSubstitutionHelp": "Opzionale: cambio Path pu\u00f2 mappare i percorsi del server a condivisioni di rete che i clienti possono accedere per la riproduzione diretta.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Film", "FolderTypeMusic": "Musica", "FolderTypeAdultVideos": "Video per adulti", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "e controlla facilmente altri dispositivi e applicazioni Media Browser", "MessageEnjoyYourStay": "Godetevi il vostro soggiorno", "DashboardTourDashboard": "Il pannello di controllo del server consente di monitorare il vostro server e gli utenti. Potrai sempre sapere chi sta facendo cosa e dove sono.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Facile creazione di account utente per i vostri amici e la famiglia, ognuno con le proprie autorizzazioni, accesso alla libreria, controlli parentali e altro ancora.", "DashboardTourCinemaMode": "Modalit\u00e0 Cinema porta l'esperienza del teatro direttamente nel tuo salotto con la possibilit\u00e0 di giocare trailer e intro personalizzati prima la caratteristica principale.", "DashboardTourChapters": "Abilita capitolo generazione di immagini per i vostri video per una presentazione pi\u00f9 gradevole durante la visualizzazione.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json index 1eb8a277a..3a29b18c5 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json @@ -40,6 +40,7 @@ "LabelStopping": "\u0422\u043e\u049b\u0442\u0430\u0442\u044b\u043b\u0443\u0434\u0430", "LabelCancelled": "(\u0431\u043e\u043b\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0434\u044b)", "LabelFailed": "(\u0441\u04d9\u0442\u0441\u0456\u0437)", + "ButtonHelp": "Help", "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", @@ -249,7 +250,7 @@ "ButtonMoveRight": "\u041e\u04a3\u0493\u0430 \u0436\u044b\u043b\u0436\u044b\u0442\u0443", "ButtonBrowseOnlineImages": "\u0416\u0435\u043b\u0456\u0434\u0435\u0433\u0456 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u0448\u043e\u043b\u0443", "HeaderDeleteItem": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0456 \u0436\u043e\u044e", - "ConfirmDeleteItem": "\u0428\u044b\u043d\u044b\u043c\u0435\u043d \u043e\u0441\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0456 \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u0434\u0430\u043d \u0436\u043e\u044e \u049b\u0430\u0436\u0435\u0442 \u043f\u0435?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "\u0410\u0442\u044b\u043d \u043d\u0435\u043c\u0435\u0441\u0435 \u0441\u044b\u0440\u0442\u049b\u044b ID \u0435\u043d\u0433\u0456\u0437\u0456\u04a3\u0456\u0437.", "MessageValueNotCorrect": "\u0415\u043d\u0433\u0456\u0437\u0456\u043b\u0433\u0435\u043d \u043c\u04d9\u043d \u0434\u04b1\u0440\u044b\u0441 \u0435\u043c\u0435\u0441. \u04d8\u0440\u0435\u043a\u0435\u0442\u0442\u0456 \u049b\u0430\u0439\u0442\u0430\u043b\u0430\u04a3\u044b\u0437.", "MessageItemSaved": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0430\u049b\u0442\u0430\u043b\u0434\u044b.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "\u0422\u0430\u0441\u0443\u0448\u044b \u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u043e\u0440\u043d\u0430\u043b\u0430\u0441\u0443\u043b\u0430\u0440\u044b", "LabelFolderTypeValue": "\u049a\u0430\u043b\u0442\u0430 \u0442\u04af\u0440\u0456: {0}", "LabelPathSubstitutionHelp": "\u049a\u0430\u043b\u0430\u0443 \u0431\u043e\u0439\u044b\u043d\u0448\u0430: \u0416\u043e\u043b \u0430\u043b\u043c\u0430\u0441\u0442\u044b\u0440\u0443 \u0430\u0440\u049b\u044b\u043b\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0434\u0435\u0433\u0456 \u0436\u043e\u043b\u0434\u0430\u0440\u0434\u044b \u0442\u0456\u043a\u0435\u043b\u0435\u0439 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043a\u043b\u0438\u0435\u043d\u0442\u0442\u0435\u0440 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0430 \u0430\u043b\u0430\u0442\u044b\u043d \u0436\u0435\u043b\u0456\u043b\u0456\u043a \u049b\u043e\u0440 \u043a\u04e9\u0437\u0434\u0435\u0440\u0456\u043c\u0435\u043d \u0431\u0430\u0439\u043b\u0430\u043d\u044b\u0441\u0442\u044b\u0440\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d.", - "FolderTypeMixed": "\u0410\u0440\u0430\u043b\u0430\u0441 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440", + "FolderTypeMixed": "\u0410\u0440\u0430\u043b\u0430\u0441 \u043c\u0430\u0437\u043c\u04b1\u043d", "FolderTypeMovies": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440", "FolderTypeMusic": "\u041c\u0443\u0437\u044b\u043a\u0430", "FolderTypeAdultVideos": "\u0415\u0440\u0435\u0441\u0435\u043a\u0442\u0456\u043a \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "\u0441\u043e\u043d\u044b\u043c\u0435\u043d \u049b\u0430\u0442\u0430\u0440 \u0431\u0430\u0441\u049b\u0430 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0430\u0434\u044b", "MessageEnjoyYourStay": "\u0416\u0430\u0493\u044b\u043c\u0434\u044b \u0435\u0440\u043c\u0435\u043a \u0435\u0442\u0456\u04a3\u0456\u0437", "DashboardTourDashboard": "\u0421\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 \u0431\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440\u0434\u044b \u0431\u0430\u049b\u044b\u043b\u0430\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u0433\u0456\u043d\u0435 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u041a\u0456\u043c \u043d\u0435 \u0456\u0441\u0442\u0435\u0433\u0435\u043d\u0456\u043d \u0436\u04d9\u043d\u0435 \u049b\u0430\u0439\u0434\u0430 \u0442\u04b1\u0440\u0493\u0430\u043d\u044b\u043d \u0431\u0456\u043b\u0456\u043f \u0436\u0430\u0442\u0430\u0441\u044b\u0437.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "\u0414\u043e\u0441\u0442\u0430\u0440\u044b\u04a3\u044b\u0437 \u0431\u0435\u043d \u043e\u0442\u0431\u0430\u0441\u044b\u04a3\u044b\u0437 \u04d9\u0440\u049b\u0430\u0439\u0441\u044b\u043d\u0430 \u04e9\u0437\u0456\u043d\u0456\u04a3 \u049b\u04b1\u049b\u044b\u049b\u0442\u0430\u0440\u044b, \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443\u044b, \u043c\u0430\u0437\u043c\u04b1\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443\u044b \u0436\u04d9\u043d\u0435 \u0442.\u0431. \u0431\u0430\u0440 \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u043b\u0435\u0440\u0456\u043d \u0436\u0435\u04a3\u0456\u043b \u0436\u0430\u0441\u0430\u04a3\u044b\u0437.", "DashboardTourCinemaMode": "\u041a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440 \u0440\u0435\u0436\u0456\u043c\u0456 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u043a\u04e9\u0440\u043d\u0435\u0443\u0434\u0456 \u0431\u0430\u0441\u0442\u044b \u049b\u0430\u0441\u0438\u0435\u0442\u0442\u0456\u04a3 \u0430\u043b\u0434\u044b\u043d\u0434\u0430 \u043e\u0439\u043d\u0430\u0442\u0443 \u049b\u0430\u0431\u0456\u043b\u0435\u0442\u0456\u043c\u0435\u043d \u043a\u0438\u043d\u043e \u043a\u04e9\u0440\u0441\u0435\u0442\u0435\u0442\u0456\u043d \u0437\u0430\u043b \u04d9\u0441\u0435\u0440\u0456\u043d \u049b\u043e\u043d\u0430\u049b\u0436\u0430\u0439\u044b\u04a3\u044b\u0437\u0493\u0430 \u0442\u0456\u043a\u0435\u043b\u0435\u0439 \u0436\u0435\u0442\u043a\u0456\u0437\u0435\u0434\u0456.", "DashboardTourChapters": "\u0411\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0434\u0456 \u049b\u0430\u0440\u0430\u0493\u0430\u043d \u043a\u0435\u0437\u0434\u0435 \u04b1\u043d\u0430\u043c\u0434\u044b\u043b\u0430\u0443 \u043a\u04e9\u0440\u0441\u0435\u0442\u0456\u043c \u04af\u0448\u0456\u043d \u0441\u0430\u0445\u043d\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d \u0442\u0443\u0434\u044b\u0440\u0443\u044b\u043d \u049b\u043e\u0441\u044b\u04a3\u044b\u0437.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "\u049a\u0430\u043b\u0430\u0443 \u0431\u043e\u0439\u044b\u043d\u0448\u0430: \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u043b\u0430\u0442\u044b\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440 \u0441\u0430\u043d\u044b \u04af\u0448\u0456\u043d \u0448\u0435\u043a\u0442\u0456 \u043e\u0440\u043d\u0430\u0442\u044b\u04a3\u044b\u0437.", "MessageBookPluginRequired": "Bookshelf \u043f\u043b\u0430\u0433\u0438\u043d\u0456\u043d \u043e\u0440\u043d\u0430\u0442\u0443\u0434\u044b \u049b\u0430\u0436\u0435\u0442 \u0435\u0442\u0435\u0434\u0456", "MessageGamePluginRequired": "GameBrowser \u043f\u043b\u0430\u0433\u0438\u043d\u0456\u043d \u043e\u0440\u043d\u0430\u0442\u0443\u0434\u044b \u049b\u0430\u0436\u0435\u0442 \u0435\u0442\u0435\u0434\u0456", - "MessageMixedContentHelp": "\u041c\u0430\u0437\u043c\u04b1\u043d \u0436\u0430\u043b\u043f\u044b \u049b\u0430\u043b\u0442\u0430 \u049b\u04b1\u0440\u044b\u043b\u044b\u043c\u044b \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0431\u0435\u043d\u0435\u043b\u0435\u043d\u0435\u0434\u0456" + "MessageMixedContentHelp": "\u041c\u0430\u0437\u043c\u04b1\u043d \u043a\u04d9\u0434\u0456\u043c\u0433\u0456 \u049b\u0430\u043b\u0442\u0430 \u049b\u04b1\u0440\u044b\u043b\u044b\u043c\u044b \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0435\u0434\u0456" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json index a231f4aa6..f09e00d60 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json index 799a81081..6cf511154 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json @@ -40,6 +40,7 @@ "LabelStopping": "Stoppe", "LabelCancelled": "(kansellert)", "LabelFailed": "(Feilet)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Avbrutt av server shutdown)", "LabelScheduledTaskLastRan": "Sist kj\u00f8rt {0}, tar {1}.", "HeaderDeleteTaskTrigger": "Slett Oppgave Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Flytt til h\u00f8yre", "ButtonBrowseOnlineImages": "Bla igjennom bilder online", "HeaderDeleteItem": "Slett element", - "ConfirmDeleteItem": "Er du sikker p\u00e5 at du vil slette dette elementet fra ditt bibliotek?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Vennligst skriv ett navn eller en ekstern id.", "MessageValueNotCorrect": "Verdien som ble skrevet er ikke korrekt. Vennligst pr\u00f8v igjen.", "MessageItemSaved": "Element lagret.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Steder", "LabelFolderTypeValue": "Mappe type: {0}", "LabelPathSubstitutionHelp": "Valgfritt: Sti erstatter kan koble server stier til nettverkressurser som klienter har tilgang til for direkte avspilling.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Filmer", "FolderTypeMusic": "Musikk", "FolderTypeAdultVideos": "Voksen videoer", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "og enkelt styrer andre enheter og mediabrowser apps", "MessageEnjoyYourStay": "Nyt oppholdet", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Opprett bruker kontoer enkelt for dine venner og familie, hver med deres egne rettigheter, bibliotek tillgang, foreldre kontroll og mere til.", "DashboardTourCinemaMode": "Kino-modus bringer kinoopplevelsen direkte til din stue med muligheten til \u00e5 spille trailere og tilpassede introer f\u00f8r filmen begynner.", "DashboardTourChapters": "Aktiver generering av kapittel bilder for dine videoer for en mer behagelig presentasjon mens du ser p\u00e5.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json index cf87f7590..748790ddf 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json @@ -40,6 +40,7 @@ "LabelStopping": "Stoppen", "LabelCancelled": "(Geannuleerd)", "LabelFailed": "(mislukt)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Afgebroken door afsluiten van de server)", "LabelScheduledTaskLastRan": "Laatste keer {0}, duur {1}.", "HeaderDeleteTaskTrigger": "Verwijderen Taak Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Verplaats naar rechts", "ButtonBrowseOnlineImages": "Blader door online afbeeldingen", "HeaderDeleteItem": "Item verwijderen", - "ConfirmDeleteItem": "Weet u zeker dat u dit item uit uw bibliotheek wilt verwijderen?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Voer een naam of een externe Id in", "MessageValueNotCorrect": "De ingevoerde waarde is niet correct. Probeer het opnieuw.", "MessageItemSaved": "Item opgeslagen.", @@ -396,7 +397,7 @@ "LabelYear": "Jaar:", "LabelDateOfBirth": "Geboortedatum:", "LabelBirthYear": "Geboorte jaar:", - "LabelBirthDate": "Birth date:", + "LabelBirthDate": "Geboortedatum:", "LabelDeathDate": "Overlijdens datum:", "HeaderRemoveMediaLocation": "Verwijder media locatie", "MessageConfirmRemoveMediaLocation": "Weet je zeker dat je deze locatie wilt verwijderen?", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locaties", "LabelFolderTypeValue": "Map type: {0}", "LabelPathSubstitutionHelp": "Optioneel: Pad vervanging kan server paden naar netwerk locaties verwijzen zodat clients direct kunnen afspelen.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Gemengde inhoud", "FolderTypeMovies": "Films", "FolderTypeMusic": "Muziek", "FolderTypeAdultVideos": "Adult video's", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "en kan elke andere Media Browser app bedienen", "MessageEnjoyYourStay": "Geniet van uw verblijf", "DashboardTourDashboard": "Het server-dashboard steld u in staat uw server en uw gebruikers te monitoren . U zult altijd weten wie wat doet en waar ze zijn.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Maak gemakkelijk gebruikersaccounts voor uw vrienden en familie, elk met hun eigen machtigingen, bibliotheek toegang, ouderlijk toezicht en meer.", "DashboardTourCinemaMode": "Cinema mode brengt de theater ervaring naar je woonkamer met de mogelijkheid om trailers en eigen intro's voor de film af te spelen", "DashboardTourChapters": "Schakel hoofdstuk afbeeldingen genereren in voor uw video's voor een aantrekkelijker presentatie tijdens het kijken.", @@ -643,12 +645,12 @@ "OptionLow": "Laag", "HeaderSettings": "Instellingen", "OptionAutomaticallySyncNewContent": "Nieuwe inhoud automatisch synchroniseren", - "OptionAutomaticallySyncNewContentHelp": "New content added to this category will be automatically synced to the device.", + "OptionAutomaticallySyncNewContentHelp": "Nieuwe inhoud toegevoegd aan deze categorie wordt automatisch gesynchroniseerd met het apparaat.", "OptionSyncUnwatchedVideosOnly": "Synchroniseer alleen ongeziene video's", "OptionSyncUnwatchedVideosOnlyHelp": "Alleen ongeziene video's zulle gesynchroniseerd worden en van het apparaat verwijderd worden als ze gezien zijn.", - "LabelItemLimit": "Item limit:", - "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", - "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", - "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "LabelItemLimit": "Item limiet:", + "LabelItemLimitHelp": "Optioneel. Een limiet stellen aan het aantal items die zullen worden gesynchroniseerd.", + "MessageBookPluginRequired": "Vereist installatie van de Bookshelf plugin", + "MessageGamePluginRequired": "Vereist installatie van de GameBrowser plugin", + "MessageMixedContentHelp": "Inhoud zal worden weergegeven als een gewone mappenstructuur" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json index d25d5bbbb..81b2a8c99 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json index cab1d3620..fb21a3383 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json @@ -40,6 +40,7 @@ "LabelStopping": "Parando", "LabelCancelled": "(cancelado)", "LabelFailed": "(falhou)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Abortada pelo desligamento do servidor)", "LabelScheduledTaskLastRan": "\u00daltima execu\u00e7\u00e3o {0}, demorando {1}.", "HeaderDeleteTaskTrigger": "Excluir Disparador da Tarefa", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Mover \u00e0 direita", "ButtonBrowseOnlineImages": "Procurar imagens online", "HeaderDeleteItem": "Excluir item", - "ConfirmDeleteItem": "Deseja realmente excluir este item de sua biblioteca?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Por favor, digite um nome ou Id externo.", "MessageValueNotCorrect": "O valor digitado n\u00e3o est\u00e1 correto. Por favor, tente novamente.", "MessageItemSaved": "Item salvo.", @@ -412,7 +413,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.", - "FolderTypeMixed": "V\u00eddeos misturados", + "FolderTypeMixed": "Conte\u00fado misto", "FolderTypeMovies": "Filmes", "FolderTypeMusic": "M\u00fasica", "FolderTypeAdultVideos": "V\u00eddeos adultos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "e controle facilmente outros dispositivos e apps do Media Browser", "MessageEnjoyYourStay": "Divirta-se", "DashboardTourDashboard": "O painel do servidor permite monitorar seu servidor e seus usu\u00e1rios. Voc\u00ea sempre poder\u00e1 saber quem est\u00e1 fazendo o qu\u00ea e onde est\u00e3o.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Crie facilmente contas de usu\u00e1rios para seus amigos e fam\u00edlia, cada um com sua permiss\u00e3o, acesso \u00e0 biblioteca, controle parental e mais.", "DashboardTourCinemaMode": "O modo cinema traz a experi\u00eancia do cinema para sua sala, permitindo reproduzir trailers e intros personalizadas antes da fun\u00e7\u00e3o principal.", "DashboardTourChapters": "Ative a gera\u00e7\u00e3o de imagem do cap\u00edtulo para seus v\u00eddeos para ter uma apresenta\u00e7\u00e3o mais prazeirosa.", @@ -650,5 +652,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", - "MessageMixedContentHelp": "O conte\u00fado ser\u00e1 exibido como uma estrutura de pasta simples" + "MessageMixedContentHelp": "O conte\u00fado ser\u00e1 exibido em uma estrutura de pasta simples" } \ 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 30ddec80c..5d9d5041b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json @@ -36,10 +36,11 @@ "LabelMovie": "Movie", "LabelMusicVideo": "Music Video", "LabelEpisode": "Episode", - "LabelSeries": "Series", + "LabelSeries": "S\u00e9rie", "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", - "LabelFailed": "(failed)", + "LabelFailed": "(falhou)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -63,7 +64,7 @@ "ButtonPlay": "Reproduzir", "ButtonEdit": "Editar", "ButtonQueue": "Queue", - "ButtonPlayTrailer": "Play trailer", + "ButtonPlayTrailer": "Reproduzir trailer", "ButtonPlaylist": "Playlist", "ButtonPreviousTrack": "Faixa Anterior", "LabelEnabled": "Enabled", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -384,7 +385,7 @@ "PersonTypePerson": "Person", "LabelTitleDisplayOrder": "Title display order:", "OptionSortName": "Sort name", - "OptionReleaseDate": "Release date", + "OptionReleaseDate": "Data de lan\u00e7amento", "LabelSeasonNumber": "N\u00famero da temporada:", "LabelDiscNumber": "Disc number", "LabelParentNumber": "Parent number", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json index f91bc38d1..a87478359 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json @@ -40,6 +40,7 @@ "LabelStopping": "\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430", "LabelCancelled": "(\u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043e)", "LabelFailed": "(\u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e)", + "ButtonHelp": "Help", "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", @@ -249,7 +250,7 @@ "ButtonMoveRight": "\u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0432\u043f\u0440\u0430\u0432\u043e", "ButtonBrowseOnlineImages": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0432 \u0441\u0435\u0442\u0438", "HeaderDeleteItem": "\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430", - "ConfirmDeleteItem": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 ID.", "MessageValueNotCorrect": "\u0412\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0432\u0435\u0440\u043d\u043e. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", "MessageItemSaved": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d.", @@ -412,7 +413,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.", - "FolderTypeMixed": "\u0421\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u044b", + "FolderTypeMixed": "\u0420\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", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser", "MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u044f\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f", "DashboardTourDashboard": "\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0412\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0442\u044c, \u043a\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u043c \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0447\u043b\u0435\u043d\u043e\u0432 \u0441\u0435\u043c\u044c\u0438, \u043a\u0430\u0436\u0434\u0443\u044e \u0441 \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u043c \u0438 \u0442.\u0434.", "DashboardTourCinemaMode": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u043d\u043e\u0437\u0430\u043b\u0430 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0432 \u0432\u0430\u0448\u0443 \u0433\u043e\u0441\u0442\u0438\u043d\u0443\u044e, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.", "DashboardTourChapters": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0441\u0446\u0435\u043d \u043a \u0432\u0438\u0434\u0435\u043e, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", @@ -644,11 +646,11 @@ "HeaderSettings": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b", "OptionAutomaticallySyncNewContent": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0438\u043d\u0445\u0440-\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435", "OptionAutomaticallySyncNewContentHelp": "\u041d\u043e\u0432\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c.", - "OptionSyncUnwatchedVideosOnly": "\u0421\u0438\u043d\u0445\u0440-\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u044b.", - "OptionSyncUnwatchedVideosOnlyHelp": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u044b, \u0430 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u044b \u0438\u0437\u044b\u043c\u0430\u044e\u0442\u0441\u044f \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u0445 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", + "OptionSyncUnwatchedVideosOnly": "\u0421\u0438\u043d\u0445\u0440-\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e", + "OptionSyncUnwatchedVideosOnlyHelp": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e, \u0430 \u0441\u0430\u043c\u0438 \u0432\u0438\u0434\u0435\u043e \u0438\u0437\u044b\u043c\u0430\u044e\u0442\u0441\u044f \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u0445 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", "LabelItemLimit": "\u041f\u0440\u0435\u0434\u0435\u043b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:", "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", - "MessageMixedContentHelp": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a" + "MessageMixedContentHelp": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438" } \ 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 f4ff295fd..03827f919 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json @@ -40,6 +40,7 @@ "LabelStopping": "Avbryter", "LabelCancelled": "(avbr\u00f6ts)", "LabelFailed": "(misslyckades)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(avbr\u00f6ts eftersom servern st\u00e4ngdes av)", "LabelScheduledTaskLastRan": "Senast k\u00f6rd {0}, tog {1}", "HeaderDeleteTaskTrigger": "Ta bort aktivitetsutl\u00f6sare", @@ -249,7 +250,7 @@ "ButtonMoveRight": "H\u00f6ger", "ButtonBrowseOnlineImages": "Bl\u00e4ddra bland bilder online", "HeaderDeleteItem": "Radera objekt", - "ConfirmDeleteItem": "\u00c4r du s\u00e4ker p\u00e5 att du vill radera det h\u00e4r objektet fr\u00e5n biblioteket?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Ange ett namn eller externt id.", "MessageValueNotCorrect": "Det angivna v\u00e4rdet \u00e4r felaktigt. Var god f\u00f6rs\u00f6k igen.", "MessageItemSaved": "Objektet har sparats.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Lagringsplatser f\u00f6r media", "LabelFolderTypeValue": "Typ av mapp: {0}", "LabelPathSubstitutionHelp": "Tillval: S\u00f6kv\u00e4gsutbyte betyder att en plats p\u00e5 servern kopplas till en lokal fils\u00f6kv\u00e4g p\u00e5 en klient. P\u00e5 s\u00e5 s\u00e4tt f\u00e5r klienten direkt tillg\u00e5ng till material p\u00e5 servern och kan spela upp det direkt via n\u00e4tverket.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Filmer", "FolderTypeMusic": "Musik", "FolderTypeAdultVideos": "Inneh\u00e5ll f\u00f6r vuxna", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "och kan enkelt fj\u00e4rrstyra andra enheter och Media Browser-appar", "MessageEnjoyYourStay": "Ha ett trevligt bes\u00f6k", "DashboardTourDashboard": "Via serverns kontrollpanel kan du \u00f6vervaka din server och alla anv\u00e4ndare. Du kommer alltid att kunna veta vem som g\u00f6r vad och var de \u00e4r.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Skapa enkelt anv\u00e4ndarkonton f\u00f6r dina v\u00e4nner och familj, alla med sina egna beh\u00f6righeter, biblioteks \u00e5tkomst, f\u00f6r\u00e4ldrakontroll och mycket mer.", "DashboardTourCinemaMode": "Biol\u00e4get g\u00f6r ditt vardagsrum till en biograf genom m\u00f6jligheten att visa trailers och egna vinjetter innan filmen b\u00f6rjar.", "DashboardTourChapters": "Ta fram kapitelbildrutor fr\u00e5n videofiler f\u00f6r att f\u00e5 en snyggare presentation.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json index 496a96c90..a94391c50 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json index c8297ccd8..882e3f6a0 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json index c4492bca1..f0fef3b78 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json @@ -40,6 +40,7 @@ "LabelStopping": "\u505c\u6b62", "LabelCancelled": "(\u5df2\u53d6\u6d88)", "LabelFailed": "(\u5931\u8d25)", + "ButtonHelp": "Help", "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", @@ -249,7 +250,7 @@ "ButtonMoveRight": "\u53f3\u79fb", "ButtonBrowseOnlineImages": "\u6d4f\u89c8\u5728\u7ebf\u56fe\u7247", "HeaderDeleteItem": "\u5220\u9664\u9879\u76ee", - "ConfirmDeleteItem": "\u4f60\u786e\u5b9a\u5e0c\u671b\u4ece\u5a92\u4f53\u5e93\u91cc\u5220\u9664\u8fd9\u4e2a\u9879\u76ee\uff1f", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "\u8bf7\u8f93\u5165\u4e00\u4e2a\u540d\u79f0\u6216\u4e00\u4e2a\u5916\u90e8ID\u3002", "MessageValueNotCorrect": "\u8f93\u5165\u7684\u503c\u4e0d\u6b63\u786e\u3002\u8bf7\u91cd\u8bd5\u3002", "MessageItemSaved": "\u9879\u76ee\u5df2\u4fdd\u5b58\u3002", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "\u5a92\u4f53\u4f4d\u7f6e", "LabelFolderTypeValue": "\u6587\u4ef6\u5939\u7c7b\u578b\uff1a {0}", "LabelPathSubstitutionHelp": "\u53ef\u9009\uff1a\u66ff\u4ee3\u8def\u5f84\u80fd\u628a\u670d\u52a1\u5668\u8def\u5f84\u6620\u5c04\u5230\u7f51\u7edc\u5171\u4eab\uff0c\u4ece\u800c\u4f7f\u5ba2\u6237\u7aef\u53ef\u4ee5\u76f4\u63a5\u64ad\u653e\u3002", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "\u7535\u5f71", "FolderTypeMusic": "\u97f3\u4e50", "FolderTypeAdultVideos": "\u6210\u4eba\u89c6\u9891", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json index c5d03dcfa..8bfd299e6 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json @@ -40,6 +40,7 @@ "LabelStopping": "Stopping", "LabelCancelled": "(cancelled)", "LabelFailed": "(failed)", + "ButtonHelp": "Help", "LabelAbortedByServerShutdown": "(Aborted by server shutdown)", "LabelScheduledTaskLastRan": "Last ran {0}, taking {1}.", "HeaderDeleteTaskTrigger": "Delete Task Trigger", @@ -249,7 +250,7 @@ "ButtonMoveRight": "Move right", "ButtonBrowseOnlineImages": "Browse online images", "HeaderDeleteItem": "Delete Item", - "ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", + "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", "MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageItemSaved": "Item saved.", @@ -412,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed videos", + "FolderTypeMixed": "Mixed content", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -588,6 +589,7 @@ "WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "MessageEnjoyYourStay": "Enjoy your stay", "DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.", + "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", "DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.", "DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", "DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.", @@ -650,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed with as a plain folder structure" + "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ar.json b/MediaBrowser.Server.Implementations/Localization/Server/ar.json index a1c357fa1..5bc0a8df1 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ar.json @@ -37,6 +37,18 @@ "ButtonOk": "\u0645\u0648\u0627\u0641\u0642", "ButtonCancel": "\u0627\u0644\u063a\u0627\u0621", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "\u0627\u0639\u062f\u0627\u062f \u0645\u0643\u062a\u0628\u0629 \u0627\u0644\u0648\u0633\u0627\u0626\u0637", "ButtonAddMediaFolder": "\u0627\u0636\u0627\u0641\u0629 \u0645\u062c\u0644\u062f \u0644\u0644\u0648\u0633\u0627\u0626\u0637", "LabelFolderType": "\u0646\u0648\u0639 \u0627\u0644\u0645\u062c\u0644\u062f:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ca.json b/MediaBrowser.Server.Implementations/Localization/Server/ca.json index 8f57abfa2..312e5ef16 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ca.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancel", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Setup your media library", "ButtonAddMediaFolder": "Add media folder", "LabelFolderType": "Folder type:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/cs.json b/MediaBrowser.Server.Implementations/Localization/Server/cs.json index 3b16a4d59..ca3a1c064 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/cs.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Zru\u0161it", "ButtonNew": "Nov\u00e9", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Nastaven\u00ed Va\u0161i knihovny m\u00e9di\u00ed", "ButtonAddMediaFolder": "P\u0159idat slo\u017eku m\u00e9di\u00ed", "LabelFolderType": "Typ slo\u017eky:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/da.json b/MediaBrowser.Server.Implementations/Localization/Server/da.json index fe10e2d37..f03e3cdbd 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/da.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/da.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Annuller", "ButtonNew": "Ny", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Konfigurer dit medie bibliotek", "ButtonAddMediaFolder": "Tilf\u00f8j medie mappe", "LabelFolderType": "Mappe type:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/de.json b/MediaBrowser.Server.Implementations/Localization/Server/de.json index 295b95f4e..cd1626f58 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/de.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/de.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Abbrechen", "ButtonNew": "Neu", + "FolderTypeMixed": "Gemischte Inhalte", + "FolderTypeMovies": "Filme", + "FolderTypeMusic": "Musik", + "FolderTypeAdultVideos": "Videos f\u00fcr Erwachsene", + "FolderTypePhotos": "Fotos", + "FolderTypeMusicVideos": "Musikvideos", + "FolderTypeHomeVideos": "Heimvideos", + "FolderTypeGames": "Spiele", + "FolderTypeBooks": "B\u00fccher", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "\u00dcbernehmen", + "LabelContentType": "Inhalte-Typ:", "HeaderSetupLibrary": "Medienbibliothek einrichten", "ButtonAddMediaFolder": "Medienverzeichnis hinzuf\u00fcgen", "LabelFolderType": "Verzeichnistyp:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Rolle", "OptionPlayUnwatchedTrailersOnly": "Spiele nur bisher nicht gesehene Trailer", "HeaderTrailerReelHelp": "Starte eine Trailer Rolle, um dir eine lang andauernde Playlist mit Trailern anzuschauen.", - "MessageNoTrailersFound": "Keine Trailer gefunden. Installiere das Trailer Channel Plugin, um eine Bibliothek aus Trailern vom Internet zu importieren.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "Neue Benutzer", "ButtonSignUp": "Anmeldung", "ButtonForgotPassword": "Passwort vergessen?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Einige Ger\u00e4te zeigen m\u00f6glicherweise Darstellungsfehler wenn mehrere Bilder mit Didl eingebunden wurden.", "TabActivity": "Aktivit\u00e4t", "TitleSync": "Synchronisation", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Erlaube das Synchronisieren zu Ger\u00e4ten.", + "NameSeasonUnknown": "Staffel unbekannt", + "NameSeasonNumber": "Staffel {0}", + "LabelNewUserNameHelp": "Benutzernamen k\u00f6nnen Zeichen (a-z), Zahlen (0-9), Striche (-), Unterstriche (_), Apostrophe (') und Punkte (.) enthalten." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/el.json b/MediaBrowser.Server.Implementations/Localization/Server/el.json index e8083c945..985709822 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/el.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/el.json @@ -37,6 +37,18 @@ "ButtonOk": "\u03b5\u03bd\u03c4\u03ac\u03be\u03b5\u03b9", "ButtonCancel": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7 ", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Setup your media library", "ButtonAddMediaFolder": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03c4\u03b5 \u03c4\u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf \u03c4\u03bf\u03c5 Media", "LabelFolderType": "\u03a4\u03cd\u03c0\u03bf \u03c6\u03b1\u03ba\u03ad\u03bb\u03bf\u03c5 ", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json index 6b3571d08..d48a279c4 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancel", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Setup your media library", "ButtonAddMediaFolder": "Add media folder", "LabelFolderType": "Folder type:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json index 3457f97c0..0aa8053e2 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancel", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Setup your media library", "ButtonAddMediaFolder": "Add media folder", "LabelFolderType": "Folder type:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es.json b/MediaBrowser.Server.Implementations/Localization/Server/es.json index 007ff21f7..4cd9d799b 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es.json @@ -37,6 +37,18 @@ "ButtonOk": "OK", "ButtonCancel": "Cancelar", "ButtonNew": "Nuevo", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Configurar biblioteca de medios", "ButtonAddMediaFolder": "Agregar una carpeta de medios", "LabelFolderType": "Tipo de carpeta:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json index 8951e2fdf..e780eab37 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancelar", "ButtonNew": "Nuevo", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Pel\u00edculas", + "FolderTypeMusic": "M\u00fasica", + "FolderTypeAdultVideos": "Videos para adultos", + "FolderTypePhotos": "Fotos", + "FolderTypeMusicVideos": "Videos musicales", + "FolderTypeHomeVideos": "Videos caseros", + "FolderTypeGames": "Juegos", + "FolderTypeBooks": "Libros", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Configurar su biblioteca de medios", "ButtonAddMediaFolder": "Agregar carpeta de medios", "LabelFolderType": "Tipo de carpeta:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Carrete de Avances", "OptionPlayUnwatchedTrailersOnly": "Reproducir \u00fanicamente avances no vistos", "HeaderTrailerReelHelp": "Iniciar un carrete de avances para reproducir una lista de reproducci\u00f3n de larga duraci\u00f3n de avances.", - "MessageNoTrailersFound": "No se encontraron avances. Instalar el complemento \"Canal trailers\" para importar una biblioteca de avances de internet.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "Nuevos Usuarios", "ButtonSignUp": "Registrarse", "ButtonForgotPassword": "\u00bfOlvidaste la contrase\u00f1a?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Algunos dispositivos no renderisaran apropiadamente si hay m\u00faltiples im\u00e1genes incrustadas en el Didl", "TabActivity": "Actividad", "TitleSync": "Sinc", - "OptionAllowSyncContent": "Permitir sincronizaci\u00f3n de medios con dispositivos" + "OptionAllowSyncContent": "Permitir sincronizaci\u00f3n de medios con dispositivos", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fi.json b/MediaBrowser.Server.Implementations/Localization/Server/fi.json index f9d0f9a10..46a1eb2ec 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fi.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Lopeta", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Aseta sinun media kirjasto", "ButtonAddMediaFolder": "Lis\u00e4\u00e4 media kansio", "LabelFolderType": "Kansion tyyppi:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fr.json b/MediaBrowser.Server.Implementations/Localization/Server/fr.json index 312b3c201..a580a95db 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fr.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Annuler", "ButtonNew": "Nouveau", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Films", + "FolderTypeMusic": "Musique", + "FolderTypeAdultVideos": "Vid\u00e9os Adultes", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Vid\u00e9os Musical", + "FolderTypeHomeVideos": "Vid\u00e9os personnelles", + "FolderTypeGames": "Jeux", + "FolderTypeBooks": "Livres", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Type de contenu :", "HeaderSetupLibrary": "Configurer votre biblioth\u00e8que de m\u00e9dia", "ButtonAddMediaFolder": "Ajouter un r\u00e9pertoire de m\u00e9dia", "LabelFolderType": "Type de r\u00e9pertoire:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer reel", "OptionPlayUnwatchedTrailersOnly": "Lire seulement les bandes-annonces non lus.", "HeaderTrailerReelHelp": "Commencer un \"trailer reel\" pour lire une longue liste de lecture de bandes-annonces.", - "MessageNoTrailersFound": "Aucune bande-annonce trouv\u00e9e. Installer le plugin \"Trailer channel\" pour importer une biblioth\u00e8que de bandes-annonces Internet.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "Nouveaux utilisateurs", "ButtonSignUp": "S'inscrire", "ButtonForgotPassword": "Mot de passe oubli\u00e9 ?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Quelques p\u00e9riph\u00e9riques ne fourniront pas un rendu correct si plusieurs images sont int\u00e9gr\u00e9es dans Didl", "TabActivity": "Activit\u00e9", "TitleSync": "Sync.", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Saison inconnue", + "NameSeasonNumber": "Saison {0}", + "LabelNewUserNameHelp": "Les noms d'utilisateur peuvent contenir des lettres (a-z), des chiffres (0-9), des tirets (-), des tirets bas (_), des apostrophes (') et des points (.)." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/he.json b/MediaBrowser.Server.Implementations/Localization/Server/he.json index e9dbb9c31..af862900b 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/he.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/he.json @@ -37,6 +37,18 @@ "ButtonOk": "\u05d0\u05e9\u05e8", "ButtonCancel": "\u05d1\u05d8\u05dc", "ButtonNew": "\u05d7\u05d3\u05e9", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "\u05d4\u05d2\u05d3\u05e8 \u05d0\u05ea \u05e1\u05e4\u05e8\u05d9\u05d9\u05ea \u05d4\u05de\u05d3\u05d9\u05d4 \u05e9\u05dc\u05da", "ButtonAddMediaFolder": "\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d9\u05e7\u05d9\u05d9\u05ea \u05de\u05d3\u05d9\u05d4", "LabelFolderType": "\u05e1\u05d5\u05d2 \u05d4\u05ea\u05d9\u05e7\u05d9\u05d9\u05d4:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/hr.json b/MediaBrowser.Server.Implementations/Localization/Server/hr.json index aee34ca29..683e91a34 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/hr.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Odustani", "ButtonNew": "Novo", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Postavi svoju medijsku biblioteku", "ButtonAddMediaFolder": "Dodaj mapu sa medijem", "LabelFolderType": "Tip mape:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/it.json b/MediaBrowser.Server.Implementations/Localization/Server/it.json index 316174a03..e01e0d3f3 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/it.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/it.json @@ -37,6 +37,18 @@ "ButtonOk": "OK", "ButtonCancel": "Annulla", "ButtonNew": "Nuovo", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Film", + "FolderTypeMusic": "Musica", + "FolderTypeAdultVideos": "Video per adulti", + "FolderTypePhotos": "Foto", + "FolderTypeMusicVideos": "Video musicali", + "FolderTypeHomeVideos": "Video personali", + "FolderTypeGames": "Giochi", + "FolderTypeBooks": "Libri", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Configura la tua libreria", "ButtonAddMediaFolder": "Aggiungi cartella", "LabelFolderType": "Tipo cartella", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer b.", "OptionPlayUnwatchedTrailersOnly": "Riproduci solo i trailer non visti", "HeaderTrailerReelHelp": "Inizia a riprodurre una lunga playlist di trailer", - "MessageNoTrailersFound": "Nessun Trailer trovato.Installa Il plug in dei traler per importare la libreria dei trailer da internet", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "Nuovo Utente", "ButtonSignUp": "Iscriviti", "ButtonForgotPassword": "Dimenticato la password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/kk.json b/MediaBrowser.Server.Implementations/Localization/Server/kk.json index 65f2e19d2..0f26e5211 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/kk.json @@ -37,6 +37,18 @@ "ButtonOk": "\u0416\u0430\u0440\u0430\u0439\u0434\u044b", "ButtonCancel": "\u0411\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443", "ButtonNew": "\u0416\u0430\u0441\u0430\u0443", + "FolderTypeMixed": "\u0410\u0440\u0430\u043b\u0430\u0441 \u043c\u0430\u0437\u043c\u04b1\u043d", + "FolderTypeMovies": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440", + "FolderTypeMusic": "\u041c\u0443\u0437\u044b\u043a\u0430", + "FolderTypeAdultVideos": "\u0415\u0440\u0435\u0441\u0435\u043a\u0442\u0456\u043a \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440", + "FolderTypePhotos": "\u0424\u043e\u0442\u043e\u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440", + "FolderTypeMusicVideos": "\u041c\u0443\u0437\u044b\u043a\u0430\u043b\u044b\u049b \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440", + "FolderTypeHomeVideos": "\u04ae\u0439 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0456", + "FolderTypeGames": "\u041e\u0439\u044b\u043d\u0434\u0430\u0440", + "FolderTypeBooks": "\u041a\u0456\u0442\u0430\u043f\u0442\u0430\u0440", + "FolderTypeTvShows": "\u0422\u0414", + "FolderTypeInherit": "\u041c\u04b1\u0440\u0430\u0493\u0430 \u0438\u0435\u043b\u0435\u043d\u0443", + "LabelContentType": "\u041c\u0430\u0437\u043c\u04b1\u043d \u0442\u04af\u0440\u0456:", "HeaderSetupLibrary": "\u0422\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u043d\u044b \u043e\u0440\u043d\u0430\u0442\u0443 \u0436\u04d9\u043d\u0435 \u0442\u0435\u04a3\u0448\u0435\u0443", "ButtonAddMediaFolder": "\u0422\u0430\u0441\u0443\u0448\u044b \u049b\u0430\u043b\u0442\u0430\u0441\u044b\u043d \u04af\u0441\u0442\u0435\u0443", "LabelFolderType": "\u049a\u0430\u043b\u0442\u0430 \u0442\u04af\u0440\u0456:", @@ -682,9 +694,9 @@ "OptionProfilePhoto": "\u0424\u043e\u0442\u043e", "LabelUserLibrary": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u0441\u044b", "LabelUserLibraryHelp": "\u049a\u04b1\u0440\u044b\u043b\u0493\u044b\u0434\u0430 \u049b\u0430\u0439 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u0441\u044b\u043d \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443\u0456\u043d \u0442\u0430\u04a3\u0434\u0430\u04a3\u044b\u0437. \u04d8\u0434\u0435\u043f\u043a\u0456 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u04b1\u0440\u0430\u0441\u044b\u043d\u0430 \u0438\u0435\u043b\u0435\u043d\u0443 \u04af\u0448\u0456\u043d \u0431\u043e\u0441 \u049b\u0430\u043b\u0434\u044b\u0440\u044b\u04a3\u044b\u0437.", - "OptionPlainStorageFolders": "\u0411\u0430\u0440\u043b\u044b\u049b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u0434\u044b \u0436\u0430\u0439 \u0441\u0430\u049b\u0442\u0430\u0443 \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u044b \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", + "OptionPlainStorageFolders": "\u0411\u0430\u0440\u043b\u044b\u049b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u0434\u044b \u043a\u04d9\u0434\u0456\u043c\u0433\u0456 \u0441\u0430\u049b\u0442\u0430\u0443 \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u044b \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", "OptionPlainStorageFoldersHelp": "\u049a\u043e\u0441\u044b\u043b\u0493\u0430\u043d\u0434\u0430, \u0431\u0430\u0440\u043b\u044b\u049b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440 DIDL \u0456\u0448\u0456\u043d\u0434\u0435 \"object.container.person.musicArtist\" \u0441\u0438\u044f\u049b\u0442\u044b \u043d\u0430\u049b\u0442\u044b\u043b\u0430\u0443 \u0442\u04af\u0440\u0456\u043d\u0456\u04a3 \u043e\u0440\u043d\u044b\u043d\u0430 \"object.container.storageFolder\" \u0431\u043e\u043b\u044b\u043f \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0435\u0434\u0456.", - "OptionPlainVideoItems": "\u0411\u0430\u0440\u043b\u044b\u049b \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0434\u0456 \u0436\u0430\u0439 \u0431\u0435\u0439\u043d\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0456 \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", + "OptionPlainVideoItems": "\u0411\u0430\u0440\u043b\u044b\u049b \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0434\u0456 \u043a\u04d9\u0434\u0456\u043c\u0433\u0456 \u0431\u0435\u0439\u043d\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0456 \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", "OptionPlainVideoItemsHelp": "\u049a\u043e\u0441\u044b\u043b\u0493\u0430\u043d\u0434\u0430, \u0431\u0430\u0440\u043b\u044b\u049b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440 DIDL \u0456\u0448\u0456\u043d\u0434\u0435 \"object.item.videoItem.movie\" \u0441\u0438\u044f\u049b\u0442\u044b \u043d\u0430\u049b\u0442\u044b\u043b\u0430\u0443 \u0442\u04af\u0440\u0456\u043d\u0456\u04a3 \u043e\u0440\u043d\u044b\u043d\u0430 \"object.item.videoItem\" \u0431\u043e\u043b\u044b\u043f \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0435\u0434\u0456.", "LabelSupportedMediaTypes": "\u049a\u043e\u043b\u0434\u0430\u0443\u0434\u0430\u0493\u044b \u0442\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u0442\u04af\u0440\u043b\u0435\u0440\u0456:", "TabIdentification": "\u0410\u043d\u044b\u049b\u0442\u0430\u0443", @@ -1049,7 +1061,7 @@ "OptionOthers": "\u0411\u0430\u0441\u049b\u0430\u043b\u0430\u0440", "HeaderDownloadPeopleMetadataForHelp": "\u049a\u043e\u0441\u044b\u043c\u0448\u0430 \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0434\u0456 \u049b\u043e\u0441\u049b\u0430\u043d\u0434\u0430 \u044d\u043a\u0440\u0430\u043d\u0434\u0430\u0493\u044b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u0442\u044b \u043a\u04e9\u0431\u0456\u0440\u0435\u043a \u04b1\u0441\u044b\u043d\u0430\u0434\u044b, \u0431\u0456\u0440\u0430\u049b \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u043d\u044b\u04a3 \u0441\u043a\u0430\u043d\u0435\u0440\u043b\u0435\u0443\u043b\u0435\u0440\u0456 \u0431\u0430\u044f\u0443\u043b\u0430\u0439\u0434\u044b.", "ViewTypeFolders": "\u049a\u0430\u043b\u0442\u0430\u043b\u0430\u0440", - "LabelDisplayFoldersView": "\u0416\u0430\u0439 \u0442\u0430\u0441\u0443\u0448\u044b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u044b\u043d \u043a\u04e9\u0440\u0441\u0435\u0442\u0443 \u04af\u0448\u0456\u043d \u049a\u0430\u043b\u0442\u0430\u043b\u0430\u0440 \u0430\u0441\u043f\u0435\u043a\u0442\u0456\u043d \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", + "LabelDisplayFoldersView": "\u041a\u04d9\u0434\u0456\u043c\u0433\u0456 \u0442\u0430\u0441\u0443\u0448\u044b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u044b\u043d \u043a\u04e9\u0440\u0441\u0435\u0442\u0443 \u04af\u0448\u0456\u043d \u049a\u0430\u043b\u0442\u0430\u043b\u0430\u0440 \u0430\u0441\u043f\u0435\u043a\u0442\u0456\u043d \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0443", "ViewTypeLiveTvRecordingGroups": "\u0416\u0430\u0437\u0431\u0430\u043b\u0430\u0440", "ViewTypeLiveTvChannels": "\u0410\u0440\u043d\u0430\u043b\u0430\u0440", "LabelAllowLocalAccessWithoutPassword": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0441\u0456\u0437 \u0436\u0435\u0440\u0433\u0456\u043b\u0456\u043a\u0442\u0456 \u049b\u0430\u0442\u044b\u043d\u0441\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "\u0422\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u0436\u0430\u043f\u0441\u044b\u0440\u0443", "OptionPlayUnwatchedTrailersOnly": "\u0422\u0435\u043a \u049b\u0430\u043d\u0430 \u049b\u0430\u0440\u0430\u043b\u043c\u0430\u0493\u0430\u043d \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u043e\u0439\u043d\u0430\u0442\u0443", "HeaderTrailerReelHelp": "\u04b0\u0437\u0430\u049b \u043e\u0440\u044b\u043d\u0434\u0430\u043b\u0430\u0442\u044b\u043d \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440 \u043e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u0436\u0430\u043f\u0441\u044b\u0440\u0443\u0434\u044b \u0431\u0430\u0441\u0442\u0430\u04a3\u044b\u0437.", - "MessageNoTrailersFound": "\u0415\u0448\u049b\u0430\u043d\u0434\u0430\u0439 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440 \u0442\u0430\u0431\u044b\u043b\u043c\u0430\u0434\u044b. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440 \u049b\u043e\u0440\u044b\u043d \u0438\u043c\u043f\u043e\u0440\u0442\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440 \u0430\u0440\u043d\u0430\u0441\u044b \u043f\u043b\u0430\u0433\u0438\u043d\u0456\u043d \u043e\u0440\u043d\u0430\u0442\u044b\u04a3\u044b\u0437.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "\u0416\u0430\u04a3\u0430 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440", "ButtonSignUp": "\u0422\u0456\u0440\u043a\u0435\u043b\u0443", "ButtonForgotPassword": "\u049a\u04b1\u043f\u0438\u044f \u0441\u04e9\u0437\u0434\u0456 \u04b1\u043c\u044b\u0442\u044b\u04a3\u044b\u0437 \u0431\u0430?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "\u0415\u0433\u0435\u0440 \u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0443\u0440\u0435\u0442 Didl \u0456\u0448\u0456\u043d\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0456\u043b\u0441\u0435, \u043a\u0435\u0439\u0431\u0456\u0440 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u0434\u0430 \u0442\u0438\u0456\u0441\u0442\u0456 \u0442\u04af\u0440\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0431\u0435\u0439\u0434\u0456.", "TabActivity": "\u04d8\u0440\u0435\u043a\u0435\u0442\u0442\u0435\u0440", "TitleSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443", - "OptionAllowSyncContent": "\u041c\u0435\u0434\u0438\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043c\u0435\u043d \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443\u0493\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443" + "OptionAllowSyncContent": "\u041c\u0435\u0434\u0438\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043c\u0435\u043d \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443\u0493\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", + "NameSeasonUnknown": "\u0411\u0435\u043b\u0433\u0456\u0441\u0456\u0437 \u043c\u0430\u0443\u0441\u044b\u043c", + "NameSeasonNumber": "{0}-\u0441\u0435\u0437\u043e\u043d", + "LabelNewUserNameHelp": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0430\u0442\u0442\u0430\u0440\u044b\u043d\u0434\u0430 \u04d9\u0440\u0456\u043f\u0442\u0435\u0440 (a-z), \u0441\u0430\u043d\u0434\u0430\u0440 (0-9), \u0441\u044b\u0437\u044b\u049b\u0448\u0430\u043b\u0430\u0440 (-), \u0430\u0441\u0442\u044b\u04a3\u0493\u044b \u0441\u044b\u0437\u044b\u049b\u0442\u0430\u0440 (_), \u0434\u04d9\u0439\u0435\u043a\u0448\u0435\u043b\u0435\u0440 (') \u0436\u04d9\u043d\u0435 \u043d\u04af\u043a\u0442\u0435\u043b\u0435\u0440 (.) \u0431\u043e\u043b\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ko.json b/MediaBrowser.Server.Implementations/Localization/Server/ko.json index f8d9ff218..846cc1108 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ko.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ko.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancel", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Setup your media library", "ButtonAddMediaFolder": "Add media folder", "LabelFolderType": "Folder type:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ms.json b/MediaBrowser.Server.Implementations/Localization/Server/ms.json index af1a6eeb3..b6ec0d4b3 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ms.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancel", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Setup your media library", "ButtonAddMediaFolder": "Add media folder", "LabelFolderType": "Folder type:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nb.json b/MediaBrowser.Server.Implementations/Localization/Server/nb.json index b60c91829..cd6228bc4 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nb.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "avbryt", "ButtonNew": "Ny", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Filmer", + "FolderTypeMusic": "Musikk", + "FolderTypeAdultVideos": "Voksen videoer", + "FolderTypePhotos": "Foto", + "FolderTypeMusicVideos": "Musikk videoer", + "FolderTypeHomeVideos": "Hjemme videoer", + "FolderTypeGames": "Spill", + "FolderTypeBooks": "B\u00f8ker", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Konfigurer media-biblioteket", "ButtonAddMediaFolder": "Legg til media-mappe", "LabelFolderType": "Mappe typpe", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "Nye Brukere", "ButtonSignUp": "Registrering", "ButtonForgotPassword": "Glemt passord?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/nl.json b/MediaBrowser.Server.Implementations/Localization/Server/nl.json index 492ec7f8d..2a8eb8fe4 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/nl.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Annuleren", "ButtonNew": "Nieuw", + "FolderTypeMixed": "Gemengde inhoud", + "FolderTypeMovies": "Films", + "FolderTypeMusic": "Muziek", + "FolderTypeAdultVideos": "Adult video's", + "FolderTypePhotos": "Foto's", + "FolderTypeMusicVideos": "Muziek video's", + "FolderTypeHomeVideos": "Thuis video's", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Boeken", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "overerven", + "LabelContentType": "Inhoud type:", "HeaderSetupLibrary": "Stel uw mediabibliotheek in", "ButtonAddMediaFolder": "Mediamap toevoegen", "LabelFolderType": "Maptype:", @@ -231,10 +243,10 @@ "HeaderFeatureAccess": "Functie toegang", "OptionAllowMediaPlayback": "Afspelen van media toestaan", "OptionAllowBrowsingLiveTv": "Bladeren door live tv toestaan", - "OptionAllowDeleteLibraryContent": "Allow deletion of library content", + "OptionAllowDeleteLibraryContent": "Verwijderen van bibliotheek inhoud toestaan", "OptionAllowManageLiveTv": "Beheer van live tv-opnames toestaan", - "OptionAllowRemoteControlOthers": "Allow remote control of other users", - "OptionAllowRemoteSharedDevices": "Allow remote control of shared devices", + "OptionAllowRemoteControlOthers": "Op afstand besturen van andere gebruikers toestaan", + "OptionAllowRemoteSharedDevices": "Op afstand besturen van gedeelde apparaten toestaan", "OptionAllowRemoteSharedDevicesHelp": "Dlna apparaten worden als gedeeld apparaat gezien totdat een gebruiker deze gaat gebruiken.", "HeaderRemoteControl": "Gebruik op afstand", "OptionMissingTmdbId": "TMDB Id ontbreekt", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer reel", "OptionPlayUnwatchedTrailersOnly": "Speel alleen ongeziene trailers", "HeaderTrailerReelHelp": "Start trailer reel om een afspeellijst met trailers af te spelen.", - "MessageNoTrailersFound": "Geen trailers gevonden. Installeer het trailer kanaal om internet trailers te importeren.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "Nieuwe gebruikers", "ButtonSignUp": "Aanmelden", "ButtonForgotPassword": "Wachtwoord vergeten?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Sommige apparaten zullen niet goed weergeven als er meerdere afbeeldingen ingesloten zijn in Didl.", "TabActivity": "Activiteit", "TitleSync": "Synchroniseer", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Synchroniseren van media naar apparaten toestaan", + "NameSeasonUnknown": "Seizoen Onbekend", + "NameSeasonNumber": "Seizoen {0}", + "LabelNewUserNameHelp": "Gebruikersnamen kunnen letters (az), cijfers (0-9), streepjes, underscores (_), apostrofs (') en punten (.) bevatten\n" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pl.json b/MediaBrowser.Server.Implementations/Localization/Server/pl.json index adf2df9a1..98433aea3 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pl.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Anuluj", "ButtonNew": "New", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Ustaw swoj\u0105 bibliotek\u0119", "ButtonAddMediaFolder": "Dodaj folder", "LabelFolderType": "Typ folderu:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json index 13b786371..57c6039c5 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancelar", "ButtonNew": "Novo", + "FolderTypeMixed": "Conte\u00fado misto", + "FolderTypeMovies": "Filmes", + "FolderTypeMusic": "M\u00fasica", + "FolderTypeAdultVideos": "V\u00eddeos adultos", + "FolderTypePhotos": "Fotos", + "FolderTypeMusicVideos": "V\u00eddeos musicais", + "FolderTypeHomeVideos": "V\u00eddeos caseiros", + "FolderTypeGames": "Jogos", + "FolderTypeBooks": "Livros", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Herdar", + "LabelContentType": "Tipo de conte\u00fado:", "HeaderSetupLibrary": "Configurar sua biblioteca de m\u00eddias", "ButtonAddMediaFolder": "Adicionar pasta de m\u00eddias", "LabelFolderType": "Tipo de pasta:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Carrossel de Trailers", "OptionPlayUnwatchedTrailersOnly": "Reproduzir apenas trailers n\u00e3o assistidos", "HeaderTrailerReelHelp": "Inicie um carrossel de trailers para reproduzir uma longa lista de reprodu\u00e7\u00e3o de trailers.", - "MessageNoTrailersFound": "Nenhum trailer encontrado. Instale o plugin de canal para importar uma biblioteca de trailers da internet.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "Novos Usu\u00e1rios", "ButtonSignUp": "Entrar", "ButtonForgotPassword": "Esqueceu a senha?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Alguns dispositivos n\u00e3o interpretar\u00e3o apropriadamente se m\u00faltiplas imagens estiverem incorporadas dentro do Didl.", "TabActivity": "Atividade", "TitleSync": "Sinc", - "OptionAllowSyncContent": "Permitir sincroniza\u00e7\u00e3o de m\u00eddia com os dispositivos" + "OptionAllowSyncContent": "Permitir sincroniza\u00e7\u00e3o de m\u00eddia com os dispositivos", + "NameSeasonUnknown": "Temporada Desconhecida", + "NameSeasonNumber": "Temporada {0}", + "LabelNewUserNameHelp": "Nomes de usu\u00e1rios podem conter letras (a-z), n\u00fameros (0-9), tra\u00e7os (-), sublinhados (_), ap\u00f3strofes (') e pontos (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json index a3d0d9fc5..3ce498c35 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_PT.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancelar", "ButtonNew": "Novo", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Configurar biblioteca", "ButtonAddMediaFolder": "Adicionar pasta de media", "LabelFolderType": "Tipo de pasta", @@ -231,9 +243,9 @@ "HeaderFeatureAccess": "Acesso a Caracter\u00edsticas", "OptionAllowMediaPlayback": "Permitir reprodu\u00e7\u00e3o de multim\u00e9dia", "OptionAllowBrowsingLiveTv": "Permitir navega\u00e7\u00e3o da tv ao vivo", - "OptionAllowDeleteLibraryContent": "Allow deletion of library content", + "OptionAllowDeleteLibraryContent": "Permitir que conte\u00fado da biblioteca seja apagado", "OptionAllowManageLiveTv": "Permitir gest\u00e3o das grava\u00e7\u00f5es da tv ao vivo", - "OptionAllowRemoteControlOthers": "Allow remote control of other users", + "OptionAllowRemoteControlOthers": "Permitir controlo remoto de outros utilizadores", "OptionAllowRemoteSharedDevices": "Allow remote control of shared devices", "OptionAllowRemoteSharedDevicesHelp": "Dlna devices are considered shared until a user begins controlling it.", "HeaderRemoteControl": "Remote Control", @@ -551,10 +563,10 @@ "MessagePleaseRestartServerToFinishUpdating": "Por favor reinicie o servidor para terminar a aplica\u00e7\u00e3o das atualiza\u00e7\u00f5es.", "LabelDownMixAudioScale": "Escala do aumento de \u00e1udio ao fazer downmix:", "LabelDownMixAudioScaleHelp": "Aumentar o \u00e1udio ao fazer downmix. Defina como 1 para preservar o volume original.", - "ButtonLinkKeys": "Transfer Key", + "ButtonLinkKeys": "Transferir Chave", "LabelOldSupporterKey": "Chave de apoiante antiga", "LabelNewSupporterKey": "Chave de apoiante nova", - "HeaderMultipleKeyLinking": "Transfer to New Key", + "HeaderMultipleKeyLinking": "Transferir para Nova Chave", "MultipleKeyLinkingHelp": "If you received a new supporter key, use this form to transfer the old key's registrations to your new one.", "LabelCurrentEmailAddress": "Endere\u00e7o de email atual", "LabelCurrentEmailAddressHelp": "O endere\u00e7o de email atual para o qual a sua nova chave foi enviada.", @@ -676,9 +688,9 @@ "HeaderCodecProfileHelp": "Codec profiles indicate the limitations of a device when playing specific codecs. If a limitation applies then the media will be transcoded, even if the codec is configured for direct play.", "HeaderContainerProfile": "Container Profile", "HeaderContainerProfileHelp": "Container profiles indicate the limitations of a device when playing specific formats. If a limitation applies then the media will be transcoded, even if the format is configured for direct play.", - "OptionProfileVideo": "Video", - "OptionProfileAudio": "Audio", - "OptionProfileVideoAudio": "Video Audio", + "OptionProfileVideo": "V\u00eddeo", + "OptionProfileAudio": "\u00c1udio", + "OptionProfileVideoAudio": "\u00c1udio do V\u00eddeo", "OptionProfilePhoto": "Photo", "LabelUserLibrary": "User library:", "LabelUserLibraryHelp": "Select which user library to display to the device. Leave empty to inherit the default setting.", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ru.json b/MediaBrowser.Server.Implementations/Localization/Server/ru.json index ccc506cc7..651dcd068 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ru.json @@ -37,6 +37,18 @@ "ButtonOk": "\u041e\u041a", "ButtonCancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c", "ButtonNew": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c", + "FolderTypeMixed": "\u0420\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", + "FolderTypePhotos": "\u0424\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438", + "FolderTypeMusicVideos": "\u041c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e", + "FolderTypeHomeVideos": "\u0414\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e", + "FolderTypeGames": "\u0418\u0433\u0440\u044b", + "FolderTypeBooks": "\u041a\u043d\u0438\u0433\u0438", + "FolderTypeTvShows": "\u0422\u0412", + "FolderTypeInherit": "\u041d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0439", + "LabelContentType": "\u0422\u0438\u043f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:", "HeaderSetupLibrary": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438", "ButtonAddMediaFolder": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043a\u0443", "LabelFolderType": "\u0422\u0438\u043f \u043f\u0430\u043f\u043a\u0438:", @@ -689,7 +701,7 @@ "LabelSupportedMediaTypes": "\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445:", "TabIdentification": "\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0438\u0435", "HeaderIdentification": "\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0438\u0435", - "TabDirectPlay": "\u041f\u0440\u044f\u043c\u043e\u0435 \u0432\u043e\u0441\u043f\u0440-\u0438\u0435", + "TabDirectPlay": "\u041f\u0440\u044f\u043c\u043e\u0435 \u0432\u043e\u0441\u043f\u0440.", "TabContainers": "\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b", "TabCodecs": "\u041a\u043e\u0434\u0435\u043a\u0438", "TabResponses": "\u041e\u0442\u043a\u043b\u0438\u043a\u0438", @@ -1020,9 +1032,9 @@ "ItemAddedWithName": "{0} (\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0443)", "ItemRemovedWithName": "{0} (\u0438\u0437\u044a\u044f\u0442\u043e \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438)", "DeviceOnlineWithName": "{0} - \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e", - "UserOnlineFromDevice": "{0} - \u043f\u043e\u0434\u043a\u043b-\u0438\u0435 \u0441 {1} \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e", + "UserOnlineFromDevice": "{0} - \u043f\u043e\u0434\u043a\u043b. \u0441 {1} \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e", "DeviceOfflineWithName": "{0} - \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u043e", - "UserOfflineFromDevice": "{0} - \u043f\u043e\u0434\u043a\u043b-\u0438\u0435 \u0441 {1} \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u043e", + "UserOfflineFromDevice": "{0} - \u043f\u043e\u0434\u043a\u043b. \u0441 {1} \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u043e", "SubtitlesDownloadedForItem": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u044b \u0434\u043b\u044f {0} \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438\u0441\u044c", "SubtitleDownloadFailureForItem": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u044b \u043a {0} \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c", "LabelRunningTimeValue": "\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: {0}", @@ -1036,9 +1048,9 @@ "MessageApplicationUpdated": "Media Browser Server \u0431\u044b\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d", "AuthenticationSucceededWithUserName": "{0} - \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0430", "FailedLoginAttemptWithUserName": "{0} - \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u0430", - "UserStartedPlayingItemWithValues": "{0} - \u0432\u043e\u0441\u043f\u0440-\u0438\u0435 \u00ab{1}\u00bb \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e", - "UserStoppedPlayingItemWithValues": "{0} - \u0432\u043e\u0441\u043f\u0440-\u0438\u0435 \u00ab{1}\u00bb \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e", - "AppDeviceValues": "\u041f\u0440\u0438\u043b-\u0438\u0435: {0}, \u0423\u0441\u0442\u0440-\u0432\u043e: {1}", + "UserStartedPlayingItemWithValues": "{0} - \u0432\u043e\u0441\u043f\u0440. \u00ab{1}\u00bb \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e", + "UserStoppedPlayingItemWithValues": "{0} - \u0432\u043e\u0441\u043f\u0440. \u00ab{1}\u00bb \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e", + "AppDeviceValues": "\u041f\u0440\u0438\u043b.: {0}, \u0423\u0441\u0442\u0440.: {1}", "ProviderValue": "\u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a: {0}", "LabelChannelDownloadSizeLimit": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e, \u0413\u0411:", "LabelChannelDownloadSizeLimitHelpText": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u044c\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043f\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432.", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "\u0421\u043a\u043b\u0435\u0439\u043a\u0430 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432", "OptionPlayUnwatchedTrailersOnly": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b", "HeaderTrailerReelHelp": "\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043a\u043b\u0435\u0439\u043a\u0443 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0434\u043e\u043b\u0433\u043e\u0438\u0433\u0440\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432.", - "MessageNoTrailersFound": "\u0422\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u043a\u0430\u043d\u0430\u043b\u0430 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "\u041d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438", "ButtonSignUp": "\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f", "ButtonForgotPassword": "\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "\u041d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043d\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 Didl.", "TabActivity": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f", "TitleSync": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f", - "OptionAllowSyncContent": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438" + "OptionAllowSyncContent": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438", + "NameSeasonUnknown": "\u0421\u0435\u0437\u043e\u043d \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d", + "NameSeasonNumber": "\u0421\u0435\u0437\u043e\u043d {0}", + "LabelNewUserNameHelp": "\u0418\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u0443\u043a\u0432\u044b (a-z), \u0446\u0438\u0444\u0440\u044b (0-9), \u0434\u0435\u0444\u0438\u0441\u044b (-), \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f (_), \u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444\u044b (') \u0438 \u0442\u043e\u0447\u043a\u0438 (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/sv.json b/MediaBrowser.Server.Implementations/Localization/Server/sv.json index 3984619e5..9d3ad70c2 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/sv.json @@ -37,6 +37,18 @@ "ButtonOk": "OK", "ButtonCancel": "Avbryt", "ButtonNew": "Nytillkommet", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Filmer", + "FolderTypeMusic": "Musik", + "FolderTypeAdultVideos": "Inneh\u00e5ll f\u00f6r vuxna", + "FolderTypePhotos": "Foton", + "FolderTypeMusicVideos": "Musikvideor", + "FolderTypeHomeVideos": "Hemvideor", + "FolderTypeGames": "Spel", + "FolderTypeBooks": "B\u00f6cker", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Konfigurera mediabiblioteket", "ButtonAddMediaFolder": "Skapa mediamapp", "LabelFolderType": "Typ av mapp:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/tr.json b/MediaBrowser.Server.Implementations/Localization/Server/tr.json index a37151337..5cfd05f9c 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/tr.json @@ -37,6 +37,18 @@ "ButtonOk": "Tamam", "ButtonCancel": "\u0130ptal", "ButtonNew": "Yeni", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "Medya k\u00fct\u00fcphaneni kur", "ButtonAddMediaFolder": "Yeni Media Klas\u00f6r\u00fc", "LabelFolderType": "Klas\u00f6r T\u00fcr\u00fc:", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/vi.json b/MediaBrowser.Server.Implementations/Localization/Server/vi.json index 8c27d0186..8b5d61a49 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/vi.json @@ -37,6 +37,18 @@ "ButtonOk": "Ok", "ButtonCancel": "Tho\u00e1t", "ButtonNew": "M\u1edbi", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "C\u00e0i \u0111\u1eb7t th\u01b0 vi\u1ec7n media c\u1ee7a b\u1ea1n", "ButtonAddMediaFolder": "Th\u00eam m\u1ed9t th\u01b0 m\u1ee5c media", "LabelFolderType": "Lo\u1ea1i th\u01b0 m\u1ee5c", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json index c26ca2b53..bc76e6575 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_CN.json @@ -37,6 +37,18 @@ "ButtonOk": "\u786e\u5b9a", "ButtonCancel": "\u53d6\u6d88", "ButtonNew": "\u65b0\u589e", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "\u7535\u5f71", + "FolderTypeMusic": "\u97f3\u4e50", + "FolderTypeAdultVideos": "\u6210\u4eba\u89c6\u9891", + "FolderTypePhotos": "\u56fe\u7247", + "FolderTypeMusicVideos": "\u97f3\u4e50\u89c6\u9891", + "FolderTypeHomeVideos": "\u5bb6\u5ead\u89c6\u9891", + "FolderTypeGames": "\u6e38\u620f", + "FolderTypeBooks": "\u4e66\u7c4d", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "\u8bbe\u7f6e\u4f60\u7684\u5a92\u4f53\u5e93", "ButtonAddMediaFolder": "\u6dfb\u52a0\u5a92\u4f53\u6587\u4ef6\u5939", "LabelFolderType": "\u6587\u4ef6\u5939\u7c7b\u578b\uff1a", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json index 487f58dbb..29fb94c4b 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/zh_TW.json @@ -37,6 +37,18 @@ "ButtonOk": "OK", "ButtonCancel": "\u53d6\u6d88", "ButtonNew": "\u5275\u5efa", + "FolderTypeMixed": "Mixed content", + "FolderTypeMovies": "Movies", + "FolderTypeMusic": "Music", + "FolderTypeAdultVideos": "Adult videos", + "FolderTypePhotos": "Photos", + "FolderTypeMusicVideos": "Music videos", + "FolderTypeHomeVideos": "Home videos", + "FolderTypeGames": "Games", + "FolderTypeBooks": "Books", + "FolderTypeTvShows": "TV", + "FolderTypeInherit": "Inherit", + "LabelContentType": "Content type:", "HeaderSetupLibrary": "\u8a2d\u7f6e\u4f60\u7684\u5a92\u9ad4\u5eab", "ButtonAddMediaFolder": "\u6dfb\u52a0\u5a92\u9ad4\u6587\u4ef6\u593e", "LabelFolderType": "\u5a92\u9ad4\u6587\u4ef6\u593e\u985e\u578b\uff1a", @@ -1245,7 +1257,7 @@ "HeaderTrailerReel": "Trailer Reel", "OptionPlayUnwatchedTrailersOnly": "Play only unwatched trailers", "HeaderTrailerReelHelp": "Start a trailer reel to play a long running playlist of trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", + "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", "HeaderNewUsers": "New Users", "ButtonSignUp": "Sign up", "ButtonForgotPassword": "Forgot password?", @@ -1279,5 +1291,8 @@ "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl.", "TabActivity": "Activity", "TitleSync": "Sync", - "OptionAllowSyncContent": "Allow syncing media to devices" + "OptionAllowSyncContent": "Allow syncing media to devices", + "NameSeasonUnknown": "Season Unknown", + "NameSeasonNumber": "Season {0}", + "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 32168f82b..a9e257a8c 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -266,6 +266,12 @@ namespace MediaBrowser.Server.Implementations.Sync return false; } + // It would be nice to support these later + if (item is Game || item is Book) + { + return false; + } + return true; } diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 8f4e916dd..3fd559a4d 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.530 + 3.0.532 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 01fe110fb..84eec30d6 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.530 + 3.0.532 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 86a6d19d3..ad3bd826d 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.530 + 3.0.532 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 686396f89..191ab9e88 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.530 + 3.0.532 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 7bce2e04b618671faafc32a39978d0d8c87cba21 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 27 Dec 2014 17:52:41 -0500 Subject: sync updates --- MediaBrowser.Api/Sync/SyncService.cs | 12 ++++++++ MediaBrowser.Controller/Entities/BaseItem.cs | 2 +- .../Net/IWebSocketConnection.cs | 3 +- MediaBrowser.Controller/Sync/ISyncManager.cs | 14 ++++----- MediaBrowser.Dlna/Main/DlnaEntryPoint.cs | 1 - .../Configuration/ServerConfiguration.cs | 2 ++ MediaBrowser.Model/Sync/DeviceFileInfo.cs | 2 +- MediaBrowser.Model/Sync/ItemFIleInfo.cs | 2 +- .../Connect/ConnectEntryPoint.cs | 1 - .../EntryPoints/UdpServerEntryPoint.cs | 1 - .../EntryPoints/UsageEntryPoint.cs | 2 -- .../EntryPoints/UsageReporter.cs | 1 - .../HttpServer/HttpListenerHost.cs | 16 ++++++---- .../HttpServer/IHttpListener.cs | 5 ++-- .../HttpServer/NativeWebSocket.cs | 5 ++-- .../HttpServer/NetListener/HttpListenerServer.cs | 3 +- .../HttpServer/SocketSharp/SharpWebSocket.cs | 5 +--- .../SocketSharp/WebSocketSharpListener.cs | 3 +- .../ServerManager/WebSocketConnection.cs | 1 - .../Session/WebSocketController.cs | 3 +- .../Sync/SyncManager.cs | 20 +++++++++---- .../Sync/SyncRepository.cs | 16 ++++++---- .../Udp/UdpServer.cs | 1 - MediaBrowser.Server.Mac/Native/BaseMonoApp.cs | 2 +- MediaBrowser.Server.Mono/Native/BaseMonoApp.cs | 3 +- .../Networking/NetworkManager.cs | 1 - .../ApplicationHost.cs | 35 +++++++++++----------- MediaBrowser.Server.Startup.Common/INativeApp.cs | 6 ++-- .../Native/RegisterServer.bat | 18 ++++------- .../Native/ServerAuthorization.cs | 9 ++---- .../Native/WindowsApp.cs | 5 ++-- .../Networking/NetworkManager.cs | 1 - Nuget/MediaBrowser.Common.Internal.nuspec | 4 +-- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +-- 36 files changed, 109 insertions(+), 104 deletions(-) (limited to 'Nuget/MediaBrowser.Model.Signed.nuspec') diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index ab4e75923..0036b316f 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -85,6 +85,13 @@ namespace MediaBrowser.Api.Sync { } + [Route("/Sync/Items/Ready", "GET", Summary = "Gets ready to download sync items.")] + public class GetReadySyncItems : IReturn> + { + [ApiMember(Name = "TargetId", Description = "TargetId", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public string TargetId { get; set; } + } + [Authenticated] public class SyncService : BaseApiService { @@ -207,5 +214,10 @@ namespace MediaBrowser.Api.Sync await _syncManager.ReportOfflineAction(action).ConfigureAwait(false); } } + + public object Get(GetReadySyncItems request) + { + return ToOptimizedResult(_syncManager.GetReadySyncItems(request.TargetId)); + } } } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index aea04187d..90427de75 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -14,6 +14,7 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Library; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Users; using System; using System.Collections.Generic; using System.IO; @@ -21,7 +22,6 @@ using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Users; namespace MediaBrowser.Controller.Entities { diff --git a/MediaBrowser.Controller/Net/IWebSocketConnection.cs b/MediaBrowser.Controller/Net/IWebSocketConnection.cs index 83ead5a12..37fd6708d 100644 --- a/MediaBrowser.Controller/Net/IWebSocketConnection.cs +++ b/MediaBrowser.Controller/Net/IWebSocketConnection.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Model.Net; +using MediaBrowser.Model.Net; using System; using System.Threading; using System.Threading.Tasks; diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs index e16a978c3..39cec4f00 100644 --- a/MediaBrowser.Controller/Sync/ISyncManager.cs +++ b/MediaBrowser.Controller/Sync/ISyncManager.cs @@ -82,18 +82,18 @@ namespace MediaBrowser.Controller.Sync /// SyncJobItem. SyncJobItem GetJobItem(string id); - /// - /// Gets the job item information. - /// - /// The identifier. - /// SyncedItem. - SyncedItem GetJobItemInfo(string id); - /// /// Reports the offline action. /// /// The action. /// Task. Task ReportOfflineAction(UserAction action); + + /// + /// Gets the ready synchronize items. + /// + /// The target identifier. + /// List<SyncedItem>. + List GetReadySyncItems(string targetId); } } diff --git a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs index dc4aff190..810b1e568 100644 --- a/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs +++ b/MediaBrowser.Dlna/Main/DlnaEntryPoint.cs @@ -7,7 +7,6 @@ using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; -using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Session; diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 730735499..ba5b6a122 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -165,6 +165,7 @@ namespace MediaBrowser.Model.Configuration public string[] InsecureApps7 { get; set; } public bool SaveMetadataHidden { get; set; } + public bool EnableWin8HttpListener { get; set; } public NameValuePair[] ContentTypes { get; set; } @@ -180,6 +181,7 @@ namespace MediaBrowser.Model.Configuration EnableDashboardResponseCaching = true; EnableAutomaticRestart = true; + EnableWin8HttpListener = true; EnableUPnP = true; diff --git a/MediaBrowser.Model/Sync/DeviceFileInfo.cs b/MediaBrowser.Model/Sync/DeviceFileInfo.cs index bc93b69bc..bb9a0c6ef 100644 --- a/MediaBrowser.Model/Sync/DeviceFileInfo.cs +++ b/MediaBrowser.Model/Sync/DeviceFileInfo.cs @@ -3,7 +3,7 @@ namespace MediaBrowser.Model.Sync { public class DeviceFileInfo { - public string Path { get; set; } + public string[] Path { get; set; } public string Name { get; set; } } } diff --git a/MediaBrowser.Model/Sync/ItemFIleInfo.cs b/MediaBrowser.Model/Sync/ItemFIleInfo.cs index 8095b0cff..ef19973a2 100644 --- a/MediaBrowser.Model/Sync/ItemFIleInfo.cs +++ b/MediaBrowser.Model/Sync/ItemFIleInfo.cs @@ -18,7 +18,7 @@ namespace MediaBrowser.Model.Sync /// Gets or sets the path. /// /// The path. - public string Path { get; set; } + public string[] Path { get; set; } /// /// Gets or sets the type of the image. /// diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs index 5acec2d6b..52ec5c9b1 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs @@ -1,7 +1,6 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Connect; -using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Plugins; using MediaBrowser.Model.Logging; using System; diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs b/MediaBrowser.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs index d97ccb9bd..386c16513 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller; -using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Plugins; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageEntryPoint.cs b/MediaBrowser.Server.Implementations/EntryPoints/UsageEntryPoint.cs index 098a1d2bd..fcc664011 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/UsageEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/UsageEntryPoint.cs @@ -1,8 +1,6 @@ using MediaBrowser.Common; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.Security; using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Logging; diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs index 940be6d02..36ba55828 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Controller.Net; namespace MediaBrowser.Server.Implementations.EntryPoints { diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs index b754a943a..c3228db92 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -1,7 +1,6 @@ using Funq; using MediaBrowser.Common; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Net; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations.HttpServer.NetListener; @@ -205,10 +204,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer { HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First()); - _listener = _supportsNativeWebSocket && NativeWebSocket.IsSupported - //? _listener = new HttpListenerServer(_logger, OnRequestReceived) - ? _listener = new WebSocketSharpListener(_logger, OnRequestReceived) - : _listener = new WebSocketSharpListener(_logger, OnRequestReceived); + _listener = GetListener(); _listener.WebSocketHandler = WebSocketHandler; _listener.ErrorHandler = ErrorHandler; @@ -217,6 +213,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer _listener.Start(UrlPrefixes); } + private IHttpListener GetListener() + { + if (_supportsNativeWebSocket && NativeWebSocket.IsSupported) + { + return new HttpListenerServer(_logger, OnRequestReceived); + } + + return new WebSocketSharpListener(_logger, OnRequestReceived); + } + private void WebSocketHandler(WebSocketConnectEventArgs args) { if (WebSocketConnected != null) diff --git a/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs index dfde34e25..e77600e93 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/IHttpListener.cs @@ -1,9 +1,8 @@ -using System.Threading.Tasks; -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Net; using ServiceStack.Web; using System; using System.Collections.Generic; +using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.HttpServer { diff --git a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs index f8e8bb9dd..cac2f8e09 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs @@ -1,10 +1,9 @@ -using System.Text; -using MediaBrowser.Common.Events; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Events; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using System; using System.Net.WebSockets; +using System.Text; using System.Threading; using System.Threading.Tasks; using WebSocketMessageType = MediaBrowser.Model.Net.WebSocketMessageType; diff --git a/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs b/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs index 9635854d4..31c0e87b3 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using ServiceStack; using ServiceStack.Host.HttpListener; diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs index 354b1e20f..401d49325 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs @@ -1,12 +1,9 @@ -using System.Text; -using MediaBrowser.Common.Events; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Events; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using System; using System.Threading; using System.Threading.Tasks; -using WebSocketMessageType = MediaBrowser.Model.Net.WebSocketMessageType; using WebSocketState = MediaBrowser.Model.Net.WebSocketState; namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs index ffaecc0d5..4d2d57b6e 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using ServiceStack; using ServiceStack.Web; diff --git a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs index a8950da89..9f75d522c 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Events; -using MediaBrowser.Common.Net; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; diff --git a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs b/MediaBrowser.Server.Implementations/Session/WebSocketController.cs index 0788ed2ce..8eb129876 100644 --- a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs +++ b/MediaBrowser.Server.Implementations/Session/WebSocketController.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index a9e257a8c..22d0ee5e7 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -32,12 +32,12 @@ namespace MediaBrowser.Server.Implementations.Sync private readonly IImageProcessor _imageProcessor; private readonly ILogger _logger; private readonly IUserManager _userManager; - private readonly IDtoService _dtoService; + private readonly Func _dtoService; private readonly IApplicationHost _appHost; private ISyncProvider[] _providers = { }; - public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, IDtoService dtoService, IApplicationHost appHost) + public SyncManager(ILibraryManager libraryManager, ISyncRepository repo, IImageProcessor imageProcessor, ILogger logger, IUserManager userManager, Func dtoService, IApplicationHost appHost) { _libraryManager = libraryManager; _repo = repo; @@ -323,9 +323,8 @@ namespace MediaBrowser.Server.Implementations.Sync return _repo.GetJobItems(query); } - public SyncedItem GetJobItemInfo(string id) + private SyncedItem GetJobItemInfo(SyncJobItem jobItem) { - var jobItem = GetJobItem(id); var job = _repo.GetJob(jobItem.JobId); var libraryItem = _libraryManager.GetItemById(jobItem.ItemId); @@ -338,7 +337,7 @@ namespace MediaBrowser.Server.Implementations.Sync UserId = job.UserId }; - syncedItem.Item = _dtoService.GetBaseItemDto(libraryItem, new DtoOptions()); + syncedItem.Item = _dtoService().GetBaseItemDto(libraryItem, new DtoOptions()); // TODO: this should be the media source of the transcoded output syncedItem.Item.MediaSources = syncedItem.Item.MediaSources @@ -365,5 +364,16 @@ namespace MediaBrowser.Server.Implementations.Sync { return Task.FromResult(true); } + + public List GetReadySyncItems(string targetId) + { + var jobItemResult = GetJobItems(new SyncJobItemQuery + { + TargetId = targetId, + //Status = SyncJobItemStatus.Transferring + }); + + return jobItemResult.Items.Select(GetJobItemInfo).ToList(); + } } } diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index 2ff6d7ae6..a981ffc57 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, "sync7.db"); + var dbFile = Path.Combine(_appPaths.DataPath, "sync8.db"); _connection = await SqliteExtensions.ConnectToDb(dbFile, _logger).ConfigureAwait(false); @@ -298,7 +298,8 @@ namespace MediaBrowser.Server.Implementations.Sync _deleteJobCommand.Transaction = transaction; _deleteJobCommand.ExecuteNonQuery(); - _deleteJobItemsCommand.GetParameter(index++).Value = new Guid(id); + index = 0; + _deleteJobItemsCommand.GetParameter(index++).Value = id; _deleteJobItemsCommand.Transaction = transaction; _deleteJobItemsCommand.ExecuteNonQuery(); @@ -607,11 +608,16 @@ namespace MediaBrowser.Server.Implementations.Sync var info = new SyncJobItem { Id = reader.GetGuid(0).ToString("N"), - ItemId = reader.GetString(1), - MediaSourceId = reader.GetString(2), - JobId = reader.GetString(3) + ItemId = reader.GetString(1) }; + if (!reader.IsDBNull(2)) + { + info.MediaSourceId = reader.GetString(2); + } + + info.JobId = reader.GetString(3); + if (!reader.IsDBNull(4)) { info.OutputPath = reader.GetString(4); diff --git a/MediaBrowser.Server.Implementations/Udp/UdpServer.cs b/MediaBrowser.Server.Implementations/Udp/UdpServer.cs index d80e0b66e..91a4940ae 100644 --- a/MediaBrowser.Server.Implementations/Udp/UdpServer.cs +++ b/MediaBrowser.Server.Implementations/Udp/UdpServer.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller; -using MediaBrowser.Controller.Net; using MediaBrowser.Model.ApiClient; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; diff --git a/MediaBrowser.Server.Mac/Native/BaseMonoApp.cs b/MediaBrowser.Server.Mac/Native/BaseMonoApp.cs index a2c860413..576b5b75f 100644 --- a/MediaBrowser.Server.Mac/Native/BaseMonoApp.cs +++ b/MediaBrowser.Server.Mac/Native/BaseMonoApp.cs @@ -67,7 +67,7 @@ namespace MediaBrowser.Server.Mac return list; } - public void AuthorizeServer(int httpServerPort, string httpServerUrlPrefix, int udpPort, string tempDirectory) + public void AuthorizeServer(int udpPort, int httpServerPort, string tempDirectory) { } diff --git a/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs b/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs index 227c32242..7f61570a4 100644 --- a/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs +++ b/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; using MediaBrowser.IsoMounter; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Mono.Networking; @@ -84,7 +83,7 @@ namespace MediaBrowser.Server.Mono.Native return list; } - public void AuthorizeServer(int httpServerPort, string httpServerUrlPrefix, int udpPort, string tempDirectory) + public void AuthorizeServer(int udpPort, int httpServerPort, string tempDirectory) { } diff --git a/MediaBrowser.Server.Mono/Networking/NetworkManager.cs b/MediaBrowser.Server.Mono/Networking/NetworkManager.cs index d76a7c7ee..60c250115 100644 --- a/MediaBrowser.Server.Mono/Networking/NetworkManager.cs +++ b/MediaBrowser.Server.Mono/Networking/NetworkManager.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Implementations.Networking; using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 06d63b355..8398c63cb 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -224,7 +224,7 @@ namespace MediaBrowser.Server.Startup.Common private readonly StartupOptions _startupOptions; private readonly string _remotePackageName; - private readonly bool _supportsNativeWebSocket; + private bool _supportsNativeWebSocket; internal INativeApp NativeApp { get; set; } @@ -454,6 +454,18 @@ namespace MediaBrowser.Server.Startup.Common RegisterSingleInstance(() => new SearchEngine(LogManager, LibraryManager, UserManager)); + if (IsFirstRun) + { + ServerConfigurationManager.Configuration.EnableWin8HttpListener = false; + ServerConfigurationManager.SaveConfiguration(); + _supportsNativeWebSocket = false; + } + + if (!ServerConfigurationManager.Configuration.EnableWin8HttpListener) + { + _supportsNativeWebSocket = false; + } + HttpServer = ServerFactory.CreateServer(this, LogManager, "Media Browser", WebApplicationName, "dashboard/index.html", _supportsNativeWebSocket); RegisterSingleInstance(HttpServer, false); progress.Report(10); @@ -470,7 +482,7 @@ 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); + SyncManager = new SyncManager(LibraryManager, SyncRepository, ImageProcessor, LogManager.GetLogger("SyncManager"), UserManager, () => DtoService, this); RegisterSingleInstance(SyncManager); DtoService = new DtoService(Logger, LibraryManager, UserDataManager, ItemRepository, ImageProcessor, ServerConfigurationManager, FileSystemManager, ProviderManager, () => ChannelManager, SyncManager, this); @@ -735,7 +747,7 @@ namespace MediaBrowser.Server.Startup.Common ServerManager.AddWebSocketListeners(GetExports(false)); - StartServer(true); + StartServer(); LibraryManager.AddParts(GetExports(), GetExports(), @@ -773,8 +785,7 @@ namespace MediaBrowser.Server.Startup.Common /// /// Starts the server. /// - /// if set to true [retry on failure]. - private void StartServer(bool retryOnFailure) + private void StartServer() { try { @@ -784,16 +795,7 @@ namespace MediaBrowser.Server.Startup.Common { Logger.ErrorException("Error starting http server", ex); - if (retryOnFailure) - { - RegisterServerWithAdministratorAccess(); - - StartServer(false); - } - else - { - throw; - } + throw; } } @@ -1070,9 +1072,8 @@ namespace MediaBrowser.Server.Startup.Common try { NativeApp.AuthorizeServer( - ServerConfigurationManager.Configuration.HttpServerPortNumber, - HttpServerUrlPrefixes.First(), UdpServerEntryPoint.PortNumber, + ServerConfigurationManager.Configuration.HttpServerPortNumber, ConfigurationManager.CommonApplicationPaths.TempDirectory); } catch (Exception ex) diff --git a/MediaBrowser.Server.Startup.Common/INativeApp.cs b/MediaBrowser.Server.Startup.Common/INativeApp.cs index cf0135fa8..4abea57fb 100644 --- a/MediaBrowser.Server.Startup.Common/INativeApp.cs +++ b/MediaBrowser.Server.Startup.Common/INativeApp.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using System.Collections.Generic; using System.Reflection; @@ -17,11 +16,10 @@ namespace MediaBrowser.Server.Startup.Common /// /// Authorizes the server. /// - /// The HTTP server port. - /// The HTTP server URL prefix. /// The UDP port. + /// The HTTP server port. /// The temporary directory. - void AuthorizeServer(int httpServerPort, string httpServerUrlPrefix, int udpPort, string tempDirectory); + void AuthorizeServer(int udpPort, int httpServerPort, string tempDirectory); /// /// Gets the environment. diff --git a/MediaBrowser.ServerApplication/Native/RegisterServer.bat b/MediaBrowser.ServerApplication/Native/RegisterServer.bat index 350412344..3346ecb31 100644 --- a/MediaBrowser.ServerApplication/Native/RegisterServer.bat +++ b/MediaBrowser.ServerApplication/Native/RegisterServer.bat @@ -1,21 +1,15 @@ -rem %1 = http server port -rem %2 = http server url -rem %3 = udp server port +rem %1 = udp server port +rem %2 = http server port if [%1]==[] GOTO DONE -netsh advfirewall firewall delete rule name="Port %1" protocol=TCP localport=%1 -netsh advfirewall firewall add rule name="Port %1" dir=in action=allow protocol=TCP localport=%1 +netsh advfirewall firewall delete rule name="Port %1" protocol=UDP localport=%1 +netsh advfirewall firewall add rule name="Port %1" dir=in action=allow protocol=UDP localport=%1 if [%2]==[] GOTO DONE -netsh http del urlacl url="%2" user="NT AUTHORITY\Authenticated Users" -netsh http add urlacl url="%2" user="NT AUTHORITY\Authenticated Users" - -if [%3]==[] GOTO DONE - -netsh advfirewall firewall delete rule name="Port %3" protocol=UDP localport=%3 -netsh advfirewall firewall add rule name="Port %3" dir=in action=allow protocol=UDP localport=%3 +netsh advfirewall firewall delete rule name="Port %2" protocol=TCP localport=%2 +netsh advfirewall firewall add rule name="Port %2" dir=in action=allow protocol=TCP localport=%2 :DONE diff --git a/MediaBrowser.ServerApplication/Native/ServerAuthorization.cs b/MediaBrowser.ServerApplication/Native/ServerAuthorization.cs index e5989db3b..d9063aa58 100644 --- a/MediaBrowser.ServerApplication/Native/ServerAuthorization.cs +++ b/MediaBrowser.ServerApplication/Native/ServerAuthorization.cs @@ -13,11 +13,10 @@ namespace MediaBrowser.ServerApplication.Native /// /// Authorizes the server. /// - /// The HTTP server port. - /// The HTTP server URL prefix. /// The UDP port. + /// The HTTP server port. /// The temp directory. - public static void AuthorizeServer(int httpServerPort, string httpServerUrlPrefix, int udpPort, string tempDirectory) + public static void AuthorizeServer(int udpPort, int httpServerPort, string tempDirectory) { Directory.CreateDirectory(tempDirectory); @@ -37,9 +36,7 @@ namespace MediaBrowser.ServerApplication.Native { FileName = tmpFile, - Arguments = string.Format("{0} {1} {2}", httpServerPort, - httpServerUrlPrefix, - udpPort), + Arguments = string.Format("{0} {1}", udpPort, httpServerPort), CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, diff --git a/MediaBrowser.ServerApplication/Native/WindowsApp.cs b/MediaBrowser.ServerApplication/Native/WindowsApp.cs index 071216418..0970d6537 100644 --- a/MediaBrowser.ServerApplication/Native/WindowsApp.cs +++ b/MediaBrowser.ServerApplication/Native/WindowsApp.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; using MediaBrowser.IsoMounter; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Startup.Common; @@ -22,9 +21,9 @@ namespace MediaBrowser.ServerApplication.Native return list; } - public void AuthorizeServer(int httpServerPort, string httpServerUrlPrefix, int udpPort, string tempDirectory) + public void AuthorizeServer(int httpServerPort, int udpPort, string tempDirectory) { - ServerAuthorization.AuthorizeServer(httpServerPort, httpServerUrlPrefix, udpPort, tempDirectory); + ServerAuthorization.AuthorizeServer(udpPort, httpServerPort, tempDirectory); } public NativeEnvironment Environment diff --git a/MediaBrowser.ServerApplication/Networking/NetworkManager.cs b/MediaBrowser.ServerApplication/Networking/NetworkManager.cs index 4dbe0f347..fc4d26363 100644 --- a/MediaBrowser.ServerApplication/Networking/NetworkManager.cs +++ b/MediaBrowser.ServerApplication/Networking/NetworkManager.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Implementations.Networking; using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Net; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 3fd559a4d..80e2f32f7 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.532 + 3.0.533 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 84eec30d6..8c22ebb5d 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.532 + 3.0.533 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index ad3bd826d..f313bd7a5 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.532 + 3.0.533 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 191ab9e88..a31f8023b 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.532 + 3.0.533 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 726cf9697aba40f26223789138fe0858ebb374bc Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 28 Dec 2014 12:59:40 -0500 Subject: sync updates --- MediaBrowser.Controller/Entities/Movies/BoxSet.cs | 2 +- .../Providers/DirectoryService.cs | 5 ++++ .../MediaBrowser.Model.Portable.csproj | 3 ++ .../MediaBrowser.Model.net35.csproj | 3 ++ MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + MediaBrowser.Model/Net/MimeTypes.cs | 14 +++++++-- MediaBrowser.Model/Sync/ItemFIleInfo.cs | 5 ---- MediaBrowser.Model/Sync/LocalItem.cs | 33 ++++++++++++++++++++++ .../Localization/JavaScript/ar.json | 4 +-- .../Localization/JavaScript/ca.json | 4 +-- .../Localization/JavaScript/cs.json | 4 +-- .../Localization/JavaScript/da.json | 4 +-- .../Localization/JavaScript/de.json | 4 +-- .../Localization/JavaScript/el.json | 4 +-- .../Localization/JavaScript/en_GB.json | 4 +-- .../Localization/JavaScript/en_US.json | 4 +-- .../Localization/JavaScript/es.json | 4 +-- .../Localization/JavaScript/es_MX.json | 10 +++---- .../Localization/JavaScript/fi.json | 4 +-- .../Localization/JavaScript/fr.json | 30 ++++++++++---------- .../Localization/JavaScript/he.json | 4 +-- .../Localization/JavaScript/hr.json | 4 +-- .../Localization/JavaScript/it.json | 4 +-- .../Localization/JavaScript/kk.json | 6 ++-- .../Localization/JavaScript/ms.json | 4 +-- .../Localization/JavaScript/nb.json | 4 +-- .../Localization/JavaScript/nl.json | 4 +-- .../Localization/JavaScript/pl.json | 4 +-- .../Localization/JavaScript/pt_BR.json | 10 +++---- .../Localization/JavaScript/pt_PT.json | 4 +-- .../Localization/JavaScript/ru.json | 10 +++---- .../Localization/JavaScript/sv.json | 4 +-- .../Localization/JavaScript/tr.json | 4 +-- .../Localization/JavaScript/vi.json | 4 +-- .../Localization/JavaScript/zh_CN.json | 4 +-- .../Localization/JavaScript/zh_TW.json | 4 +-- .../Localization/Server/ar.json | 4 +-- .../Localization/Server/ca.json | 4 +-- .../Localization/Server/el.json | 4 +-- .../Localization/Server/en_GB.json | 4 +-- .../Localization/Server/en_US.json | 4 +-- .../Localization/Server/es_MX.json | 14 ++++----- .../Localization/Server/fi.json | 4 +-- .../Localization/Server/fr.json | 18 ++++++------ .../Localization/Server/ko.json | 4 +-- .../Localization/Server/ms.json | 4 +-- .../Localization/Server/pl.json | 4 +-- .../Localization/Server/pt_BR.json | 2 +- .../Localization/Server/ru.json | 2 +- .../Localization/Server/tr.json | 4 +-- .../Localization/Server/vi.json | 4 +-- .../Sync/SyncScheduledTask.cs | 2 +- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +-- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +-- 56 files changed, 184 insertions(+), 134 deletions(-) create mode 100644 MediaBrowser.Model/Sync/LocalItem.cs (limited to 'Nuget/MediaBrowser.Model.Signed.nuspec') diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs index 8d3cf9bad..4483c7b0f 100644 --- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs +++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs @@ -174,7 +174,7 @@ namespace MediaBrowser.Controller.Entities.Movies // Need to check Count > 0 for boxsets created prior to the introduction of Shares if (Shares.Count > 0 && !Shares.Any(i => string.Equals(userId, i.UserId, StringComparison.OrdinalIgnoreCase))) { - return false; + //return false; } return true; diff --git a/MediaBrowser.Controller/Providers/DirectoryService.cs b/MediaBrowser.Controller/Providers/DirectoryService.cs index 74a9c6606..06ea7be02 100644 --- a/MediaBrowser.Controller/Providers/DirectoryService.cs +++ b/MediaBrowser.Controller/Providers/DirectoryService.cs @@ -46,6 +46,11 @@ namespace MediaBrowser.Controller.Providers private Dictionary GetFileSystemDictionary(string path, bool clearCache) { + if (string.IsNullOrWhiteSpace(path)) + { + throw new ArgumentNullException("path"); + } + Dictionary entries; if (clearCache) diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 919e2f8ee..f4d92b6f3 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -1049,6 +1049,9 @@ Sync\ItemFileType.cs + + Sync\LocalItem.cs + Sync\SyncCategory.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 9aab90766..b07e8557f 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -1008,6 +1008,9 @@ Sync\ItemFileType.cs + + Sync\LocalItem.cs + Sync\SyncCategory.cs diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index cf6aaa529..8ec271626 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -370,6 +370,7 @@ + diff --git a/MediaBrowser.Model/Net/MimeTypes.cs b/MediaBrowser.Model/Net/MimeTypes.cs index 6eaac8f03..19dda0603 100644 --- a/MediaBrowser.Model/Net/MimeTypes.cs +++ b/MediaBrowser.Model/Net/MimeTypes.cs @@ -72,7 +72,7 @@ namespace MediaBrowser.Model.Net {".asf", "video/x-ms-asf"}, {".m4v", "video/x-m4v"} }; - + private static readonly Dictionary ExtensionLookup = MimeTypeLookup .GroupBy(i => i.Value) @@ -267,7 +267,17 @@ namespace MediaBrowser.Model.Net public static string ToExtension(string mimeType) { - return ExtensionLookup[mimeType]; + if (string.IsNullOrEmpty(mimeType)) + { + throw new ArgumentNullException("mimeType"); + } + + string result; + if (ExtensionLookup.TryGetValue(mimeType, out result)) + { + return result; + } + throw new ArgumentNullException("Unable to determine extension for mimeType: " + mimeType); } } } diff --git a/MediaBrowser.Model/Sync/ItemFIleInfo.cs b/MediaBrowser.Model/Sync/ItemFIleInfo.cs index ef19973a2..f0829bc2b 100644 --- a/MediaBrowser.Model/Sync/ItemFIleInfo.cs +++ b/MediaBrowser.Model/Sync/ItemFIleInfo.cs @@ -24,10 +24,5 @@ namespace MediaBrowser.Model.Sync /// /// The type of the image. public ImageType ImageType { get; set; } - /// - /// Gets or sets the item identifier. - /// - /// The item identifier. - public string ItemId { get; set; } } } diff --git a/MediaBrowser.Model/Sync/LocalItem.cs b/MediaBrowser.Model/Sync/LocalItem.cs new file mode 100644 index 000000000..9e660c590 --- /dev/null +++ b/MediaBrowser.Model/Sync/LocalItem.cs @@ -0,0 +1,33 @@ +using MediaBrowser.Model.Dto; + +namespace MediaBrowser.Model.Sync +{ + public class LocalItem + { + /// + /// Gets or sets the item. + /// + /// The item. + public BaseItemDto Item { get; set; } + /// + /// Gets or sets the local path. + /// + /// The local path. + public string[] LocalPath { get; set; } + /// + /// Gets or sets the server identifier. + /// + /// The server identifier. + public string ServerId { get; set; } + /// + /// Gets or sets the unique identifier. + /// + /// The unique identifier. + public string UniqueId { get; set; } + /// + /// Gets or sets the item identifier. + /// + /// The item identifier. + public string ItemId { get; set; } + } +} diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json index f9db86337..b6087812f 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ar.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json index e12d1140d..29de370ad 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ca.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json index 025e5f1f1..fc416018d 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/cs.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json index 1d6114d93..a56d2d5b8 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/da.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json index f630a4460..b69b744b3 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/de.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Medienquellen", "LabelFolderTypeValue": "Verzeichnistyp: {0}", "LabelPathSubstitutionHelp": "Optional: Die Pfadersetzung kann Serverpfade zu Netzwerkfreigaben umleiten, die von Endger\u00e4ten f\u00fcr die direkte Wiedergabe genutzt werden k\u00f6nnen.", - "FolderTypeMixed": "Gemischte Inhalte", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Filme", "FolderTypeMusic": "Musik", "FolderTypeAdultVideos": "Videos f\u00fcr Erwachsene", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Legen Sie die maximale Anzahl der zu synchronisierenden Eintr\u00e4ge fest.", "MessageBookPluginRequired": "Setzt die Installation des Bookshelf-Plugins voraus.", "MessageGamePluginRequired": "Setzt die Installation des GameBrowser-Plugins voraus.", - "MessageMixedContentHelp": "Inhalt wird als Verzeichnisstruktur angezeigt." + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json index 83d75387f..455649264 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/el.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json index 3bdc566fa..a667f6df9 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_GB.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json index 92b5d3886..4c57d573b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/en_US.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json index 470c2da3e..73b3098c1 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json index 8b4346aac..67e107c1b 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/es_MX.json @@ -40,7 +40,7 @@ "LabelStopping": "Deteniendo", "LabelCancelled": "(cancelado)", "LabelFailed": "(Fallido)", - "ButtonHelp": "Help", + "ButtonHelp": "Ayuda", "LabelAbortedByServerShutdown": "(Abortada por apagado del servidor)", "LabelScheduledTaskLastRan": "Ejecutado hace {0}, tomando {1}.", "HeaderDeleteTaskTrigger": "Borrar Disparador de Tarea", @@ -250,7 +250,7 @@ "ButtonMoveRight": "Mover a la derecha", "ButtonBrowseOnlineImages": "Buscar im\u00e1genes en l\u00ednea", "HeaderDeleteItem": "Eliminar \u00cdtem", - "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", + "ConfirmDeleteItem": "Al eliminar este \u00edtem se eliminar\u00e1 tanto del sistema de archivos como de su biblioteca de medios. \u00bfEsta seguro de querer continuar?", "MessagePleaseEnterNameOrId": "Por favor ingrese un nombre o id externo.", "MessageValueNotCorrect": "El valor ingresado no es correcto. Intente nuevamente por favor.", "MessageItemSaved": "\u00cdtem guardado.", @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Ubicaciones de Medios", "LabelFolderTypeValue": "Tipo de carpeta: {0}", "LabelPathSubstitutionHelp": "Opcional: La sustituci\u00f3n de trayectoras puede mapear trayectorias del servidor a recursos de red comaprtidos que los clientes pueden acceder para reproducir de manera directa.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Pel\u00edculas", "FolderTypeMusic": "M\u00fasica", "FolderTypeAdultVideos": "Videos para adultos", @@ -589,7 +589,7 @@ "WebClientTourMobile2": "y controla f\u00e1cilmente otros dispositivos y apps de Media Browser", "MessageEnjoyYourStay": "Disfrute su visita", "DashboardTourDashboard": "El panel de control del servidor le permite monitorear su servidor y sus usuarios. Siempre sabr\u00e1 quien est\u00e1 haciendo qu\u00e9 y donde se encuentran.", - "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", + "DashboardTourHelp": "La ayuda dentro de la app proporciona botones simples para abrir p\u00e1ginas de la wiki relacionadas con el contenido en pantalla.", "DashboardTourUsers": "Cree cuentas f\u00e1cilmente para sus amigos y familia, cada una con sus propios permisos, accesos a la biblioteca, controles parentales y m\u00e1s.", "DashboardTourCinemaMode": "El modo cine trae la experiencia del cine directo a su sala de TV con la capacidad de reproducir avances e intros personalizados antes de la presentaci\u00f3n estelar.", "DashboardTourChapters": "Active la generaci\u00f3n de im\u00e1genes de cap\u00edtulos de sus videos para una presentaci\u00f3n m\u00e1s agradable al desplegar.", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Opcional. Establece un l\u00edmite en el n\u00famero de \u00edtems que ser\u00e1n sincronizados.", "MessageBookPluginRequired": "Requiere instalaci\u00f3n del complemento Bookshelf", "MessageGamePluginRequired": "Requiere instalaci\u00f3n del complemento de GameBrowser", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json index 47be20fee..6173cfe78 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fi.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json index 6d36705d4..3cb2cbd15 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/fr.json @@ -40,7 +40,7 @@ "LabelStopping": "En cours d'arr\u00eat", "LabelCancelled": "(annul\u00e9)", "LabelFailed": "(\u00e9chou\u00e9)", - "ButtonHelp": "Help", + "ButtonHelp": "Aide", "LabelAbortedByServerShutdown": "(Annul\u00e9 par fermeture du serveur)", "LabelScheduledTaskLastRan": "Derni\u00e8re ex\u00e9cution {0}, dur\u00e9e {1}.", "HeaderDeleteTaskTrigger": "Supprimer le d\u00e9clencheur de t\u00e2che", @@ -56,7 +56,7 @@ "LabelForcedStream": "(Forc\u00e9)", "LabelDefaultForcedStream": "(Par d\u00e9faut\/Forc\u00e9)", "LabelUnknownLanguage": "Langue inconnue", - "ButtonMute": "Sourdine", + "ButtonMute": "Muet", "ButtonUnmute": "D\u00e9sactiver sourdine", "ButtonStop": "Arr\u00eat", "ButtonNextTrack": "Piste suivante", @@ -78,7 +78,7 @@ "MessageInvalidUser": "Nom d'utilisateur ou mot de passe incorrect. R\u00e9essayer.", "HeaderLoginFailure": "\u00c9chec de la connection", "HeaderAllRecordings": "Tous les enregistrements", - "RecommendationBecauseYouLike": "Parce-que vous aimez {0}", + "RecommendationBecauseYouLike": "Parce que vous aimez {0}", "RecommendationBecauseYouWatched": "Parce que vous avez regard\u00e9 {0}", "RecommendationDirectedBy": "R\u00e9alis\u00e9 par {0}", "RecommendationStarring": "Mettant en vedette {0}", @@ -250,7 +250,7 @@ "ButtonMoveRight": "D\u00e9placer \u00e0 droite", "ButtonBrowseOnlineImages": "Parcourir les images en ligne", "HeaderDeleteItem": "Supprimer l'item", - "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", + "ConfirmDeleteItem": "Supprimer cet \u00e9l\u00e9ment l'effacera \u00e0 la fois du syst\u00e8me de fichiers et de votre biblioth\u00e8que de media. Etes-vous s\u00fbr de vouloir continuer ?", "MessagePleaseEnterNameOrId": "Merci de saisir un nom ou un ID externe.", "MessageValueNotCorrect": "La valeur saisie est incorrecte. Merci de r\u00e9\u00e9ssayer.", "MessageItemSaved": "Item sauvegard\u00e9.", @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Emplacement des M\u00e9dias", "LabelFolderTypeValue": "Type de r\u00e9pertoire: {0}", "LabelPathSubstitutionHelp": "Optionnel: La substitution de chemin peut rediriger les r\u00e9pertoires serveurs vers des partages r\u00e9seau afin que le client acc\u00e8de directement \u00e0 la lecture.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Non d\u00e9fini (contenu m\u00e9lang\u00e9)", "FolderTypeMovies": "Films", "FolderTypeMusic": "Musique", "FolderTypeAdultVideos": "Vid\u00e9os Adultes", @@ -589,7 +589,7 @@ "WebClientTourMobile2": "et controles facilement les autres p\u00e9riph\u00e9riques et applications Medi Browser", "MessageEnjoyYourStay": "Profitez en bien", "DashboardTourDashboard": "Le tableau de bord du serveur vous permet de g\u00e9rer votre serveur et vos utilisateurs. Vous saurez toujours qui fait quoi et o\u00f9 ils sont.", - "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", + "DashboardTourHelp": "L'aide contextuelle de l'application permet d'ouvrir les pages du wiki relatives au contenu affich\u00e9.", "DashboardTourUsers": "Cr\u00e9er facilement des comptes utilisateurs pour vos amis et votre famille, chacun avec ses propres droits, biblioth\u00e8ques accessibles, contr\u00f4le parental et plus encore.", "DashboardTourCinemaMode": "Le mode cin\u00e9ma apporte l'exp\u00e9rience du cin\u00e9ma directement dans votre salon avec l'abilit\u00e9 de lire les bandes-annonces et les introductions personnalis\u00e9es avant le programme principal.", "DashboardTourChapters": "Autoriser la g\u00e9n\u00e9ration des images des chapitres de vos vid\u00e9os pour une pr\u00e9sentation plus agr\u00e9able pendant le visionnage", @@ -639,18 +639,18 @@ "MessageSyncJobCreated": "Job de synchronisation cr\u00e9\u00e9.", "LabelSyncTo": "Synchronis\u00e9 avec:", "LabelSyncJobName": "Nom du job de synchronisation:", - "LabelQuality": "Quality:", - "OptionHigh": "High", - "OptionMedium": "Medium", + "LabelQuality": "Qualit\u00e9:", + "OptionHigh": "Haute", + "OptionMedium": "Moyenne", "OptionLow": "Basse", "HeaderSettings": "Param\u00e8tres", "OptionAutomaticallySyncNewContent": "Synchroniser automatiquement le nouveau contenu", - "OptionAutomaticallySyncNewContentHelp": "New content added to this category will be automatically synced to the device.", + "OptionAutomaticallySyncNewContentHelp": "Les nouveaux contenus ajout\u00e9s \u00e0 cette cat\u00e9gorie seront automatiquement synchronis\u00e9s avec le p\u00e9riph\u00e9rique.", "OptionSyncUnwatchedVideosOnly": "Synchroniser seulement les vid\u00e9os non lus.", "OptionSyncUnwatchedVideosOnlyHelp": "Seulement les vid\u00e9os non lus seront synchronis\u00e9es et seront supprim\u00e9es du p\u00e9riph\u00e9rique au fur et \u00e0 mesure qu'elles sont lus.", - "LabelItemLimit": "Item limit:", - "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", - "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", - "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "LabelItemLimit": "Maximum d'\u00e9l\u00e9ments :", + "LabelItemLimitHelp": "Optionnel : d\u00e9finit le nombre maximum d'\u00e9l\u00e9ments qui seront synchronis\u00e9s.", + "MessageBookPluginRequired": "N\u00e9cessite l'installation du plugin Bookshelf", + "MessageGamePluginRequired": "N\u00e9cessite l'installation du plugin GameBrowser", + "MessageUnsetContentHelp": "Le contenu sera affich\u00e9 sous forme de r\u00e9pertoires. Pour un r\u00e9sultat optimal, utilisez le gestionnaire de m\u00e9tadonn\u00e9es pour d\u00e9finir le type de contenu des sous-r\u00e9pertoires." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json index f0de0d006..adce0cb26 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/he.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json index 7ab7fa28c..e849dd453 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/hr.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json index f0664075c..d94d8adfd 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/it.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Posizioni Media", "LabelFolderTypeValue": "Tipo cartella: {0}", "LabelPathSubstitutionHelp": "Opzionale: cambio Path pu\u00f2 mappare i percorsi del server a condivisioni di rete che i clienti possono accedere per la riproduzione diretta.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Film", "FolderTypeMusic": "Musica", "FolderTypeAdultVideos": "Video per adulti", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json index 3a29b18c5..9f6f9312c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/kk.json @@ -40,7 +40,7 @@ "LabelStopping": "\u0422\u043e\u049b\u0442\u0430\u0442\u044b\u043b\u0443\u0434\u0430", "LabelCancelled": "(\u0431\u043e\u043b\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0434\u044b)", "LabelFailed": "(\u0441\u04d9\u0442\u0441\u0456\u0437)", - "ButtonHelp": "Help", + "ButtonHelp": "\u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430", "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", @@ -413,7 +413,7 @@ "HeaderMediaLocations": "\u0422\u0430\u0441\u0443\u0448\u044b \u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u043e\u0440\u043d\u0430\u043b\u0430\u0441\u0443\u043b\u0430\u0440\u044b", "LabelFolderTypeValue": "\u049a\u0430\u043b\u0442\u0430 \u0442\u04af\u0440\u0456: {0}", "LabelPathSubstitutionHelp": "\u049a\u0430\u043b\u0430\u0443 \u0431\u043e\u0439\u044b\u043d\u0448\u0430: \u0416\u043e\u043b \u0430\u043b\u043c\u0430\u0441\u0442\u044b\u0440\u0443 \u0430\u0440\u049b\u044b\u043b\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0434\u0435\u0433\u0456 \u0436\u043e\u043b\u0434\u0430\u0440\u0434\u044b \u0442\u0456\u043a\u0435\u043b\u0435\u0439 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043a\u043b\u0438\u0435\u043d\u0442\u0442\u0435\u0440 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0430 \u0430\u043b\u0430\u0442\u044b\u043d \u0436\u0435\u043b\u0456\u043b\u0456\u043a \u049b\u043e\u0440 \u043a\u04e9\u0437\u0434\u0435\u0440\u0456\u043c\u0435\u043d \u0431\u0430\u0439\u043b\u0430\u043d\u044b\u0441\u0442\u044b\u0440\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d.", - "FolderTypeMixed": "\u0410\u0440\u0430\u043b\u0430\u0441 \u043c\u0430\u0437\u043c\u04b1\u043d", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440", "FolderTypeMusic": "\u041c\u0443\u0437\u044b\u043a\u0430", "FolderTypeAdultVideos": "\u0415\u0440\u0435\u0441\u0435\u043a\u0442\u0456\u043a \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "\u049a\u0430\u043b\u0430\u0443 \u0431\u043e\u0439\u044b\u043d\u0448\u0430: \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u043b\u0430\u0442\u044b\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440 \u0441\u0430\u043d\u044b \u04af\u0448\u0456\u043d \u0448\u0435\u043a\u0442\u0456 \u043e\u0440\u043d\u0430\u0442\u044b\u04a3\u044b\u0437.", "MessageBookPluginRequired": "Bookshelf \u043f\u043b\u0430\u0433\u0438\u043d\u0456\u043d \u043e\u0440\u043d\u0430\u0442\u0443\u0434\u044b \u049b\u0430\u0436\u0435\u0442 \u0435\u0442\u0435\u0434\u0456", "MessageGamePluginRequired": "GameBrowser \u043f\u043b\u0430\u0433\u0438\u043d\u0456\u043d \u043e\u0440\u043d\u0430\u0442\u0443\u0434\u044b \u049b\u0430\u0436\u0435\u0442 \u0435\u0442\u0435\u0434\u0456", - "MessageMixedContentHelp": "\u041c\u0430\u0437\u043c\u04b1\u043d \u043a\u04d9\u0434\u0456\u043c\u0433\u0456 \u049b\u0430\u043b\u0442\u0430 \u049b\u04b1\u0440\u044b\u043b\u044b\u043c\u044b \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0435\u0434\u0456" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json index f09e00d60..2be125954 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ms.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json index 6cf511154..68f3430dc 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nb.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Steder", "LabelFolderTypeValue": "Mappe type: {0}", "LabelPathSubstitutionHelp": "Valgfritt: Sti erstatter kan koble server stier til nettverkressurser som klienter har tilgang til for direkte avspilling.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Filmer", "FolderTypeMusic": "Musikk", "FolderTypeAdultVideos": "Voksen videoer", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json index 748790ddf..78554eed8 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/nl.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locaties", "LabelFolderTypeValue": "Map type: {0}", "LabelPathSubstitutionHelp": "Optioneel: Pad vervanging kan server paden naar netwerk locaties verwijzen zodat clients direct kunnen afspelen.", - "FolderTypeMixed": "Gemengde inhoud", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Films", "FolderTypeMusic": "Muziek", "FolderTypeAdultVideos": "Adult video's", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optioneel. Een limiet stellen aan het aantal items die zullen worden gesynchroniseerd.", "MessageBookPluginRequired": "Vereist installatie van de Bookshelf plugin", "MessageGamePluginRequired": "Vereist installatie van de GameBrowser plugin", - "MessageMixedContentHelp": "Inhoud zal worden weergegeven als een gewone mappenstructuur" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json index 81b2a8c99..d957ab01f 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pl.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json index fb21a3383..fc26642b7 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_BR.json @@ -40,7 +40,7 @@ "LabelStopping": "Parando", "LabelCancelled": "(cancelado)", "LabelFailed": "(falhou)", - "ButtonHelp": "Help", + "ButtonHelp": "Ajuda", "LabelAbortedByServerShutdown": "(Abortada pelo desligamento do servidor)", "LabelScheduledTaskLastRan": "\u00daltima execu\u00e7\u00e3o {0}, demorando {1}.", "HeaderDeleteTaskTrigger": "Excluir Disparador da Tarefa", @@ -250,7 +250,7 @@ "ButtonMoveRight": "Mover \u00e0 direita", "ButtonBrowseOnlineImages": "Procurar imagens online", "HeaderDeleteItem": "Excluir item", - "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", + "ConfirmDeleteItem": "Excluir este item o excluir\u00e1 do sistema de arquivos e tamb\u00e9m da biblioteca de m\u00eddias. Deseja realmente continuar?", "MessagePleaseEnterNameOrId": "Por favor, digite um nome ou Id externo.", "MessageValueNotCorrect": "O valor digitado n\u00e3o est\u00e1 correto. Por favor, tente novamente.", "MessageItemSaved": "Item salvo.", @@ -413,7 +413,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.", - "FolderTypeMixed": "Conte\u00fado misto", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Filmes", "FolderTypeMusic": "M\u00fasica", "FolderTypeAdultVideos": "V\u00eddeos adultos", @@ -589,7 +589,7 @@ "WebClientTourMobile2": "e controle facilmente outros dispositivos e apps do Media Browser", "MessageEnjoyYourStay": "Divirta-se", "DashboardTourDashboard": "O painel do servidor permite monitorar seu servidor e seus usu\u00e1rios. Voc\u00ea sempre poder\u00e1 saber quem est\u00e1 fazendo o qu\u00ea e onde est\u00e3o.", - "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", + "DashboardTourHelp": "A ajuda dentro da app fornece bot\u00f5es para abrir p\u00e1ginas wiki relacionadas ao conte\u00fado na tela.", "DashboardTourUsers": "Crie facilmente contas de usu\u00e1rios para seus amigos e fam\u00edlia, cada um com sua permiss\u00e3o, acesso \u00e0 biblioteca, controle parental e mais.", "DashboardTourCinemaMode": "O modo cinema traz a experi\u00eancia do cinema para sua sala, permitindo reproduzir trailers e intros personalizadas antes da fun\u00e7\u00e3o principal.", "DashboardTourChapters": "Ative a gera\u00e7\u00e3o de imagem do cap\u00edtulo para seus v\u00eddeos para ter uma apresenta\u00e7\u00e3o mais prazeirosa.", @@ -652,5 +652,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", - "MessageMixedContentHelp": "O conte\u00fado ser\u00e1 exibido em uma estrutura de pasta simples" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ 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 5d9d5041b..099db56d1 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/pt_PT.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json index a87478359..3ca96a3b0 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/ru.json @@ -40,7 +40,7 @@ "LabelStopping": "\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430", "LabelCancelled": "(\u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043e)", "LabelFailed": "(\u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e)", - "ButtonHelp": "Help", + "ButtonHelp": "\u0421\u043f\u0440\u0430\u0432\u043a\u0430", "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", @@ -250,7 +250,7 @@ "ButtonMoveRight": "\u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0432\u043f\u0440\u0430\u0432\u043e", "ButtonBrowseOnlineImages": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0432 \u0441\u0435\u0442\u0438", "HeaderDeleteItem": "\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430", - "ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?", + "ConfirmDeleteItem": "\u041f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043e\u043d \u0443\u0434\u0430\u043b\u0438\u0442\u0441\u044f \u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0438 \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438. \u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?", "MessagePleaseEnterNameOrId": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 ID.", "MessageValueNotCorrect": "\u0412\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0432\u0435\u0440\u043d\u043e. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", "MessageItemSaved": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d.", @@ -413,7 +413,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.", - "FolderTypeMixed": "\u0420\u0430\u0437\u043d\u043e\u0442\u0438\u043f\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435", + "FolderTypeUnset": "Unset (mixed content)", "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", @@ -589,7 +589,7 @@ "WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser", "MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u044f\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f", "DashboardTourDashboard": "\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0412\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0442\u044c, \u043a\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u043c \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f.", - "DashboardTourHelp": "In-app help provides easy buttons to open wiki pages relating to the on-screen content.", + "DashboardTourHelp": "\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u0438\u043a\u0438-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e \u044d\u043a\u0440\u0430\u043d\u0430.", "DashboardTourUsers": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0447\u043b\u0435\u043d\u043e\u0432 \u0441\u0435\u043c\u044c\u0438, \u043a\u0430\u0436\u0434\u0443\u044e \u0441 \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u043c \u0438 \u0442.\u0434.", "DashboardTourCinemaMode": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u043d\u043e\u0437\u0430\u043b\u0430 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0432 \u0432\u0430\u0448\u0443 \u0433\u043e\u0441\u0442\u0438\u043d\u0443\u044e, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.", "DashboardTourChapters": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0441\u0446\u0435\u043d \u043a \u0432\u0438\u0434\u0435\u043e, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", @@ -652,5 +652,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", - "MessageMixedContentHelp": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ 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 03827f919..5a3facbb6 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/sv.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Lagringsplatser f\u00f6r media", "LabelFolderTypeValue": "Typ av mapp: {0}", "LabelPathSubstitutionHelp": "Tillval: S\u00f6kv\u00e4gsutbyte betyder att en plats p\u00e5 servern kopplas till en lokal fils\u00f6kv\u00e4g p\u00e5 en klient. P\u00e5 s\u00e5 s\u00e4tt f\u00e5r klienten direkt tillg\u00e5ng till material p\u00e5 servern och kan spela upp det direkt via n\u00e4tverket.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Filmer", "FolderTypeMusic": "Musik", "FolderTypeAdultVideos": "Inneh\u00e5ll f\u00f6r vuxna", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json index a94391c50..e6f5b4d79 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/tr.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json index 882e3f6a0..22ccfacc2 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/vi.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json index f0fef3b78..3bf1bf2a7 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_CN.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "\u5a92\u4f53\u4f4d\u7f6e", "LabelFolderTypeValue": "\u6587\u4ef6\u5939\u7c7b\u578b\uff1a {0}", "LabelPathSubstitutionHelp": "\u53ef\u9009\uff1a\u66ff\u4ee3\u8def\u5f84\u80fd\u628a\u670d\u52a1\u5668\u8def\u5f84\u6620\u5c04\u5230\u7f51\u7edc\u5171\u4eab\uff0c\u4ece\u800c\u4f7f\u5ba2\u6237\u7aef\u53ef\u4ee5\u76f4\u63a5\u64ad\u653e\u3002", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "\u7535\u5f71", "FolderTypeMusic": "\u97f3\u4e50", "FolderTypeAdultVideos": "\u6210\u4eba\u89c6\u9891", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json index 8bfd299e6..c7c4ecd88 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/zh_TW.json @@ -413,7 +413,7 @@ "HeaderMediaLocations": "Media Locations", "LabelFolderTypeValue": "Folder type: {0}", "LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", - "FolderTypeMixed": "Mixed content", + "FolderTypeUnset": "Unset (mixed content)", "FolderTypeMovies": "Movies", "FolderTypeMusic": "Music", "FolderTypeAdultVideos": "Adult videos", @@ -652,5 +652,5 @@ "LabelItemLimitHelp": "Optional. Set a limit to the number of items that will be synced.", "MessageBookPluginRequired": "Requires installation of the Bookshelf plugin", "MessageGamePluginRequired": "Requires installation of the GameBrowser plugin", - "MessageMixedContentHelp": "Content will be displayed as a plain folder structure" + "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders." } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ar.json b/MediaBrowser.Server.Implementations/Localization/Server/ar.json index 5bc0a8df1..2b2eea03f 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ar.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ar.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ca.json b/MediaBrowser.Server.Implementations/Localization/Server/ca.json index 312e5ef16..9492845d3 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ca.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/el.json b/MediaBrowser.Server.Implementations/Localization/Server/el.json index 985709822..767ae9720 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/el.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/el.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json index d48a279c4..52b11fead 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_GB.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json index 0aa8053e2..b14e8fcaa 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/en_US.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/en_US.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json index e780eab37..3b5c5add5 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/es_MX.json @@ -37,7 +37,7 @@ "ButtonOk": "Ok", "ButtonCancel": "Cancelar", "ButtonNew": "Nuevo", - "FolderTypeMixed": "Mixed content", + "FolderTypeMixed": "Contenido mezclado", "FolderTypeMovies": "Pel\u00edculas", "FolderTypeMusic": "M\u00fasica", "FolderTypeAdultVideos": "Videos para adultos", @@ -47,8 +47,8 @@ "FolderTypeGames": "Juegos", "FolderTypeBooks": "Libros", "FolderTypeTvShows": "TV", - "FolderTypeInherit": "Inherit", - "LabelContentType": "Content type:", + "FolderTypeInherit": "Heredar", + "LabelContentType": "Tipo de Contenido:", "HeaderSetupLibrary": "Configurar su biblioteca de medios", "ButtonAddMediaFolder": "Agregar carpeta de medios", "LabelFolderType": "Tipo de carpeta:", @@ -1257,7 +1257,7 @@ "HeaderTrailerReel": "Carrete de Avances", "OptionPlayUnwatchedTrailersOnly": "Reproducir \u00fanicamente avances no vistos", "HeaderTrailerReelHelp": "Iniciar un carrete de avances para reproducir una lista de reproducci\u00f3n de larga duraci\u00f3n de avances.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", + "MessageNoTrailersFound": "No se encontraron avances. Instale el canal de avances para mejorar su experiencia con pel\u00edculas al agregar una biblioteca de avances desde el Internet.", "HeaderNewUsers": "Nuevos Usuarios", "ButtonSignUp": "Registrarse", "ButtonForgotPassword": "\u00bfOlvidaste la contrase\u00f1a?", @@ -1292,7 +1292,7 @@ "TabActivity": "Actividad", "TitleSync": "Sinc", "OptionAllowSyncContent": "Permitir sincronizaci\u00f3n de medios con dispositivos", - "NameSeasonUnknown": "Season Unknown", - "NameSeasonNumber": "Season {0}", - "LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.)" + "NameSeasonUnknown": "Temporada Desconocida", + "NameSeasonNumber": "Temporada {0}", + "LabelNewUserNameHelp": "Los nombres de usuario pueden contener letras (a-z), n\u00fameros (0-9), guiones (-), guiones bajos (_) y puntos (.)" } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fi.json b/MediaBrowser.Server.Implementations/Localization/Server/fi.json index 46a1eb2ec..3386f4da5 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fi.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/fr.json b/MediaBrowser.Server.Implementations/Localization/Server/fr.json index a580a95db..f5fd910e8 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/fr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/fr.json @@ -15,7 +15,7 @@ "LabelFinish": "Terminer", "LabelNext": "Suivant", "LabelYoureDone": "Vous avez Termin\u00e9!", - "WelcomeToMediaBrowser": "Bienvenue \u00e0 Media Browser!", + "WelcomeToMediaBrowser": "Bienvenue sur Media Browser!", "TitleMediaBrowser": "Media Browser", "ThisWizardWillGuideYou": "Cet assistant vous guidera dans le processus de configuration. Pour commencer, merci de s\u00e9lectionner votre langue pr\u00e9f\u00e9r\u00e9e.", "TellUsAboutYourself": "Parlez-nous de vous", @@ -37,7 +37,7 @@ "ButtonOk": "Ok", "ButtonCancel": "Annuler", "ButtonNew": "Nouveau", - "FolderTypeMixed": "Mixed content", + "FolderTypeMixed": "Contenus m\u00e9lang\u00e9s", "FolderTypeMovies": "Films", "FolderTypeMusic": "Musique", "FolderTypeAdultVideos": "Vid\u00e9os Adultes", @@ -47,7 +47,7 @@ "FolderTypeGames": "Jeux", "FolderTypeBooks": "Livres", "FolderTypeTvShows": "TV", - "FolderTypeInherit": "Inherit", + "FolderTypeInherit": "H\u00e9rite", "LabelContentType": "Type de contenu :", "HeaderSetupLibrary": "Configurer votre biblioth\u00e8que de m\u00e9dia", "ButtonAddMediaFolder": "Ajouter un r\u00e9pertoire de m\u00e9dia", @@ -461,7 +461,7 @@ "CustomDlnaProfilesHelp": "Cr\u00e9er un profil personnalis\u00e9 pour cibler un nouveau p\u00e9riph\u00e9rique ou surpasser un profil syst\u00e8me.", "SystemDlnaProfilesHelp": "Les profils syst\u00e8mes sont en lecture seule. Les modifications apport\u00e9es \u00e0 un profil syst\u00e8me seront enregistr\u00e9es sous un nouveau profil personnalis\u00e9.", "TitleDashboard": "Tableau de bord", - "TabHome": "Portail", + "TabHome": "Accueil", "TabInfo": "Info", "HeaderLinks": "Liens", "HeaderSystemPaths": "Chemins d'acc\u00e8s syst\u00e8mes", @@ -540,7 +540,7 @@ "LabelDeleteEmptyFoldersHelp": "Activer cette option pour garder le r\u00e9pertoire de t\u00e9l\u00e9chargement vide.", "LabelDeleteLeftOverFiles": "Supprimer le reste des fichiers avec les extensions suivantes:", "LabelDeleteLeftOverFilesHelp": "S\u00e9parer par ;. Par exemple: .nfo;.txt", - "OptionOverwriteExistingEpisodes": "\u00c9craser les \u00e9pisodes existantes", + "OptionOverwriteExistingEpisodes": "\u00c9craser les \u00e9pisodes existants", "LabelTransferMethod": "M\u00e9thode de transfert", "OptionCopy": "Copier", "OptionMove": "D\u00e9placer", @@ -668,7 +668,7 @@ "NotificationOptionPluginError": "\u00c9chec de plugin", "ButtonVolumeUp": "Volume haut", "ButtonVolumeDown": "Volume bas", - "ButtonMute": "Sourdine", + "ButtonMute": "Muet", "HeaderLatestMedia": "Derniers m\u00e9dias", "OptionSpecialFeatures": "Bonus", "HeaderCollections": "Collections", @@ -1225,7 +1225,7 @@ "TabCameraUpload": "Upload de la cam\u00e9ra", "TabDevices": "P\u00e9riph\u00e9riques", "HeaderCameraUploadHelp": "Uploader automatiquement les photos et les vid\u00e9os depuis vos p\u00e9riph\u00e9riques mobiles dans Media Browser.", - "MessageNoDevicesSupportCameraUpload": "Vous n'avez actuellement aucun p\u00e9riph\u00e9riques support\u00e9 par l'upload de la cam\u00e9ra.", + "MessageNoDevicesSupportCameraUpload": "Vous n'avez actuellement aucun p\u00e9riph\u00e9riques supportant l'upload du flux vid\u00e9o de la cam\u00e9ra.", "LabelCameraUploadPath": "R\u00e9pertoire de l'upload de la camera:", "LabelCameraUploadPathHelp": "Si vous le souhaitez, vous pouvez choisir un r\u00e9pertoire d'upload personnalis\u00e9. Si vous ne mettez rien, le r\u00e9pertoire par d\u00e9faut sera utilis\u00e9. Si vous utilisez un r\u00e9pertoire personnalis\u00e9, vous devrez le rajouter \u00e0 la biblioth\u00e8que.", "LabelCreateCameraUploadSubfolder": "Cr\u00e9er un sous-dossier pour chaque p\u00e9riph\u00e9rique", @@ -1257,7 +1257,7 @@ "HeaderTrailerReel": "Trailer reel", "OptionPlayUnwatchedTrailersOnly": "Lire seulement les bandes-annonces non lus.", "HeaderTrailerReelHelp": "Commencer un \"trailer reel\" pour lire une longue liste de lecture de bandes-annonces.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", + "MessageNoTrailersFound": "Aucune bande-annonce trouv\u00e9e. Installez la cha\u00eene Bande-annonces pour am\u00e9liorer votre exp\u00e9rience, par l'ajout d'une biblioth\u00e8que de bandes-annonces disponibles sur Internet.", "HeaderNewUsers": "Nouveaux utilisateurs", "ButtonSignUp": "S'inscrire", "ButtonForgotPassword": "Mot de passe oubli\u00e9 ?", @@ -1291,7 +1291,7 @@ "LabelEnableSingleImageInDidlLimitHelp": "Quelques p\u00e9riph\u00e9riques ne fourniront pas un rendu correct si plusieurs images sont int\u00e9gr\u00e9es dans Didl", "TabActivity": "Activit\u00e9", "TitleSync": "Sync.", - "OptionAllowSyncContent": "Allow syncing media to devices", + "OptionAllowSyncContent": "Autoriser la synchronisation des media sur les p\u00e9riph\u00e9riques", "NameSeasonUnknown": "Saison inconnue", "NameSeasonNumber": "Saison {0}", "LabelNewUserNameHelp": "Les noms d'utilisateur peuvent contenir des lettres (a-z), des chiffres (0-9), des tirets (-), des tirets bas (_), des apostrophes (') et des points (.)." diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ko.json b/MediaBrowser.Server.Implementations/Localization/Server/ko.json index 846cc1108..48852cdfe 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ko.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ko.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ms.json b/MediaBrowser.Server.Implementations/Localization/Server/ms.json index b6ec0d4b3..a64d3b584 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ms.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ms.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pl.json b/MediaBrowser.Server.Implementations/Localization/Server/pl.json index 98433aea3..1abcb52ff 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pl.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pl.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Add", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json index 57c6039c5..4eb9be8c2 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/pt_BR.json @@ -1257,7 +1257,7 @@ "HeaderTrailerReel": "Carrossel de Trailers", "OptionPlayUnwatchedTrailersOnly": "Reproduzir apenas trailers n\u00e3o assistidos", "HeaderTrailerReelHelp": "Inicie um carrossel de trailers para reproduzir uma longa lista de reprodu\u00e7\u00e3o de trailers.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", + "MessageNoTrailersFound": "Nenhum trailer encontrado. Instale o canal Trailer para melhorar sua experi\u00eancia com filmes, adicionando uma biblioteca de trailers da internet.", "HeaderNewUsers": "Novos Usu\u00e1rios", "ButtonSignUp": "Entrar", "ButtonForgotPassword": "Esqueceu a senha?", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/ru.json b/MediaBrowser.Server.Implementations/Localization/Server/ru.json index 651dcd068..3c0df4acd 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/ru.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/ru.json @@ -1257,7 +1257,7 @@ "HeaderTrailerReel": "\u0421\u043a\u043b\u0435\u0439\u043a\u0430 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432", "OptionPlayUnwatchedTrailersOnly": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b", "HeaderTrailerReelHelp": "\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043a\u043b\u0435\u0439\u043a\u0443 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0434\u043e\u043b\u0433\u043e\u0438\u0433\u0440\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432.", - "MessageNoTrailersFound": "No trailers found. Install the Trailer channel to enhance your movie experience by adding a library of internet trailers.", + "MessageNoTrailersFound": "\u0422\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043a\u0430\u043d\u0430\u043b \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0438\u043b\u0438\u0442\u044c \u0432\u0430\u0448\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u0444\u0438\u043b\u044c\u043c\u0430, \u043f\u0443\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0431\u0440\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043e\u0432.", "HeaderNewUsers": "\u041d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438", "ButtonSignUp": "\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f", "ButtonForgotPassword": "\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c?", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/tr.json b/MediaBrowser.Server.Implementations/Localization/Server/tr.json index 5cfd05f9c..baa91c959 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/tr.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/tr.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Ekle", "LabelTriggerType": "Trigger Type:", "OptionDaily": "G\u00fcnl\u00fck", diff --git a/MediaBrowser.Server.Implementations/Localization/Server/vi.json b/MediaBrowser.Server.Implementations/Localization/Server/vi.json index 8b5d61a49..0636e0a81 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/vi.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/vi.json @@ -376,8 +376,8 @@ "LabelMaxScreenshotsPerItem": "Maximum number of screenshots per item:", "LabelMinBackdropDownloadWidth": "Minimum backdrop download width:", "LabelMinScreenshotDownloadWidth": "Minimum screenshot download width:", - "ButtonAddScheduledTaskTrigger": "Add Task Trigger", - "HeaderAddScheduledTaskTrigger": "Add Task Trigger", + "ButtonAddScheduledTaskTrigger": "Add Trigger", + "HeaderAddScheduledTaskTrigger": "Add Trigger", "ButtonAdd": "Th\u00eam", "LabelTriggerType": "Trigger Type:", "OptionDaily": "Daily", diff --git a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs index 47bab6e53..2127e9c46 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncScheduledTask.cs @@ -28,7 +28,7 @@ namespace MediaBrowser.Server.Implementations.Sync public string Name { - get { return "Sync"; } + get { return "Sync preparation"; } } public string Description diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 80e2f32f7..f637622ef 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.533 + 3.0.534 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 8c22ebb5d..eddbcd0d2 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.533 + 3.0.534 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index f313bd7a5..7e10950b0 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.533 + 3.0.534 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index a31f8023b..7fde54fe4 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.533 + 3.0.534 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 800a16a2130ed49204a8b1358e62901077285a82 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 29 Dec 2014 00:56:55 -0500 Subject: sync updates --- MediaBrowser.Api/Sync/SyncService.cs | 12 ++++++++++++ MediaBrowser.Controller/Sync/ISyncManager.cs | 7 +++++++ .../MediaBrowser.Model.Portable.csproj | 6 ++++++ MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj | 6 ++++++ MediaBrowser.Model/ApiClient/IApiClient.cs | 7 +++++++ MediaBrowser.Model/MediaBrowser.Model.csproj | 2 ++ MediaBrowser.Model/Sync/DeviceFileInfo.cs | 2 +- MediaBrowser.Model/Sync/ItemFIleInfo.cs | 2 +- MediaBrowser.Model/Sync/LocalItem.cs | 2 +- MediaBrowser.Model/Sync/SyncDataRequest.cs | 16 ++++++++++++++++ MediaBrowser.Model/Sync/SyncDataResponse.cs | 14 ++++++++++++++ MediaBrowser.Server.Implementations/Sync/SyncManager.cs | 7 +++++++ Nuget/MediaBrowser.Common.Internal.nuspec | 4 ++-- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 ++-- 16 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 MediaBrowser.Model/Sync/SyncDataRequest.cs create mode 100644 MediaBrowser.Model/Sync/SyncDataResponse.cs (limited to 'Nuget/MediaBrowser.Model.Signed.nuspec') diff --git a/MediaBrowser.Api/Sync/SyncService.cs b/MediaBrowser.Api/Sync/SyncService.cs index 0036b316f..31442c1d9 100644 --- a/MediaBrowser.Api/Sync/SyncService.cs +++ b/MediaBrowser.Api/Sync/SyncService.cs @@ -92,6 +92,11 @@ namespace MediaBrowser.Api.Sync public string TargetId { get; set; } } + [Route("/Sync/Data", "POST", Summary = "Syncs data between device and server")] + public class SyncData : SyncDataRequest, IReturn + { + } + [Authenticated] public class SyncService : BaseApiService { @@ -219,5 +224,12 @@ namespace MediaBrowser.Api.Sync { return ToOptimizedResult(_syncManager.GetReadySyncItems(request.TargetId)); } + + public async Task Post(SyncData request) + { + var response = await _syncManager.SyncData(request).ConfigureAwait(false); + + return ToOptimizedResult(response); + } } } diff --git a/MediaBrowser.Controller/Sync/ISyncManager.cs b/MediaBrowser.Controller/Sync/ISyncManager.cs index 39cec4f00..6cad19736 100644 --- a/MediaBrowser.Controller/Sync/ISyncManager.cs +++ b/MediaBrowser.Controller/Sync/ISyncManager.cs @@ -95,5 +95,12 @@ namespace MediaBrowser.Controller.Sync /// The target identifier. /// List<SyncedItem>. List GetReadySyncItems(string targetId); + + /// + /// Synchronizes the data. + /// + /// The request. + /// Task<SyncDataResponse>. + Task SyncData(SyncDataRequest request); } } diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index f4d92b6f3..e4cfab571 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -1055,6 +1055,12 @@ Sync\SyncCategory.cs + + Sync\SyncDataRequest.cs + + + Sync\SyncDataResponse.cs + Sync\SyncDialogOptions.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index b07e8557f..3fc5201a7 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -1014,6 +1014,12 @@ Sync\SyncCategory.cs + + Sync\SyncDataRequest.cs + + + Sync\SyncDataResponse.cs + Sync\SyncDialogOptions.cs diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index 883e54308..9faa8fced 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -1433,5 +1433,12 @@ namespace MediaBrowser.Model.ApiClient /// The target identifier. /// List<SyncedItem>. Task> GetReadySyncItems(string targetId); + + /// + /// Synchronizes the data. + /// + /// The request. + /// Task<SyncDataResponse>. + Task SyncData(SyncDataRequest request); } } \ No newline at end of file diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 8ec271626..d5280f4b1 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -372,6 +372,8 @@ + + diff --git a/MediaBrowser.Model/Sync/DeviceFileInfo.cs b/MediaBrowser.Model/Sync/DeviceFileInfo.cs index bb9a0c6ef..bc93b69bc 100644 --- a/MediaBrowser.Model/Sync/DeviceFileInfo.cs +++ b/MediaBrowser.Model/Sync/DeviceFileInfo.cs @@ -3,7 +3,7 @@ namespace MediaBrowser.Model.Sync { public class DeviceFileInfo { - public string[] Path { get; set; } + public string Path { get; set; } public string Name { get; set; } } } diff --git a/MediaBrowser.Model/Sync/ItemFIleInfo.cs b/MediaBrowser.Model/Sync/ItemFIleInfo.cs index f0829bc2b..b110af6b5 100644 --- a/MediaBrowser.Model/Sync/ItemFIleInfo.cs +++ b/MediaBrowser.Model/Sync/ItemFIleInfo.cs @@ -18,7 +18,7 @@ namespace MediaBrowser.Model.Sync /// Gets or sets the path. /// /// The path. - public string[] Path { get; set; } + public string Path { get; set; } /// /// Gets or sets the type of the image. /// diff --git a/MediaBrowser.Model/Sync/LocalItem.cs b/MediaBrowser.Model/Sync/LocalItem.cs index 9e660c590..51faaff90 100644 --- a/MediaBrowser.Model/Sync/LocalItem.cs +++ b/MediaBrowser.Model/Sync/LocalItem.cs @@ -13,7 +13,7 @@ namespace MediaBrowser.Model.Sync /// Gets or sets the local path. /// /// The local path. - public string[] LocalPath { get; set; } + public string LocalPath { get; set; } /// /// Gets or sets the server identifier. /// diff --git a/MediaBrowser.Model/Sync/SyncDataRequest.cs b/MediaBrowser.Model/Sync/SyncDataRequest.cs new file mode 100644 index 000000000..3eb447b3f --- /dev/null +++ b/MediaBrowser.Model/Sync/SyncDataRequest.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Model.Sync +{ + public class SyncDataRequest + { + public List LocalItemIds { get; set; } + + public string TargetId { get; set; } + + public SyncDataRequest() + { + LocalItemIds = new List(); + } + } +} diff --git a/MediaBrowser.Model/Sync/SyncDataResponse.cs b/MediaBrowser.Model/Sync/SyncDataResponse.cs new file mode 100644 index 000000000..ac7ff5c84 --- /dev/null +++ b/MediaBrowser.Model/Sync/SyncDataResponse.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Model.Sync +{ + public class SyncDataResponse + { + public List ItemIdsToRemove { get; set; } + + public SyncDataResponse() + { + ItemIdsToRemove = new List(); + } + } +} diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 24b9b0b83..3f30dcb1c 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -388,5 +388,12 @@ namespace MediaBrowser.Server.Implementations.Sync return jobItemResult.Items.Select(GetJobItemInfo) .ToList(); } + + public async Task SyncData(SyncDataRequest request) + { + var response = new SyncDataResponse(); + + return response; + } } } diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index f637622ef..c4588f825 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.534 + 3.0.537 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index eddbcd0d2..125dd6d28 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.534 + 3.0.537 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 7e10950b0..1a7d948c5 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.534 + 3.0.537 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 7fde54fe4..b63ff3ca1 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.534 + 3.0.537 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + -- cgit v1.2.3 From 8a9f16ff6ae94fe1e86d93495b4908e253f7dba2 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 29 Dec 2014 15:18:48 -0500 Subject: enable user device access --- MediaBrowser.Api/Session/SessionsService.cs | 22 +++++++- .../MediaBrowser.Common.Implementations.csproj | 7 +-- .../packages.config | 1 - MediaBrowser.Controller/Devices/IDeviceManager.cs | 8 +++ MediaBrowser.Controller/Entities/Audio/Audio.cs | 15 ++++++ MediaBrowser.Controller/Entities/Video.cs | 17 +++++- MediaBrowser.Model/Net/MimeTypes.cs | 16 ++++-- MediaBrowser.Model/Users/UserPolicy.cs | 6 +++ .../MediaInfo/AudioImageProvider.cs | 5 +- .../MediaInfo/FFProbeAudioInfo.cs | 23 ++++++--- .../MediaInfo/FFProbeVideoInfo.cs | 7 +++ .../MediaInfo/VideoImageProvider.cs | 2 +- .../Devices/DeviceManager.cs | 37 +++++++++++++ .../HttpServer/Security/AuthService.cs | 60 +++++++++++++++------- .../Library/Resolvers/Movies/BoxSetResolver.cs | 5 -- .../Library/Resolvers/Movies/MovieResolver.cs | 57 +++++--------------- .../Localization/JavaScript/javascript.json | 4 ++ .../Localization/Server/server.json | 4 ++ .../MediaBrowser.Server.Implementations.csproj | 2 +- .../Session/SessionManager.cs | 8 +++ .../packages.config | 2 +- .../ApplicationHost.cs | 2 +- Nuget/MediaBrowser.Common.Internal.nuspec | 5 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 26 files changed, 223 insertions(+), 100 deletions(-) (limited to 'Nuget/MediaBrowser.Model.Signed.nuspec') diff --git a/MediaBrowser.Api/Session/SessionsService.cs b/MediaBrowser.Api/Session/SessionsService.cs index 4f47b9f54..59b8e85c2 100644 --- a/MediaBrowser.Api/Session/SessionsService.cs +++ b/MediaBrowser.Api/Session/SessionsService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Devices; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Security; using MediaBrowser.Controller.Session; @@ -299,6 +300,7 @@ namespace MediaBrowser.Api.Session private readonly IUserManager _userManager; private readonly IAuthorizationContext _authContext; private readonly IAuthenticationRepository _authRepo; + private readonly IDeviceManager _deviceManager; /// /// Initializes a new instance of the class. @@ -307,12 +309,13 @@ namespace MediaBrowser.Api.Session /// The user manager. /// The authentication context. /// The authentication repo. - public SessionsService(ISessionManager sessionManager, IUserManager userManager, IAuthorizationContext authContext, IAuthenticationRepository authRepo) + public SessionsService(ISessionManager sessionManager, IUserManager userManager, IAuthorizationContext authContext, IAuthenticationRepository authRepo, IDeviceManager deviceManager) { _sessionManager = sessionManager; _userManager = userManager; _authContext = authContext; _authRepo = authRepo; + _deviceManager = deviceManager; } public void Delete(RevokeKey request) @@ -382,6 +385,21 @@ namespace MediaBrowser.Api.Session { result = result.Where(i => !i.UserId.HasValue); } + + result = result.Where(i => + { + var deviceId = i.DeviceId; + + if (!string.IsNullOrWhiteSpace(deviceId)) + { + if (!_deviceManager.CanAccessDevice(user.Id.ToString("N"), deviceId)) + { + return false; + } + } + + return true; + }); } return ToOptimizedResult(result.Select(_sessionManager.GetSessionInfoDto).ToList()); diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 0aaf0b4e0..ff08c31bc 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -52,6 +52,10 @@ False ..\packages\NLog.3.1.0.0\lib\net45\NLog.dll + + False + ..\ThirdParty\SharpCompress\SharpCompress.dll + False ..\packages\SimpleInjector.2.6.1\lib\net45\SimpleInjector.dll @@ -65,9 +69,6 @@ - - ..\packages\sharpcompress.0.10.2\lib\net40\SharpCompress.dll - ..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll diff --git a/MediaBrowser.Common.Implementations/packages.config b/MediaBrowser.Common.Implementations/packages.config index c57aea0b5..63d288bbb 100644 --- a/MediaBrowser.Common.Implementations/packages.config +++ b/MediaBrowser.Common.Implementations/packages.config @@ -1,6 +1,5 @@  - diff --git a/MediaBrowser.Controller/Devices/IDeviceManager.cs b/MediaBrowser.Controller/Devices/IDeviceManager.cs index efd24336a..f5010bb45 100644 --- a/MediaBrowser.Controller/Devices/IDeviceManager.cs +++ b/MediaBrowser.Controller/Devices/IDeviceManager.cs @@ -85,5 +85,13 @@ namespace MediaBrowser.Controller.Devices /// The file. /// Task. Task AcceptCameraUpload(string deviceId, Stream stream, LocalFileInfo file); + + /// + /// Determines whether this instance [can access device] the specified user identifier. + /// + /// The user identifier. + /// The device identifier. + /// true if this instance [can access device] the specified user identifier; otherwise, false. + bool CanAccessDevice(string userId, string deviceId); } } diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs index 623ae8968..c5ed09016 100644 --- a/MediaBrowser.Controller/Entities/Audio/Audio.cs +++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs @@ -89,6 +89,21 @@ namespace MediaBrowser.Controller.Entities.Audio } } + [IgnoreDataMember] + public bool IsArchive + { + get + { + if (string.IsNullOrWhiteSpace(Path)) + { + return false; + } + var ext = System.IO.Path.GetExtension(Path) ?? string.Empty; + + return new[] { ".zip", ".rar", ".7z" }.Contains(ext, StringComparer.OrdinalIgnoreCase); + } + } + /// /// Gets or sets the artist. /// diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 0c6125dbe..3abaf095c 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -91,6 +91,21 @@ namespace MediaBrowser.Controller.Entities get { return LocalAlternateVersions.Count > 0; } } + [IgnoreDataMember] + public bool IsArchive + { + get + { + if (string.IsNullOrWhiteSpace(Path)) + { + return false; + } + var ext = System.IO.Path.GetExtension(Path) ?? string.Empty; + + return new[] { ".zip", ".rar", ".7z" }.Contains(ext, StringComparer.OrdinalIgnoreCase); + } + } + public IEnumerable GetAdditionalPartIds() { return AdditionalParts.Select(i => LibraryManager.GetNewItemId(i, typeof(Video))); @@ -246,7 +261,7 @@ namespace MediaBrowser.Controller.Entities { return System.IO.Path.GetFileName(Path); } - + return System.IO.Path.GetFileNameWithoutExtension(Path); } diff --git a/MediaBrowser.Model/Net/MimeTypes.cs b/MediaBrowser.Model/Net/MimeTypes.cs index 19dda0603..1f54e48d1 100644 --- a/MediaBrowser.Model/Net/MimeTypes.cs +++ b/MediaBrowser.Model/Net/MimeTypes.cs @@ -73,10 +73,18 @@ namespace MediaBrowser.Model.Net {".m4v", "video/x-m4v"} }; - private static readonly Dictionary ExtensionLookup = - MimeTypeLookup - .GroupBy(i => i.Value) - .ToDictionary(x => x.Key, x => x.First().Key, StringComparer.OrdinalIgnoreCase); + private static readonly Dictionary ExtensionLookup = CreateExtensionLookup(); + + private static Dictionary CreateExtensionLookup() + { + var dict = MimeTypeLookup + .GroupBy(i => i.Value) + .ToDictionary(x => x.Key, x => x.First().Key, StringComparer.OrdinalIgnoreCase); + + dict["image/jpg"] = ".jpg"; + + return dict; + } /// /// Gets the type of the MIME. diff --git a/MediaBrowser.Model/Users/UserPolicy.cs b/MediaBrowser.Model/Users/UserPolicy.cs index 4d09ae8e8..0a6a37696 100644 --- a/MediaBrowser.Model/Users/UserPolicy.cs +++ b/MediaBrowser.Model/Users/UserPolicy.cs @@ -49,6 +49,9 @@ namespace MediaBrowser.Model.Users /// true if [enable synchronize]; otherwise, false. public bool EnableSync { get; set; } + public string[] EnabledDevices { get; set; } + public bool EnableAllDevices { get; set; } + public UserPolicy() { EnableLiveTvManagement = true; @@ -64,6 +67,9 @@ namespace MediaBrowser.Model.Users EnableUserPreferenceAccess = true; AccessSchedules = new AccessSchedule[] { }; + + EnabledDevices = new string[] { }; + EnableAllDevices = true; } } } diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs index b0c1b10e4..65d8e287f 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs @@ -6,7 +6,6 @@ using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; -using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; @@ -132,7 +131,9 @@ namespace MediaBrowser.Providers.MediaInfo public bool Supports(IHasImages item) { - return item is Audio; + var audio = item as Audio; + + return item.LocationType == LocationType.FileSystem && audio != null && !audio.IsArchive; } public bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService) diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs index a856d5dba..2634bd9bc 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeAudioInfo.cs @@ -38,6 +38,13 @@ namespace MediaBrowser.Providers.MediaInfo public async Task Probe(T item, CancellationToken cancellationToken) where T : Audio { + if (item.IsArchive) + { + var ext = Path.GetExtension(item.Path) ?? string.Empty; + item.Container = ext.TrimStart('.'); + return ItemUpdateType.MetadataImport; + } + var result = await GetMediaInfo(item, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); @@ -58,8 +65,8 @@ namespace MediaBrowser.Providers.MediaInfo cancellationToken.ThrowIfCancellationRequested(); var idString = item.Id.ToString("N"); - var cachePath = Path.Combine(_appPaths.CachePath, - "ffprobe-audio", + var cachePath = Path.Combine(_appPaths.CachePath, + "ffprobe-audio", idString.Substring(0, 2), idString, "v" + SchemaVersion + _mediaEncoder.Version + item.DateModified.Ticks.ToString(_usCulture) + ".json"); try @@ -132,7 +139,7 @@ namespace MediaBrowser.Providers.MediaInfo if (!string.IsNullOrEmpty(data.format.size)) { - audio.Size = long.Parse(data.format.size , _usCulture); + audio.Size = long.Parse(data.format.size, _usCulture); } else { @@ -217,9 +224,9 @@ namespace MediaBrowser.Providers.MediaInfo audio.ProductionYear = FFProbeHelpers.GetDictionaryNumericValue(tags, "date"); // Several different forms of retaildate - audio.PremiereDate = FFProbeHelpers.GetDictionaryDateTime(tags, "retaildate") ?? - FFProbeHelpers.GetDictionaryDateTime(tags, "retail date") ?? - FFProbeHelpers.GetDictionaryDateTime(tags, "retail_date") ?? + audio.PremiereDate = FFProbeHelpers.GetDictionaryDateTime(tags, "retaildate") ?? + FFProbeHelpers.GetDictionaryDateTime(tags, "retail date") ?? + FFProbeHelpers.GetDictionaryDateTime(tags, "retail_date") ?? FFProbeHelpers.GetDictionaryDateTime(tags, "date"); // If we don't have a ProductionYear try and get it from PremiereDate @@ -261,8 +268,8 @@ namespace MediaBrowser.Providers.MediaInfo { // Only use the comma as a delimeter if there are no slashes or pipes. // We want to be careful not to split names that have commas in them - var delimeter = !allowCommaDelimiter || _nameDelimiters.Any(i => val.IndexOf(i) != -1) ? - _nameDelimiters : + var delimeter = !allowCommaDelimiter || _nameDelimiters.Any(i => val.IndexOf(i) != -1) ? + _nameDelimiters : new[] { ',' }; return val.Split(delimeter, StringSplitOptions.RemoveEmptyEntries) diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs index 7c078866a..7f025dea1 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs @@ -71,6 +71,13 @@ namespace MediaBrowser.Providers.MediaInfo CancellationToken cancellationToken) where T : Video { + if (item.IsArchive) + { + var ext = Path.GetExtension(item.Path) ?? string.Empty; + item.Container = ext.TrimStart('.'); + return ItemUpdateType.MetadataImport; + } + var isoMount = await MountIsoIfNeeded(item, cancellationToken).ConfigureAwait(false); BlurayDiscInfo blurayDiscInfo = null; diff --git a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs index a91a01edc..7f55ce1ac 100644 --- a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs @@ -123,7 +123,7 @@ namespace MediaBrowser.Providers.MediaInfo { var video = item as Video; - return item.LocationType == LocationType.FileSystem && video != null && !video.IsPlaceHolder && !video.IsShortcut; + return item.LocationType == LocationType.FileSystem && video != null && !video.IsPlaceHolder && !video.IsShortcut && !video.IsArchive; } public int Order diff --git a/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs b/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs index 6cdc58118..3810fec66 100644 --- a/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs +++ b/MediaBrowser.Server.Implementations/Devices/DeviceManager.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Devices; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Devices; using MediaBrowser.Model.Events; +using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Querying; using MediaBrowser.Model.Session; @@ -13,6 +14,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Model.Users; namespace MediaBrowser.Server.Implementations.Devices { @@ -188,6 +190,41 @@ namespace MediaBrowser.Server.Implementations.Devices EventHelper.FireEventIfNotNull(DeviceOptionsUpdated, this, new GenericEventArgs(device), _logger); } + + public bool CanAccessDevice(string userId, string deviceId) + { + if (string.IsNullOrWhiteSpace(userId)) + { + throw new ArgumentNullException("userId"); + } + if (string.IsNullOrWhiteSpace(deviceId)) + { + throw new ArgumentNullException("deviceId"); + } + + var user = _userManager.GetUserById(userId); + if (!CanAccessDevice(user.Policy, deviceId)) + { + var capabilities = GetCapabilities(deviceId); + + if (capabilities.SupportsUniqueIdentifier) + { + return false; + } + } + + return true; + } + + private bool CanAccessDevice(UserPolicy policy, string id) + { + if (policy.EnableAllDevices) + { + return true; + } + + return ListHelper.ContainsIgnoreCase(policy.EnabledDevices, id); + } } public class DevicesConfigStore : IConfigurationFactory diff --git a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs index 13563ce19..1d17c641d 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/Security/AuthService.cs @@ -1,5 +1,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Connect; +using MediaBrowser.Controller.Devices; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; @@ -15,10 +16,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security { private readonly IServerConfigurationManager _config; - public AuthService(IUserManager userManager, IAuthorizationContext authorizationContext, IServerConfigurationManager config, IConnectManager connectManager, ISessionManager sessionManager) + public AuthService(IUserManager userManager, IAuthorizationContext authorizationContext, IServerConfigurationManager config, IConnectManager connectManager, ISessionManager sessionManager, IDeviceManager deviceManager) { AuthorizationContext = authorizationContext; _config = config; + DeviceManager = deviceManager; SessionManager = sessionManager; ConnectManager = connectManager; UserManager = userManager; @@ -28,6 +30,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security public IAuthorizationContext AuthorizationContext { get; private set; } public IConnectManager ConnectManager { get; private set; } public ISessionManager SessionManager { get; private set; } + public IDeviceManager DeviceManager { get; private set; } /// /// Redirect the client to a specific URL if authentication failed. @@ -68,24 +71,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security if (user != null) { - if (user.Policy.IsDisabled) - { - throw new SecurityException("User account has been disabled.") - { - SecurityExceptionType = SecurityExceptionType.Unauthenticated - }; - } - - if (!user.Policy.IsAdministrator && - !authAttribtues.EscapeParentalControl && - !user.IsParentalScheduleAllowed()) - { - request.AddResponseHeader("X-Application-Error-Code", "ParentalControl"); - throw new SecurityException("This user account is not allowed access at this time.") - { - SecurityExceptionType = SecurityExceptionType.ParentalControl - }; - } + ValidateUserAccess(user, request, authAttribtues, auth); } if (!IsExemptFromRoles(auth, authAttribtues)) @@ -108,6 +94,42 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security } } + private void ValidateUserAccess(User user, IServiceRequest request, + IAuthenticationAttributes authAttribtues, + AuthorizationInfo auth) + { + if (user.Policy.IsDisabled) + { + throw new SecurityException("User account has been disabled.") + { + SecurityExceptionType = SecurityExceptionType.Unauthenticated + }; + } + + if (!user.Policy.IsAdministrator && + !authAttribtues.EscapeParentalControl && + !user.IsParentalScheduleAllowed()) + { + request.AddResponseHeader("X-Application-Error-Code", "ParentalControl"); + + throw new SecurityException("This user account is not allowed access at this time.") + { + SecurityExceptionType = SecurityExceptionType.ParentalControl + }; + } + + if (!string.IsNullOrWhiteSpace(auth.DeviceId)) + { + if (!DeviceManager.CanAccessDevice(user.Id.ToString("N"), auth.DeviceId)) + { + throw new SecurityException("User is not allowed access from this device.") + { + SecurityExceptionType = SecurityExceptionType.ParentalControl + }; + } + } + } + private bool IsExemptFromAuthenticationToken(AuthorizationInfo auth, IAuthenticationAttributes authAttribtues) { if (!_config.Configuration.IsStartupWizardCompleted && diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs index 390113cc8..67b9d546f 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs @@ -25,11 +25,6 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies // Contains [boxset] in the path if (args.IsDirectory) { - if (IsInvalid(args.GetCollectionType())) - { - return null; - } - var filename = Path.GetFileName(args.Path); if (string.IsNullOrEmpty(filename)) diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index f7a82c5b8..587c6668c 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -1,12 +1,9 @@ -using MediaBrowser.Common.IO; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Logging; using MediaBrowser.Naming.Common; using MediaBrowser.Naming.IO; using MediaBrowser.Naming.Video; @@ -22,16 +19,8 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies /// public class MovieResolver : BaseVideoResolver