re-enable chromecast

This commit is contained in:
Luke Pulverenti 2014-08-17 01:38:13 -04:00
parent e221902088
commit cd1f097167
49 changed files with 553 additions and 632 deletions

View File

@ -9,6 +9,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Api namespace MediaBrowser.Api
{ {
@ -198,14 +199,14 @@ namespace MediaBrowser.Api
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }
public object Get(GetChannelFolder request) public async Task<object> Get(GetChannelFolder request)
{ {
return ToOptimizedResult(_channelManager.GetChannelFolder(request.UserId, CancellationToken.None).Result); return ToOptimizedResult(await _channelManager.GetChannelFolder(request.UserId, CancellationToken.None).ConfigureAwait(false));
} }
public object Get(GetChannels request) public async Task<object> Get(GetChannels request)
{ {
var result = _channelManager.GetChannels(new ChannelQuery var result = await _channelManager.GetChannels(new ChannelQuery
{ {
Limit = request.Limit, Limit = request.Limit,
StartIndex = request.StartIndex, StartIndex = request.StartIndex,
@ -213,14 +214,14 @@ namespace MediaBrowser.Api
SupportsLatestItems = request.SupportsLatestItems, SupportsLatestItems = request.SupportsLatestItems,
IsFavorite = request.IsFavorite IsFavorite = request.IsFavorite
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }
public object Get(GetChannelItems request) public async Task<object> Get(GetChannelItems request)
{ {
var result = _channelManager.GetChannelItems(new ChannelItemQuery var result = await _channelManager.GetChannelItems(new ChannelItemQuery
{ {
Limit = request.Limit, Limit = request.Limit,
StartIndex = request.StartIndex, StartIndex = request.StartIndex,
@ -232,14 +233,14 @@ namespace MediaBrowser.Api
Filters = request.GetFilters().ToArray(), Filters = request.GetFilters().ToArray(),
Fields = request.GetItemFields().ToArray() Fields = request.GetItemFields().ToArray()
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }
public object Get(GetLatestChannelItems request) public async Task<object> Get(GetLatestChannelItems request)
{ {
var result = _channelManager.GetLatestChannelItems(new AllChannelMediaQuery var result = await _channelManager.GetLatestChannelItems(new AllChannelMediaQuery
{ {
Limit = request.Limit, Limit = request.Limit,
StartIndex = request.StartIndex, StartIndex = request.StartIndex,
@ -248,7 +249,7 @@ namespace MediaBrowser.Api
Filters = request.GetFilters().ToArray(), Filters = request.GetFilters().ToArray(),
Fields = request.GetItemFields().ToList() Fields = request.GetItemFields().ToList()
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }

View File

@ -1,5 +1,4 @@
using System; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -10,6 +9,7 @@ using MediaBrowser.Model.Serialization;
using ServiceStack; using ServiceStack;
using ServiceStack.Text.Controller; using ServiceStack.Text.Controller;
using ServiceStack.Web; using ServiceStack.Web;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;

View File

@ -109,16 +109,16 @@ namespace MediaBrowser.Api.Dlna
return ResultFactory.GetResult(xml, "text/xml"); return ResultFactory.GetResult(xml, "text/xml");
} }
public object Post(ProcessContentDirectoryControlRequest request) public async Task<object> Post(ProcessContentDirectoryControlRequest request)
{ {
var response = PostAsync(request.RequestStream, _contentDirectory).Result; var response = await PostAsync(request.RequestStream, _contentDirectory).ConfigureAwait(false);
return ResultFactory.GetResult(response.Xml, "text/xml"); return ResultFactory.GetResult(response.Xml, "text/xml");
} }
public object Post(ProcessConnectionManagerControlRequest request) public async Task<object> Post(ProcessConnectionManagerControlRequest request)
{ {
var response = PostAsync(request.RequestStream, _connectionManager).Result; var response = await PostAsync(request.RequestStream, _connectionManager).ConfigureAwait(false);
return ResultFactory.GetResult(response.Xml, "text/xml"); return ResultFactory.GetResult(response.Xml, "text/xml");
} }

View File

@ -203,9 +203,7 @@ namespace MediaBrowser.Api.Images
{ {
var item = _libraryManager.GetItemById(request.Id); var item = _libraryManager.GetItemById(request.Id);
var result = GetRemoteImageResult(item, request); return GetRemoteImageResult(item, request);
return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetItemByNameRemoteImages request) public object Get(GetItemByNameRemoteImages request)
@ -218,16 +216,16 @@ namespace MediaBrowser.Api.Images
return GetRemoteImageResult(item, request); return GetRemoteImageResult(item, request);
} }
private RemoteImageResult GetRemoteImageResult(BaseItem item, BaseRemoteImageRequest request) private async Task<RemoteImageResult> GetRemoteImageResult(BaseItem item, BaseRemoteImageRequest request)
{ {
var images = _providerManager.GetAvailableRemoteImages(item, new RemoteImageQuery var images = await _providerManager.GetAvailableRemoteImages(item, new RemoteImageQuery
{ {
ProviderName = request.ProviderName, ProviderName = request.ProviderName,
IncludeAllLanguages = request.IncludeAllLanguages, IncludeAllLanguages = request.IncludeAllLanguages,
IncludeDisabledProviders = true, IncludeDisabledProviders = true,
ImageType = request.Type ImageType = request.Type
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
var imagesList = images.ToList(); var imagesList = images.ToList();
@ -306,19 +304,7 @@ namespace MediaBrowser.Api.Images
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
public object Get(GetRemoteImage request) public async Task<object> Get(GetRemoteImage request)
{
var task = GetRemoteImage(request);
return task.Result;
}
/// <summary>
/// Gets the remote image.
/// </summary>
/// <param name="request">The request.</param>
/// <returns>Task{System.Object}.</returns>
private async Task<object> GetRemoteImage(GetRemoteImage request)
{ {
var urlHash = request.ImageUrl.GetMD5(); var urlHash = request.ImageUrl.GetMD5();
var pointerCachePath = GetFullCachePath(urlHash.ToString()); var pointerCachePath = GetFullCachePath(urlHash.ToString());

View File

@ -295,16 +295,16 @@ namespace MediaBrowser.Api.LiveTv
} }
} }
public object Get(GetLiveTvInfo request) public async Task<object> Get(GetLiveTvInfo request)
{ {
var info = _liveTvManager.GetLiveTvInfo(CancellationToken.None).Result; var info = await _liveTvManager.GetLiveTvInfo(CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(info); return ToOptimizedSerializedResultUsingCache(info);
} }
public object Get(GetChannels request) public async Task<object> Get(GetChannels request)
{ {
var result = _liveTvManager.GetChannels(new LiveTvChannelQuery var result = await _liveTvManager.GetChannels(new LiveTvChannelQuery
{ {
ChannelType = request.Type, ChannelType = request.Type,
UserId = request.UserId, UserId = request.UserId,
@ -314,26 +314,26 @@ namespace MediaBrowser.Api.LiveTv
IsLiked = request.IsLiked, IsLiked = request.IsLiked,
IsDisliked = request.IsDisliked IsDisliked = request.IsDisliked
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetChannel request) public async Task<object> Get(GetChannel request)
{ {
var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(new Guid(request.UserId)); var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(new Guid(request.UserId));
var result = _liveTvManager.GetChannel(request.Id, CancellationToken.None, user).Result; var result = await _liveTvManager.GetChannel(request.Id, CancellationToken.None, user).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetLiveTvFolder request) public async Task<object> Get(GetLiveTvFolder request)
{ {
return ToOptimizedResult(_liveTvManager.GetLiveTvFolder(request.UserId, CancellationToken.None).Result); return ToOptimizedResult(await _liveTvManager.GetLiveTvFolder(request.UserId, CancellationToken.None).ConfigureAwait(false));
} }
public object Get(GetPrograms request) public async Task<object> Get(GetPrograms request)
{ {
var query = new ProgramQuery var query = new ProgramQuery
{ {
@ -361,12 +361,12 @@ namespace MediaBrowser.Api.LiveTv
query.MaxEndDate = DateTime.Parse(request.MaxEndDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime(); query.MaxEndDate = DateTime.Parse(request.MaxEndDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
} }
var result = _liveTvManager.GetPrograms(query, CancellationToken.None).Result; var result = await _liveTvManager.GetPrograms(query, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetRecommendedPrograms request) public async Task<object> Get(GetRecommendedPrograms request)
{ {
var query = new RecommendedProgramQuery var query = new RecommendedProgramQuery
{ {
@ -376,7 +376,7 @@ namespace MediaBrowser.Api.LiveTv
HasAired = request.HasAired HasAired = request.HasAired
}; };
var result = _liveTvManager.GetRecommendedPrograms(query, CancellationToken.None).Result; var result = await _liveTvManager.GetRecommendedPrograms(query, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
@ -386,9 +386,9 @@ namespace MediaBrowser.Api.LiveTv
return Get(request); return Get(request);
} }
public object Get(GetRecordings request) public async Task<object> Get(GetRecordings request)
{ {
var result = _liveTvManager.GetRecordings(new RecordingQuery var result = await _liveTvManager.GetRecordings(new RecordingQuery
{ {
ChannelId = request.ChannelId, ChannelId = request.ChannelId,
UserId = request.UserId, UserId = request.UserId,
@ -399,35 +399,35 @@ namespace MediaBrowser.Api.LiveTv
SeriesTimerId = request.SeriesTimerId, SeriesTimerId = request.SeriesTimerId,
IsInProgress = request.IsInProgress IsInProgress = request.IsInProgress
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetRecording request) public async Task<object> Get(GetRecording request)
{ {
var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(new Guid(request.UserId)); var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(new Guid(request.UserId));
var result = _liveTvManager.GetRecording(request.Id, CancellationToken.None, user).Result; var result = await _liveTvManager.GetRecording(request.Id, CancellationToken.None, user).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetTimer request) public async Task<object> Get(GetTimer request)
{ {
var result = _liveTvManager.GetTimer(request.Id, CancellationToken.None).Result; var result = await _liveTvManager.GetTimer(request.Id, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetTimers request) public async Task<object> Get(GetTimers request)
{ {
var result = _liveTvManager.GetTimers(new TimerQuery var result = await _liveTvManager.GetTimers(new TimerQuery
{ {
ChannelId = request.ChannelId, ChannelId = request.ChannelId,
SeriesTimerId = request.SeriesTimerId SeriesTimerId = request.SeriesTimerId
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
@ -459,21 +459,21 @@ namespace MediaBrowser.Api.LiveTv
Task.WaitAll(task); Task.WaitAll(task);
} }
public object Get(GetSeriesTimers request) public async Task<object> Get(GetSeriesTimers request)
{ {
var result = _liveTvManager.GetSeriesTimers(new SeriesTimerQuery var result = await _liveTvManager.GetSeriesTimers(new SeriesTimerQuery
{ {
SortOrder = request.SortOrder, SortOrder = request.SortOrder,
SortBy = request.SortBy SortBy = request.SortBy
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetSeriesTimer request) public async Task<object> Get(GetSeriesTimer request)
{ {
var result = _liveTvManager.GetSeriesTimer(request.Id, CancellationToken.None).Result; var result = await _liveTvManager.GetSeriesTimer(request.Id, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
@ -496,27 +496,27 @@ namespace MediaBrowser.Api.LiveTv
Task.WaitAll(task); Task.WaitAll(task);
} }
public object Get(GetDefaultTimer request) public async Task<object> Get(GetDefaultTimer request)
{ {
if (string.IsNullOrEmpty(request.ProgramId)) if (string.IsNullOrEmpty(request.ProgramId))
{ {
var result = _liveTvManager.GetNewTimerDefaults(CancellationToken.None).Result; var result = await _liveTvManager.GetNewTimerDefaults(CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
else else
{ {
var result = _liveTvManager.GetNewTimerDefaults(request.ProgramId, CancellationToken.None).Result; var result = await _liveTvManager.GetNewTimerDefaults(request.ProgramId, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
} }
public object Get(GetProgram request) public async Task<object> Get(GetProgram request)
{ {
var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(new Guid(request.UserId)); var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(new Guid(request.UserId));
var result = _liveTvManager.GetProgram(request.Id, CancellationToken.None, user).Result; var result = await _liveTvManager.GetProgram(request.Id, CancellationToken.None, user).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
@ -539,23 +539,23 @@ namespace MediaBrowser.Api.LiveTv
Task.WaitAll(task); Task.WaitAll(task);
} }
public object Get(GetRecordingGroups request) public async Task<object> Get(GetRecordingGroups request)
{ {
var result = _liveTvManager.GetRecordingGroups(new RecordingGroupQuery var result = await _liveTvManager.GetRecordingGroups(new RecordingGroupQuery
{ {
UserId = request.UserId UserId = request.UserId
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public object Get(GetRecordingGroup request) public async Task<object> Get(GetRecordingGroup request)
{ {
var result = _liveTvManager.GetRecordingGroups(new RecordingGroupQuery var result = await _liveTvManager.GetRecordingGroups(new RecordingGroupQuery
{ {
}, CancellationToken.None).Result; }, CancellationToken.None).ConfigureAwait(false);
var group = result.Items.FirstOrDefault(i => string.Equals(i.Id, request.Id, StringComparison.OrdinalIgnoreCase)); var group = result.Items.FirstOrDefault(i => string.Equals(i.Id, request.Id, StringComparison.OrdinalIgnoreCase));

View File

@ -59,17 +59,16 @@ namespace MediaBrowser.Api.Movies
_dtoService = dtoService; _dtoService = dtoService;
} }
public object Post(CreateCollection request) public async Task<object> Post(CreateCollection request)
{ {
var task = _collectionManager.CreateCollection(new CollectionCreationOptions var item = await _collectionManager.CreateCollection(new CollectionCreationOptions
{ {
IsLocked = request.IsLocked, IsLocked = request.IsLocked,
Name = request.Name, Name = request.Name,
ParentId = request.ParentId, ParentId = request.ParentId,
ItemIdList = (request.Ids ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(i => new Guid(i)).ToList() ItemIdList = (request.Ids ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(i => new Guid(i)).ToList()
});
var item = task.Result; }).ConfigureAwait(false);
var dto = _dtoService.GetBaseItemDto(item, new List<ItemFields>()); var dto = _dtoService.GetBaseItemDto(item, new List<ItemFields>());

View File

@ -468,11 +468,9 @@ namespace MediaBrowser.Api.Playback
/// <param name="state">The state.</param> /// <param name="state">The state.</param>
/// <param name="outputVideoCodec">The output video codec.</param> /// <param name="outputVideoCodec">The output video codec.</param>
/// <param name="allowTimeStampCopy">if set to <c>true</c> [allow time stamp copy].</param> /// <param name="allowTimeStampCopy">if set to <c>true</c> [allow time stamp copy].</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>System.String.</returns> /// <returns>System.String.</returns>
protected string GetOutputSizeParam(StreamState state, protected string GetOutputSizeParam(StreamState state,
string outputVideoCodec, string outputVideoCodec,
CancellationToken cancellationToken,
bool allowTimeStampCopy = true) bool allowTimeStampCopy = true)
{ {
// http://sonnati.wordpress.com/2012/10/19/ffmpeg-the-swiss-army-knife-of-internet-streaming-part-vi/ // http://sonnati.wordpress.com/2012/10/19/ffmpeg-the-swiss-army-knife-of-internet-streaming-part-vi/
@ -562,7 +560,7 @@ namespace MediaBrowser.Api.Playback
if (state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream) if (state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream)
{ {
var subParam = GetTextSubtitleParam(state, cancellationToken); var subParam = GetTextSubtitleParam(state);
filters.Add(subParam); filters.Add(subParam);
@ -584,10 +582,8 @@ namespace MediaBrowser.Api.Playback
/// Gets the text subtitle param. /// Gets the text subtitle param.
/// </summary> /// </summary>
/// <param name="state">The state.</param> /// <param name="state">The state.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>System.String.</returns> /// <returns>System.String.</returns>
protected string GetTextSubtitleParam(StreamState state, protected string GetTextSubtitleParam(StreamState state)
CancellationToken cancellationToken)
{ {
var seconds = Math.Round(TimeSpan.FromTicks(state.Request.StartTimeTicks ?? 0).TotalSeconds); var seconds = Math.Round(TimeSpan.FromTicks(state.Request.StartTimeTicks ?? 0).TotalSeconds);
@ -635,7 +631,7 @@ namespace MediaBrowser.Api.Playback
// Add resolution params, if specified // Add resolution params, if specified
if (request.Width.HasValue || request.Height.HasValue || request.MaxHeight.HasValue || request.MaxWidth.HasValue) if (request.Width.HasValue || request.Height.HasValue || request.MaxHeight.HasValue || request.MaxWidth.HasValue)
{ {
outputSizeParam = GetOutputSizeParam(state, outputVideoCodec, CancellationToken.None).TrimEnd('"'); outputSizeParam = GetOutputSizeParam(state, outputVideoCodec).TrimEnd('"');
outputSizeParam = "," + outputSizeParam.Substring(outputSizeParam.IndexOf("scale", StringComparison.OrdinalIgnoreCase)); outputSizeParam = "," + outputSizeParam.Substring(outputSizeParam.IndexOf("scale", StringComparison.OrdinalIgnoreCase));
} }

View File

@ -20,7 +20,12 @@ using System.Threading.Tasks;
namespace MediaBrowser.Api.Playback.Hls namespace MediaBrowser.Api.Playback.Hls
{ {
/// <summary>
/// Options is needed for chromecast. Threw Head in there since it's related
/// </summary>
[Route("/Videos/{Id}/master.m3u8", "GET", Summary = "Gets a video stream using HTTP live streaming.")] [Route("/Videos/{Id}/master.m3u8", "GET", Summary = "Gets a video stream using HTTP live streaming.")]
[Route("/Videos/{Id}/master.m3u8", "HEAD", Summary = "Gets a video stream using HTTP live streaming.")]
[Route("/Videos/{Id}/master.m3u8", "OPTIONS", Summary = "Gets a video stream using HTTP live streaming.")]
public class GetMasterHlsVideoStream : VideoStreamRequest public class GetMasterHlsVideoStream : VideoStreamRequest
{ {
public bool EnableAdaptiveBitrateStreaming { get; set; } public bool EnableAdaptiveBitrateStreaming { get; set; }
@ -61,7 +66,21 @@ namespace MediaBrowser.Api.Playback.Hls
public object Get(GetMasterHlsVideoStream request) public object Get(GetMasterHlsVideoStream request)
{ {
var result = GetAsync(request).Result; var result = GetAsync(request, "GET").Result;
return result;
}
public object Options(GetMasterHlsVideoStream request)
{
var result = GetAsync(request, "OPTIONS").Result;
return result;
}
public object Head(GetMasterHlsVideoStream request)
{
var result = GetAsync(request, "HEAD").Result;
return result; return result;
} }
@ -70,10 +89,6 @@ namespace MediaBrowser.Api.Playback.Hls
{ {
var result = GetPlaylistAsync(request, "main").Result; var result = GetPlaylistAsync(request, "main").Result;
// Get the transcoding started
//var start = GetStartNumber(request);
//var segment = GetDynamicSegment(request, start.ToString(UsCulture)).Result;
return result; return result;
} }
@ -319,7 +334,7 @@ namespace MediaBrowser.Api.Playback.Hls
return job != null && !job.HasExited; return job != null && !job.HasExited;
} }
private async Task<object> GetAsync(GetMasterHlsVideoStream request) private async Task<object> GetAsync(GetMasterHlsVideoStream request, string method)
{ {
var state = await GetState(request, CancellationToken.None).ConfigureAwait(false); var state = await GetState(request, CancellationToken.None).ConfigureAwait(false);
@ -338,10 +353,15 @@ namespace MediaBrowser.Api.Playback.Hls
throw new ArgumentException("MediaSourceId is required"); throw new ArgumentException("MediaSourceId is required");
} }
var audioBitrate = state.OutputAudioBitrate ?? 0; var playlistText = string.Empty;
var videoBitrate = state.OutputVideoBitrate ?? 0;
var playlistText = GetMasterPlaylistFileText(state, videoBitrate + audioBitrate); if (string.Equals(method, "GET", StringComparison.OrdinalIgnoreCase))
{
var audioBitrate = state.OutputAudioBitrate ?? 0;
var videoBitrate = state.OutputVideoBitrate ?? 0;
playlistText = GetMasterPlaylistFileText(state, videoBitrate + audioBitrate);
}
return ResultFactory.GetResult(playlistText, Common.Net.MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>()); return ResultFactory.GetResult(playlistText, Common.Net.MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>());
} }
@ -359,14 +379,14 @@ namespace MediaBrowser.Api.Playback.Hls
var playlistUrl = (state.RunTimeTicks ?? 0) > 0 ? "main.m3u8" : "live.m3u8"; var playlistUrl = (state.RunTimeTicks ?? 0) > 0 ? "main.m3u8" : "live.m3u8";
playlistUrl += queryString; playlistUrl += queryString;
var request = (GetMasterHlsVideoStream) state.Request; var request = (GetMasterHlsVideoStream)state.Request;
var subtitleStreams = state.AllMediaStreams var subtitleStreams = state.AllMediaStreams
.Where(i => i.IsTextSubtitleStream) .Where(i => i.IsTextSubtitleStream)
.ToList(); .ToList();
var subtitleGroup = subtitleStreams.Count > 0 && request.SubtitleMethod == SubtitleDeliveryMethod.Hls ? var subtitleGroup = subtitleStreams.Count > 0 && request.SubtitleMethod == SubtitleDeliveryMethod.Hls ?
"subs" : "subs" :
null; null;
AppendPlaylist(builder, playlistUrl, totalBitrate, subtitleGroup); AppendPlaylist(builder, playlistUrl, totalBitrate, subtitleGroup);
@ -582,7 +602,7 @@ namespace MediaBrowser.Api.Playback.Hls
// Add resolution params, if specified // Add resolution params, if specified
if (!hasGraphicalSubs) if (!hasGraphicalSubs)
{ {
args += GetOutputSizeParam(state, codec, CancellationToken.None, false); args += GetOutputSizeParam(state, codec, false);
} }
// This is for internal graphical subs // This is for internal graphical subs

View File

@ -180,7 +180,7 @@ namespace MediaBrowser.Api.Playback.Hls
// Add resolution params, if specified // Add resolution params, if specified
if (!hasGraphicalSubs) if (!hasGraphicalSubs)
{ {
args += GetOutputSizeParam(state, codec, CancellationToken.None); args += GetOutputSizeParam(state, codec);
} }
// This is for internal graphical subs // This is for internal graphical subs

View File

@ -20,6 +20,8 @@ namespace MediaBrowser.Api.Playback.Progressive
[Route("/Audio/{Id}/stream", "GET", Summary = "Gets an audio stream")] [Route("/Audio/{Id}/stream", "GET", Summary = "Gets an audio stream")]
[Route("/Audio/{Id}/stream.{Container}", "HEAD", Summary = "Gets an audio stream")] [Route("/Audio/{Id}/stream.{Container}", "HEAD", Summary = "Gets an audio stream")]
[Route("/Audio/{Id}/stream", "HEAD", Summary = "Gets an audio stream")] [Route("/Audio/{Id}/stream", "HEAD", Summary = "Gets an audio stream")]
[Route("/Audio/{Id}/stream.{Container}", "OPTIONS", Summary = "Gets an audio stream")]
[Route("/Audio/{Id}/stream", "OPTIONS", Summary = "Gets an audio stream")]
public class GetAudioStream : StreamRequest public class GetAudioStream : StreamRequest
{ {
[ApiMember(Name = "Container", Description = "Container", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] [ApiMember(Name = "Container", Description = "Container", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
@ -55,6 +57,16 @@ namespace MediaBrowser.Api.Playback.Progressive
return ProcessRequest(request, true); return ProcessRequest(request, true);
} }
/// <summary>
/// Gets the specified request.
/// </summary>
/// <param name="request">The request.</param>
/// <returns>System.Object.</returns>
public object Options(GetAudioStream request)
{
return ProcessRequest(request, true);
}
/// <summary> /// <summary>
/// Gets the command line arguments. /// Gets the command line arguments.
/// </summary> /// </summary>

View File

@ -114,7 +114,9 @@ namespace MediaBrowser.Api.Playback.Progressive
/// <returns>Task.</returns> /// <returns>Task.</returns>
protected object ProcessRequest(StreamRequest request, bool isHeadRequest) protected object ProcessRequest(StreamRequest request, bool isHeadRequest)
{ {
var state = GetState(request, CancellationToken.None).Result; var cancellationTokenSource = new CancellationTokenSource();
var state = GetState(request, cancellationTokenSource.Token).Result;
var responseHeaders = new Dictionary<string, string>(); var responseHeaders = new Dictionary<string, string>();
@ -125,7 +127,7 @@ namespace MediaBrowser.Api.Playback.Progressive
using (state) using (state)
{ {
return GetStaticRemoteStreamResult(state, responseHeaders, isHeadRequest).Result; return GetStaticRemoteStreamResult(state, responseHeaders, isHeadRequest, cancellationTokenSource).Result;
} }
} }
@ -171,7 +173,7 @@ namespace MediaBrowser.Api.Playback.Progressive
// Need to start ffmpeg // Need to start ffmpeg
try try
{ {
return GetStreamResult(state, responseHeaders, isHeadRequest).Result; return GetStreamResult(state, responseHeaders, isHeadRequest, cancellationTokenSource).Result;
} }
catch catch
{ {
@ -187,8 +189,9 @@ namespace MediaBrowser.Api.Playback.Progressive
/// <param name="state">The state.</param> /// <param name="state">The state.</param>
/// <param name="responseHeaders">The response headers.</param> /// <param name="responseHeaders">The response headers.</param>
/// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param> /// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param>
/// <param name="cancellationTokenSource">The cancellation token source.</param>
/// <returns>Task{System.Object}.</returns> /// <returns>Task{System.Object}.</returns>
private async Task<object> GetStaticRemoteStreamResult(StreamState state, Dictionary<string, string> responseHeaders, bool isHeadRequest) private async Task<object> GetStaticRemoteStreamResult(StreamState state, Dictionary<string, string> responseHeaders, bool isHeadRequest, CancellationTokenSource cancellationTokenSource)
{ {
string useragent = null; string useragent = null;
state.RemoteHttpHeaders.TryGetValue("User-Agent", out useragent); state.RemoteHttpHeaders.TryGetValue("User-Agent", out useragent);
@ -197,7 +200,8 @@ namespace MediaBrowser.Api.Playback.Progressive
{ {
Url = state.MediaPath, Url = state.MediaPath,
UserAgent = useragent, UserAgent = useragent,
BufferContent = false BufferContent = false,
CancellationToken = cancellationTokenSource.Token
}; };
var response = await HttpClient.GetResponse(options).ConfigureAwait(false); var response = await HttpClient.GetResponse(options).ConfigureAwait(false);
@ -238,8 +242,9 @@ namespace MediaBrowser.Api.Playback.Progressive
/// <param name="state">The state.</param> /// <param name="state">The state.</param>
/// <param name="responseHeaders">The response headers.</param> /// <param name="responseHeaders">The response headers.</param>
/// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param> /// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param>
/// <param name="cancellationTokenSource">The cancellation token source.</param>
/// <returns>Task{System.Object}.</returns> /// <returns>Task{System.Object}.</returns>
private async Task<object> GetStreamResult(StreamState state, IDictionary<string, string> responseHeaders, bool isHeadRequest) private async Task<object> GetStreamResult(StreamState state, IDictionary<string, string> responseHeaders, bool isHeadRequest, CancellationTokenSource cancellationTokenSource)
{ {
// Use the command line args with a dummy playlist path // Use the command line args with a dummy playlist path
var outputPath = state.OutputFilePath; var outputPath = state.OutputFilePath;
@ -275,28 +280,36 @@ namespace MediaBrowser.Api.Playback.Progressive
return streamResult; return streamResult;
} }
if (!File.Exists(outputPath)) await ApiEntryPoint.Instance.TranscodingStartLock.WaitAsync(cancellationTokenSource.Token).ConfigureAwait(false);
try
{ {
await StartFfMpeg(state, outputPath, new CancellationTokenSource()).ConfigureAwait(false); if (!File.Exists(outputPath))
{
await StartFfMpeg(state, outputPath, cancellationTokenSource).ConfigureAwait(false);
}
else
{
ApiEntryPoint.Instance.OnTranscodeBeginRequest(outputPath, TranscodingJobType.Progressive);
state.Dispose();
}
var job = ApiEntryPoint.Instance.GetTranscodingJob(outputPath, TranscodingJobType.Progressive);
var result = new ProgressiveStreamWriter(outputPath, Logger, FileSystem, job);
result.Options["Content-Type"] = contentType;
// Add the response headers to the result object
foreach (var item in responseHeaders)
{
result.Options[item.Key] = item.Value;
}
return result;
} }
else finally
{ {
ApiEntryPoint.Instance.OnTranscodeBeginRequest(outputPath, TranscodingJobType.Progressive); ApiEntryPoint.Instance.TranscodingStartLock.Release();
state.Dispose();
} }
var job = ApiEntryPoint.Instance.GetTranscodingJob(outputPath, TranscodingJobType.Progressive);
var result = new ProgressiveStreamWriter(outputPath, Logger, FileSystem, job);
result.Options["Content-Type"] = contentType;
// Add the response headers to the result object
foreach (var item in responseHeaders)
{
result.Options[item.Key] = item.Value;
}
return result;
} }
/// <summary> /// <summary>

View File

@ -1,4 +1,5 @@
using MediaBrowser.Common.IO; using System;
using MediaBrowser.Common.IO;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using ServiceStack.Web; using ServiceStack.Web;
using System.Collections.Generic; using System.Collections.Generic;
@ -64,9 +65,9 @@ namespace MediaBrowser.Api.Playback.Progressive
await new ProgressiveFileCopier(_fileSystem, _job) await new ProgressiveFileCopier(_fileSystem, _job)
.StreamFile(Path, responseStream).ConfigureAwait(false); .StreamFile(Path, responseStream).ConfigureAwait(false);
} }
catch catch (Exception ex)
{ {
Logger.Error("Error streaming media. The client has most likely disconnected or transcoding has failed."); Logger.ErrorException("Error streaming media. The client has most likely disconnected or transcoding has failed.", ex);
throw; throw;
} }

View File

@ -11,7 +11,6 @@ using MediaBrowser.Model.IO;
using ServiceStack; using ServiceStack;
using System; using System;
using System.IO; using System.IO;
using System.Threading;
namespace MediaBrowser.Api.Playback.Progressive namespace MediaBrowser.Api.Playback.Progressive
{ {
@ -50,6 +49,12 @@ namespace MediaBrowser.Api.Playback.Progressive
[Route("/Videos/{Id}/stream.wtv", "HEAD")] [Route("/Videos/{Id}/stream.wtv", "HEAD")]
[Route("/Videos/{Id}/stream.m2ts", "HEAD")] [Route("/Videos/{Id}/stream.m2ts", "HEAD")]
[Route("/Videos/{Id}/stream", "HEAD")] [Route("/Videos/{Id}/stream", "HEAD")]
[Route("/Videos/{Id}/stream.mp4", "OPTIONS")]
[Route("/Videos/{Id}/stream.m4v", "OPTIONS")]
[Route("/Videos/{Id}/stream.mkv", "OPTIONS")]
[Route("/Videos/{Id}/stream.avi", "OPTIONS")]
[Route("/Videos/{Id}/stream.webm", "OPTIONS")]
[Route("/Videos/{Id}/stream.ts", "OPTIONS")]
[Api(Description = "Gets a video stream")] [Api(Description = "Gets a video stream")]
public class GetVideoStream : VideoStreamRequest public class GetVideoStream : VideoStreamRequest
{ {
@ -85,6 +90,16 @@ namespace MediaBrowser.Api.Playback.Progressive
return ProcessRequest(request, true); return ProcessRequest(request, true);
} }
/// <summary>
/// Optionses the specified request.
/// </summary>
/// <param name="request">The request.</param>
/// <returns>System.Object.</returns>
public object Options(GetVideoStream request)
{
return ProcessRequest(request, true);
}
/// <summary> /// <summary>
/// Gets the command line arguments. /// Gets the command line arguments.
/// </summary> /// </summary>
@ -154,7 +169,7 @@ namespace MediaBrowser.Api.Playback.Progressive
// Add resolution params, if specified // Add resolution params, if specified
if (!hasGraphicalSubs) if (!hasGraphicalSubs)
{ {
args += GetOutputSizeParam(state, codec, CancellationToken.None); args += GetOutputSizeParam(state, codec);
} }
var qualityParam = GetVideoQualityParam(state, codec, false); var qualityParam = GetVideoQualityParam(state, codec, false);

View File

@ -97,16 +97,15 @@ namespace MediaBrowser.Api
_libraryManager = libraryManager; _libraryManager = libraryManager;
} }
public object Post(CreatePlaylist request) public async Task<object> Post(CreatePlaylist request)
{ {
var task = _playlistManager.CreatePlaylist(new PlaylistCreationOptions var item = await _playlistManager.CreatePlaylist(new PlaylistCreationOptions
{ {
Name = request.Name, Name = request.Name,
ItemIdList = (request.Ids ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToList(), ItemIdList = (request.Ids ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToList(),
UserId = request.UserId UserId = request.UserId
});
var item = task.Result; }).ConfigureAwait(false);
var dto = _dtoService.GetBaseItemDto(item, new List<ItemFields>()); var dto = _dtoService.GetBaseItemDto(item, new List<ItemFields>());

View File

@ -111,9 +111,9 @@ namespace MediaBrowser.Api
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
public object Get(GetSearchHints request) public async Task<object> Get(GetSearchHints request)
{ {
var result = GetSearchHintsAsync(request).Result; var result = await GetSearchHintsAsync(request).ConfigureAwait(false);
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }

View File

@ -87,16 +87,14 @@ namespace MediaBrowser.Api.Sync
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }
public void Delete(CancelSyncJob request) public Task Delete(CancelSyncJob request)
{ {
var task = _syncManager.CancelJob(request.Id); return _syncManager.CancelJob(request.Id);
Task.WaitAll(task);
} }
public object Post(CreateSyncJob request) public async Task<object> Post(CreateSyncJob request)
{ {
var result = _syncManager.CreateJob(request); var result = await _syncManager.CreateJob(request).ConfigureAwait(false);
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }

View File

@ -221,14 +221,7 @@ namespace MediaBrowser.Api.UserLibrary
/// Posts the specified request. /// Posts the specified request.
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public object Post(MarkPlayedItem request) public async Task<object> Post(MarkPlayedItem request)
{
var result = MarkPlayed(request).Result;
return ToOptimizedResult(result);
}
private async Task<UserItemDataDto> MarkPlayed(MarkPlayedItem request)
{ {
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
@ -250,18 +243,18 @@ namespace MediaBrowser.Api.UserLibrary
await UpdatePlayedStatus(additionalUser, request.Id, true, datePlayed).ConfigureAwait(false); await UpdatePlayedStatus(additionalUser, request.Id, true, datePlayed).ConfigureAwait(false);
} }
return dto; return ToOptimizedResult(dto);
} }
/// <summary> /// <summary>
/// Posts the specified request. /// Posts the specified request.
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public void Post(OnPlaybackStart request) public Task Post(OnPlaybackStart request)
{ {
var queueableMediaTypes = (request.QueueableMediaTypes ?? string.Empty); var queueableMediaTypes = (request.QueueableMediaTypes ?? string.Empty);
Post(new ReportPlaybackStart return Post(new ReportPlaybackStart
{ {
CanSeek = request.CanSeek, CanSeek = request.CanSeek,
ItemId = request.Id, ItemId = request.Id,
@ -272,22 +265,20 @@ namespace MediaBrowser.Api.UserLibrary
}); });
} }
public void Post(ReportPlaybackStart request) public Task Post(ReportPlaybackStart request)
{ {
request.SessionId = GetSession().Id; request.SessionId = GetSession().Id;
var task = _sessionManager.OnPlaybackStart(request); return _sessionManager.OnPlaybackStart(request);
Task.WaitAll(task);
} }
/// <summary> /// <summary>
/// Posts the specified request. /// Posts the specified request.
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public void Post(OnPlaybackProgress request) public Task Post(OnPlaybackProgress request)
{ {
Post(new ReportPlaybackProgress return Post(new ReportPlaybackProgress
{ {
ItemId = request.Id, ItemId = request.Id,
PositionTicks = request.PositionTicks, PositionTicks = request.PositionTicks,
@ -300,22 +291,20 @@ namespace MediaBrowser.Api.UserLibrary
}); });
} }
public void Post(ReportPlaybackProgress request) public Task Post(ReportPlaybackProgress request)
{ {
request.SessionId = GetSession().Id; request.SessionId = GetSession().Id;
var task = _sessionManager.OnPlaybackProgress(request); return _sessionManager.OnPlaybackProgress(request);
Task.WaitAll(task);
} }
/// <summary> /// <summary>
/// Posts the specified request. /// Posts the specified request.
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public void Delete(OnPlaybackStopped request) public Task Delete(OnPlaybackStopped request)
{ {
Post(new ReportPlaybackStopped return Post(new ReportPlaybackStopped
{ {
ItemId = request.Id, ItemId = request.Id,
PositionTicks = request.PositionTicks, PositionTicks = request.PositionTicks,
@ -323,13 +312,11 @@ namespace MediaBrowser.Api.UserLibrary
}); });
} }
public void Post(ReportPlaybackStopped request) public Task Post(ReportPlaybackStopped request)
{ {
request.SessionId = GetSession().Id; request.SessionId = GetSession().Id;
var task = _sessionManager.OnPlaybackStopped(request); return _sessionManager.OnPlaybackStopped(request);
Task.WaitAll(task);
} }
/// <summary> /// <summary>

View File

@ -400,7 +400,7 @@ namespace MediaBrowser.Api.UserLibrary
return ToOptimizedResult(dtos.ToList()); return ToOptimizedResult(dtos.ToList());
} }
public object Get(GetUserViews request) public async Task<object> Get(GetUserViews request)
{ {
var user = _userManager.GetUserById(new Guid(request.UserId)); var user = _userManager.GetUserById(new Guid(request.UserId));
@ -418,7 +418,7 @@ namespace MediaBrowser.Api.UserLibrary
query.IncludeExternalContent = request.IncludeExternalContent.Value; query.IncludeExternalContent = request.IncludeExternalContent.Value;
} }
var folders = _userViewManager.GetUserViews(query, CancellationToken.None).Result; var folders = await _userViewManager.GetUserViews(query, CancellationToken.None).ConfigureAwait(false);
var dtos = folders.OrderBy(i => i.SortName) var dtos = folders.OrderBy(i => i.SortName)
.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .Select(i => _dtoService.GetBaseItemDto(i, fields, user))

View File

@ -12,7 +12,6 @@ using ServiceStack.Text.Controller;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Api namespace MediaBrowser.Api
@ -275,7 +274,7 @@ namespace MediaBrowser.Api
/// Deletes the specified request. /// Deletes the specified request.
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public void Delete(DeleteUser request) public async Task Delete(DeleteUser request)
{ {
var user = _userManager.GetUserById(request.Id); var user = _userManager.GetUserById(request.Id);
@ -284,13 +283,8 @@ namespace MediaBrowser.Api
throw new ResourceNotFoundException("User not found"); throw new ResourceNotFoundException("User not found");
} }
var revokeTask = _sessionMananger.RevokeUserTokens(user.Id.ToString("N")); await _sessionMananger.RevokeUserTokens(user.Id.ToString("N")).ConfigureAwait(false);
await _userManager.DeleteUser(user).ConfigureAwait(false);
Task.WaitAll(revokeTask);
var task = _userManager.DeleteUser(user);
Task.WaitAll(task);
} }
/// <summary> /// <summary>
@ -313,7 +307,7 @@ namespace MediaBrowser.Api
}); });
} }
public object Post(AuthenticateUserByName request) public async Task<object> Post(AuthenticateUserByName request)
{ {
var auth = AuthorizationContext.GetAuthorizationInfo(Request); var auth = AuthorizationContext.GetAuthorizationInfo(Request);
@ -334,7 +328,7 @@ namespace MediaBrowser.Api
auth.DeviceId = "Unknown device id"; auth.DeviceId = "Unknown device id";
} }
var result = _sessionMananger.AuthenticateNewSession(new AuthenticationRequest var result = await _sessionMananger.AuthenticateNewSession(new AuthenticationRequest
{ {
App = auth.Client, App = auth.Client,
AppVersion = auth.Version, AppVersion = auth.Version,
@ -344,7 +338,7 @@ namespace MediaBrowser.Api
RemoteEndPoint = Request.RemoteIp, RemoteEndPoint = Request.RemoteIp,
Username = request.Username Username = request.Username
}, Request.IsLocal).Result; }, Request.IsLocal).ConfigureAwait(false);
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }
@ -353,7 +347,7 @@ namespace MediaBrowser.Api
/// Posts the specified request. /// Posts the specified request.
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public void Post(UpdateUserPassword request) public async Task Post(UpdateUserPassword request)
{ {
var user = _userManager.GetUserById(request.Id); var user = _userManager.GetUserById(request.Id);
@ -364,22 +358,18 @@ namespace MediaBrowser.Api
if (request.ResetPassword) if (request.ResetPassword)
{ {
var task = _userManager.ResetPassword(user); await _userManager.ResetPassword(user).ConfigureAwait(false);
Task.WaitAll(task);
} }
else else
{ {
var success = _userManager.AuthenticateUser(user.Name, request.CurrentPassword, Request.RemoteIp).Result; var success = await _userManager.AuthenticateUser(user.Name, request.CurrentPassword, Request.RemoteIp).ConfigureAwait(false);
if (!success) if (!success)
{ {
throw new ArgumentException("Invalid user or password entered."); throw new ArgumentException("Invalid user or password entered.");
} }
var task = _userManager.ChangePassword(user, request.NewPassword); await _userManager.ChangePassword(user, request.NewPassword).ConfigureAwait(false);
Task.WaitAll(task);
} }
} }
@ -387,7 +377,7 @@ namespace MediaBrowser.Api
/// Posts the specified request. /// Posts the specified request.
/// </summary> /// </summary>
/// <param name="request">The request.</param> /// <param name="request">The request.</param>
public void Post(UpdateUser request) public async Task Post(UpdateUser request)
{ {
// We need to parse this manually because we told service stack not to with IRequiresRequestStream // We need to parse this manually because we told service stack not to with IRequiresRequestStream
// https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs // https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
@ -421,16 +411,14 @@ namespace MediaBrowser.Api
throw new ArgumentException("There must be at least one enabled user in the system."); throw new ArgumentException("There must be at least one enabled user in the system.");
} }
var revokeTask = _sessionMananger.RevokeUserTokens(user.Id.ToString("N")); await _sessionMananger.RevokeUserTokens(user.Id.ToString("N")).ConfigureAwait(false);
Task.WaitAll(revokeTask);
} }
var task = user.Name.Equals(dtoUser.Name, StringComparison.Ordinal) ? var task = user.Name.Equals(dtoUser.Name, StringComparison.Ordinal) ?
_userManager.UpdateUser(user) : _userManager.UpdateUser(user) :
_userManager.RenameUser(user, dtoUser.Name); _userManager.RenameUser(user, dtoUser.Name);
Task.WaitAll(task); await task.ConfigureAwait(false);
user.UpdateConfiguration(dtoUser.Configuration); user.UpdateConfiguration(dtoUser.Configuration);
} }

View File

@ -97,14 +97,7 @@ namespace MediaBrowser.Api
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public void Delete(DeleteAlternateSources request) public async Task Delete(DeleteAlternateSources request)
{
var task = RemoveAlternateVersions(request);
Task.WaitAll(task);
}
private async Task RemoveAlternateVersions(DeleteAlternateSources request)
{ {
var video = (Video)_libraryManager.GetItemById(request.Id); var video = (Video)_libraryManager.GetItemById(request.Id);
@ -119,14 +112,7 @@ namespace MediaBrowser.Api
await video.UpdateToRepository(ItemUpdateType.MetadataDownload, CancellationToken.None).ConfigureAwait(false); await video.UpdateToRepository(ItemUpdateType.MetadataDownload, CancellationToken.None).ConfigureAwait(false);
} }
public void Post(MergeVersions request) public async Task Post(MergeVersions request)
{
var task = MergeVersions(request);
Task.WaitAll(task);
}
private async Task MergeVersions(MergeVersions request)
{ {
var items = request.Ids.Split(',') var items = request.Ids.Split(',')
.Select(i => new Guid(i)) .Select(i => new Guid(i))
@ -172,12 +158,12 @@ namespace MediaBrowser.Api
return 0; return 0;
}) })
.ThenByDescending(i => .ThenByDescending(i =>
{ {
var stream = i.GetDefaultVideoStream(); var stream = i.GetDefaultVideoStream();
return stream == null || stream.Width == null ? 0 : stream.Width.Value; return stream == null || stream.Width == null ? 0 : stream.Width.Value;
}).First(); }).First();
} }
foreach (var item in videos.Where(i => i.Id != primaryVersion.Id)) foreach (var item in videos.Where(i => i.Id != primaryVersion.Id))

View File

@ -112,12 +112,12 @@ namespace MediaBrowser.Dlna.ContentDirectory
private IEnumerable<KeyValuePair<string, string>> HandleGetSearchCapabilities() private IEnumerable<KeyValuePair<string, string>> HandleGetSearchCapabilities()
{ {
return new Headers(true) { { "SearchCaps", "upnp:class,dc:title,upnp:artist" } }; return new Headers(true) { { "SearchCaps", "res@resolution,res@size,res@duration,dc:title,dc:creator,upnp:actor,upnp:artist,upnp:genre,upnp:album,dc:date,upnp:class,@id,@refID,@protocolInfo,upnp:author,dc:description,pv:avKeywords" } };
} }
private IEnumerable<KeyValuePair<string, string>> HandleGetSortCapabilities() private IEnumerable<KeyValuePair<string, string>> HandleGetSortCapabilities()
{ {
return new Headers(true) { { "SortCaps", string.Empty } }; return new Headers(true) { { "SortCaps", "res@duration,res@size,res@bitrate,dc:date,dc:title,dc:size,upnp:album,upnp:artist,upnp:albumArtist,upnp:episodeNumber,upnp:genre,upnp:originalTrackNumber,upnp:rating" } };
} }
private IEnumerable<KeyValuePair<string, string>> HandleGetSystemUpdateID() private IEnumerable<KeyValuePair<string, string>> HandleGetSystemUpdateID()
@ -317,14 +317,10 @@ namespace MediaBrowser.Dlna.ContentDirectory
private async Task<QueryResult<BaseItem>> GetChildrenSorted(Folder folder, User user, SearchCriteria search, SortCriteria sort, int? startIndex, int? limit) private async Task<QueryResult<BaseItem>> GetChildrenSorted(Folder folder, User user, SearchCriteria search, SortCriteria sort, int? startIndex, int? limit)
{ {
if (search.SearchType == SearchType.Unknown) // TODO: Make a recursive version of GetChildrenSorted (although sorting isn't needed)
{ var result = folder.GetRecursiveChildren(user, true);
return await GetChildrenSorted(folder, user, sort, startIndex, limit).ConfigureAwait(false);
}
var result = await GetChildrenSorted(folder, user, sort, null, null).ConfigureAwait(false); var items = FilterUnsupportedContent(result);
var items = FilterUnsupportedContent(result.Items);
if (search.SearchType == SearchType.Audio) if (search.SearchType == SearchType.Audio)
{ {
@ -342,6 +338,10 @@ namespace MediaBrowser.Dlna.ContentDirectory
{ {
items = items.OfType<Playlist>(); items = items.OfType<Playlist>();
} }
else if (search.SearchType == SearchType.MusicAlbum)
{
items = items.OfType<MusicAlbum>();
}
items = SortItems(items, user, sort); items = SortItems(items, user, sort);

View File

@ -6,6 +6,7 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Playlists;
using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
@ -496,6 +497,10 @@ namespace MediaBrowser.Dlna.Didl
{ {
classType = "object.container.album.videoAlbum"; classType = "object.container.album.videoAlbum";
} }
else if (item is Playlist)
{
classType = "object.container.playlistContainer";
}
} }
objectClass.InnerText = classType ?? "object.container.storageFolder"; objectClass.InnerText = classType ?? "object.container.storageFolder";
@ -560,7 +565,7 @@ namespace MediaBrowser.Dlna.Didl
foreach (var artist in audio.AlbumArtists) foreach (var artist in audio.AlbumArtists)
{ {
AddValue(element, "upnp", "albumArtist", artist, NS_UPNP); AddAlbumArtist(element, artist);
} }
} }
@ -569,9 +574,13 @@ namespace MediaBrowser.Dlna.Didl
if (album != null) if (album != null)
{ {
foreach (var artist in album.AlbumArtists) foreach (var artist in album.AlbumArtists)
{
AddAlbumArtist(element, artist);
AddValue(element, "upnp", "artist", artist, NS_UPNP);
}
foreach (var artist in album.Artists)
{ {
AddValue(element, "upnp", "artist", artist, NS_UPNP); AddValue(element, "upnp", "artist", artist, NS_UPNP);
AddValue(element, "upnp", "albumArtist", artist, NS_UPNP);
} }
} }
@ -582,6 +591,7 @@ namespace MediaBrowser.Dlna.Didl
if (!string.IsNullOrEmpty(musicVideo.Artist)) if (!string.IsNullOrEmpty(musicVideo.Artist))
{ {
AddValue(element, "upnp", "artist", musicVideo.Artist, NS_UPNP); AddValue(element, "upnp", "artist", musicVideo.Artist, NS_UPNP);
AddAlbumArtist(element, musicVideo.Artist);
} }
if (!string.IsNullOrEmpty(musicVideo.Album)) if (!string.IsNullOrEmpty(musicVideo.Album))
@ -593,6 +603,28 @@ namespace MediaBrowser.Dlna.Didl
if (item.IndexNumber.HasValue) if (item.IndexNumber.HasValue)
{ {
AddValue(element, "upnp", "originalTrackNumber", item.IndexNumber.Value.ToString(_usCulture), NS_UPNP); AddValue(element, "upnp", "originalTrackNumber", item.IndexNumber.Value.ToString(_usCulture), NS_UPNP);
if (item is Episode)
{
AddValue(element, "upnp", "episodeNumber", item.IndexNumber.Value.ToString(_usCulture), NS_UPNP);
}
}
}
private void AddAlbumArtist(XmlElement elem, string name)
{
try
{
var newNode = elem.OwnerDocument.CreateElement("upnp", "artist", NS_UPNP);
newNode.InnerText = name;
newNode.SetAttribute("role", "AlbumArtist");
elem.AppendChild(newNode);
}
catch (XmlException)
{
//_logger.Error("Error adding xml value: " + value);
} }
} }

View File

@ -180,9 +180,6 @@ namespace MediaBrowser.Model.Configuration
public SubtitleOptions SubtitleOptions { get; set; } public SubtitleOptions SubtitleOptions { get; set; }
public ChannelOptions ChannelOptions { get; set; }
public ChapterOptions ChapterOptions { get; set; }
public bool DefaultMetadataSettingsApplied { get; set; } public bool DefaultMetadataSettingsApplied { get; set; }
public bool EnableTokenAuthentication { get; set; } public bool EnableTokenAuthentication { get; set; }

View File

@ -16,24 +16,34 @@ namespace MediaBrowser.Model.Dlna
SearchType = SearchType.Unknown; SearchType = SearchType.Unknown;
if (StringHelper.IndexOfIgnoreCase(search, "upnp:class") != -1 && String[] factors = StringHelper.RegexSplit(search, "(and|or)");
StringHelper.IndexOfIgnoreCase(search, "derivedfrom") != -1) foreach (String factor in factors)
{ {
if (StringHelper.IndexOfIgnoreCase(search, "object.item.audioItem") != -1) String[] subFactors = StringHelper.RegexSplit(factor.Trim().Trim('(').Trim(')').Trim(), "\\s", 3);
if (subFactors.Length == 3)
{ {
SearchType = SearchType.Audio;
} if (StringHelper.EqualsIgnoreCase("upnp:class", subFactors[0]) &&
else if (StringHelper.IndexOfIgnoreCase(search, "object.item.imageItem") != -1) (StringHelper.EqualsIgnoreCase("=", subFactors[1]) || StringHelper.EqualsIgnoreCase("derivedfrom", subFactors[1])))
{ {
SearchType = SearchType.Image; if (StringHelper.EqualsIgnoreCase("\"object.item.imageItem\"", subFactors[2]) || StringHelper.EqualsIgnoreCase("\"object.item.imageItem.photo\"", subFactors[2]))
} {
else if (StringHelper.IndexOfIgnoreCase(search, "object.item.videoItem") != -1) SearchType = SearchType.Image;
{ }
SearchType = SearchType.Video; else if (StringHelper.EqualsIgnoreCase("\"object.item.videoItem\"", subFactors[2]))
} {
else if (StringHelper.IndexOfIgnoreCase(search, "object.container.playlistContainer") != -1) SearchType = SearchType.Video;
{ }
SearchType = SearchType.Playlist; else if (StringHelper.EqualsIgnoreCase("\"object.container.playlistContainer\"", subFactors[2]))
{
SearchType = SearchType.Playlist;
}
else if (StringHelper.EqualsIgnoreCase("\"object.container.album.musicAlbum\"", subFactors[2]))
{
SearchType = SearchType.MusicAlbum;
}
}
} }
} }
} }

View File

@ -6,6 +6,7 @@
Audio = 1, Audio = 1,
Image = 2, Image = 2,
Video = 3, Video = 3,
Playlist = 4 Playlist = 4,
MusicAlbum = 5
} }
} }

View File

@ -347,24 +347,12 @@ namespace MediaBrowser.Model.Dto
/// <value>The user data.</value> /// <value>The user data.</value>
public UserItemDataDto UserData { get; set; } public UserItemDataDto UserData { get; set; }
/// <summary>
/// Gets or sets the played percentage.
/// </summary>
/// <value>The played percentage.</value>
public double? PlayedPercentage { get; set; }
/// <summary> /// <summary>
/// Gets or sets the recursive item count. /// Gets or sets the recursive item count.
/// </summary> /// </summary>
/// <value>The recursive item count.</value> /// <value>The recursive item count.</value>
public int? RecursiveItemCount { get; set; } public int? RecursiveItemCount { get; set; }
/// <summary>
/// Gets or sets the recursive unplayed item count.
/// </summary>
/// <value>The recursive unplayed item count.</value>
public int? RecursiveUnplayedItemCount { get; set; }
/// <summary> /// <summary>
/// Gets or sets the child count. /// Gets or sets the child count.
/// </summary> /// </summary>

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.Text.RegularExpressions;
namespace MediaBrowser.Model.Extensions namespace MediaBrowser.Model.Extensions
{ {
@ -70,5 +71,28 @@ namespace MediaBrowser.Model.Extensions
{ {
return str.TrimStart(c); return str.TrimStart(c);
} }
/// <summary>
/// Splits the specified string.
/// </summary>
/// <param name="str">The string.</param>
/// <param name="term">The term.</param>
/// <returns>System.String[].</returns>
public static string[] RegexSplit(string str, string term)
{
return Regex.Split(str, term, RegexOptions.IgnoreCase);
}
/// <summary>
/// Splits the specified string.
/// </summary>
/// <param name="str">The string.</param>
/// <param name="term">The term.</param>
/// <param name="limit">The limit.</param>
/// <returns>System.String[].</returns>
public static string[] RegexSplit(string str, string term, int limit)
{
return new Regex(term).Split(str, limit);
}
} }
} }

View File

@ -51,14 +51,6 @@ namespace MediaBrowser.Model.Logging
/// <param name="paramList">The param list.</param> /// <param name="paramList">The param list.</param>
void FatalException(string message, Exception exception, params object[] paramList); void FatalException(string message, Exception exception, params object[] paramList);
/// <summary>
/// Logs the specified severity.
/// </summary>
/// <param name="severity">The severity.</param>
/// <param name="message">The message.</param>
/// <param name="paramList">The param list.</param>
void Log(LogSeverity severity, string message, params object[] paramList);
/// <summary> /// <summary>
/// Logs the exception. /// Logs the exception.
/// </summary> /// </summary>

View File

@ -256,9 +256,7 @@ namespace MediaBrowser.Server.Implementations.Dto
SetSpecialCounts(folder, user, dto, fields); SetSpecialCounts(folder, user, dto, fields);
} }
dto.UserData.Played = dto.PlayedPercentage.HasValue && dto.PlayedPercentage.Value >= 100; dto.UserData.Played = dto.UserData.PlayedPercentage.HasValue && dto.UserData.PlayedPercentage.Value >= 100;
dto.UserData.PlayedPercentage = dto.PlayedPercentage;
dto.UserData.UnplayedItemCount = dto.RecursiveUnplayedItemCount;
} }
else else
@ -1365,11 +1363,11 @@ namespace MediaBrowser.Server.Implementations.Dto
} }
dto.RecursiveItemCount = recursiveItemCount; dto.RecursiveItemCount = recursiveItemCount;
dto.RecursiveUnplayedItemCount = unplayed; dto.UserData.UnplayedItemCount = unplayed;
if (recursiveItemCount > 0) if (recursiveItemCount > 0)
{ {
dto.PlayedPercentage = totalPercentPlayed / recursiveItemCount; dto.UserData.PlayedPercentage = totalPercentPlayed / recursiveItemCount;
} }
if (runtime > 0 && fields.Contains(ItemFields.CumulativeRunTimeTicks)) if (runtime > 0 && fields.Contains(ItemFields.CumulativeRunTimeTicks))

View File

@ -231,59 +231,59 @@
"OptionBlockLiveTvChannels": "Canales de Tv en vivo", "OptionBlockLiveTvChannels": "Canales de Tv en vivo",
"OptionBlockChannelContent": "Contenido de canales de Internet", "OptionBlockChannelContent": "Contenido de canales de Internet",
"ButtonRevoke": "Revocar", "ButtonRevoke": "Revocar",
"MessageConfirmRevokeApiKey": "Are you sure you wish to revoke this api key? The application's connection to Media Browser will be abruptly terminated.", "MessageConfirmRevokeApiKey": "\u00bfEst\u00e1 seguro de que desea revocar esta clave api? La conexi\u00f3n de la aplicaci\u00f3n con Mediabrowser terminar\u00e1 abruptamente.",
"HeaderConfirmRevokeApiKey": "Revoke Api Key", "HeaderConfirmRevokeApiKey": "Revocar Clave Api",
"ValueContainer": "Container: {0}", "ValueContainer": "Contenedor: {0}",
"ValueAudioCodec": "Audio Codec: {0}", "ValueAudioCodec": "Codec de audio: {0}",
"ValueVideoCodec": "Video Codec: {0}", "ValueVideoCodec": "Codec de video: {0}",
"ValueCodec": "Codec: {0}", "ValueCodec": "Codec: {0}",
"ValueConditions": "Conditions: {0}", "ValueConditions": "Condiciones: {0}",
"LabelAll": "All", "LabelAll": "Todo",
"HeaderDeleteImage": "Delete Image", "HeaderDeleteImage": "Borrar imagen",
"MessageFileNotFound": "File not found.", "MessageFileNotFound": "Archivo no encontrado.",
"MessageFileReadError": "An error occurred reading this file.", "MessageFileReadError": "Ha ocurrido un error leyendo este archivo.",
"ButtonNextPage": "Next Page", "ButtonNextPage": "P\u00e1gina siguiente",
"ButtonPreviousPage": "Previous Page", "ButtonPreviousPage": "P\u00e1gina anterior",
"ButtonMoveLeft": "Move left", "ButtonMoveLeft": "Mover izquierda",
"ButtonMoveRight": "Move right", "ButtonMoveRight": "Mover derecha",
"ButtonBrowseOnlineImages": "Browse online images", "ButtonBrowseOnlineImages": "Navegar im\u00e1genes online",
"HeaderDeleteItem": "Delete Item", "HeaderDeleteItem": "Borrar elemento",
"ConfirmDeleteItem": "Are you sure you wish to delete this item from your library?", "ConfirmDeleteItem": "\u00bfEst\u00e1 seguro que desea borrar este elemento de su biblioteca?",
"MessagePleaseEnterNameOrId": "Please enter a name or an external Id.", "MessagePleaseEnterNameOrId": "Introduzca un nombre o un identificador externo.",
"MessageValueNotCorrect": "The value entered is not correct. Please try again.", "MessageValueNotCorrect": "El valor introducido no es correcto. Intentelo de nuevo.",
"MessageItemSaved": "Item saved.", "MessageItemSaved": "Elemento grabado.",
"OptionEnded": "Finalizado", "OptionEnded": "Finalizado",
"OptionContinuing": "Continuando", "OptionContinuing": "Continuando",
"OptionOff": "Apagado", "OptionOff": "Apagado",
"OptionOn": "Encendido", "OptionOn": "Encendido",
"HeaderFields": "Fields", "HeaderFields": "Campos",
"HeaderFieldsHelp": "Slide a field to 'off' to lock it and prevent it's data from being changed.", "HeaderFieldsHelp": "Deslice un campo en 'off' para bloquearlo y evitar que la informaci\u00f3n sea cambiada.",
"HeaderLiveTV": "Live TV", "HeaderLiveTV": "Tv en vivo",
"MissingLocalTrailer": "Missing local trailer.", "MissingLocalTrailer": "Falta trailer local.",
"MissingPrimaryImage": "Missing primary image.", "MissingPrimaryImage": "Falta imagen principal.",
"MissingBackdropImage": "Missing backdrop image.", "MissingBackdropImage": "Falta imagen de fondo.",
"MissingLogoImage": "Missing logo image.", "MissingLogoImage": "Falta logo.",
"MissingEpisode": "Missing episode.", "MissingEpisode": "Falta episodio.",
"OptionScreenshots": "Screenshots", "OptionScreenshots": "Capturas del pantalla",
"OptionBackdrops": "Backdrops", "OptionBackdrops": "Im\u00e1genes de fondo",
"OptionImages": "Images", "OptionImages": "Im\u00e1genes",
"OptionKeywords": "Keywords", "OptionKeywords": "Palabras clave",
"OptionTags": "Tags", "OptionTags": "Etiquetas",
"OptionStudios": "Studios", "OptionStudios": "Estudios",
"OptionName": "Name", "OptionName": "Nombre",
"OptionOverview": "Overview", "OptionOverview": "Sinopsis",
"OptionGenres": "Genres", "OptionGenres": "G\u00e9neros",
"OptionParentalRating": "Clasificaci\u00f3n parental", "OptionParentalRating": "Clasificaci\u00f3n parental",
"OptionPeople": "People", "OptionPeople": "Gente",
"OptionRuntime": "Tiempo", "OptionRuntime": "Tiempo",
"OptionProductionLocations": "Production Locations", "OptionProductionLocations": "Localizaciones de producci\u00f3n",
"OptionBirthLocation": "Birth Location", "OptionBirthLocation": "Lugar de nacimiento",
"LabelAllChannels": "Todos los canales", "LabelAllChannels": "Todos los canales",
"LabelLiveProgram": "LIVE", "LabelLiveProgram": "EN VIVO",
"LabelNewProgram": "NEW", "LabelNewProgram": "NUEVO",
"LabelPremiereProgram": "PREMIERE", "LabelPremiereProgram": "ESTRENO",
"LabelHDProgram": "HD", "LabelHDProgram": "HD",
"HeaderChangeFolderType": "Change Folder Type", "HeaderChangeFolderType": "Cambiar tipo de carpeta",
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.", "HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
"HeaderAlert": "Alert", "HeaderAlert": "Alert",
"MessagePleaseRestart": "Please restart to finish updating.", "MessagePleaseRestart": "Please restart to finish updating.",

View File

@ -346,33 +346,33 @@
"HeaderSeasonNumber": "N\u00famero de temporada", "HeaderSeasonNumber": "N\u00famero de temporada",
"HeaderNetwork": "Cadena", "HeaderNetwork": "Cadena",
"HeaderYear": "A\u00f1o", "HeaderYear": "A\u00f1o",
"HeaderGameSystem": "Sistema de Juegos", "HeaderGameSystem": "Sistema de juegos",
"HeaderPlayers": "Jugadores", "HeaderPlayers": "Jugadores",
"HeaderEmbeddedImage": "Im\u00e1gen embebida", "HeaderEmbeddedImage": "Im\u00e1gen embebida",
"HeaderTrack": "Pista", "HeaderTrack": "Pista",
"HeaderDisc": "Disco", "HeaderDisc": "Disco",
"OptionMovies": "Pel\u00edculas", "OptionMovies": "Pel\u00edculas",
"OptionCollections": "Collection", "OptionCollections": "Colecci\u00f3n",
"OptionSeries": "Series", "OptionSeries": "Series",
"OptionSeasons": "Seasons", "OptionSeasons": "Temporadas",
"OptionEpisodes": "Episodios", "OptionEpisodes": "Episodios",
"OptionGames": "Games", "OptionGames": "Juegos",
"OptionGameSystems": "Game systems", "OptionGameSystems": "Sistemas de juegos",
"OptionMusicArtists": "Music artists", "OptionMusicArtists": "Int\u00e9rpretes",
"OptionMusicAlbums": "Music albums", "OptionMusicAlbums": "\u00c1lbums musicales",
"OptionMusicVideos": "Music videos", "OptionMusicVideos": "Videos musicales",
"OptionSongs": "Songs", "OptionSongs": "Canciones",
"OptionHomeVideos": "Home videos", "OptionHomeVideos": "Videos caseros",
"OptionBooks": "Books", "OptionBooks": "Libros",
"OptionAdultVideos": "Adult videos", "OptionAdultVideos": "Videos para adultos",
"ButtonUp": "Up", "ButtonUp": "Arriba",
"ButtonDown": "Down", "ButtonDown": "Abajo",
"LabelMetadataReaders": "Metadata readers:", "LabelMetadataReaders": "Lectores de metadatos:",
"LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataReadersHelp": "Ordene sus fuentes de metadatos locales por prioridad. El primer archivo encontrado ser\u00e1 le\u00eddo.",
"LabelMetadataDownloaders": "Metadata downloaders:", "LabelMetadataDownloaders": "Recolectores de metadatos:",
"LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataDownloadersHelp": "Habilite y priorice sus recolectores de metadatos preferidos. Los recolectores de metadatos de menor prioridad solo ser\u00e1n utilizados para llenar informaci\u00f3n faltante.",
"LabelMetadataSavers": "Metadata savers:", "LabelMetadataSavers": "Grabadores de metadatos:",
"LabelMetadataSaversHelp": "Choose the file formats to save your metadata to.", "LabelMetadataSaversHelp": "Seleccione los formatos de archivo con los que se guardaran sus metadatos.",
"LabelImageFetchers": "Image fetchers:", "LabelImageFetchers": "Recolectores de im\u00e1genes:",
"LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority." "LabelImageFetchersHelp": "Habilite y priorice sus recolectores de im\u00e1genes preferidos."
} }

View File

@ -222,7 +222,7 @@
"HeaderBlockItemsWithNoRating": "Bloquer les items ne comportant aucune information de classement :", "HeaderBlockItemsWithNoRating": "Bloquer les items ne comportant aucune information de classement :",
"OptionBlockOthers": "Autres", "OptionBlockOthers": "Autres",
"OptionBlockTvShows": "Emissions TV", "OptionBlockTvShows": "Emissions TV",
"OptionBlockTrailers": "Bande-annonces", "OptionBlockTrailers": "Bandes-annonces",
"OptionBlockMusic": "Musiques", "OptionBlockMusic": "Musiques",
"OptionBlockMovies": "Films", "OptionBlockMovies": "Films",
"OptionBlockBooks": "Livres", "OptionBlockBooks": "Livres",
@ -332,7 +332,7 @@
"ValueOriginalAirDate": "Date de diffusion originale: {0}", "ValueOriginalAirDate": "Date de diffusion originale: {0}",
"ButtonRemoveFromPlaylist": "Remove from playlist", "ButtonRemoveFromPlaylist": "Remove from playlist",
"HeaderSpecials": "Specials", "HeaderSpecials": "Specials",
"HeaderTrailers": "Bande-Annonces", "HeaderTrailers": "Bandes-annonces",
"HeaderAudio": "Audio", "HeaderAudio": "Audio",
"HeaderResolution": "R\u00e9solution", "HeaderResolution": "R\u00e9solution",
"HeaderVideo": "Vid\u00e9o", "HeaderVideo": "Vid\u00e9o",
@ -354,16 +354,16 @@
"OptionMovies": "Films", "OptionMovies": "Films",
"OptionCollections": "Collection", "OptionCollections": "Collection",
"OptionSeries": "Series", "OptionSeries": "Series",
"OptionSeasons": "Seasons", "OptionSeasons": "Saisons",
"OptionEpisodes": "\u00c9pisodes", "OptionEpisodes": "\u00c9pisodes",
"OptionGames": "Games", "OptionGames": "Jeux",
"OptionGameSystems": "Game systems", "OptionGameSystems": "Game systems",
"OptionMusicArtists": "Music artists", "OptionMusicArtists": "Music artists",
"OptionMusicAlbums": "Music albums", "OptionMusicAlbums": "Music albums",
"OptionMusicVideos": "Music videos", "OptionMusicVideos": "Music videos",
"OptionSongs": "Songs", "OptionSongs": "Chansons",
"OptionHomeVideos": "Home videos", "OptionHomeVideos": "Home videos",
"OptionBooks": "Books", "OptionBooks": "Livres",
"OptionAdultVideos": "Adult videos", "OptionAdultVideos": "Adult videos",
"ButtonUp": "Up", "ButtonUp": "Up",
"ButtonDown": "Down", "ButtonDown": "Down",

View File

@ -358,7 +358,7 @@
"HeaderTrack": "Track", "HeaderTrack": "Track",
"HeaderDisc": "Disc", "HeaderDisc": "Disc",
"OptionMovies": "Movies", "OptionMovies": "Movies",
"OptionCollections": "Collection", "OptionCollections": "Collections",
"OptionSeries": "Series", "OptionSeries": "Series",
"OptionSeasons": "Seasons", "OptionSeasons": "Seasons",
"OptionEpisodes": "Episodes", "OptionEpisodes": "Episodes",

View File

@ -146,7 +146,7 @@
"ButtonAdd": "\u04ae\u0441\u0442\u0435\u0443", "ButtonAdd": "\u04ae\u0441\u0442\u0435\u0443",
"ButtonRemove": "\u0410\u043b\u0430\u0441\u0442\u0430\u0443", "ButtonRemove": "\u0410\u043b\u0430\u0441\u0442\u0430\u0443",
"LabelChapterDownloaders": "\u0421\u0430\u0445\u043d\u0430\u043b\u0430\u0440\u0434\u044b \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440:", "LabelChapterDownloaders": "\u0421\u0430\u0445\u043d\u0430\u043b\u0430\u0440\u0434\u044b \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440:",
"LabelChapterDownloadersHelp": "\u0421\u0430\u0445\u043d\u0430 \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440\u0456\u043d \u049b\u043e\u0441\u044b\u04a3\u044b\u0437 \u0436\u04d9\u043d\u0435 \u0431\u0430\u0441\u044b\u043c\u0434\u044b\u043b\u044b\u049b \u0440\u0435\u0442\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0434\u04d9\u0440\u0435\u0436\u0435 \u0431\u0435\u0440\u0456\u04a3\u0456\u0437. \u0422\u04e9\u043c\u0435\u043d\u0433\u0456 \u0431\u0430\u0441\u044b\u043c\u0434\u044b\u043b\u044b\u0493\u044b \u0431\u0430\u0440 \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440 \u0442\u0435\u043a \u049b\u0430\u043d\u0430 \u0436\u043e\u049b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u0442\u044b \u0442\u043e\u043b\u0442\u044b\u0440\u0443 \u04af\u0448\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043b\u0430\u0434\u044b.", "LabelChapterDownloadersHelp": "\u0422\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u0441\u0430\u0445\u043d\u0430 \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440\u0456\u043d \u049b\u043e\u0441\u044b\u04a3\u044b\u0437 \u0436\u04d9\u043d\u0435 \u0431\u0430\u0441\u044b\u043c\u0434\u044b\u043b\u044b\u049b \u0440\u0435\u0442\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0434\u04d9\u0440\u0435\u0436\u0435 \u0431\u0435\u0440\u0456\u04a3\u0456\u0437. \u0422\u04e9\u043c\u0435\u043d\u0433\u0456 \u0431\u0430\u0441\u044b\u043c\u0434\u044b\u043b\u044b\u0493\u044b \u0431\u0430\u0440 \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440 \u0442\u0435\u043a \u049b\u0430\u043d\u0430 \u0436\u043e\u049b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u0442\u044b \u0442\u043e\u043b\u0442\u044b\u0440\u0443 \u04af\u0448\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043b\u0430\u0434\u044b.",
"HeaderFavoriteAlbums": "\u0422\u0430\u04a3\u0434\u0430\u0443\u043b\u044b \u0430\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440", "HeaderFavoriteAlbums": "\u0422\u0430\u04a3\u0434\u0430\u0443\u043b\u044b \u0430\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440",
"HeaderLatestChannelMedia": "\u0410\u0440\u043d\u0430\u043b\u0430\u0440\u0434\u044b\u04a3 \u0435\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0456", "HeaderLatestChannelMedia": "\u0410\u0440\u043d\u0430\u043b\u0430\u0440\u0434\u044b\u04a3 \u0435\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0456",
"ButtonOrganizeFile": "\u0424\u0430\u0439\u043b\u0434\u044b \u04b1\u0439\u044b\u043c\u0434\u0430\u0441\u0442\u044b\u0440\u0443", "ButtonOrganizeFile": "\u0424\u0430\u0439\u043b\u0434\u044b \u04b1\u0439\u044b\u043c\u0434\u0430\u0441\u0442\u044b\u0440\u0443",
@ -352,27 +352,27 @@
"HeaderTrack": "\u0416\u043e\u043b\u0448\u044b\u049b", "HeaderTrack": "\u0416\u043e\u043b\u0448\u044b\u049b",
"HeaderDisc": "\u0414\u0438\u0441\u043a\u0456", "HeaderDisc": "\u0414\u0438\u0441\u043a\u0456",
"OptionMovies": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440", "OptionMovies": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440",
"OptionCollections": "Collection", "OptionCollections": "\u0416\u0438\u043d\u0430\u049b\u0442\u0430\u0440",
"OptionSeries": "Series", "OptionSeries": "\u0421\u0435\u0440\u0438\u0430\u043b\u0434\u0430\u0440",
"OptionSeasons": "Seasons", "OptionSeasons": "\u041c\u0430\u0443\u0441\u044b\u043c\u0434\u0430\u0440",
"OptionEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440", "OptionEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440",
"OptionGames": "Games", "OptionGames": "\u041e\u0439\u044b\u043d\u0434\u0430\u0440",
"OptionGameSystems": "Game systems", "OptionGameSystems": "\u041e\u0439\u044b\u043d \u0436\u04af\u0439\u0435\u043b\u0435\u0440\u0456",
"OptionMusicArtists": "Music artists", "OptionMusicArtists": "\u041c\u0443\u0437\u044b\u043a\u0430 \u043e\u0440\u044b\u043d\u0434\u0430\u0443\u0448\u044b\u043b\u0430\u0440\u044b",
"OptionMusicAlbums": "Music albums", "OptionMusicAlbums": "\u041c\u0443\u0437\u044b\u043a\u0430 \u0430\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440\u044b",
"OptionMusicVideos": "Music videos", "OptionMusicVideos": "\u041c\u0443\u0437\u044b\u043a\u0430 \u043a\u043b\u0438\u043f\u0442\u0435\u0440\u0456",
"OptionSongs": "Songs", "OptionSongs": "\u04d8\u0443\u0435\u043d\u0434\u0435\u0440",
"OptionHomeVideos": "Home videos", "OptionHomeVideos": "\u04ae\u0439 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0456",
"OptionBooks": "Books", "OptionBooks": "\u041a\u0456\u0442\u0430\u043f\u0442\u0430\u0440",
"OptionAdultVideos": "Adult videos", "OptionAdultVideos": "\u0415\u0440\u0435\u0441\u0435\u043a \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0456",
"ButtonUp": "Up", "ButtonUp": "\u0416\u043e\u0493\u0430\u0440\u044b\u0493\u0430",
"ButtonDown": "Down", "ButtonDown": "\u0422\u04e9\u043c\u0435\u043d\u0433\u0435",
"LabelMetadataReaders": "Metadata readers:", "LabelMetadataReaders": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u043e\u049b\u0443\u0448\u044b\u043b\u0430\u0440\u044b:",
"LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataReadersHelp": "\u0422\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u049b\u0430\u0439\u043d\u0430\u0440 \u043a\u04e9\u0437\u0434\u0435\u0440\u0456\u043d\u0435 \u0431\u0430\u0441\u044b\u043c\u0434\u044b\u043b\u044b\u049b \u0440\u0435\u0442\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0434\u04d9\u0440\u0435\u0436\u0435 \u0431\u0435\u0440\u0456\u04a3\u0456\u0437. \u0411\u0456\u0440\u0456\u043d\u0448\u0456 \u0442\u0430\u0431\u044b\u043b\u0493\u0430\u043d \u0444\u0430\u0439\u043b \u043e\u049b\u044b\u043b\u0430\u0434\u044b.",
"LabelMetadataDownloaders": "Metadata downloaders:", "LabelMetadataDownloaders": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440\u0456:",
"LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataDownloadersHelp": "\u0422\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440\u0456\u043d \u049b\u043e\u0441\u044b\u04a3\u044b\u0437 \u0436\u04d9\u043d\u0435 \u0431\u0430\u0441\u044b\u043c\u0434\u044b\u043b\u044b\u049b \u0440\u0435\u0442\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0434\u04d9\u0440\u0435\u0436\u0435 \u0431\u0435\u0440\u0456\u04a3\u0456\u0437. \u0422\u04e9\u043c\u0435\u043d\u0433\u0456 \u0431\u0430\u0441\u044b\u043c\u0434\u044b\u043b\u044b\u0493\u044b \u0431\u0430\u0440 \u0436\u04af\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440 \u0442\u0435\u043a \u049b\u0430\u043d\u0430 \u0436\u043e\u049b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u0442\u044b \u0442\u043e\u043b\u0442\u044b\u0440\u0443 \u04af\u0448\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043b\u0430\u0434\u044b.",
"LabelMetadataSavers": "Metadata savers:", "LabelMetadataSavers": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u0441\u0430\u049b\u0442\u0430\u0443\u0448\u044b\u043b\u0430\u0440\u044b:",
"LabelMetadataSaversHelp": "Choose the file formats to save your metadata to.", "LabelMetadataSaversHelp": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u049b\u0430\u0439\u0434\u0430 \u0441\u0430\u049b\u0442\u0430\u0439\u0442\u044b\u043d \u0444\u0430\u0439\u043b \u043f\u0456\u0448\u0456\u043c\u0434\u0435\u0440\u0456\u043d \u0442\u0430\u04a3\u0434\u0430\u0443.",
"LabelImageFetchers": "Image fetchers:", "LabelImageFetchers": "\u0421\u0443\u0440\u0435\u0442 \u0456\u0440\u0456\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440\u0456:",
"LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority." "LabelImageFetchersHelp": "\u0422\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u0441\u0443\u0440\u0435\u0442 \u0456\u0440\u0456\u043a\u0442\u0435\u0443\u0448\u0456\u043b\u0435\u0440\u0456\u043d \u049b\u043e\u0441\u044b\u04a3\u044b\u0437 \u0436\u04d9\u043d\u0435 \u0431\u0430\u0441\u044b\u043c\u0434\u044b\u043b\u044b\u049b \u0440\u0435\u0442\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0434\u04d9\u0440\u0435\u0436\u0435 \u0431\u0435\u0440\u0456\u04a3\u0456\u0437."
} }

View File

@ -352,27 +352,27 @@
"HeaderTrack": "Track", "HeaderTrack": "Track",
"HeaderDisc": "Schijf", "HeaderDisc": "Schijf",
"OptionMovies": "Films", "OptionMovies": "Films",
"OptionCollections": "Collection", "OptionCollections": "Collectie",
"OptionSeries": "Series", "OptionSeries": "Series",
"OptionSeasons": "Seasons", "OptionSeasons": "Seizoenen",
"OptionEpisodes": "Afleveringen", "OptionEpisodes": "Afleveringen",
"OptionGames": "Games", "OptionGames": "Spellen",
"OptionGameSystems": "Game systems", "OptionGameSystems": "Spel Systemen",
"OptionMusicArtists": "Music artists", "OptionMusicArtists": "Muziek artiesten",
"OptionMusicAlbums": "Music albums", "OptionMusicAlbums": "Muziek albums",
"OptionMusicVideos": "Music videos", "OptionMusicVideos": "Music videos",
"OptionSongs": "Songs", "OptionSongs": "Nummers ",
"OptionHomeVideos": "Home videos", "OptionHomeVideos": "Home video's",
"OptionBooks": "Books", "OptionBooks": "Boeken",
"OptionAdultVideos": "Adult videos", "OptionAdultVideos": "Erotische video's",
"ButtonUp": "Up", "ButtonUp": "Omhoog",
"ButtonDown": "Down", "ButtonDown": "Omlaag",
"LabelMetadataReaders": "Metadata readers:", "LabelMetadataReaders": "Metagedata lezers:",
"LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataReadersHelp": "Rangschik de gewenste lokale metadata bronnen in volgorde van prioriteit. Het eerst gevonden bestand zal worden gelezen.",
"LabelMetadataDownloaders": "Metadata downloaders:", "LabelMetadataDownloaders": "Metadata Downloaders:",
"LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataDownloadersHelp": "Schakelen in en rangschik uw voorkeurs metadata downloader, gerangschikt in volgorde van prioriteit. Lagere prioriteit downloaders zullen alleen worden gebruikt om de ontbrekende informatie in te vullen.",
"LabelMetadataSavers": "Metadata savers:", "LabelMetadataSavers": "Metadata Opslag:",
"LabelMetadataSaversHelp": "Choose the file formats to save your metadata to.", "LabelMetadataSaversHelp": "Kies de bestandsindeling om uw metadata op te slaan.",
"LabelImageFetchers": "Image fetchers:", "LabelImageFetchers": "Afbeeldingen Downloaders:",
"LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority." "LabelImageFetchersHelp": "Schakelen in en rangschik uw voorkeurs Afbeeldingen downloader, gerangschikt in volgorde van prioriteit."
} }

View File

@ -58,14 +58,14 @@
"ButtonMute": "Mudo", "ButtonMute": "Mudo",
"ButtonUnmute": "Remover Mudo", "ButtonUnmute": "Remover Mudo",
"ButtonStop": "Parar", "ButtonStop": "Parar",
"ButtonNextTrack": "Pr\u00f3xima faixa", "ButtonNextTrack": "Pr\u00f3xima Faixa",
"ButtonPause": "Pausar", "ButtonPause": "Pausar",
"ButtonPlay": "Reproduzir", "ButtonPlay": "Reproduzir",
"ButtonEdit": "Editar", "ButtonEdit": "Editar",
"ButtonQueue": "Adicionar \u00e0 fila", "ButtonQueue": "Adicionar \u00e0 fila",
"ButtonPlayTrailer": "Reproduzir trailer", "ButtonPlayTrailer": "Reproduzir trailer",
"ButtonPlaylist": "Lista de reprodu\u00e7\u00e3o", "ButtonPlaylist": "Lista de reprodu\u00e7\u00e3o",
"ButtonPreviousTrack": "Faixa anterior", "ButtonPreviousTrack": "Faixa Anterior",
"LabelEnabled": "Ativada", "LabelEnabled": "Ativada",
"LabelDisabled": "Desativada", "LabelDisabled": "Desativada",
"ButtonMoreInformation": "Mais informa\u00e7\u00f5es", "ButtonMoreInformation": "Mais informa\u00e7\u00f5es",
@ -153,7 +153,7 @@
"ButtonDeleteFile": "Excluir Arquivo", "ButtonDeleteFile": "Excluir Arquivo",
"HeaderOrganizeFile": "Organizar Arquivo", "HeaderOrganizeFile": "Organizar Arquivo",
"HeaderDeleteFile": "Excluir Arquivo", "HeaderDeleteFile": "Excluir Arquivo",
"StatusSkipped": "Ignorado", "StatusSkipped": "Ignorada",
"StatusFailed": "Com Falha", "StatusFailed": "Com Falha",
"StatusSuccess": "Sucesso", "StatusSuccess": "Sucesso",
"MessageFileWillBeDeleted": "Ser\u00e1 exclu\u00eddo o seguinte arquivo:", "MessageFileWillBeDeleted": "Ser\u00e1 exclu\u00eddo o seguinte arquivo:",
@ -326,7 +326,7 @@
"LabelName": "Nome:", "LabelName": "Nome:",
"ButtonSubmit": "Enviar", "ButtonSubmit": "Enviar",
"LabelSelectPlaylist": "Lista de Reprodu\u00e7\u00e3o:", "LabelSelectPlaylist": "Lista de Reprodu\u00e7\u00e3o:",
"OptionNewPlaylist": "Nova lista de reprodu\u00e7\u00e3o...", "OptionNewPlaylist": "Nova lista de reprodu\u00e7\u00e3o",
"MessageAddedToPlaylistSuccess": "Ok", "MessageAddedToPlaylistSuccess": "Ok",
"ButtonViewSeriesRecording": "Visualizar grava\u00e7\u00e3o de s\u00e9ries", "ButtonViewSeriesRecording": "Visualizar grava\u00e7\u00e3o de s\u00e9ries",
"ValueOriginalAirDate": "Data original de exibi\u00e7\u00e3o: {0}", "ValueOriginalAirDate": "Data original de exibi\u00e7\u00e3o: {0}",
@ -352,27 +352,27 @@
"HeaderTrack": "Faixa", "HeaderTrack": "Faixa",
"HeaderDisc": "Disco", "HeaderDisc": "Disco",
"OptionMovies": "Filmes", "OptionMovies": "Filmes",
"OptionCollections": "Collection", "OptionCollections": "Cole\u00e7\u00e3o",
"OptionSeries": "Series", "OptionSeries": "S\u00e9ries",
"OptionSeasons": "Seasons", "OptionSeasons": "Temporadas",
"OptionEpisodes": "Epis\u00f3dios", "OptionEpisodes": "Epis\u00f3dios",
"OptionGames": "Games", "OptionGames": "Jogos",
"OptionGameSystems": "Game systems", "OptionGameSystems": "Sistemas de jogos",
"OptionMusicArtists": "Music artists", "OptionMusicArtists": "Artistas da M\u00fasica",
"OptionMusicAlbums": "Music albums", "OptionMusicAlbums": "\u00c1lbuns de m\u00fasica",
"OptionMusicVideos": "Music videos", "OptionMusicVideos": "V\u00eddeos Musicais",
"OptionSongs": "Songs", "OptionSongs": "M\u00fasicas",
"OptionHomeVideos": "Home videos", "OptionHomeVideos": "V\u00eddeos caseiros",
"OptionBooks": "Books", "OptionBooks": "Livros",
"OptionAdultVideos": "Adult videos", "OptionAdultVideos": "V\u00eddeos adultos",
"ButtonUp": "Up", "ButtonUp": "Para cima",
"ButtonDown": "Down", "ButtonDown": "Para baixo",
"LabelMetadataReaders": "Metadata readers:", "LabelMetadataReaders": "Leitores de metadados:",
"LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataReadersHelp": "Classifique suas fontes preferidas de metadados locais por ordem de prioridade. O primeiro arquivo encontrado ser\u00e1 lido.",
"LabelMetadataDownloaders": "Metadata downloaders:", "LabelMetadataDownloaders": "Downloaders de metadados:",
"LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataDownloadersHelp": "Ative e classifique seus downloaders preferidos de metadados por ordem de prioridade. Downloaders com prioridade mais baixa s\u00f3 ser\u00e3o usados para baixar informa\u00e7\u00e3o que n\u00e3o existe.",
"LabelMetadataSavers": "Metadata savers:", "LabelMetadataSavers": "Gravadores de metadados:",
"LabelMetadataSaversHelp": "Choose the file formats to save your metadata to.", "LabelMetadataSaversHelp": "Escolha os formatos de arquivos nos quais deseja gravar seus metadados.",
"LabelImageFetchers": "Image fetchers:", "LabelImageFetchers": "Buscadores de imagem:",
"LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority." "LabelImageFetchersHelp": "Ative e classifique seus buscadores preferidos de imagem por ordem de prioridade."
} }

View File

@ -146,7 +146,7 @@
"ButtonAdd": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c", "ButtonAdd": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c",
"ButtonRemove": "\u0418\u0437\u044a\u044f\u0442\u044c", "ButtonRemove": "\u0418\u0437\u044a\u044f\u0442\u044c",
"LabelChapterDownloaders": "\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441\u0446\u0435\u043d:", "LabelChapterDownloaders": "\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441\u0446\u0435\u043d:",
"LabelChapterDownloadersHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0438 \u0440\u0430\u043d\u0436\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441\u0446\u0435\u043d \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439.", "LabelChapterDownloadersHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0438 \u0440\u0430\u043d\u0436\u0438\u0440\u0443\u0439\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441\u0446\u0435\u043d \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.",
"HeaderFavoriteAlbums": "\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u044c\u0431\u043e\u043c\u044b", "HeaderFavoriteAlbums": "\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u044c\u0431\u043e\u043c\u044b",
"HeaderLatestChannelMedia": "\u041d\u043e\u0432\u0438\u043d\u043a\u0438 \u043a\u0430\u043d\u0430\u043b\u043e\u0432", "HeaderLatestChannelMedia": "\u041d\u043e\u0432\u0438\u043d\u043a\u0438 \u043a\u0430\u043d\u0430\u043b\u043e\u0432",
"ButtonOrganizeFile": "\u0420\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b", "ButtonOrganizeFile": "\u0420\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b",
@ -352,27 +352,27 @@
"HeaderTrack": "\u0414\u043e\u0440\u043e\u0436\u043a\u0430", "HeaderTrack": "\u0414\u043e\u0440\u043e\u0436\u043a\u0430",
"HeaderDisc": "\u0414\u0438\u0441\u043a", "HeaderDisc": "\u0414\u0438\u0441\u043a",
"OptionMovies": "\u0424\u0438\u043b\u044c\u043c\u044b", "OptionMovies": "\u0424\u0438\u043b\u044c\u043c\u044b",
"OptionCollections": "Collection", "OptionCollections": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
"OptionSeries": "Series", "OptionSeries": "\u0421\u0435\u0440\u0438\u0430\u043b\u044b",
"OptionSeasons": "Seasons", "OptionSeasons": "\u0421\u0435\u0437\u043e\u043d\u044b",
"OptionEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u044b", "OptionEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u044b",
"OptionGames": "Games", "OptionGames": "\u0418\u0433\u0440\u044b",
"OptionGameSystems": "Game systems", "OptionGameSystems": "\u0418\u0433\u0440\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b",
"OptionMusicArtists": "Music artists", "OptionMusicArtists": "\u041c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0438",
"OptionMusicAlbums": "Music albums", "OptionMusicAlbums": "\u041c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043b\u044c\u0431\u043e\u043c\u044b",
"OptionMusicVideos": "Music videos", "OptionMusicVideos": "\u041c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0438\u043f\u044b",
"OptionSongs": "Songs", "OptionSongs": "\u041c\u0435\u043b\u043e\u0434\u0438\u0438",
"OptionHomeVideos": "Home videos", "OptionHomeVideos": "\u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0432\u0438\u0434\u0435\u043e",
"OptionBooks": "Books", "OptionBooks": "\u041a\u043d\u0438\u0433\u0438",
"OptionAdultVideos": "Adult videos", "OptionAdultVideos": "\u0412\u0437\u0440\u043e\u0441\u043b\u043e\u0435 \u0432\u0438\u0434\u0435\u043e",
"ButtonUp": "Up", "ButtonUp": "\u0412\u0432\u0435\u0440\u0445",
"ButtonDown": "Down", "ButtonDown": "\u0412\u043d\u0438\u0437",
"LabelMetadataReaders": "Metadata readers:", "LabelMetadataReaders": "\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:",
"LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataReadersHelp": "\u0420\u0430\u043d\u0436\u0438\u0440\u0443\u0439\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0411\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u043d \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.",
"LabelMetadataDownloaders": "Metadata downloaders:", "LabelMetadataDownloaders": "\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:",
"LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataDownloadersHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0438 \u0440\u0430\u043d\u0436\u0438\u0440\u0443\u0439\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.",
"LabelMetadataSavers": "Metadata savers:", "LabelMetadataSavers": "\u0425\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:",
"LabelMetadataSaversHelp": "Choose the file formats to save your metadata to.", "LabelMetadataSaversHelp": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435.",
"LabelImageFetchers": "Image fetchers:", "LabelImageFetchers": "\u041e\u0442\u0431\u043e\u0440\u0449\u0438\u043a\u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432:",
"LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority." "LabelImageFetchersHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0438 \u0440\u0430\u043d\u0436\u0438\u0440\u0443\u0439\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0431\u043e\u0440\u0449\u0438\u043a\u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430."
} }

View File

@ -321,12 +321,12 @@
"ButtonNew": "Nytillkommet", "ButtonNew": "Nytillkommet",
"MessageInternetExplorerWebm": "F\u00f6r b\u00e4sta resultat med Internet Explorer, installera WebM-till\u00e4gget f\u00f6r IE.", "MessageInternetExplorerWebm": "F\u00f6r b\u00e4sta resultat med Internet Explorer, installera WebM-till\u00e4gget f\u00f6r IE.",
"HeaderVideoError": "Videofel", "HeaderVideoError": "Videofel",
"ButtonAddToPlaylist": "Add to playlist", "ButtonAddToPlaylist": "L\u00e4gg till i spellista",
"HeaderAddToPlaylist": "Add to Playlist", "HeaderAddToPlaylist": "L\u00e4gg till i Spellista",
"LabelName": "Namn:", "LabelName": "Namn:",
"ButtonSubmit": "Bekr\u00e4fta", "ButtonSubmit": "Bekr\u00e4fta",
"LabelSelectPlaylist": "Playlist:", "LabelSelectPlaylist": "Spellista:",
"OptionNewPlaylist": "New playlist...", "OptionNewPlaylist": "Ny spellista...",
"MessageAddedToPlaylistSuccess": "Ok", "MessageAddedToPlaylistSuccess": "Ok",
"ButtonViewSeriesRecording": "View series recording", "ButtonViewSeriesRecording": "View series recording",
"ValueOriginalAirDate": "Original air date: {0}", "ValueOriginalAirDate": "Original air date: {0}",

View File

@ -877,11 +877,11 @@
"HeaderDevice": "Dispositivo", "HeaderDevice": "Dispositivo",
"HeaderUser": "Usuario", "HeaderUser": "Usuario",
"HeaderDateIssued": "Fecha de emisi\u00f3n", "HeaderDateIssued": "Fecha de emisi\u00f3n",
"LabelChapterName": "Chapter {0}", "LabelChapterName": "Cap\u00edtulo {0}",
"HeaderNewApiKey": "New Api Key", "HeaderNewApiKey": "Nueva Clave Api",
"LabelAppName": "App name", "LabelAppName": "Nombre de la app",
"LabelAppNameExample": "Example: Sickbeard, NzbDrone", "LabelAppNameExample": "Ejemplo: Sickbeard, NzbDrone",
"HeaderNewApiKeyHelp": "Grant an application permission to communicate with Media Browser.", "HeaderNewApiKeyHelp": "Otorgar un permiso a la aplicaci\u00f3n para comunicarse con Media Browser.",
"HeaderHttpHeaders": "Http Headers", "HeaderHttpHeaders": "Http Headers",
"HeaderIdentificationHeader": "Identification Header", "HeaderIdentificationHeader": "Identification Header",
"LabelValue": "Value:", "LabelValue": "Value:",

View File

@ -374,7 +374,7 @@
"HeaderGallery": "Galer\u00eda", "HeaderGallery": "Galer\u00eda",
"HeaderLatestGames": "Juegos Recientes", "HeaderLatestGames": "Juegos Recientes",
"HeaderRecentlyPlayedGames": "Juegos Usados Recientemente", "HeaderRecentlyPlayedGames": "Juegos Usados Recientemente",
"TabGameSystems": "Sistemas de Juego", "TabGameSystems": "Sistemas de Juegos",
"TitleMediaLibrary": "Biblioteca de Medios", "TitleMediaLibrary": "Biblioteca de Medios",
"TabFolders": "Carpetas", "TabFolders": "Carpetas",
"TabPathSubstitution": "Rutas Alternativas", "TabPathSubstitution": "Rutas Alternativas",

View File

@ -1,6 +1,6 @@
{ {
"LabelExit": "Quitter", "LabelExit": "Quitter",
"HeaderPassword": "Password", "HeaderPassword": "Mot de passe",
"LabelVisitCommunity": "Visiter la Communaut\u00e9", "LabelVisitCommunity": "Visiter la Communaut\u00e9",
"HeaderLocalAccess": "Local Access", "HeaderLocalAccess": "Local Access",
"LabelGithubWiki": "GitHub Wiki", "LabelGithubWiki": "GitHub Wiki",
@ -180,7 +180,7 @@
"OptionHasThemeVideo": "Vid\u00e9o th\u00e8me", "OptionHasThemeVideo": "Vid\u00e9o th\u00e8me",
"TabMovies": "Films", "TabMovies": "Films",
"TabStudios": "Studios", "TabStudios": "Studios",
"TabTrailers": "Bande-annonces", "TabTrailers": "Bandes-annonces",
"HeaderLatestMovies": "Films les plus r\u00e9cents", "HeaderLatestMovies": "Films les plus r\u00e9cents",
"HeaderLatestTrailers": "Bande-annonces les plus r\u00e9centes", "HeaderLatestTrailers": "Bande-annonces les plus r\u00e9centes",
"OptionHasSpecialFeatures": "Bonus:", "OptionHasSpecialFeatures": "Bonus:",
@ -980,7 +980,7 @@
"UserDeletedWithName": "L'utilisateur {0} a \u00e9t\u00e9 supprim\u00e9.", "UserDeletedWithName": "L'utilisateur {0} a \u00e9t\u00e9 supprim\u00e9.",
"MessageServerConfigurationUpdated": "Server configuration has been updated", "MessageServerConfigurationUpdated": "Server configuration has been updated",
"MessageNamedServerConfigurationUpdatedWithValue": "Server configuration section {0} has been updated", "MessageNamedServerConfigurationUpdatedWithValue": "Server configuration section {0} has been updated",
"MessageApplicationUpdated": "Media Browser Server has been updated", "MessageApplicationUpdated": "Media Browser Server a \u00e9t\u00e9 mise \u00e0 jour.",
"AuthenticationSucceededWithUserName": "{0} successfully authenticated", "AuthenticationSucceededWithUserName": "{0} successfully authenticated",
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}", "FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
"UserStartedPlayingItemWithValues": "{0} has started playing {1}", "UserStartedPlayingItemWithValues": "{0} has started playing {1}",

View File

@ -349,7 +349,7 @@
"OptionDownloadBackImage": "\u0410\u0440\u0442\u049b\u044b \u043c\u04b1\u049b\u0430\u0431\u0430", "OptionDownloadBackImage": "\u0410\u0440\u0442\u049b\u044b \u043c\u04b1\u049b\u0430\u0431\u0430",
"OptionDownloadArtImage": "\u041e\u044e \u0441\u0443\u0440\u0435\u0442", "OptionDownloadArtImage": "\u041e\u044e \u0441\u0443\u0440\u0435\u0442",
"OptionDownloadPrimaryImage": "\u0411\u0430\u0441\u0442\u0430\u043f\u049b\u044b", "OptionDownloadPrimaryImage": "\u0411\u0430\u0441\u0442\u0430\u043f\u049b\u044b",
"HeaderFetchImages": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u0448\u044b\u0493\u0430\u0440\u044b\u043f \u0430\u043b\u0443:", "HeaderFetchImages": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u0456\u0440\u0456\u043a\u0442\u0435\u0443:",
"HeaderImageSettings": "\u0421\u0443\u0440\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440\u0456", "HeaderImageSettings": "\u0421\u0443\u0440\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440\u0456",
"TabOther": "\u0411\u0430\u0441\u049b\u0430\u043b\u0430\u0440", "TabOther": "\u0411\u0430\u0441\u049b\u0430\u043b\u0430\u0440",
"LabelMaxBackdropsPerItem": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0430\u0440\u0442\u049b\u044b \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456\u04a3 \u0435\u04a3 \u043a\u04e9\u043f \u0441\u0430\u043d\u044b:", "LabelMaxBackdropsPerItem": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0430\u0440\u0442\u049b\u044b \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456\u04a3 \u0435\u04a3 \u043a\u04e9\u043f \u0441\u0430\u043d\u044b:",
@ -829,7 +829,7 @@
"HeaderMyViews": "\u041c\u0435\u043d\u0456\u04a3 \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0456\u043c", "HeaderMyViews": "\u041c\u0435\u043d\u0456\u04a3 \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0456\u043c",
"LabelSelectFolderGroups": "\u041a\u0435\u043b\u0435\u0441\u0456 \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u0434\u0430\u0493\u044b \u043c\u0430\u0437\u043c\u04b1\u043d\u0434\u044b \u041a\u0438\u043d\u043e, \u041c\u0443\u0437\u044b\u043a\u0430 \u0436\u04d9\u043d\u0435 \u0422\u0414 \u0441\u0438\u044f\u049b\u0442\u044b \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0433\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u0442\u043e\u043f\u0442\u0430\u0441\u0442\u044b\u0440\u0443:", "LabelSelectFolderGroups": "\u041a\u0435\u043b\u0435\u0441\u0456 \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u0434\u0430\u0493\u044b \u043c\u0430\u0437\u043c\u04b1\u043d\u0434\u044b \u041a\u0438\u043d\u043e, \u041c\u0443\u0437\u044b\u043a\u0430 \u0436\u04d9\u043d\u0435 \u0422\u0414 \u0441\u0438\u044f\u049b\u0442\u044b \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0433\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u0442\u043e\u043f\u0442\u0430\u0441\u0442\u044b\u0440\u0443:",
"LabelSelectFolderGroupsHelp": "\u0411\u0435\u043b\u0433\u0456\u043b\u0435\u043d\u0431\u0435\u0433\u0435\u043d \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440 \u04e9\u0437 \u0431\u0435\u0442\u0456\u043c\u0435\u043d \u04e9\u0437\u0456\u043d\u0456\u04a3 \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0435\u0434\u0456.", "LabelSelectFolderGroupsHelp": "\u0411\u0435\u043b\u0433\u0456\u043b\u0435\u043d\u0431\u0435\u0433\u0435\u043d \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440 \u04e9\u0437 \u0431\u0435\u0442\u0456\u043c\u0435\u043d \u04e9\u0437\u0456\u043d\u0456\u04a3 \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0456\u043d\u0434\u0435 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u043d\u0435\u0434\u0456.",
"OptionDisplayAdultContent": "\u0415\u0440\u0435\u0441\u0435\u043a\u0442\u0456\u043a \u043c\u0430\u0437\u043c\u04b1\u043d\u0434\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0443", "OptionDisplayAdultContent": "\u0415\u0440\u0435\u0441\u0435\u043a \u043c\u0430\u0437\u043c\u04b1\u043d\u044b\u043d \u043a\u04e9\u0440\u0441\u0435\u0442\u0443",
"OptionLibraryFolders": "\u0422\u0430\u0441\u0443\u0448\u044b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u044b", "OptionLibraryFolders": "\u0422\u0430\u0441\u0443\u0448\u044b \u049b\u0430\u043b\u0442\u0430\u043b\u0430\u0440\u044b",
"TitleRemoteControl": "\u049a\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443", "TitleRemoteControl": "\u049a\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443",
"OptionLatestTvRecordings": "\u0415\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u0436\u0430\u0437\u0431\u0430\u043b\u0430\u0440", "OptionLatestTvRecordings": "\u0415\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u0436\u0430\u0437\u0431\u0430\u043b\u0430\u0440",
@ -946,14 +946,14 @@
"OptionReportTrailers": "\u0422\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440", "OptionReportTrailers": "\u0422\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440",
"OptionReportMusicVideos": "\u041a\u043b\u0438\u043f\u0442\u0435\u0440", "OptionReportMusicVideos": "\u041a\u043b\u0438\u043f\u0442\u0435\u0440",
"OptionReportMovies": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440", "OptionReportMovies": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440",
"OptionReportHomeVideos": "\u04ae\u0439\u043b\u0456\u043a \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440", "OptionReportHomeVideos": "\u04ae\u0439 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0456",
"OptionReportGames": "\u041e\u0439\u044b\u043d\u0434\u0430\u0440", "OptionReportGames": "\u041e\u0439\u044b\u043d\u0434\u0430\u0440",
"OptionReportEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440", "OptionReportEpisodes": "\u042d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440",
"OptionReportCollections": "\u0416\u0438\u043d\u0430\u049b\u0442\u0430\u0440", "OptionReportCollections": "\u0416\u0438\u043d\u0430\u049b\u0442\u0430\u0440",
"OptionReportBooks": "\u041a\u0456\u0442\u0430\u043f\u0442\u0430\u0440", "OptionReportBooks": "\u041a\u0456\u0442\u0430\u043f\u0442\u0430\u0440",
"OptionReportArtists": "\u041e\u0440\u044b\u043d\u0434\u0430\u0443\u0448\u044b\u043b\u0430\u0440", "OptionReportArtists": "\u041e\u0440\u044b\u043d\u0434\u0430\u0443\u0448\u044b\u043b\u0430\u0440",
"OptionReportAlbums": "\u0410\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440", "OptionReportAlbums": "\u0410\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440",
"OptionReportAdultVideos": "\u0415\u0440\u0435\u0441\u0435\u043a\u0442\u0456\u043a \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440", "OptionReportAdultVideos": "\u0415\u0440\u0435\u0441\u0435\u043a \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0456",
"ButtonMore": "\u041a\u04e9\u0431\u0456\u0440\u0435\u043a", "ButtonMore": "\u041a\u04e9\u0431\u0456\u0440\u0435\u043a",
"HeaderActivity": "\u04d8\u0440\u0435\u043a\u0435\u0442\u0442\u0435\u0440", "HeaderActivity": "\u04d8\u0440\u0435\u043a\u0435\u0442\u0442\u0435\u0440",
"ScheduledTaskStartedWithName": "{0} \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u043b\u0434\u044b", "ScheduledTaskStartedWithName": "{0} \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u043b\u0434\u044b",

View File

@ -45,10 +45,10 @@
"ReferToMediaLibraryWiki": "Raadpleeg de mediabibliotheek wiki.", "ReferToMediaLibraryWiki": "Raadpleeg de mediabibliotheek wiki.",
"LabelCountry": "Land:", "LabelCountry": "Land:",
"LabelLanguage": "Taal:", "LabelLanguage": "Taal:",
"HeaderPreferredMetadataLanguage": "Gewenste metagegevens taal:", "HeaderPreferredMetadataLanguage": "Gewenste metadata taal:",
"LabelSaveLocalMetadata": "Sla afbeeldingen en metagegevens op in de mediamappen", "LabelSaveLocalMetadata": "Sla afbeeldingen en metadata op in de mediamappen",
"LabelSaveLocalMetadataHelp": "Door afbeeldingen en metagegevens op te slaan in de mediamappen kunnen ze makkelijker worden gevonden en bewerkt.", "LabelSaveLocalMetadataHelp": "Door afbeeldingen en metadata op te slaan in de mediamappen kunnen ze makkelijker worden gevonden en bewerkt.",
"LabelDownloadInternetMetadata": "Download afbeeldingen en metagegevens van het internet", "LabelDownloadInternetMetadata": "Download afbeeldingen en metadata van het internet",
"LabelDownloadInternetMetadataHelp": "Media Browser kan informatie en afbeeldingen van uw media downloaden, om zo een mooie en uitgebreide weergave mogelijk te maken.", "LabelDownloadInternetMetadataHelp": "Media Browser kan informatie en afbeeldingen van uw media downloaden, om zo een mooie en uitgebreide weergave mogelijk te maken.",
"TabPreferences": "Voorkeuren", "TabPreferences": "Voorkeuren",
"TabPassword": "Wachtwoord", "TabPassword": "Wachtwoord",
@ -84,8 +84,8 @@
"LabelCurrentPassword": "Huidig wachtwoord", "LabelCurrentPassword": "Huidig wachtwoord",
"LabelMaxParentalRating": "Leeftijdsgrens", "LabelMaxParentalRating": "Leeftijdsgrens",
"MaxParentalRatingHelp": "Media met een hogere classificatie wordt niet weergegeven", "MaxParentalRatingHelp": "Media met een hogere classificatie wordt niet weergegeven",
"LibraryAccessHelp": "Selecteer de mediamappen om met deze gebruiker te delen. Beheerders kunnen alle mappen bewerken via de metagegevens manager.", "LibraryAccessHelp": "Selecteer de mediamappen om met deze gebruiker te delen. Beheerders kunnen alle mappen bewerken via de metadata manager.",
"ChannelAccessHelp": "Selecteer de kanalen om te delen met deze gebruiker. Beheerders kunnen alle kanalen bewerken met de metagegevens manager.", "ChannelAccessHelp": "Selecteer de kanalen om te delen met deze gebruiker. Beheerders kunnen alle kanalen bewerken met de metadata manager.",
"ButtonDeleteImage": "Verwijder afbeelding", "ButtonDeleteImage": "Verwijder afbeelding",
"LabelSelectUsers": "Selecteer gebruikers:", "LabelSelectUsers": "Selecteer gebruikers:",
"ButtonUpload": "Uploaden", "ButtonUpload": "Uploaden",
@ -93,7 +93,7 @@
"LabelDropImageHere": "Hier afbeelding plaatsen", "LabelDropImageHere": "Hier afbeelding plaatsen",
"ImageUploadAspectRatioHelp": "1:1 beeldverhouding geadviseerd. Alleen JPG\/PNG.", "ImageUploadAspectRatioHelp": "1:1 beeldverhouding geadviseerd. Alleen JPG\/PNG.",
"MessageNothingHere": "Lijst is leeg.", "MessageNothingHere": "Lijst is leeg.",
"MessagePleaseEnsureInternetMetadata": "Zorg ervoor dat het downloaden van metagegevens van het internet is ingeschakeld.", "MessagePleaseEnsureInternetMetadata": "Zorg ervoor dat het downloaden van metadata van het internet is ingeschakeld.",
"TabSuggested": "Aanbevolen", "TabSuggested": "Aanbevolen",
"TabLatest": "Nieuw", "TabLatest": "Nieuw",
"TabUpcoming": "Binnenkort", "TabUpcoming": "Binnenkort",
@ -205,7 +205,7 @@
"OptionMissingImdbId": "IMDb Id ontbreekt", "OptionMissingImdbId": "IMDb Id ontbreekt",
"OptionMissingTvdbId": "TheTVDB Id ontbreekt", "OptionMissingTvdbId": "TheTVDB Id ontbreekt",
"OptionMissingOverview": "Overzicht ontbreekt", "OptionMissingOverview": "Overzicht ontbreekt",
"OptionFileMetadataYearMismatch": "Jaartal in Bestands\/metagegevens komt niet overeen", "OptionFileMetadataYearMismatch": "Jaartal in Bestands\/metadata komt niet overeen",
"TabGeneral": "Algemeen", "TabGeneral": "Algemeen",
"TitleSupport": "Ondersteuning", "TitleSupport": "Ondersteuning",
"TabLog": "Logboek", "TabLog": "Logboek",
@ -262,8 +262,8 @@
"LabelCachePathHelp": "Deze locatie bevat server cache-bestanden, zoals afbeeldingen.", "LabelCachePathHelp": "Deze locatie bevat server cache-bestanden, zoals afbeeldingen.",
"LabelImagesByNamePath": "Afbeeldingen op naam pad:", "LabelImagesByNamePath": "Afbeeldingen op naam pad:",
"LabelImagesByNamePathHelp": "Deze locatie bevat afbeeldingen van: acteurs, artiesten, genres en studio's.", "LabelImagesByNamePathHelp": "Deze locatie bevat afbeeldingen van: acteurs, artiesten, genres en studio's.",
"LabelMetadataPath": "metagegevens pad:", "LabelMetadataPath": "metadata pad:",
"LabelMetadataPathHelp": "Geef een aangepaste locatie op voor gedownloade afbeeldingen en metagegevens, indien niet opgeslagen in mediamappen.", "LabelMetadataPathHelp": "Geef een aangepaste locatie op voor gedownloade afbeeldingen en metadata, indien niet opgeslagen in mediamappen.",
"LabelTranscodingTempPath": "Tijdelijk Transcodeer pad:", "LabelTranscodingTempPath": "Tijdelijk Transcodeer pad:",
"LabelTranscodingTempPathHelp": "Deze map bevat werkbestanden die worden gebruikt door de transcoder. Geef een eigen locatie op of laat leeg om de standaardlocatie te gebruiken.", "LabelTranscodingTempPathHelp": "Deze map bevat werkbestanden die worden gebruikt door de transcoder. Geef een eigen locatie op of laat leeg om de standaardlocatie te gebruiken.",
"TabBasics": "Basis", "TabBasics": "Basis",
@ -275,7 +275,7 @@
"OptionMovies": "Films", "OptionMovies": "Films",
"OptionEpisodes": "Afleveringen", "OptionEpisodes": "Afleveringen",
"OptionOtherVideos": "Overige Video's", "OptionOtherVideos": "Overige Video's",
"TitleMetadata": "Metagegevens", "TitleMetadata": "Metadata",
"LabelAutomaticUpdatesFanart": "Schakel de automatische update in van FanArt.tv", "LabelAutomaticUpdatesFanart": "Schakel de automatische update in van FanArt.tv",
"LabelAutomaticUpdatesTmdb": "Schakel de automatische update in van TheMovieDB.org", "LabelAutomaticUpdatesTmdb": "Schakel de automatische update in van TheMovieDB.org",
"LabelAutomaticUpdatesTvdb": "Schakel de automatische update in van TheTVDB.com", "LabelAutomaticUpdatesTvdb": "Schakel de automatische update in van TheTVDB.com",
@ -457,7 +457,7 @@
"HeaderAddToCollection": "Toevoegen aan verzameling", "HeaderAddToCollection": "Toevoegen aan verzameling",
"ButtonSubmit": "Uitvoeren", "ButtonSubmit": "Uitvoeren",
"NewCollectionNameExample": "Voorbeeld: Star Wars Collectie", "NewCollectionNameExample": "Voorbeeld: Star Wars Collectie",
"OptionSearchForInternetMetadata": "Zoeken op het internet voor afbeeldingen en metagegevens", "OptionSearchForInternetMetadata": "Zoeken op het internet voor afbeeldingen en metadata",
"ButtonCreate": "Cre\u00ebren", "ButtonCreate": "Cre\u00ebren",
"LabelHttpServerPortNumber": "Http server poortnummer:", "LabelHttpServerPortNumber": "Http server poortnummer:",
"LabelWebSocketPortNumber": "Web socket poortnummer:", "LabelWebSocketPortNumber": "Web socket poortnummer:",
@ -865,7 +865,7 @@
"TitleServer": "Server", "TitleServer": "Server",
"LabelCache": "Cache:", "LabelCache": "Cache:",
"LabelLogs": "Logboeken:", "LabelLogs": "Logboeken:",
"LabelMetadata": "Metagegevens:", "LabelMetadata": "Metadata:",
"LabelImagesByName": "Afbeeldingen op naam:", "LabelImagesByName": "Afbeeldingen op naam:",
"LabelTranscodingTemporaryFiles": "Tijdelijke transcodeer bestanden:", "LabelTranscodingTemporaryFiles": "Tijdelijke transcodeer bestanden:",
"HeaderLatestMusic": "Nieuwste muziek", "HeaderLatestMusic": "Nieuwste muziek",

View File

@ -1,8 +1,8 @@
{ {
"LabelExit": "Sair", "LabelExit": "Sair",
"HeaderPassword": "Password", "HeaderPassword": "Senha",
"LabelVisitCommunity": "Visitar a Comunidade", "LabelVisitCommunity": "Visitar a Comunidade",
"HeaderLocalAccess": "Local Access", "HeaderLocalAccess": "Acesso Local",
"LabelGithubWiki": "Wiki do Github", "LabelGithubWiki": "Wiki do Github",
"LabelSwagger": "Swagger", "LabelSwagger": "Swagger",
"LabelStandard": "Padr\u00e3o", "LabelStandard": "Padr\u00e3o",
@ -481,9 +481,9 @@
"HeaderDestination": "Destino", "HeaderDestination": "Destino",
"HeaderProgram": "Programa", "HeaderProgram": "Programa",
"HeaderClients": "Clientes", "HeaderClients": "Clientes",
"LabelCompleted": "Completado", "LabelCompleted": "Completa",
"LabelFailed": "Falhou", "LabelFailed": "Falhou",
"LabelSkipped": "Ignorado", "LabelSkipped": "Ignorada",
"HeaderEpisodeOrganization": "Organiza\u00e7\u00e3o do Epis\u00f3dio", "HeaderEpisodeOrganization": "Organiza\u00e7\u00e3o do Epis\u00f3dio",
"LabelSeries": "S\u00e9rie:", "LabelSeries": "S\u00e9rie:",
"LabelSeasonNumber": "N\u00famero da temporada", "LabelSeasonNumber": "N\u00famero da temporada",
@ -994,11 +994,11 @@
"HeaderDownloadPeopleMetadataFor": "Fazer download da biografia e imagens para:", "HeaderDownloadPeopleMetadataFor": "Fazer download da biografia e imagens para:",
"OptionComposers": "Compositores", "OptionComposers": "Compositores",
"OptionOthers": "Outros", "OptionOthers": "Outros",
"HeaderDownloadPeopleMetadataForHelp": "Enabling additional options will provide more on-screen information but will result in slower library scans.", "HeaderDownloadPeopleMetadataForHelp": "Ativar op\u00e7\u00f5es adicionais disponibilizar\u00e1 mais informa\u00e7\u00f5es na tela mas deixar\u00e1 os rastreamentos de biblioteca mais lentos.",
"ViewTypeFolders": "Folders", "ViewTypeFolders": "Pastas",
"LabelDisplayFoldersView": "Display a folders view to show plain media folders", "LabelDisplayFoldersView": "Exibir visualiza\u00e7\u00e3o de pastas para mostrar pastas simples de m\u00eddia",
"ViewTypeLiveTvRecordingGroups": "Recordings", "ViewTypeLiveTvRecordingGroups": "Grava\u00e7\u00f5es",
"ViewTypeLiveTvChannels": "Channels", "ViewTypeLiveTvChannels": "Canais",
"LabelAllowLocalAccessWithoutPassword": "Allow local access without a password", "LabelAllowLocalAccessWithoutPassword": "Permtir acesso local sem senha",
"LabelAllowLocalAccessWithoutPasswordHelp": "When enabled, a password will not be required when signing in from within your home network." "LabelAllowLocalAccessWithoutPasswordHelp": "Quando ativado, uma senha n\u00e3o ser\u00e1 necess\u00e1ria para entrar atrav\u00e9s de sua rede dom\u00e9stica."
} }

View File

@ -18,7 +18,7 @@
"LabelYoureDone": "\u0412\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e!", "LabelYoureDone": "\u0412\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e!",
"WelcomeToMediaBrowser": "\u0412\u0430\u0441 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 Media Browser!", "WelcomeToMediaBrowser": "\u0412\u0430\u0441 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 Media Browser!",
"TitleMediaBrowser": "Media Browser", "TitleMediaBrowser": "Media Browser",
"ThisWizardWillGuideYou": "\u042d\u0442\u043e\u0442 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0435 \u0444\u0430\u0437\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 \u044f\u0437\u044b\u043a.", "ThisWizardWillGuideYou": "\u042d\u0442\u043e\u0442 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u0442 \u0432\u0430\u0441 \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0435 \u0444\u0430\u0437\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 \u044f\u0437\u044b\u043a.",
"TellUsAboutYourself": "\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u043e \u0441\u0435\u0431\u0435", "TellUsAboutYourself": "\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u043e \u0441\u0435\u0431\u0435",
"LabelYourFirstName": "\u0412\u0430\u0448\u0435 \u0438\u043c\u044f:", "LabelYourFirstName": "\u0412\u0430\u0448\u0435 \u0438\u043c\u044f:",
"MoreUsersCanBeAddedLater": "\u041f\u043e\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c.", "MoreUsersCanBeAddedLater": "\u041f\u043e\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c.",
@ -45,7 +45,7 @@
"ReferToMediaLibraryWiki": "C\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435 \u0441\u043c. \u0432 \u0432\u0438\u043a\u0438.", "ReferToMediaLibraryWiki": "C\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435 \u0441\u043c. \u0432 \u0432\u0438\u043a\u0438.",
"LabelCountry": "\u0421\u0442\u0440\u0430\u043d\u0430:", "LabelCountry": "\u0421\u0442\u0440\u0430\u043d\u0430:",
"LabelLanguage": "\u042f\u0437\u044b\u043a:", "LabelLanguage": "\u042f\u0437\u044b\u043a:",
"HeaderPreferredMetadataLanguage": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044f\u0437\u044b\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:", "HeaderPreferredMetadataLanguage": "\u0412\u044b\u0431\u043e\u0440 \u044f\u0437\u044b\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:",
"LabelSaveLocalMetadata": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u044c \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043e\u043a", "LabelSaveLocalMetadata": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u044c \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043e\u043a",
"LabelSaveLocalMetadataHelp": "\u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0439 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u044c \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043e\u043a, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0442\u0430\u043a\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0433\u0434\u0435 \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c.", "LabelSaveLocalMetadataHelp": "\u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0439 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u044c \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043e\u043a, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0442\u0430\u043a\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0433\u0434\u0435 \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c.",
"LabelDownloadInternetMetadata": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430", "LabelDownloadInternetMetadata": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430",
@ -283,7 +283,7 @@
"LabelAutomaticUpdatesTmdbHelp": "\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u043d\u043e\u0432\u044b\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 TheMovieDB.org. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f.", "LabelAutomaticUpdatesTmdbHelp": "\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u043d\u043e\u0432\u044b\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 TheMovieDB.org. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f.",
"LabelAutomaticUpdatesTvdbHelp": "\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u043d\u043e\u0432\u044b\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 TheTVDB.com. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f.", "LabelAutomaticUpdatesTvdbHelp": "\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u043d\u043e\u0432\u044b\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 TheTVDB.com. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f.",
"ExtractChapterImagesHelp": "\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0441\u0446\u0435\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0446\u0435\u043d\u044b. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c, \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u041e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 4:00 \u0443\u0442\u0440\u0430, \u0420\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u041d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u0447\u0430\u0441\u044b \u043f\u0438\u043a.", "ExtractChapterImagesHelp": "\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0441\u0446\u0435\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0446\u0435\u043d\u044b. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c, \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u041e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 4:00 \u0443\u0442\u0440\u0430, \u0420\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u041d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u0447\u0430\u0441\u044b \u043f\u0438\u043a.",
"LabelMetadataDownloadLanguage": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044f\u0437\u044b\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:", "LabelMetadataDownloadLanguage": "\u0412\u044b\u0431\u043e\u0440 \u044f\u0437\u044b\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:",
"ButtonAutoScroll": "\u0410\u0432\u0442\u043e\u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430", "ButtonAutoScroll": "\u0410\u0432\u0442\u043e\u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430",
"LabelImageSavingConvention": "\u0424\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432:", "LabelImageSavingConvention": "\u0424\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432:",
"LabelImageSavingConventionHelp": "\u0412 Media Browser \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0442\u0441\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0434\u0438\u0430\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432.", "LabelImageSavingConventionHelp": "\u0412 Media Browser \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0442\u0441\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0434\u0438\u0430\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432.",
@ -339,7 +339,7 @@
"OptionAutomatic": "\u0410\u0432\u0442\u043e", "OptionAutomatic": "\u0410\u0432\u0442\u043e",
"LiveTvPluginRequired": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d-\u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \u0443\u0441\u043b\u0443\u0433 \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0422\u0412 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f.", "LiveTvPluginRequired": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d-\u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \u0443\u0441\u043b\u0443\u0433 \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0422\u0412 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f.",
"LiveTvPluginRequiredHelp": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, NextPVR \u0438\u043b\u0438 ServerWMC.", "LiveTvPluginRequiredHelp": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, NextPVR \u0438\u043b\u0438 ServerWMC.",
"LabelCustomizeOptionsPerMediaType": "\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e \u0442\u0438\u043f\u0443 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f:", "LabelCustomizeOptionsPerMediaType": "\u0410\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0438\u043f\u0430 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f:",
"OptionDownloadThumbImage": "\u0411\u0435\u0433\u0443\u043d\u043e\u043a", "OptionDownloadThumbImage": "\u0411\u0435\u0433\u0443\u043d\u043e\u043a",
"OptionDownloadMenuImage": "\u041c\u0435\u043d\u044e", "OptionDownloadMenuImage": "\u041c\u0435\u043d\u044e",
"OptionDownloadLogoImage": "\u041b\u043e\u0433\u043e\u0442\u0438\u043f", "OptionDownloadLogoImage": "\u041b\u043e\u0433\u043e\u0442\u0438\u043f",
@ -349,7 +349,7 @@
"OptionDownloadBackImage": "\u0421\u043f\u0438\u043d\u043a\u0430", "OptionDownloadBackImage": "\u0421\u043f\u0438\u043d\u043a\u0430",
"OptionDownloadArtImage": "\u0412\u0438\u043d\u044c\u0435\u0442\u043a\u0430", "OptionDownloadArtImage": "\u0412\u0438\u043d\u044c\u0435\u0442\u043a\u0430",
"OptionDownloadPrimaryImage": "\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439", "OptionDownloadPrimaryImage": "\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439",
"HeaderFetchImages": "\u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432:", "HeaderFetchImages": "\u041e\u0442\u0431\u043e\u0440\u043a\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432:",
"HeaderImageSettings": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432", "HeaderImageSettings": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432",
"TabOther": "\u0414\u0440\u0443\u0433\u0438\u0435", "TabOther": "\u0414\u0440\u0443\u0433\u0438\u0435",
"LabelMaxBackdropsPerItem": "\u041c\u0430\u043a\u0441. \u0447\u0438\u0441\u043b\u043e \u0437\u0430\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442:", "LabelMaxBackdropsPerItem": "\u041c\u0430\u043a\u0441. \u0447\u0438\u0441\u043b\u043e \u0437\u0430\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442:",
@ -439,7 +439,7 @@
"HeaderCustomDlnaProfiles": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438", "HeaderCustomDlnaProfiles": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438",
"HeaderSystemDlnaProfiles": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438", "HeaderSystemDlnaProfiles": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438",
"CustomDlnaProfilesHelp": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c.", "CustomDlnaProfilesHelp": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c.",
"SystemDlnaProfilesHelp": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435.", "SystemDlnaProfilesHelp": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435.",
"TitleDashboard": "\u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c", "TitleDashboard": "\u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c",
"TabHome": "\u0413\u043b\u0430\u0432\u043d\u0430\u044f", "TabHome": "\u0413\u043b\u0430\u0432\u043d\u0430\u044f",
"TabInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f", "TabInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f",
@ -450,8 +450,8 @@
"LinkApiDocumentation": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e API", "LinkApiDocumentation": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e API",
"LabelFriendlyServerName": "\u041f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430:", "LabelFriendlyServerName": "\u041f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430:",
"LabelFriendlyServerNameHelp": "\u042d\u0442\u043e \u0438\u043c\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430.", "LabelFriendlyServerNameHelp": "\u042d\u0442\u043e \u0438\u043c\u044f \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430.",
"LabelPreferredDisplayLanguage": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430", "LabelPreferredDisplayLanguage": "\u0412\u044b\u0431\u043e\u0440 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430",
"LabelPreferredDisplayLanguageHelp": "\u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 Media Browser \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d.", "LabelPreferredDisplayLanguageHelp": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434 Media Browser \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0438 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d.",
"LabelReadHowYouCanContribute": "\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0441\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434.", "LabelReadHowYouCanContribute": "\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0441\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434.",
"HeaderNewCollection": "\u041d\u043e\u0432\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f", "HeaderNewCollection": "\u041d\u043e\u0432\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f",
"HeaderAddToCollection": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e", "HeaderAddToCollection": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e",
@ -715,7 +715,7 @@
"HeaderIdentificationCriteriaHelp": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043e\u0434\u0438\u043d \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439.", "HeaderIdentificationCriteriaHelp": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043e\u0434\u0438\u043d \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439.",
"HeaderDirectPlayProfileHelp": "\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e.", "HeaderDirectPlayProfileHelp": "\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e.",
"HeaderTranscodingProfileHelp": "\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430.", "HeaderTranscodingProfileHelp": "\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430.",
"HeaderResponseProfileHelp": "\u041f\u0440\u043e\u0444\u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c\u043e\u0439 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0435\u0439.", "HeaderResponseProfileHelp": "\u041f\u0440\u043e\u0444\u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u0438\u043a\u043e\u0432 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c\u043e\u0439 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0435\u0439.",
"LabelXDlnaCap": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 X-Dlna:", "LabelXDlnaCap": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 X-Dlna:",
"LabelXDlnaCapHelp": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 X_DLNACAP \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d urn:schemas-dlna-org:device-1-0", "LabelXDlnaCapHelp": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 X_DLNACAP \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d urn:schemas-dlna-org:device-1-0",
"LabelXDlnaDoc": "\u0421\u0445\u0435\u043c\u0430 X-Dlna:", "LabelXDlnaDoc": "\u0421\u0445\u0435\u043c\u0430 X-Dlna:",
@ -805,9 +805,9 @@
"MessageNoPlaylistItemsAvailable": "\u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0443\u0441\u0442.", "MessageNoPlaylistItemsAvailable": "\u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0443\u0441\u0442.",
"HeaderWelcomeToMediaBrowserWebClient": "\u0412\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 Media Browser \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0441!", "HeaderWelcomeToMediaBrowserWebClient": "\u0412\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 Media Browser \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0441!",
"ButtonDismiss": "\u0421\u043a\u0440\u044b\u0442\u044c", "ButtonDismiss": "\u0421\u043a\u0440\u044b\u0442\u044c",
"MessageLearnHowToCustomize": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c, \u043a\u0430\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u043b\u0438\u0447\u043d\u043e\u043c\u0443 \u0432\u043a\u0443\u0441\u0443. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0430\u0432\u0430\u0442\u0430\u0440\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u044d\u043a\u0440\u0430\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.", "MessageLearnHowToCustomize": "\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c, \u043a\u0430\u043a \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u043b\u0438\u0447\u043d\u043e\u043c\u0443 \u0432\u043a\u0443\u0441\u0443. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0430\u0432\u0430\u0442\u0430\u0440\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u044d\u043a\u0440\u0430\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.",
"ButtonEditOtherUserPreferences": "\u041f\u0440\u0430\u0432\u0438\u0442\u044c \u043b\u0438\u0447\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.", "ButtonEditOtherUserPreferences": "\u041f\u0440\u0430\u0432\u0438\u0442\u044c \u043b\u0438\u0447\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.",
"LabelChannelStreamQuality": "\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442:", "LabelChannelStreamQuality": "\u0412\u044b\u0431\u043e\u0440 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435:",
"LabelChannelStreamQualityHelp": "\u0412 \u0441\u0440\u0435\u0434\u0435 \u0441 \u043d\u0438\u0437\u043a\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.", "LabelChannelStreamQualityHelp": "\u0412 \u0441\u0440\u0435\u0434\u0435 \u0441 \u043d\u0438\u0437\u043a\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.",
"OptionBestAvailableStreamQuality": "\u041d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435", "OptionBestAvailableStreamQuality": "\u041d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435",
"LabelEnableChannelContentDownloadingFor": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043b\u044f:", "LabelEnableChannelContentDownloadingFor": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043b\u044f:",
@ -855,7 +855,7 @@
"TabLogs": "\u0416\u0443\u0440\u043d\u0430\u043b\u044b", "TabLogs": "\u0416\u0443\u0440\u043d\u0430\u043b\u044b",
"HeaderServerLogFiles": "\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430:", "HeaderServerLogFiles": "\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430:",
"TabBranding": "\u0411\u0440\u0435\u043d\u0434\u0438\u043d\u0433", "TabBranding": "\u0411\u0440\u0435\u043d\u0434\u0438\u043d\u0433",
"HeaderBrandingHelp": "\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 Media Browser \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0432\u0430\u0448\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u043b\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438.", "HeaderBrandingHelp": "\u0410\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 Media Browser \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0432\u0430\u0448\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u043b\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438.",
"LabelLoginDisclaimer": "\u041e\u0433\u043e\u0432\u043e\u0440\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0432\u0445\u043e\u0434\u0430:", "LabelLoginDisclaimer": "\u041e\u0433\u043e\u0432\u043e\u0440\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0432\u0445\u043e\u0434\u0430:",
"LabelLoginDisclaimerHelp": "\u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.", "LabelLoginDisclaimerHelp": "\u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.",
"LabelAutomaticallyDonate": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0435 \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432", "LabelAutomaticallyDonate": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0435 \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432",

View File

@ -870,7 +870,7 @@
"HeaderBrandingHelp": "Customize the appearance of Media Browser to fit the needs of your group or organization.", "HeaderBrandingHelp": "Customize the appearance of Media Browser to fit the needs of your group or organization.",
"LabelLoginDisclaimer": "Login disclaimer:", "LabelLoginDisclaimer": "Login disclaimer:",
"LabelLoginDisclaimerHelp": "This will be displayed at the bottom of the login page.", "LabelLoginDisclaimerHelp": "This will be displayed at the bottom of the login page.",
"LabelAutomaticallyDonate": "Automatically donate this amount every six months", "LabelAutomaticallyDonate": "Automatically donate this amount every month",
"LabelAutomaticallyDonateHelp": "You can cancel at any time via your PayPal account.", "LabelAutomaticallyDonateHelp": "You can cancel at any time via your PayPal account.",
"OptionList": "List", "OptionList": "List",
"TabDashboard": "Dashboard", "TabDashboard": "Dashboard",

View File

@ -482,10 +482,10 @@
"HeaderProgram": "Program", "HeaderProgram": "Program",
"HeaderClients": "Klienter", "HeaderClients": "Klienter",
"LabelCompleted": "Klar", "LabelCompleted": "Klar",
"LabelFailed": "Failed", "LabelFailed": "Misslyckades",
"LabelSkipped": "Hoppades \u00f6ver", "LabelSkipped": "Hoppades \u00f6ver",
"HeaderEpisodeOrganization": "Katalogisering av avsnitt", "HeaderEpisodeOrganization": "Katalogisering av avsnitt",
"LabelSeries": "Series:", "LabelSeries": "Serie:",
"LabelSeasonNumber": "S\u00e4songsnummer:", "LabelSeasonNumber": "S\u00e4songsnummer:",
"LabelEpisodeNumber": "Avsnittsnummer:", "LabelEpisodeNumber": "Avsnittsnummer:",
"LabelEndingEpisodeNumber": "Avslutande avsnittsnummer:", "LabelEndingEpisodeNumber": "Avslutande avsnittsnummer:",
@ -633,8 +633,8 @@
"ButtonScenes": "Scener", "ButtonScenes": "Scener",
"ButtonSubtitles": "Undertexter", "ButtonSubtitles": "Undertexter",
"ButtonAudioTracks": "Ljudsp\u00e5r", "ButtonAudioTracks": "Ljudsp\u00e5r",
"ButtonPreviousTrack": "Previous track", "ButtonPreviousTrack": "F\u00f6reg\u00e5ende sp\u00e5r:",
"ButtonNextTrack": "Next track", "ButtonNextTrack": "N\u00e4sta sp\u00e5r:",
"ButtonStop": "Stopp", "ButtonStop": "Stopp",
"ButtonPause": "Paus", "ButtonPause": "Paus",
"LabelGroupMoviesIntoCollections": "Gruppera filmer i samlingsboxar", "LabelGroupMoviesIntoCollections": "Gruppera filmer i samlingsboxar",
@ -910,7 +910,7 @@
"LabelContext": "Metod:", "LabelContext": "Metod:",
"OptionContextStreaming": "Str\u00f6mning", "OptionContextStreaming": "Str\u00f6mning",
"OptionContextStatic": "Synk", "OptionContextStatic": "Synk",
"ButtonAddToPlaylist": "Add to playlist", "ButtonAddToPlaylist": "L\u00e4gg till i spellista",
"TabPlaylists": "Playlists", "TabPlaylists": "Playlists",
"ButtonClose": "St\u00e4ng", "ButtonClose": "St\u00e4ng",
"LabelAllLanguages": "All languages", "LabelAllLanguages": "All languages",
@ -934,19 +934,19 @@
"OptionMenu": "Menu", "OptionMenu": "Menu",
"OptionScreenshot": "Screenshot", "OptionScreenshot": "Screenshot",
"OptionLocked": "Locked", "OptionLocked": "Locked",
"OptionUnidentified": "Unidentified", "OptionUnidentified": "Oidentifierad",
"OptionMissingParentalRating": "Missing parental rating", "OptionMissingParentalRating": "\u00c5ldersgr\u00e4ns saknas",
"OptionStub": "Stub", "OptionStub": "Stub",
"HeaderEpisodes": "Episodes:", "HeaderEpisodes": "Avsnitt:",
"OptionSeason0": "Season 0", "OptionSeason0": "S\u00e4song 0",
"LabelReport": "Report:", "LabelReport": "Report:",
"OptionReportSongs": "Songs", "OptionReportSongs": "L\u00e5tar",
"OptionReportSeries": "Series", "OptionReportSeries": "Serier",
"OptionReportSeasons": "Seasons", "OptionReportSeasons": "S\u00e4songer",
"OptionReportTrailers": "Trailers", "OptionReportTrailers": "Trailers",
"OptionReportMusicVideos": "Music videos", "OptionReportMusicVideos": "Musikvideos",
"OptionReportMovies": "Movies", "OptionReportMovies": "Filmer",
"OptionReportHomeVideos": "Home videos", "OptionReportHomeVideos": "Hemvideos",
"OptionReportGames": "Games", "OptionReportGames": "Games",
"OptionReportEpisodes": "Episodes", "OptionReportEpisodes": "Episodes",
"OptionReportCollections": "Collections", "OptionReportCollections": "Collections",

View File

@ -1,4 +1,5 @@
using MediaBrowser.Api; using System.Net;
using MediaBrowser.Api;
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Events; using MediaBrowser.Common.Events;
@ -310,20 +311,6 @@ namespace MediaBrowser.ServerApplication
saveConfig = true; saveConfig = true;
} }
if (ServerConfigurationManager.Configuration.ChapterOptions != null)
{
ServerConfigurationManager.SaveConfiguration("chapters", ServerConfigurationManager.Configuration.ChapterOptions);
ServerConfigurationManager.Configuration.ChapterOptions = null;
saveConfig = true;
}
if (ServerConfigurationManager.Configuration.ChannelOptions != null)
{
ServerConfigurationManager.SaveConfiguration("channels", ServerConfigurationManager.Configuration.ChannelOptions);
ServerConfigurationManager.Configuration.ChannelOptions = null;
saveConfig = true;
}
if (ServerConfigurationManager.Configuration.NotificationOptions != null) if (ServerConfigurationManager.Configuration.NotificationOptions != null)
{ {
ServerConfigurationManager.SaveConfiguration("notifications", ServerConfigurationManager.Configuration.NotificationOptions); ServerConfigurationManager.SaveConfiguration("notifications", ServerConfigurationManager.Configuration.NotificationOptions);
@ -385,117 +372,6 @@ namespace MediaBrowser.ServerApplication
{ {
// Not there, no big deal // Not there, no big deal
} }
Task.Run(() =>
{
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "remote-images"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "chapter-images"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "extracted-video-images"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "extracted-audio-images"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "tmdb-tv"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "tmdb-collections"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "tmdb-movies"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "fanart-movies"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "fanart-music"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "fanart-tv"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "tmdb-people"), true);
}
catch (IOException)
{
// Not there, no big deal
}
try
{
Directory.Delete(Path.Combine(ApplicationPaths.DataPath, "tvdb-v3"), true);
}
catch (IOException)
{
// Not there, no big deal
}
});
} }
private void MigrateUserFolders() private void MigrateUserFolders()

View File

@ -231,6 +231,8 @@ namespace MediaBrowser.WebDashboard.Api
} }
} }
path = path.Replace("scripts/jquery.mobile-1.4.3.min.map", "thirdparty/jquerymobile-1.4.3/jquery.mobile-1.4.3.min.map", StringComparison.OrdinalIgnoreCase);
var localizationCulture = GetLocalizationCulture(); var localizationCulture = GetLocalizationCulture();
// Don't cache if not configured to do so // Don't cache if not configured to do so