mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
remove mono compiler directives
This commit is contained in:
parent
a9eed234ba
commit
f02f322208
@ -316,14 +316,14 @@ namespace MediaBrowser.Api
|
|||||||
/// <param name="deleteFiles">The delete files.</param>
|
/// <param name="deleteFiles">The delete files.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
/// <exception cref="ArgumentNullException">deviceId</exception>
|
/// <exception cref="ArgumentNullException">deviceId</exception>
|
||||||
internal Task KillTranscodingJobs(string deviceId, Func<string, bool> deleteFiles)
|
internal void KillTranscodingJobs(string deviceId, Func<string, bool> deleteFiles)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(deviceId))
|
if (string.IsNullOrEmpty(deviceId))
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("deviceId");
|
throw new ArgumentNullException("deviceId");
|
||||||
}
|
}
|
||||||
|
|
||||||
return KillTranscodingJobs(j => string.Equals(deviceId, j.DeviceId, StringComparison.OrdinalIgnoreCase), deleteFiles);
|
KillTranscodingJobs(j => string.Equals(deviceId, j.DeviceId, StringComparison.OrdinalIgnoreCase), deleteFiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -332,7 +332,7 @@ namespace MediaBrowser.Api
|
|||||||
/// <param name="killJob">The kill job.</param>
|
/// <param name="killJob">The kill job.</param>
|
||||||
/// <param name="deleteFiles">The delete files.</param>
|
/// <param name="deleteFiles">The delete files.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
internal async Task KillTranscodingJobs(Func<TranscodingJob, bool> killJob, Func<string, bool> deleteFiles)
|
internal void KillTranscodingJobs(Func<TranscodingJob, bool> killJob, Func<string, bool> deleteFiles)
|
||||||
{
|
{
|
||||||
var jobs = new List<TranscodingJob>();
|
var jobs = new List<TranscodingJob>();
|
||||||
|
|
||||||
@ -348,20 +348,11 @@ namespace MediaBrowser.Api
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await TranscodingStartLock.WaitAsync(CancellationToken.None).ConfigureAwait(false);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (var job in jobs)
|
foreach (var job in jobs)
|
||||||
{
|
{
|
||||||
KillTranscodingJob(job, deleteFiles);
|
KillTranscodingJob(job, deleteFiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
TranscodingStartLock.Release();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Kills the transcoding job.
|
/// Kills the transcoding job.
|
||||||
|
@ -126,8 +126,14 @@ namespace MediaBrowser.Api.Movies
|
|||||||
|
|
||||||
movies = _libraryManager.ReplaceVideosWithPrimaryVersions(movies);
|
movies = _libraryManager.ReplaceVideosWithPrimaryVersions(movies);
|
||||||
|
|
||||||
|
var listEligibleForCategories = new List<BaseItem>();
|
||||||
|
var listEligibleForSuggestion = new List<BaseItem> ();
|
||||||
|
|
||||||
var list = movies.ToList();
|
var list = movies.ToList();
|
||||||
|
|
||||||
|
listEligibleForCategories.AddRange(list);
|
||||||
|
listEligibleForSuggestion.AddRange(list);
|
||||||
|
|
||||||
if (user.Configuration.IncludeTrailersInSuggestions)
|
if (user.Configuration.IncludeTrailersInSuggestions)
|
||||||
{
|
{
|
||||||
var trailerResult = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery
|
var trailerResult = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery
|
||||||
@ -138,17 +144,20 @@ namespace MediaBrowser.Api.Movies
|
|||||||
|
|
||||||
}, CancellationToken.None).ConfigureAwait(false);
|
}, CancellationToken.None).ConfigureAwait(false);
|
||||||
|
|
||||||
var newTrailers = trailerResult.Items;
|
listEligibleForSuggestion.AddRange(trailerResult.Items);
|
||||||
|
}
|
||||||
|
|
||||||
list.AddRange(newTrailers);
|
listEligibleForCategories = listEligibleForCategories
|
||||||
|
|
||||||
list = list
|
|
||||||
.DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
|
.DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
|
||||||
.DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString(), StringComparer.OrdinalIgnoreCase)
|
.DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString(), StringComparer.OrdinalIgnoreCase)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
|
||||||
|
|
||||||
var result = GetRecommendationCategories(user, list, request.CategoryLimit, request.ItemLimit, request.GetItemFields().ToList());
|
listEligibleForSuggestion = listEligibleForSuggestion
|
||||||
|
.DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
|
||||||
|
.DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString(), StringComparer.OrdinalIgnoreCase)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var result = GetRecommendationCategories(user, listEligibleForCategories, listEligibleForSuggestion, request.CategoryLimit, request.ItemLimit, request.GetItemFields().ToList());
|
||||||
|
|
||||||
return ToOptimizedResult(result);
|
return ToOptimizedResult(result);
|
||||||
}
|
}
|
||||||
@ -210,11 +219,11 @@ namespace MediaBrowser.Api.Movies
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<RecommendationDto> GetRecommendationCategories(User user, List<BaseItem> allMovies, int categoryLimit, int itemLimit, List<ItemFields> fields)
|
private IEnumerable<RecommendationDto> GetRecommendationCategories(User user, List<BaseItem> allMoviesForCategories, List<BaseItem> allMovies, int categoryLimit, int itemLimit, List<ItemFields> fields)
|
||||||
{
|
{
|
||||||
var categories = new List<RecommendationDto>();
|
var categories = new List<RecommendationDto>();
|
||||||
|
|
||||||
var recentlyPlayedMovies = allMovies
|
var recentlyPlayedMovies = allMoviesForCategories
|
||||||
.Select(i =>
|
.Select(i =>
|
||||||
{
|
{
|
||||||
var userdata = _userDataRepository.GetUserData(user.Id, i.GetUserDataKey());
|
var userdata = _userDataRepository.GetUserData(user.Id, i.GetUserDataKey());
|
||||||
|
@ -1645,6 +1645,17 @@ namespace MediaBrowser.Api.Playback
|
|||||||
{
|
{
|
||||||
state.OutputVideoCodec = GetVideoCodec(videoRequest);
|
state.OutputVideoCodec = GetVideoCodec(videoRequest);
|
||||||
state.OutputVideoBitrate = GetVideoBitrateParamValue(state.VideoRequest, state.VideoStream);
|
state.OutputVideoBitrate = GetVideoBitrateParamValue(state.VideoRequest, state.VideoStream);
|
||||||
|
|
||||||
|
if (state.OutputVideoBitrate.HasValue)
|
||||||
|
{
|
||||||
|
var resolution = ResolutionNormalizer.Normalize(state.OutputVideoBitrate.Value,
|
||||||
|
state.OutputVideoCodec,
|
||||||
|
videoRequest.MaxWidth,
|
||||||
|
videoRequest.MaxHeight);
|
||||||
|
|
||||||
|
videoRequest.MaxWidth = resolution.MaxWidth;
|
||||||
|
videoRequest.MaxHeight = resolution.MaxHeight;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplyDeviceProfileSettings(state);
|
ApplyDeviceProfileSettings(state);
|
||||||
|
@ -139,7 +139,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
// If the playlist doesn't already exist, startup ffmpeg
|
// If the playlist doesn't already exist, startup ffmpeg
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await ApiEntryPoint.Instance.KillTranscodingJobs(j => j.Type == TranscodingJobType.Hls && string.Equals(j.DeviceId, request.DeviceId, StringComparison.OrdinalIgnoreCase), p => !string.Equals(p, playlistPath, StringComparison.OrdinalIgnoreCase)).ConfigureAwait(false);
|
ApiEntryPoint.Instance.KillTranscodingJobs(j => j.Type == TranscodingJobType.Hls && string.Equals(j.DeviceId, request.DeviceId, StringComparison.OrdinalIgnoreCase), p => !string.Equals(p, playlistPath, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
if (currentTranscodingIndex.HasValue)
|
if (currentTranscodingIndex.HasValue)
|
||||||
{
|
{
|
||||||
@ -157,7 +157,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
await WaitForMinimumSegmentCount(playlistPath, 1, cancellationTokenSource.Token).ConfigureAwait(false);
|
await WaitForMinimumSegmentCount(playlistPath, 2, cancellationTokenSource.Token).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -402,8 +402,10 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
var queryStringIndex = Request.RawUrl.IndexOf('?');
|
var queryStringIndex = Request.RawUrl.IndexOf('?');
|
||||||
var queryString = queryStringIndex == -1 ? string.Empty : Request.RawUrl.Substring(queryStringIndex);
|
var queryString = queryStringIndex == -1 ? string.Empty : Request.RawUrl.Substring(queryStringIndex);
|
||||||
|
|
||||||
|
var isLiveStream = (state.RunTimeTicks ?? 0) == 0;
|
||||||
|
|
||||||
// Main stream
|
// Main stream
|
||||||
var playlistUrl = (state.RunTimeTicks ?? 0) > 0 ? "main.m3u8" : "live.m3u8";
|
var playlistUrl = isLiveStream ? "live.m3u8" : "main.m3u8";
|
||||||
playlistUrl += queryString;
|
playlistUrl += queryString;
|
||||||
|
|
||||||
var request = (GetMasterHlsVideoStream)state.Request;
|
var request = (GetMasterHlsVideoStream)state.Request;
|
||||||
@ -418,7 +420,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
|
|
||||||
AppendPlaylist(builder, playlistUrl, totalBitrate, subtitleGroup);
|
AppendPlaylist(builder, playlistUrl, totalBitrate, subtitleGroup);
|
||||||
|
|
||||||
if (EnableAdaptiveBitrateStreaming(state))
|
if (EnableAdaptiveBitrateStreaming(state, isLiveStream))
|
||||||
{
|
{
|
||||||
var requestedVideoBitrate = state.VideoRequest.VideoBitRate.Value;
|
var requestedVideoBitrate = state.VideoRequest.VideoBitRate.Value;
|
||||||
|
|
||||||
@ -482,7 +484,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool EnableAdaptiveBitrateStreaming(StreamState state)
|
private bool EnableAdaptiveBitrateStreaming(StreamState state, bool isLiveStream)
|
||||||
{
|
{
|
||||||
// Within the local network this will likely do more harm than good.
|
// Within the local network this will likely do more harm than good.
|
||||||
if (Request.IsLocal || NetworkManager.IsInLocalNetwork(Request.RemoteIp))
|
if (Request.IsLocal || NetworkManager.IsInLocalNetwork(Request.RemoteIp))
|
||||||
@ -491,13 +493,12 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
}
|
}
|
||||||
|
|
||||||
var request = state.Request as GetMasterHlsVideoStream;
|
var request = state.Request as GetMasterHlsVideoStream;
|
||||||
|
|
||||||
if (request != null && !request.EnableAdaptiveBitrateStreaming)
|
if (request != null && !request.EnableAdaptiveBitrateStreaming)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(state.MediaPath))
|
if (isLiveStream || string.IsNullOrWhiteSpace(state.MediaPath))
|
||||||
{
|
{
|
||||||
// Opening live streams is so slow it's not even worth it
|
// Opening live streams is so slow it's not even worth it
|
||||||
return false;
|
return false;
|
||||||
|
@ -72,9 +72,7 @@ namespace MediaBrowser.Api.Playback.Hls
|
|||||||
|
|
||||||
public void Delete(StopEncodingProcess request)
|
public void Delete(StopEncodingProcess request)
|
||||||
{
|
{
|
||||||
var task = ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, path => true);
|
ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, path => true);
|
||||||
|
|
||||||
Task.WaitAll(task);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -3,6 +3,7 @@ using MediaBrowser.Controller.Entities;
|
|||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Persistence;
|
using MediaBrowser.Controller.Persistence;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Querying;
|
using MediaBrowser.Model.Querying;
|
||||||
using ServiceStack;
|
using ServiceStack;
|
||||||
using System;
|
using System;
|
||||||
@ -101,7 +102,7 @@ namespace MediaBrowser.Api.UserLibrary
|
|||||||
|
|
||||||
filteredItems = FilterByLibraryItems(request, filteredItems, user, libraryItems);
|
filteredItems = FilterByLibraryItems(request, filteredItems, user, libraryItems);
|
||||||
|
|
||||||
filteredItems = ItemsService.ApplySortOrder(request, filteredItems, user, LibraryManager).Cast<TItemType>();
|
filteredItems = LibraryManager.Sort(filteredItems, user, request.GetOrderBy(), request.SortOrder ?? SortOrder.Ascending).Cast<TItemType>();
|
||||||
|
|
||||||
var ibnItemsArray = filteredItems.ToList();
|
var ibnItemsArray = filteredItems.ToList();
|
||||||
|
|
||||||
|
@ -96,6 +96,21 @@ namespace MediaBrowser.Api.UserLibrary
|
|||||||
[ApiMember(Name = "IsPlayed", Description = "Optional filter by items that are played, or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "IsPlayed", Description = "Optional filter by items that are played, or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
|
||||||
public bool? IsPlayed { get; set; }
|
public bool? IsPlayed { get; set; }
|
||||||
|
|
||||||
|
public string[] GetMediaTypes()
|
||||||
|
{
|
||||||
|
return (MediaTypes ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] GetIncludeItemTypes()
|
||||||
|
{
|
||||||
|
return (IncludeItemTypes ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] GetExcludeItemTypes()
|
||||||
|
{
|
||||||
|
return (ExcludeItemTypes ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the filters.
|
/// Gets the filters.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -132,7 +147,7 @@ namespace MediaBrowser.Api.UserLibrary
|
|||||||
/// Gets the order by.
|
/// Gets the order by.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>IEnumerable{ItemSortBy}.</returns>
|
/// <returns>IEnumerable{ItemSortBy}.</returns>
|
||||||
public IEnumerable<string> GetOrderBy()
|
public string[] GetOrderBy()
|
||||||
{
|
{
|
||||||
var val = SortBy;
|
var val = SortBy;
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -159,11 +159,14 @@ namespace MediaBrowser.Api.UserLibrary
|
|||||||
{
|
{
|
||||||
var people = itemsList.SelectMany(i => i.People.OrderBy(p => p.SortOrder ?? int.MaxValue).ThenBy(p => p.Type));
|
var people = itemsList.SelectMany(i => i.People.OrderBy(p => p.SortOrder ?? int.MaxValue).ThenBy(p => p.Type));
|
||||||
|
|
||||||
return personTypes.Length == 0 ?
|
if (personTypes.Length > 0)
|
||||||
|
{
|
||||||
|
people = people.Where(p =>
|
||||||
|
personTypes.Contains(p.Type ?? string.Empty, StringComparer.OrdinalIgnoreCase) ||
|
||||||
|
personTypes.Contains(p.Role ?? string.Empty, StringComparer.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
people :
|
return people;
|
||||||
|
|
||||||
people.Where(p => personTypes.Contains(p.Type ?? string.Empty, StringComparer.OrdinalIgnoreCase) || personTypes.Contains(p.Role ?? string.Empty, StringComparer.OrdinalIgnoreCase));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -196,12 +196,15 @@ namespace MediaBrowser.Common.Implementations
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="BaseApplicationHost{TApplicationPathsType}"/> class.
|
/// Initializes a new instance of the <see cref="BaseApplicationHost{TApplicationPathsType}"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected BaseApplicationHost(TApplicationPathsType applicationPaths, ILogManager logManager)
|
protected BaseApplicationHost(TApplicationPathsType applicationPaths,
|
||||||
|
ILogManager logManager,
|
||||||
|
IFileSystem fileSystem)
|
||||||
{
|
{
|
||||||
FailedAssemblies = new List<string>();
|
FailedAssemblies = new List<string>();
|
||||||
|
|
||||||
ApplicationPaths = applicationPaths;
|
ApplicationPaths = applicationPaths;
|
||||||
LogManager = logManager;
|
LogManager = logManager;
|
||||||
|
FileSystemManager = fileSystem;
|
||||||
|
|
||||||
ConfigurationManager = GetConfigurationManager();
|
ConfigurationManager = GetConfigurationManager();
|
||||||
}
|
}
|
||||||
@ -441,7 +444,6 @@ namespace MediaBrowser.Common.Implementations
|
|||||||
|
|
||||||
RegisterSingleInstance(TaskManager);
|
RegisterSingleInstance(TaskManager);
|
||||||
|
|
||||||
FileSystemManager = CreateFileSystemManager();
|
|
||||||
RegisterSingleInstance(FileSystemManager);
|
RegisterSingleInstance(FileSystemManager);
|
||||||
|
|
||||||
HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger, FileSystemManager, ConfigurationManager);
|
HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger, FileSystemManager, ConfigurationManager);
|
||||||
@ -485,11 +487,6 @@ namespace MediaBrowser.Common.Implementations
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual IFileSystem CreateFileSystemManager()
|
|
||||||
{
|
|
||||||
return new CommonFileSystem(Logger, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a list of types within an assembly
|
/// Gets a list of types within an assembly
|
||||||
/// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference
|
/// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference
|
||||||
|
@ -15,11 +15,31 @@ namespace MediaBrowser.Common.Implementations.IO
|
|||||||
protected ILogger Logger;
|
protected ILogger Logger;
|
||||||
|
|
||||||
private readonly bool _supportsAsyncFileStreams;
|
private readonly bool _supportsAsyncFileStreams;
|
||||||
|
private char[] _invalidFileNameChars;
|
||||||
|
|
||||||
public CommonFileSystem(ILogger logger, bool supportsAsyncFileStreams)
|
public CommonFileSystem(ILogger logger, bool supportsAsyncFileStreams, bool usePresetInvalidFileNameChars)
|
||||||
{
|
{
|
||||||
Logger = logger;
|
Logger = logger;
|
||||||
_supportsAsyncFileStreams = supportsAsyncFileStreams;
|
_supportsAsyncFileStreams = supportsAsyncFileStreams;
|
||||||
|
|
||||||
|
SetInvalidFileNameChars(usePresetInvalidFileNameChars);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetInvalidFileNameChars(bool usePresetInvalidFileNameChars)
|
||||||
|
{
|
||||||
|
// GetInvalidFileNameChars is less restrictive in Linux/Mac than Windows, this mimic Windows behavior for mono under Linux/Mac.
|
||||||
|
|
||||||
|
if (usePresetInvalidFileNameChars)
|
||||||
|
{
|
||||||
|
_invalidFileNameChars = new char[41] { '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07',
|
||||||
|
'\x08', '\x09', '\x0A', '\x0B', '\x0C', '\x0D', '\x0E', '\x0F', '\x10', '\x11', '\x12',
|
||||||
|
'\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1A', '\x1B', '\x1C', '\x1D',
|
||||||
|
'\x1E', '\x1F', '\x22', '\x3C', '\x3E', '\x7C', ':', '*', '?', '\\', '/' };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_invalidFileNameChars = Path.GetInvalidFileNameChars();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -129,18 +149,6 @@ namespace MediaBrowser.Common.Implementations.IO
|
|||||||
/// The space char
|
/// The space char
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const char SpaceChar = ' ';
|
private const char SpaceChar = ' ';
|
||||||
/// <summary>
|
|
||||||
/// The invalid file name chars
|
|
||||||
/// </summary>
|
|
||||||
#if __MonoCS__
|
|
||||||
//GetInvalidFileNameChars is less restrictive in Linux/Mac than Windows, this mimic Windows behavior for mono under Linux/Mac.
|
|
||||||
private static readonly char[] InvalidFileNameChars = new char [41] { '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07',
|
|
||||||
'\x08', '\x09', '\x0A', '\x0B', '\x0C', '\x0D', '\x0E', '\x0F', '\x10', '\x11', '\x12',
|
|
||||||
'\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1A', '\x1B', '\x1C', '\x1D',
|
|
||||||
'\x1E', '\x1F', '\x22', '\x3C', '\x3E', '\x7C', ':', '*', '?', '\\', '/' };
|
|
||||||
#else
|
|
||||||
private static readonly char[] InvalidFileNameChars = Path.GetInvalidFileNameChars();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Takes a filename and removes invalid characters
|
/// Takes a filename and removes invalid characters
|
||||||
@ -157,7 +165,7 @@ namespace MediaBrowser.Common.Implementations.IO
|
|||||||
|
|
||||||
var builder = new StringBuilder(filename);
|
var builder = new StringBuilder(filename);
|
||||||
|
|
||||||
foreach (var c in InvalidFileNameChars)
|
foreach (var c in _invalidFileNameChars)
|
||||||
{
|
{
|
||||||
builder = builder.Replace(c, SpaceChar);
|
builder = builder.Replace(c, SpaceChar);
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ namespace MediaBrowser.Controller.Channels
|
|||||||
return base.IsVisible(user);
|
return base.IsVisible(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query)
|
public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -44,7 +44,7 @@ namespace MediaBrowser.Controller.Channels
|
|||||||
return ExternalId;
|
return ExternalId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query)
|
public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -770,7 +770,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query)
|
public virtual Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var user = query.User;
|
var user = query.User;
|
||||||
|
|
||||||
@ -783,7 +783,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return Task.FromResult(result);
|
return Task.FromResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items, UserItemsQuery query)
|
protected QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return UserViewBuilder.SortAndFilter(items, null, query, LibraryManager, UserDataManager);
|
return UserViewBuilder.SortAndFilter(items, null, query, LibraryManager, UserDataManager);
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ using System;
|
|||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
public class UserItemsQuery
|
public class InternalItemsQuery
|
||||||
{
|
{
|
||||||
public bool Recursive { get; set; }
|
public bool Recursive { get; set; }
|
||||||
|
|
||||||
@ -21,15 +21,21 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public bool? IsFolder { get; set; }
|
public bool? IsFolder { get; set; }
|
||||||
public bool? IsFavorite { get; set; }
|
public bool? IsFavorite { get; set; }
|
||||||
|
public bool? IsFavoriteOrLiked { get; set; }
|
||||||
|
public bool? IsLiked { get; set; }
|
||||||
public bool? IsPlayed { get; set; }
|
public bool? IsPlayed { get; set; }
|
||||||
public bool? IsResumable { get; set; }
|
public bool? IsResumable { get; set; }
|
||||||
|
|
||||||
public string[] MediaTypes { get; set; }
|
public string[] MediaTypes { get; set; }
|
||||||
|
public string[] IncludeItemTypes { get; set; }
|
||||||
|
public string[] ExcludeItemTypes { get; set; }
|
||||||
|
|
||||||
public UserItemsQuery()
|
public InternalItemsQuery()
|
||||||
{
|
{
|
||||||
SortBy = new string[] { };
|
SortBy = new string[] { };
|
||||||
MediaTypes = new string[] { };
|
MediaTypes = new string[] { };
|
||||||
|
IncludeItemTypes = new string[] { };
|
||||||
|
ExcludeItemTypes = new string[] { };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,8 +16,14 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class UserRootFolder : Folder
|
public class UserRootFolder : Folder
|
||||||
{
|
{
|
||||||
public override async Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query)
|
public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
|
if (query.Recursive)
|
||||||
|
{
|
||||||
|
var items = query.User.RootFolder.GetRecursiveChildren(query.User);
|
||||||
|
return SortAndFilter(items, query);
|
||||||
|
}
|
||||||
|
|
||||||
var result = await UserViewManager.GetUserViews(new UserViewQuery
|
var result = await UserViewManager.GetUserViews(new UserViewQuery
|
||||||
{
|
{
|
||||||
UserId = query.User.Id.ToString("N")
|
UserId = query.User.Id.ToString("N")
|
||||||
|
@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public static ITVSeriesManager TVSeriesManager;
|
public static ITVSeriesManager TVSeriesManager;
|
||||||
|
|
||||||
public override Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query)
|
public override Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return new UserViewBuilder(UserViewManager, LiveTvManager, ChannelManager, LibraryManager, Logger, UserDataManager, TVSeriesManager)
|
return new UserViewBuilder(UserViewManager, LiveTvManager, ChannelManager, LibraryManager, Logger, UserDataManager, TVSeriesManager)
|
||||||
.GetUserItems(this, ViewType, query);
|
.GetUserItems(this, ViewType, query);
|
||||||
@ -23,7 +23,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
||||||
{
|
{
|
||||||
var result = GetUserItems(new UserItemsQuery
|
var result = GetItems(new InternalItemsQuery
|
||||||
{
|
{
|
||||||
User = user
|
User = user
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true)
|
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true)
|
||||||
{
|
{
|
||||||
var result = GetUserItems(new UserItemsQuery
|
var result = GetItems(new InternalItemsQuery
|
||||||
{
|
{
|
||||||
User = user,
|
User = user,
|
||||||
Recursive = true
|
Recursive = true
|
||||||
|
@ -39,7 +39,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
_tvSeriesManager = tvSeriesManager;
|
_tvSeriesManager = tvSeriesManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<QueryResult<BaseItem>> GetUserItems(Folder parent, string viewType, UserItemsQuery query)
|
public async Task<QueryResult<BaseItem>> GetUserItems(Folder parent, string viewType, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var user = query.User;
|
var user = query.User;
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return 50;
|
return 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<QueryResult<BaseItem>> GetMusicFolders(Folder parent, User user, UserItemsQuery query)
|
private async Task<QueryResult<BaseItem>> GetMusicFolders(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
if (query.Recursive)
|
if (query.Recursive)
|
||||||
{
|
{
|
||||||
@ -236,7 +236,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(list, query);
|
return GetResult(list, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<QueryResult<BaseItem>> GetMusicFavorites(Folder parent, User user, UserItemsQuery query)
|
private async Task<QueryResult<BaseItem>> GetMusicFavorites(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var list = new List<BaseItem>();
|
var list = new List<BaseItem>();
|
||||||
|
|
||||||
@ -249,7 +249,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(list, query);
|
return GetResult(list, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMusicAlbumArtists(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMusicAlbumArtists(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
|
var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
|
||||||
.Where(i => !i.IsFolder)
|
.Where(i => !i.IsFolder)
|
||||||
@ -273,7 +273,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(artists, query);
|
return GetResult(artists, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMusicArtists(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMusicArtists(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
|
var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
|
||||||
.Where(i => !i.IsFolder)
|
.Where(i => !i.IsFolder)
|
||||||
@ -297,7 +297,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(artists, query);
|
return GetResult(artists, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetFavoriteArtists(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetFavoriteArtists(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
|
var artists = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
|
||||||
.Where(i => !i.IsFolder)
|
.Where(i => !i.IsFolder)
|
||||||
@ -321,17 +321,17 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(artists, query);
|
return GetResult(artists, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMusicAlbums(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMusicAlbums(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }).Where(i => i is MusicAlbum), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }).Where(i => i is MusicAlbum), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMusicSongs(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMusicSongs(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }).Where(i => i is Audio.Audio), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }).Where(i => i is Audio.Audio), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMusicLatest(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMusicLatest(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
|
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
|
||||||
query.SortOrder = SortOrder.Descending;
|
query.SortOrder = SortOrder.Descending;
|
||||||
@ -339,7 +339,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }).Where(i => i is MusicVideo || i is Audio.Audio), GetSpecialItemsLimit(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }).Where(i => i is MusicVideo || i is Audio.Audio), GetSpecialItemsLimit(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<QueryResult<BaseItem>> GetMovieFolders(Folder parent, User user, UserItemsQuery query)
|
private async Task<QueryResult<BaseItem>> GetMovieFolders(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
if (query.Recursive)
|
if (query.Recursive)
|
||||||
{
|
{
|
||||||
@ -360,52 +360,52 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(list, query);
|
return GetResult(list, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetFavoriteMovies(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetFavoriteMovies(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.IsFavorite = true;
|
query.IsFavorite = true;
|
||||||
|
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetFavoriteSeries(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetFavoriteSeries(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.IsFavorite = true;
|
query.IsFavorite = true;
|
||||||
|
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).Where(i => i is Series), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).Where(i => i is Series), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetFavoriteEpisodes(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetFavoriteEpisodes(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.IsFavorite = true;
|
query.IsFavorite = true;
|
||||||
|
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).Where(i => i is Episode), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).Where(i => i is Episode), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetFavoriteSongs(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetFavoriteSongs(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.IsFavorite = true;
|
query.IsFavorite = true;
|
||||||
|
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }).Where(i => i is Audio.Audio), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }).Where(i => i is Audio.Audio), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetFavoriteAlbums(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetFavoriteAlbums(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.IsFavorite = true;
|
query.IsFavorite = true;
|
||||||
|
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }).Where(i => i is MusicAlbum), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Music }).Where(i => i is MusicAlbum), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMovieMovies(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMovieMovies(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMovieCollections(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMovieCollections(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is BoxSet), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is BoxSet), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMovieLatest(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMovieLatest(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
|
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
|
||||||
query.SortOrder = SortOrder.Descending;
|
query.SortOrder = SortOrder.Descending;
|
||||||
@ -413,7 +413,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), GetSpecialItemsLimit(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), GetSpecialItemsLimit(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMovieResume(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMovieResume(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName };
|
query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName };
|
||||||
query.SortOrder = SortOrder.Descending;
|
query.SortOrder = SortOrder.Descending;
|
||||||
@ -422,7 +422,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), GetSpecialItemsLimit(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }).Where(i => i is Movie), GetSpecialItemsLimit(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetMovieGenres(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetMovieGenres(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var genres = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty })
|
var genres = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty })
|
||||||
.Where(i => i is Movie)
|
.Where(i => i is Movie)
|
||||||
@ -447,7 +447,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(genres, query);
|
return GetResult(genres, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<QueryResult<BaseItem>> GetTvView(Folder parent, User user, UserItemsQuery query)
|
private async Task<QueryResult<BaseItem>> GetTvView(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
if (query.Recursive)
|
if (query.Recursive)
|
||||||
{
|
{
|
||||||
@ -469,7 +469,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(list, query);
|
return GetResult(list, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<QueryResult<BaseItem>> GetGameView(User user, Folder parent, UserItemsQuery query)
|
private async Task<QueryResult<BaseItem>> GetGameView(User user, Folder parent, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
if (query.Recursive)
|
if (query.Recursive)
|
||||||
{
|
{
|
||||||
@ -489,7 +489,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(list, query);
|
return GetResult(list, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetLatestGames(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetLatestGames(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
|
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
|
||||||
query.SortOrder = SortOrder.Descending;
|
query.SortOrder = SortOrder.Descending;
|
||||||
@ -497,7 +497,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType<Game>(), GetSpecialItemsLimit(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType<Game>(), GetSpecialItemsLimit(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetRecentlyPlayedGames(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetRecentlyPlayedGames(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.IsPlayed = true;
|
query.IsPlayed = true;
|
||||||
query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName };
|
query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName };
|
||||||
@ -506,14 +506,14 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType<Game>(), GetSpecialItemsLimit(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType<Game>(), GetSpecialItemsLimit(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetFavoriteGames(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetFavoriteGames(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.IsFavorite = true;
|
query.IsFavorite = true;
|
||||||
|
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType<Game>(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType<Game>(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetTvLatest(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetTvLatest(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
|
query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName };
|
||||||
query.SortOrder = SortOrder.Descending;
|
query.SortOrder = SortOrder.Descending;
|
||||||
@ -521,7 +521,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).OfType<Episode>(), GetSpecialItemsLimit(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).OfType<Episode>(), GetSpecialItemsLimit(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetTvNextUp(Folder parent, UserItemsQuery query)
|
private QueryResult<BaseItem> GetTvNextUp(Folder parent, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var parentFolders = GetMediaFolders(parent, query.User, new[] { CollectionType.TvShows, string.Empty });
|
var parentFolders = GetMediaFolders(parent, query.User, new[] { CollectionType.TvShows, string.Empty });
|
||||||
|
|
||||||
@ -536,7 +536,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetTvResume(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetTvResume(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName };
|
query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName };
|
||||||
query.SortOrder = SortOrder.Descending;
|
query.SortOrder = SortOrder.Descending;
|
||||||
@ -545,12 +545,12 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).OfType<Episode>(), GetSpecialItemsLimit(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).OfType<Episode>(), GetSpecialItemsLimit(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetTvSeries(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetTvSeries(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).OfType<Series>(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }).OfType<Series>(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetTvGenres(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetTvGenres(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var genres = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty })
|
var genres = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty })
|
||||||
.OfType<Series>()
|
.OfType<Series>()
|
||||||
@ -575,12 +575,12 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
return GetResult(genres, query);
|
return GetResult(genres, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetGameSystems(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetGameSystems(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType<GameSystem>(), query);
|
return GetResult(GetRecursiveChildren(parent, user, new[] { CollectionType.Games }).OfType<GameSystem>(), query);
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetGameGenres(Folder parent, User user, UserItemsQuery query)
|
private QueryResult<BaseItem> GetGameGenres(Folder parent, User user, InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
var genres = GetRecursiveChildren(parent, user, new[] { CollectionType.Games })
|
var genres = GetRecursiveChildren(parent, user, new[] { CollectionType.Games })
|
||||||
.OfType<Game>()
|
.OfType<Game>()
|
||||||
@ -616,7 +616,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
private QueryResult<BaseItem> GetResult<T>(IEnumerable<T> items,
|
private QueryResult<BaseItem> GetResult<T>(IEnumerable<T> items,
|
||||||
UserItemsQuery query)
|
InternalItemsQuery query)
|
||||||
where T : BaseItem
|
where T : BaseItem
|
||||||
{
|
{
|
||||||
return GetResult(items, null, query);
|
return GetResult(items, null, query);
|
||||||
@ -624,7 +624,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
private QueryResult<BaseItem> GetResult<T>(IEnumerable<T> items,
|
private QueryResult<BaseItem> GetResult<T>(IEnumerable<T> items,
|
||||||
int? totalRecordLimit,
|
int? totalRecordLimit,
|
||||||
UserItemsQuery query)
|
InternalItemsQuery query)
|
||||||
where T : BaseItem
|
where T : BaseItem
|
||||||
{
|
{
|
||||||
return SortAndFilter(items, totalRecordLimit, query, _libraryManager, _userDataManager);
|
return SortAndFilter(items, totalRecordLimit, query, _libraryManager, _userDataManager);
|
||||||
@ -632,7 +632,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public static QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items,
|
public static QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items,
|
||||||
int? totalRecordLimit,
|
int? totalRecordLimit,
|
||||||
UserItemsQuery query,
|
InternalItemsQuery query,
|
||||||
ILibraryManager libraryManager,
|
ILibraryManager libraryManager,
|
||||||
IUserDataManager userDataManager)
|
IUserDataManager userDataManager)
|
||||||
{
|
{
|
||||||
@ -645,7 +645,7 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
public static QueryResult<BaseItem> Sort(IEnumerable<BaseItem> items,
|
public static QueryResult<BaseItem> Sort(IEnumerable<BaseItem> items,
|
||||||
int? totalRecordLimit,
|
int? totalRecordLimit,
|
||||||
UserItemsQuery query,
|
InternalItemsQuery query,
|
||||||
ILibraryManager libraryManager)
|
ILibraryManager libraryManager)
|
||||||
{
|
{
|
||||||
var user = query.User;
|
var user = query.User;
|
||||||
@ -676,13 +676,23 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool Filter(BaseItem item, User user, UserItemsQuery query, IUserDataManager userDataManager)
|
private static bool Filter(BaseItem item, User user, InternalItemsQuery query, IUserDataManager userDataManager)
|
||||||
{
|
{
|
||||||
if (query.MediaTypes.Length > 0 && !query.MediaTypes.Contains(item.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
if (query.MediaTypes.Length > 0 && !query.MediaTypes.Contains(item.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (query.IncludeItemTypes.Length > 0 && !query.IncludeItemTypes.Contains(item.GetClientTypeName(), StringComparer.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.ExcludeItemTypes.Length > 0 && query.ExcludeItemTypes.Contains(item.GetClientTypeName(), StringComparer.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (query.IsFolder.HasValue && query.IsFolder.Value != item.IsFolder)
|
if (query.IsFolder.HasValue && query.IsFolder.Value != item.IsFolder)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -695,6 +705,27 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
|
|
||||||
UserItemData userData = null;
|
UserItemData userData = null;
|
||||||
|
|
||||||
|
if (query.IsLiked.HasValue)
|
||||||
|
{
|
||||||
|
userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey());
|
||||||
|
|
||||||
|
if (!userData.Likes.HasValue || userData.Likes != query.IsLiked.Value)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.IsFavoriteOrLiked.HasValue)
|
||||||
|
{
|
||||||
|
userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey());
|
||||||
|
var isFavoriteOrLiked = userData.IsFavorite || (userData.Likes ?? false);
|
||||||
|
|
||||||
|
if (isFavoriteOrLiked != query.IsFavoriteOrLiked.Value)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (query.IsFavorite.HasValue)
|
if (query.IsFavorite.HasValue)
|
||||||
{
|
{
|
||||||
userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey());
|
userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey());
|
||||||
|
@ -151,6 +151,7 @@
|
|||||||
<Compile Include="Entities\ILibraryItem.cs" />
|
<Compile Include="Entities\ILibraryItem.cs" />
|
||||||
<Compile Include="Entities\ImageSourceInfo.cs" />
|
<Compile Include="Entities\ImageSourceInfo.cs" />
|
||||||
<Compile Include="Entities\IMetadataContainer.cs" />
|
<Compile Include="Entities\IMetadataContainer.cs" />
|
||||||
|
<Compile Include="Entities\InternalItemsQuery.cs" />
|
||||||
<Compile Include="Entities\ISupportsBoxSetGrouping.cs" />
|
<Compile Include="Entities\ISupportsBoxSetGrouping.cs" />
|
||||||
<Compile Include="Entities\ISupportsPlaceHolders.cs" />
|
<Compile Include="Entities\ISupportsPlaceHolders.cs" />
|
||||||
<Compile Include="Entities\ItemImageInfo.cs" />
|
<Compile Include="Entities\ItemImageInfo.cs" />
|
||||||
@ -160,7 +161,6 @@
|
|||||||
<Compile Include="Entities\IHasAwards.cs" />
|
<Compile Include="Entities\IHasAwards.cs" />
|
||||||
<Compile Include="Entities\Photo.cs" />
|
<Compile Include="Entities\Photo.cs" />
|
||||||
<Compile Include="Entities\PhotoAlbum.cs" />
|
<Compile Include="Entities\PhotoAlbum.cs" />
|
||||||
<Compile Include="Entities\UserItemsQuery.cs" />
|
|
||||||
<Compile Include="Entities\UserView.cs" />
|
<Compile Include="Entities\UserView.cs" />
|
||||||
<Compile Include="Entities\UserViewBuilder.cs" />
|
<Compile Include="Entities\UserViewBuilder.cs" />
|
||||||
<Compile Include="FileOrganization\IFileOrganizationService.cs" />
|
<Compile Include="FileOrganization\IFileOrganizationService.cs" />
|
||||||
|
@ -341,7 +341,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
|
|||||||
isFolder = true;
|
isFolder = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return await folder.GetUserItems(new UserItemsQuery
|
return await folder.GetItems(new InternalItemsQuery
|
||||||
{
|
{
|
||||||
Limit = limit,
|
Limit = limit,
|
||||||
StartIndex = startIndex,
|
StartIndex = startIndex,
|
||||||
@ -364,7 +364,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
|
|||||||
sortOrders.Add(ItemSortBy.SortName);
|
sortOrders.Add(ItemSortBy.SortName);
|
||||||
}
|
}
|
||||||
|
|
||||||
return await folder.GetUserItems(new UserItemsQuery
|
return await folder.GetItems(new InternalItemsQuery
|
||||||
{
|
{
|
||||||
Limit = limit,
|
Limit = limit,
|
||||||
StartIndex = startIndex,
|
StartIndex = startIndex,
|
||||||
|
@ -766,14 +766,12 @@ namespace MediaBrowser.Dlna.Didl
|
|||||||
|
|
||||||
if (!_profile.EnableAlbumArtInDidl)
|
if (!_profile.EnableAlbumArtInDidl)
|
||||||
{
|
{
|
||||||
if (!string.Equals(item.MediaType, MediaType.Photo, StringComparison.OrdinalIgnoreCase) && !string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(item.MediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase)
|
||||||
{
|
|| string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
|
||||||
if (!item.IsFolder)
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
AddImageResElement(item, element, 4096, 4096, playbackPercentage, "jpg", "JPEG_LRG");
|
AddImageResElement(item, element, 4096, 4096, playbackPercentage, "jpg", "JPEG_LRG");
|
||||||
AddImageResElement(item, element, 4096, 4096, playbackPercentage, "png", "PNG_LRG");
|
AddImageResElement(item, element, 4096, 4096, playbackPercentage, "png", "PNG_LRG");
|
||||||
|
@ -6,6 +6,7 @@ using MediaBrowser.Controller.Drawing;
|
|||||||
using MediaBrowser.Dlna.Profiles;
|
using MediaBrowser.Dlna.Profiles;
|
||||||
using MediaBrowser.Dlna.Server;
|
using MediaBrowser.Dlna.Server;
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
using System;
|
using System;
|
||||||
|
@ -87,7 +87,6 @@
|
|||||||
<Compile Include="Common\ServiceAction.cs" />
|
<Compile Include="Common\ServiceAction.cs" />
|
||||||
<Compile Include="PlayTo\TRANSPORTSTATE.cs" />
|
<Compile Include="PlayTo\TRANSPORTSTATE.cs" />
|
||||||
<Compile Include="PlayTo\uParserObject.cs" />
|
<Compile Include="PlayTo\uParserObject.cs" />
|
||||||
<Compile Include="Profiles\AndroidProfile.cs" />
|
|
||||||
<Compile Include="Profiles\Foobar2000Profile.cs" />
|
<Compile Include="Profiles\Foobar2000Profile.cs" />
|
||||||
<Compile Include="Profiles\MediaMonkeyProfile.cs" />
|
<Compile Include="Profiles\MediaMonkeyProfile.cs" />
|
||||||
<Compile Include="Profiles\Windows81Profile.cs" />
|
<Compile Include="Profiles\Windows81Profile.cs" />
|
||||||
@ -114,7 +113,6 @@
|
|||||||
<Compile Include="Common\DeviceIcon.cs" />
|
<Compile Include="Common\DeviceIcon.cs" />
|
||||||
<Compile Include="PlayTo\uParser.cs" />
|
<Compile Include="PlayTo\uParser.cs" />
|
||||||
<Compile Include="PlayTo\uPnpNamespaces.cs" />
|
<Compile Include="PlayTo\uPnpNamespaces.cs" />
|
||||||
<Compile Include="Profiles\DefaultProfile.cs" />
|
|
||||||
<Compile Include="Profiles\DenonAvrProfile.cs" />
|
<Compile Include="Profiles\DenonAvrProfile.cs" />
|
||||||
<Compile Include="Profiles\LgTvProfile.cs" />
|
<Compile Include="Profiles\LgTvProfile.cs" />
|
||||||
<Compile Include="Profiles\LinksysDMA2100Profile.cs" />
|
<Compile Include="Profiles\LinksysDMA2100Profile.cs" />
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using MediaBrowser.Controller.Dlna;
|
using MediaBrowser.Controller.Dlna;
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
using MediaBrowser.Model.MediaInfo;
|
using MediaBrowser.Model.MediaInfo;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using MediaBrowser.Model.Dlna.Profiles;
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
@ -248,6 +248,15 @@
|
|||||||
<Compile Include="..\MediaBrowser.Model\Dlna\ProfileConditionValue.cs">
|
<Compile Include="..\MediaBrowser.Model\Dlna\ProfileConditionValue.cs">
|
||||||
<Link>Dlna\ProfileConditionValue.cs</Link>
|
<Link>Dlna\ProfileConditionValue.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Dlna\Profiles\AndroidProfile.cs">
|
||||||
|
<Link>Dlna\Profiles\AndroidProfile.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Dlna\Profiles\DefaultProfile.cs">
|
||||||
|
<Link>Dlna\Profiles\DefaultProfile.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Dlna\ResolutionNormalizer.cs">
|
||||||
|
<Link>Dlna\ResolutionNormalizer.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Dlna\ResponseProfile.cs">
|
<Compile Include="..\MediaBrowser.Model\Dlna\ResponseProfile.cs">
|
||||||
<Link>Dlna\ResponseProfile.cs</Link>
|
<Link>Dlna\ResponseProfile.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -220,6 +220,15 @@
|
|||||||
<Compile Include="..\MediaBrowser.Model\Dlna\ProfileConditionValue.cs">
|
<Compile Include="..\MediaBrowser.Model\Dlna\ProfileConditionValue.cs">
|
||||||
<Link>Dlna\ProfileConditionValue.cs</Link>
|
<Link>Dlna\ProfileConditionValue.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Dlna\Profiles\AndroidProfile.cs">
|
||||||
|
<Link>Dlna\Profiles\AndroidProfile.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Dlna\Profiles\DefaultProfile.cs">
|
||||||
|
<Link>Dlna\Profiles\DefaultProfile.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Dlna\ResolutionNormalizer.cs">
|
||||||
|
<Link>Dlna\ResolutionNormalizer.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Dlna\ResponseProfile.cs">
|
<Compile Include="..\MediaBrowser.Model\Dlna\ResponseProfile.cs">
|
||||||
<Link>Dlna\ResponseProfile.cs</Link>
|
<Link>Dlna\ResponseProfile.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -6,6 +6,11 @@ namespace MediaBrowser.Model.ApiClient
|
|||||||
public ConnectionState State { get; set; }
|
public ConnectionState State { get; set; }
|
||||||
public ServerInfo ServerInfo { get; set; }
|
public ServerInfo ServerInfo { get; set; }
|
||||||
public IApiClient ApiClient { get; set; }
|
public IApiClient ApiClient { get; set; }
|
||||||
|
|
||||||
|
public ConnectionResult()
|
||||||
|
{
|
||||||
|
State = ConnectionState.Unavailable;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ConnectionState
|
public enum ConnectionState
|
||||||
|
@ -175,7 +175,7 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
|
|
||||||
public PeopleMetadataOptions PeopleMetadataOptions { get; set; }
|
public PeopleMetadataOptions PeopleMetadataOptions { get; set; }
|
||||||
|
|
||||||
public string[] SecureApps2 { get; set; }
|
public string[] InsecureApps { get; set; }
|
||||||
|
|
||||||
public bool SaveMetadataHidden { get; set; }
|
public bool SaveMetadataHidden { get; set; }
|
||||||
|
|
||||||
@ -226,15 +226,12 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
|
|
||||||
PeopleMetadataOptions = new PeopleMetadataOptions();
|
PeopleMetadataOptions = new PeopleMetadataOptions();
|
||||||
|
|
||||||
SecureApps2 = new[]
|
InsecureApps = new[]
|
||||||
{
|
{
|
||||||
"Dashboard",
|
"Roku",
|
||||||
"MBKinect",
|
"Chromecast",
|
||||||
"NuVue",
|
"iOS",
|
||||||
"Media Browser Theater",
|
"Android"
|
||||||
|
|
||||||
//"Chrome Companion",
|
|
||||||
"MB-Classic"
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MetadataOptions = new[]
|
MetadataOptions = new[]
|
||||||
|
@ -20,5 +20,19 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
IsRequired = true;
|
IsRequired = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ProfileCondition(ProfileConditionType condition, ProfileConditionValue property, string value)
|
||||||
|
: this(condition, property, value, false)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProfileCondition(ProfileConditionType condition, ProfileConditionValue property, string value, bool isRequired)
|
||||||
|
{
|
||||||
|
Condition = condition;
|
||||||
|
Property = property;
|
||||||
|
Value = value;
|
||||||
|
IsRequired = isRequired;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using System.Xml.Serialization;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Model.Dlna.Profiles
|
||||||
{
|
{
|
||||||
[XmlRoot("Profile")]
|
[XmlRoot("Profile")]
|
||||||
public class AndroidProfile : DefaultProfile
|
public class AndroidProfile : DefaultProfile
|
||||||
@ -91,33 +90,10 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
Type = CodecType.Video,
|
Type = CodecType.Video,
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
new ProfileCondition
|
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Width, "1920"),
|
||||||
{
|
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Height, "1080"),
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.VideoBitDepth, "8"),
|
||||||
Property = ProfileConditionValue.Width,
|
new ProfileCondition(ProfileConditionType.NotEquals, ProfileConditionValue.IsAnamorphic, "true")
|
||||||
Value = "1920"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.Height,
|
|
||||||
Value = "1080"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.NotEquals,
|
|
||||||
Property = ProfileConditionValue.IsAnamorphic,
|
|
||||||
Value = "true",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.VideoBitDepth,
|
|
||||||
Value = "8",
|
|
||||||
IsRequired = false
|
|
||||||
},
|
|
||||||
// TODO: Add HasScalingMatrix != true, IsRequired false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -127,12 +103,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
new ProfileCondition
|
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.AudioChannels, "2")
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -142,12 +113,7 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
Codec = "aac",
|
Codec = "aac",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
new ProfileCondition
|
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.AudioChannels, "2")
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -157,18 +123,8 @@ namespace MediaBrowser.Dlna.Profiles
|
|||||||
Codec = "mp3",
|
Codec = "mp3",
|
||||||
Conditions = new []
|
Conditions = new []
|
||||||
{
|
{
|
||||||
new ProfileCondition
|
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.AudioChannels, "2"),
|
||||||
{
|
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.AudioBitrate, "320000")
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioChannels,
|
|
||||||
Value = "2"
|
|
||||||
},
|
|
||||||
new ProfileCondition
|
|
||||||
{
|
|
||||||
Condition = ProfileConditionType.LessThanEqual,
|
|
||||||
Property = ProfileConditionValue.AudioBitrate,
|
|
||||||
Value = "320000"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -1,7 +1,6 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using System.Xml.Serialization;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Dlna.Profiles
|
namespace MediaBrowser.Model.Dlna.Profiles
|
||||||
{
|
{
|
||||||
[XmlRoot("Profile")]
|
[XmlRoot("Profile")]
|
||||||
public class DefaultProfile : DeviceProfile
|
public class DefaultProfile : DeviceProfile
|
63
MediaBrowser.Model/Dlna/ResolutionNormalizer.cs
Normal file
63
MediaBrowser.Model/Dlna/ResolutionNormalizer.cs
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Dlna
|
||||||
|
{
|
||||||
|
public class ResolutionNormalizer
|
||||||
|
{
|
||||||
|
private static readonly List<ResolutionConfiguration> Configurations =
|
||||||
|
new List<ResolutionConfiguration>
|
||||||
|
{
|
||||||
|
new ResolutionConfiguration(426, 320000),
|
||||||
|
new ResolutionConfiguration(640, 400000),
|
||||||
|
new ResolutionConfiguration(720, 950000),
|
||||||
|
new ResolutionConfiguration(1280, 2500000)
|
||||||
|
};
|
||||||
|
|
||||||
|
public static ResolutionOptions Normalize(int maxBitrate,
|
||||||
|
string codec,
|
||||||
|
int? maxWidth,
|
||||||
|
int? maxHeight)
|
||||||
|
{
|
||||||
|
foreach (var config in Configurations)
|
||||||
|
{
|
||||||
|
if (maxBitrate <= config.MaxBitrate)
|
||||||
|
{
|
||||||
|
var originvalValue = maxWidth;
|
||||||
|
|
||||||
|
maxWidth = Math.Min(config.MaxWidth, maxWidth ?? config.MaxWidth);
|
||||||
|
if (!originvalValue.HasValue || originvalValue.Value != maxWidth.Value)
|
||||||
|
{
|
||||||
|
maxHeight = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResolutionOptions
|
||||||
|
{
|
||||||
|
MaxWidth = maxWidth,
|
||||||
|
MaxHeight = maxHeight
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ResolutionConfiguration
|
||||||
|
{
|
||||||
|
public int MaxWidth { get; set; }
|
||||||
|
public int MaxBitrate { get; set; }
|
||||||
|
|
||||||
|
public ResolutionConfiguration(int maxWidth, int maxBitrate)
|
||||||
|
{
|
||||||
|
MaxWidth = maxWidth;
|
||||||
|
MaxBitrate = maxBitrate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ResolutionOptions
|
||||||
|
{
|
||||||
|
public int? MaxWidth { get; set; }
|
||||||
|
public int? MaxHeight { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -86,6 +86,9 @@
|
|||||||
<Compile Include="Configuration\XbmcMetadataOptions.cs" />
|
<Compile Include="Configuration\XbmcMetadataOptions.cs" />
|
||||||
<Compile Include="Configuration\SubtitlePlaybackMode.cs" />
|
<Compile Include="Configuration\SubtitlePlaybackMode.cs" />
|
||||||
<Compile Include="Connect\UserLinkType.cs" />
|
<Compile Include="Connect\UserLinkType.cs" />
|
||||||
|
<Compile Include="Dlna\Profiles\AndroidProfile.cs" />
|
||||||
|
<Compile Include="Dlna\Profiles\DefaultProfile.cs" />
|
||||||
|
<Compile Include="Dlna\ResolutionNormalizer.cs" />
|
||||||
<Compile Include="Drawing\ImageOrientation.cs" />
|
<Compile Include="Drawing\ImageOrientation.cs" />
|
||||||
<Compile Include="Dto\StreamOptions.cs" />
|
<Compile Include="Dto\StreamOptions.cs" />
|
||||||
<Compile Include="Entities\ExtraType.cs" />
|
<Compile Include="Entities\ExtraType.cs" />
|
||||||
|
@ -162,26 +162,14 @@ namespace MediaBrowser.Providers.BoxSets
|
|||||||
{
|
{
|
||||||
var url = string.Format(GetCollectionInfo3, id, MovieDbProvider.ApiKey);
|
var url = string.Format(GetCollectionInfo3, id, MovieDbProvider.ApiKey);
|
||||||
|
|
||||||
var imageLanguages = _localization.GetCultures()
|
|
||||||
.Select(i => i.TwoLetterISOLanguageName)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
imageLanguages.Add("null");
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(language))
|
if (!string.IsNullOrEmpty(language))
|
||||||
{
|
{
|
||||||
// If preferred language isn't english, get those images too
|
|
||||||
if (!imageLanguages.Contains(language, StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
imageLanguages.Add(language);
|
|
||||||
}
|
|
||||||
|
|
||||||
url += string.Format("&language={0}", language);
|
url += string.Format("&language={0}", language);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
|
||||||
// Get images in english and with no language
|
// Get images in english and with no language
|
||||||
url += "&include_image_language=" + string.Join(",", imageLanguages.ToArray());
|
url += "&include_image_language=" + includeImageLanguageParam;
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
@ -231,7 +219,7 @@ namespace MediaBrowser.Providers.BoxSets
|
|||||||
if (fileInfo.Exists)
|
if (fileInfo.Exists)
|
||||||
{
|
{
|
||||||
// If it's recent or automatic updates are enabled, don't re-download
|
// If it's recent or automatic updates are enabled, don't re-download
|
||||||
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
|
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 3)
|
||||||
{
|
{
|
||||||
return _cachedTask;
|
return _cachedTask;
|
||||||
}
|
}
|
||||||
|
@ -136,6 +136,7 @@
|
|||||||
<Compile Include="Music\MusicBrainzArtistProvider.cs" />
|
<Compile Include="Music\MusicBrainzArtistProvider.cs" />
|
||||||
<Compile Include="Music\MusicExternalIds.cs" />
|
<Compile Include="Music\MusicExternalIds.cs" />
|
||||||
<Compile Include="Music\MusicVideoMetadataService.cs" />
|
<Compile Include="Music\MusicVideoMetadataService.cs" />
|
||||||
|
<Compile Include="Omdb\OmdbImageProvider.cs" />
|
||||||
<Compile Include="Omdb\OmdbProvider.cs" />
|
<Compile Include="Omdb\OmdbProvider.cs" />
|
||||||
<Compile Include="Omdb\OmdbItemProvider.cs" />
|
<Compile Include="Omdb\OmdbItemProvider.cs" />
|
||||||
<Compile Include="People\MovieDbPersonImageProvider.cs" />
|
<Compile Include="People\MovieDbPersonImageProvider.cs" />
|
||||||
|
@ -432,7 +432,7 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
|
|
||||||
if (fileInfo.Exists)
|
if (fileInfo.Exists)
|
||||||
{
|
{
|
||||||
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
|
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 3)
|
||||||
{
|
{
|
||||||
return _cachedTask;
|
return _cachedTask;
|
||||||
}
|
}
|
||||||
|
124
MediaBrowser.Providers/Omdb/OmdbImageProvider.cs
Normal file
124
MediaBrowser.Providers/Omdb/OmdbImageProvider.cs
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
using MediaBrowser.Common.Net;
|
||||||
|
using MediaBrowser.Controller.Channels;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
|
using MediaBrowser.Controller.Providers;
|
||||||
|
using MediaBrowser.Model.Channels;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
|
using MediaBrowser.Model.Net;
|
||||||
|
using MediaBrowser.Model.Providers;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Providers.Omdb
|
||||||
|
{
|
||||||
|
public class OmdbImageProvider : IRemoteImageProvider, IHasOrder
|
||||||
|
{
|
||||||
|
private readonly IHttpClient _httpClient;
|
||||||
|
|
||||||
|
public OmdbImageProvider(IHttpClient httpClient)
|
||||||
|
{
|
||||||
|
_httpClient = httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<ImageType> GetSupportedImages(IHasImages item)
|
||||||
|
{
|
||||||
|
return new List<ImageType>
|
||||||
|
{
|
||||||
|
ImageType.Primary
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var imdbId = item.GetProviderId(MetadataProviders.Imdb);
|
||||||
|
|
||||||
|
var list = new List<RemoteImageInfo>();
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(imdbId))
|
||||||
|
{
|
||||||
|
list.Add(new RemoteImageInfo
|
||||||
|
{
|
||||||
|
ProviderName = Name,
|
||||||
|
Url = string.Format("http://img.omdbapi.com/?i={0}&apikey=82e83907", imdbId)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult<IEnumerable<RemoteImageInfo>>(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var response = await _httpClient.GetResponse(new HttpRequestOptions
|
||||||
|
{
|
||||||
|
CancellationToken = cancellationToken,
|
||||||
|
Url = url,
|
||||||
|
ResourcePool = OmdbProvider.ResourcePool
|
||||||
|
|
||||||
|
}).ConfigureAwait(false);
|
||||||
|
|
||||||
|
if (response.ContentLength == 11059)
|
||||||
|
{
|
||||||
|
throw new HttpException("File not found")
|
||||||
|
{
|
||||||
|
StatusCode = HttpStatusCode.NotFound
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get { return "The Open Movie Database"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Supports(IHasImages item)
|
||||||
|
{
|
||||||
|
// Save the http requests since we know it's not currently supported
|
||||||
|
// TODO: Check again periodically
|
||||||
|
if (item is Person)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save the http requests since we know it's not currently supported
|
||||||
|
if (item is Series || item is Season || item is Episode)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var channelItem = item as IChannelMediaItem;
|
||||||
|
|
||||||
|
if (channelItem != null)
|
||||||
|
{
|
||||||
|
if (channelItem.ContentType == ChannelMediaContentType.Movie)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (channelItem.ContentType == ChannelMediaContentType.MovieExtra)
|
||||||
|
{
|
||||||
|
if (channelItem.ExtraType == ExtraType.Trailer)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return item is Movie || item is Trailer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Order
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
// After other internet providers, because they're better
|
||||||
|
// But before fallback providers like screengrab
|
||||||
|
return 90;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,7 +12,7 @@ namespace MediaBrowser.Providers.Omdb
|
|||||||
{
|
{
|
||||||
public class OmdbProvider
|
public class OmdbProvider
|
||||||
{
|
{
|
||||||
private static readonly SemaphoreSlim ResourcePool = new SemaphoreSlim(1, 1);
|
internal static readonly SemaphoreSlim ResourcePool = new SemaphoreSlim(1, 1);
|
||||||
private readonly IJsonSerializer _jsonSerializer;
|
private readonly IJsonSerializer _jsonSerializer;
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
||||||
|
@ -185,7 +185,7 @@ namespace MediaBrowser.Providers.People
|
|||||||
|
|
||||||
var fileInfo = _fileSystem.GetFileSystemInfo(dataFilePath);
|
var fileInfo = _fileSystem.GetFileSystemInfo(dataFilePath);
|
||||||
|
|
||||||
if (fileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
|
if (fileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 3)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -381,7 +381,7 @@ namespace MediaBrowser.Providers.TV
|
|||||||
|
|
||||||
if (fileInfo.Exists)
|
if (fileInfo.Exists)
|
||||||
{
|
{
|
||||||
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
|
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 3)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -214,26 +214,14 @@ namespace MediaBrowser.Providers.TV
|
|||||||
{
|
{
|
||||||
var url = string.Format(GetTvInfo3, id, seasonNumber.ToString(CultureInfo.InvariantCulture), episodeNumber, MovieDbProvider.ApiKey);
|
var url = string.Format(GetTvInfo3, id, seasonNumber.ToString(CultureInfo.InvariantCulture), episodeNumber, MovieDbProvider.ApiKey);
|
||||||
|
|
||||||
var imageLanguages = _localization.GetCultures()
|
|
||||||
.Select(i => i.TwoLetterISOLanguageName)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
imageLanguages.Add("null");
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(language))
|
if (!string.IsNullOrEmpty(language))
|
||||||
{
|
{
|
||||||
// If preferred language isn't english, get those images too
|
|
||||||
if (imageLanguages.Contains(language, StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
imageLanguages.Add(language);
|
|
||||||
}
|
|
||||||
|
|
||||||
url += string.Format("&language={0}", language);
|
url += string.Format("&language={0}", language);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
|
||||||
// Get images in english and with no language
|
// Get images in english and with no language
|
||||||
url += "&include_image_language=" + string.Join(",", imageLanguages.ToArray());
|
url += "&include_image_language=" + includeImageLanguageParam;
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
@ -198,26 +198,14 @@ namespace MediaBrowser.Providers.TV
|
|||||||
{
|
{
|
||||||
var url = string.Format(GetTvInfo3, id, seasonNumber.ToString(CultureInfo.InvariantCulture), MovieDbProvider.ApiKey);
|
var url = string.Format(GetTvInfo3, id, seasonNumber.ToString(CultureInfo.InvariantCulture), MovieDbProvider.ApiKey);
|
||||||
|
|
||||||
var imageLanguages = _localization.GetCultures()
|
|
||||||
.Select(i => i.TwoLetterISOLanguageName)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
imageLanguages.Add("null");
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(language))
|
if (!string.IsNullOrEmpty(language))
|
||||||
{
|
{
|
||||||
// If preferred language isn't english, get those images too
|
|
||||||
if (imageLanguages.Contains(language, StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
imageLanguages.Add(language);
|
|
||||||
}
|
|
||||||
|
|
||||||
url += string.Format("&language={0}", language);
|
url += string.Format("&language={0}", language);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
|
||||||
// Get images in english and with no language
|
// Get images in english and with no language
|
||||||
url += "&include_image_language=" + string.Join(",", imageLanguages.ToArray());
|
url += "&include_image_language=" + includeImageLanguageParam;
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
@ -295,26 +295,14 @@ namespace MediaBrowser.Providers.TV
|
|||||||
{
|
{
|
||||||
var url = string.Format(GetTvInfo3, id, MovieDbProvider.ApiKey);
|
var url = string.Format(GetTvInfo3, id, MovieDbProvider.ApiKey);
|
||||||
|
|
||||||
var imageLanguages = _localization.GetCultures()
|
|
||||||
.Select(i => i.TwoLetterISOLanguageName)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
imageLanguages.Add("null");
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(language))
|
if (!string.IsNullOrEmpty(language))
|
||||||
{
|
{
|
||||||
// If preferred language isn't english, get those images too
|
|
||||||
if (imageLanguages.Contains(language, StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
imageLanguages.Add(language);
|
|
||||||
}
|
|
||||||
|
|
||||||
url += string.Format("&language={0}", language);
|
url += string.Format("&language={0}", language);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
|
||||||
// Get images in english and with no language
|
// Get images in english and with no language
|
||||||
url += "&include_image_language=" + string.Join(",", imageLanguages.ToArray());
|
url += "&include_image_language=" + includeImageLanguageParam;
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
@ -214,13 +214,9 @@ namespace MediaBrowser.Server.Implementations.Configuration
|
|||||||
public void DisableMetadataService(string service)
|
public void DisableMetadataService(string service)
|
||||||
{
|
{
|
||||||
DisableMetadataService(typeof(Movie), Configuration, service);
|
DisableMetadataService(typeof(Movie), Configuration, service);
|
||||||
DisableMetadataService(typeof(MusicAlbum), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(MusicArtist), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(Episode), Configuration, service);
|
DisableMetadataService(typeof(Episode), Configuration, service);
|
||||||
DisableMetadataService(typeof(Season), Configuration, service);
|
DisableMetadataService(typeof(Season), Configuration, service);
|
||||||
DisableMetadataService(typeof(Series), Configuration, service);
|
DisableMetadataService(typeof(Series), Configuration, service);
|
||||||
DisableMetadataService(typeof(MusicVideo), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(Trailer), Configuration, service);
|
|
||||||
DisableMetadataService(typeof(Video), Configuration, service);
|
DisableMetadataService(typeof(Video), Configuration, service);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||||||
|
|
||||||
private readonly ReaderWriterLockSlim _localEndpointLock = new ReaderWriterLockSlim();
|
private readonly ReaderWriterLockSlim _localEndpointLock = new ReaderWriterLockSlim();
|
||||||
|
|
||||||
|
private readonly bool _supportsNativeWebSocket;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the local end points.
|
/// Gets the local end points.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -61,10 +63,17 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpListenerHost(IApplicationHost applicationHost, ILogManager logManager, string serviceName, string handlerPath, string defaultRedirectPath, params Assembly[] assembliesWithServices)
|
public HttpListenerHost(IApplicationHost applicationHost,
|
||||||
|
ILogManager logManager,
|
||||||
|
string serviceName,
|
||||||
|
string handlerPath,
|
||||||
|
string defaultRedirectPath,
|
||||||
|
bool supportsNativeWebSocket,
|
||||||
|
params Assembly[] assembliesWithServices)
|
||||||
: base(serviceName, assembliesWithServices)
|
: base(serviceName, assembliesWithServices)
|
||||||
{
|
{
|
||||||
DefaultRedirectPath = defaultRedirectPath;
|
DefaultRedirectPath = defaultRedirectPath;
|
||||||
|
_supportsNativeWebSocket = supportsNativeWebSocket;
|
||||||
HandlerPath = handlerPath;
|
HandlerPath = handlerPath;
|
||||||
|
|
||||||
_logger = logManager.GetLogger("HttpServer");
|
_logger = logManager.GetLogger("HttpServer");
|
||||||
@ -195,7 +204,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||||||
{
|
{
|
||||||
HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
|
HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
|
||||||
|
|
||||||
_listener = NativeWebSocket.IsSupported
|
_listener = _supportsNativeWebSocket && NativeWebSocket.IsSupported
|
||||||
? _listener = new HttpListenerServer(_logger, OnRequestReceived)
|
? _listener = new HttpListenerServer(_logger, OnRequestReceived)
|
||||||
//? _listener = new WebSocketSharpListener(_logger, OnRequestReceived)
|
//? _listener = new WebSocketSharpListener(_logger, OnRequestReceived)
|
||||||
: _listener = new WebSocketSharpListener(_logger, OnRequestReceived);
|
: _listener = new WebSocketSharpListener(_logger, OnRequestReceived);
|
||||||
|
@ -219,11 +219,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
#if __MonoCS__
|
|
||||||
return false;
|
|
||||||
#else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!_supportsNativeWebSocket.HasValue)
|
if (!_supportsNativeWebSocket.HasValue)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using MediaBrowser.Controller.Configuration;
|
using System.Collections.Generic;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Net;
|
using MediaBrowser.Controller.Net;
|
||||||
using MediaBrowser.Controller.Session;
|
using MediaBrowser.Controller.Session;
|
||||||
@ -57,15 +58,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void ValidateUser(IRequest req, bool allowLocal,
|
private void ValidateUser(IRequest req, bool allowLocal,
|
||||||
string[] roles)
|
IEnumerable<string> roles)
|
||||||
{
|
{
|
||||||
// This code is executed before the service
|
// This code is executed before the service
|
||||||
var auth = AuthorizationContext.GetAuthorizationInfo(req);
|
var auth = AuthorizationContext.GetAuthorizationInfo(req);
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(auth.Token)
|
|
||||||
|| _config.Configuration.SecureApps2.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
if (!allowLocal || !req.IsLocal)
|
if (!allowLocal || !req.IsLocal)
|
||||||
|
{
|
||||||
|
if (!_config.Configuration.InsecureApps.Contains(auth.Client ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
SessionManager.ValidateSecurityToken(auth.Token);
|
SessionManager.ValidateSecurityToken(auth.Token);
|
||||||
}
|
}
|
||||||
|
@ -18,12 +18,18 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||||||
/// <param name="serverName">Name of the server.</param>
|
/// <param name="serverName">Name of the server.</param>
|
||||||
/// <param name="handlerPath">The handler path.</param>
|
/// <param name="handlerPath">The handler path.</param>
|
||||||
/// <param name="defaultRedirectpath">The default redirectpath.</param>
|
/// <param name="defaultRedirectpath">The default redirectpath.</param>
|
||||||
|
/// <param name="supportsNativeWebSocket">if set to <c>true</c> [supports native web socket].</param>
|
||||||
/// <returns>IHttpServer.</returns>
|
/// <returns>IHttpServer.</returns>
|
||||||
public static IHttpServer CreateServer(IApplicationHost applicationHost, ILogManager logManager, string serverName, string handlerPath, string defaultRedirectpath)
|
public static IHttpServer CreateServer(IApplicationHost applicationHost,
|
||||||
|
ILogManager logManager,
|
||||||
|
string serverName,
|
||||||
|
string handlerPath,
|
||||||
|
string defaultRedirectpath,
|
||||||
|
bool supportsNativeWebSocket)
|
||||||
{
|
{
|
||||||
LogManager.LogFactory = new ServerLogFactory(logManager);
|
LogManager.LogFactory = new ServerLogFactory(logManager);
|
||||||
|
|
||||||
return new HttpListenerHost(applicationHost, logManager, serverName, handlerPath, defaultRedirectpath);
|
return new HttpListenerHost(applicationHost, logManager, serverName, handlerPath, defaultRedirectpath, supportsNativeWebSocket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -489,9 +489,11 @@ namespace MediaBrowser.Server.Implementations.Library
|
|||||||
|
|
||||||
public IEnumerable<BaseItem> ReplaceVideosWithPrimaryVersions(IEnumerable<BaseItem> items)
|
public IEnumerable<BaseItem> ReplaceVideosWithPrimaryVersions(IEnumerable<BaseItem> items)
|
||||||
{
|
{
|
||||||
return items.Select(i =>
|
var dict = new Dictionary<Guid, BaseItem>();
|
||||||
|
|
||||||
|
foreach (var item in items)
|
||||||
{
|
{
|
||||||
var video = i as Video;
|
var video = item as Video;
|
||||||
|
|
||||||
if (video != null)
|
if (video != null)
|
||||||
{
|
{
|
||||||
@ -501,14 +503,15 @@ namespace MediaBrowser.Server.Implementations.Library
|
|||||||
|
|
||||||
if (primary != null)
|
if (primary != null)
|
||||||
{
|
{
|
||||||
return primary;
|
dict[primary.Id] = primary;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
dict[item.Id] = item;
|
||||||
|
}
|
||||||
|
|
||||||
return i;
|
return dict.Values;
|
||||||
|
|
||||||
}).DistinctBy(i => i.Id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -593,5 +593,5 @@
|
|||||||
"DashboardTourPlugins": "Installiere Plugins wie Internet Videoportale, Live-TV, Metadatenscanner und mehr.",
|
"DashboardTourPlugins": "Installiere Plugins wie Internet Videoportale, Live-TV, Metadatenscanner und mehr.",
|
||||||
"DashboardTourNotifications": "Sende automatisch Benachrichtigungen von Serverereignissen auf dein mobiles Endger\u00e4t, per E-Mail und mehr.",
|
"DashboardTourNotifications": "Sende automatisch Benachrichtigungen von Serverereignissen auf dein mobiles Endger\u00e4t, per E-Mail und mehr.",
|
||||||
"DashboardTourScheduledTasks": "Verwalte einfach lang dauernde Aufgaben mit Hilfe von geplanten Aufgaben. Entscheide wann diese ausgef\u00fchrt werden und wie oft.",
|
"DashboardTourScheduledTasks": "Verwalte einfach lang dauernde Aufgaben mit Hilfe von geplanten Aufgaben. Entscheide wann diese ausgef\u00fchrt werden und wie oft.",
|
||||||
"DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere."
|
"DashboardTourMobile": "Die Media Browser \u00dcbersicht funktioniert auch hervorragend auf Smartphones und Tablets. Verwalte deinen Server jederzeit und \u00fcberall direkt von deiner Handfl\u00e4che aus."
|
||||||
}
|
}
|
@ -67,7 +67,7 @@
|
|||||||
"ButtonPlaylist": "Lista de Reprod.",
|
"ButtonPlaylist": "Lista de Reprod.",
|
||||||
"ButtonPreviousTrack": "Pista Anterior",
|
"ButtonPreviousTrack": "Pista Anterior",
|
||||||
"LabelEnabled": "Habilitado",
|
"LabelEnabled": "Habilitado",
|
||||||
"LabelDisabled": "Deshabilitado",
|
"LabelDisabled": "Desactivado",
|
||||||
"ButtonMoreInformation": "Mas Informaci\u00f3n",
|
"ButtonMoreInformation": "Mas Informaci\u00f3n",
|
||||||
"LabelNoUnreadNotifications": "No hay notificaciones sin leer.",
|
"LabelNoUnreadNotifications": "No hay notificaciones sin leer.",
|
||||||
"ButtonViewNotifications": "Ver notificaciones",
|
"ButtonViewNotifications": "Ver notificaciones",
|
||||||
@ -585,13 +585,13 @@
|
|||||||
"WebClientTourMobile1": "El cliente web funciona de maravilla en tel\u00e9fonos inteligentes y tabletas...",
|
"WebClientTourMobile1": "El cliente web funciona de maravilla en tel\u00e9fonos inteligentes y tabletas...",
|
||||||
"WebClientTourMobile2": "y controla f\u00e1cilmente otros dispositivos y apps de Media Browser",
|
"WebClientTourMobile2": "y controla f\u00e1cilmente otros dispositivos y apps de Media Browser",
|
||||||
"MessageEnjoyYourStay": "Disfrute su visita",
|
"MessageEnjoyYourStay": "Disfrute su visita",
|
||||||
"DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.",
|
"DashboardTourDashboard": "El panel de control del servidor le permite monitorear su servidor y sus usuarios. Siempre sabr\u00e1 quien est\u00e1 haciendo qu\u00e9 y donde se encuentran.",
|
||||||
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
|
"DashboardTourUsers": "Cree cuentas f\u00e1cilmente para sus amigos y familia, cada una con sus propios permisos, accesos a la biblioteca, controles parentales y m\u00e1s.",
|
||||||
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
"DashboardTourCinemaMode": "El modo cine trae la experiencia del cine directo a su sala de TV con la capacidad de reproducir avances e intros personalizados antes de la presentaci\u00f3n estelar.",
|
||||||
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
|
"DashboardTourChapters": "Active la generaci\u00f3n de im\u00e1genes de cap\u00edtulos de sus videos para una presentaci\u00f3n m\u00e1s agradable al desplegar.",
|
||||||
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
|
"DashboardTourSubtitles": "Descargue autom\u00e1ticamente subt\u00edtulos para sus videos en cualquier lenguaje.",
|
||||||
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
"DashboardTourPlugins": "Instale complementos como canales de video de Internet, TV en vivo, buscadores de metadatos y m\u00e1s.",
|
||||||
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
"DashboardTourNotifications": "Env\u00ede notificaciones automatizadas de eventos del servidor a sus dispositivos m\u00f3viles, correo electr\u00f3nico y m\u00e1s.",
|
||||||
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
"DashboardTourScheduledTasks": "Administre f\u00e1cilmente operaciones de larga duraci\u00f3n con tareas programadas. Decida cuando se ejecutar\u00e1n y con que periodicidad.",
|
||||||
"DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere."
|
"DashboardTourMobile": "El Panel de Control de Media Browser funciona excelentemente en tel\u00e9fonos inteligentes y tabletas. Administre su servidor desde la palma de su mano en todo momento y lugar."
|
||||||
}
|
}
|
@ -589,7 +589,7 @@
|
|||||||
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
|
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
|
||||||
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
||||||
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
|
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
|
||||||
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
|
"DashboardTourSubtitles": "T\u00e9l\u00e9charger automatiquement les sous-titres pour vos vid\u00e9os dans n'importe quelle langue.",
|
||||||
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
||||||
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
||||||
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
||||||
|
@ -601,5 +601,6 @@
|
|||||||
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
||||||
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
||||||
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
||||||
"DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere."
|
"DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere.",
|
||||||
|
"MessageRefreshQueued": "Refresh queued"
|
||||||
}
|
}
|
||||||
|
@ -585,13 +585,13 @@
|
|||||||
"WebClientTourMobile1": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0456 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0434\u0430\u0440\u0434\u0430 \u0436\u04d9\u043d\u0435 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0442\u0435\u0440\u0434\u0435 \u0442\u0430\u043c\u0430\u0448\u0430 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456",
|
"WebClientTourMobile1": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0456 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0434\u0430\u0440\u0434\u0430 \u0436\u04d9\u043d\u0435 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0442\u0435\u0440\u0434\u0435 \u0442\u0430\u043c\u0430\u0448\u0430 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456",
|
||||||
"WebClientTourMobile2": "\u0441\u043e\u043d\u044b\u043c\u0435\u043d \u049b\u0430\u0442\u0430\u0440 \u0431\u0430\u0441\u049b\u0430 \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0430\u0434\u044b",
|
"WebClientTourMobile2": "\u0441\u043e\u043d\u044b\u043c\u0435\u043d \u049b\u0430\u0442\u0430\u0440 \u0431\u0430\u0441\u049b\u0430 \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0430\u0434\u044b",
|
||||||
"MessageEnjoyYourStay": "\u0416\u0430\u0493\u044b\u043c\u0434\u044b \u0435\u0440\u043c\u0435\u043a \u0435\u0442\u0456\u04a3\u0456\u0437",
|
"MessageEnjoyYourStay": "\u0416\u0430\u0493\u044b\u043c\u0434\u044b \u0435\u0440\u043c\u0435\u043a \u0435\u0442\u0456\u04a3\u0456\u0437",
|
||||||
"DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.",
|
"DashboardTourDashboard": "\u0421\u0435\u0440\u0432\u0435\u0440\u0434\u0456\u04a3 \u0431\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440\u0434\u044b \u0431\u0430\u049b\u044b\u043b\u0430\u0443\u044b \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u0433\u0456\u043d\u0435 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u041a\u0456\u043c \u043d\u0435 \u0456\u0441\u0442\u0435\u0433\u0435\u043d\u0456\u043d \u0436\u04d9\u043d\u0435 \u049b\u0430\u0439\u0434\u0430 \u0442\u04b1\u0440\u0493\u0430\u043d\u044b\u043d \u0431\u0456\u043b\u0456\u043f \u0436\u0430\u0442\u0430\u0441\u044b\u0437.",
|
||||||
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
|
"DashboardTourUsers": "\u0414\u043e\u0441\u0442\u0430\u0440\u044b\u04a3\u044b\u0437 \u0431\u0435\u043d \u043e\u0442\u0431\u0430\u0441\u044b\u04a3\u044b\u0437 \u04d9\u0440\u049b\u0430\u0439\u0441\u044b\u043d\u0430 \u04e9\u0437\u0456\u043d\u0456\u04a3 \u049b\u04b1\u049b\u044b\u049b\u0442\u0430\u0440\u044b, \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443\u044b, \u043c\u0430\u0437\u043c\u04b1\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443\u044b \u0436\u04d9\u043d\u0435 \u0442.\u0431. \u0431\u0430\u0440 \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u043b\u0435\u0440\u0456\u043d \u0436\u0435\u04a3\u0456\u043b \u0436\u0430\u0441\u0430\u04a3\u044b\u0437.",
|
||||||
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
"DashboardTourCinemaMode": "\u041a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440 \u0440\u0435\u0436\u0456\u043c\u0456 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u043a\u04e9\u0440\u043d\u0435\u0443\u0434\u0456 \u0431\u0430\u0441\u0442\u044b \u049b\u0430\u0441\u0438\u0435\u0442\u0442\u0456\u04a3 \u0430\u043b\u0434\u044b\u043d\u0434\u0430 \u043e\u0439\u043d\u0430\u0442\u0443 \u049b\u0430\u0431\u0456\u043b\u0435\u0442\u0456\u043c\u0435\u043d \u043a\u0438\u043d\u043e \u043a\u04e9\u0440\u0441\u0435\u0442\u0435\u0442\u0456\u043d \u0437\u0430\u043b \u04d9\u0441\u0435\u0440\u0456\u043d \u049b\u043e\u043d\u0430\u049b\u0436\u0430\u0439\u044b\u04a3\u044b\u0437\u0493\u0430 \u0442\u0456\u043a\u0435\u043b\u0435\u0439 \u0436\u0435\u0442\u043a\u0456\u0437\u0435\u0434\u0456.",
|
||||||
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
|
"DashboardTourChapters": "\u0411\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0434\u0456 \u049b\u0430\u0440\u0430\u0493\u0430\u043d \u043a\u0435\u0437\u0434\u0435 \u04b1\u043d\u0430\u043c\u0434\u044b\u043b\u0430\u0443 \u043a\u04e9\u0440\u0441\u0435\u0442\u0456\u043c \u04af\u0448\u0456\u043d \u0441\u0430\u0445\u043d\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d \u0442\u0443\u0434\u044b\u0440\u0443\u044b\u043d \u049b\u043e\u0441\u044b\u04a3\u044b\u0437.",
|
||||||
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
|
"DashboardTourSubtitles": "\u0411\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0433\u0435 \u049b\u0430\u0439 \u0442\u0456\u043b\u0434\u0435 \u0431\u043e\u043b\u0441\u044b\u043d \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043b\u0435\u0440\u0434\u0456 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u0436\u04af\u043a\u0442\u0435\u04a3\u0456\u0437.",
|
||||||
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
"DashboardTourPlugins": "\u041f\u043b\u0430\u0433\u0438\u043d\u0434\u0435\u0440\u0434\u0456, \u043c\u044b\u0441\u0430\u043b\u044b, \u0431\u0435\u0439\u043d\u0435\u043b\u0456\u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0430\u0440\u043d\u0430\u043b\u0430\u0440\u044b\u043d, \u044d\u0444\u0438\u0440\u043b\u0456\u043a \u0442\u0434, \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u0441\u043a\u0430\u043d\u0435\u0440\u043b\u0435\u0440\u0456\u043d \u0436\u0456\u043d\u0435 \u0442.\u0431., \u043e\u0440\u043d\u0430\u0442\u044b\u04a3\u044b\u0437.",
|
||||||
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
"DashboardTourNotifications": "\u0421\u0435\u0440\u0432\u0435\u0440 \u043e\u049b\u0438\u0493\u0430\u043b\u0430\u0440\u044b \u0442\u0443\u0440\u0430\u043b\u044b \u0445\u0430\u0431\u0430\u0440\u043b\u0430\u043d\u0434\u044b\u0440\u0443\u043b\u0430\u0440\u0434\u044b \u04b1\u0442\u049b\u044b\u0440 \u0436\u0430\u0431\u0434\u044b\u0493\u044b\u04a3\u044b\u0437\u0493\u0430, \u044d-\u043f\u043e\u0448\u0442\u0430\u04a3\u044b\u0437\u0493\u0430 \u0436\u04d9\u043d\u0435 \u0442.\u0431.\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u0436\u0456\u0431\u0435\u0440\u0456\u04a3\u0456\u0437.",
|
||||||
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
"DashboardTourScheduledTasks": "\u0416\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u0430\u043d \u0442\u0430\u043f\u0441\u044b\u0440\u043c\u0430\u043b\u0430\u0440 \u0430\u0440\u049b\u044b\u043b\u044b \u04b1\u0437\u0430\u049b \u043e\u0440\u044b\u043d\u0434\u0430\u043b\u0430\u0442\u044b\u043d \u04d9\u0440\u0435\u043a\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u0436\u0435\u04a3\u0456\u043b \u0431\u0430\u0441\u049b\u0430\u0440\u044b\u04a3\u044b\u0437. \u0411\u04b1\u043b\u0430\u0440 \u049b\u0430\u0448\u0430\u043d \u0436\u04d9\u043d\u0435 \u049b\u0430\u043d\u0434\u0430\u0439 \u0436\u0438\u0456\u043b\u0456\u043a\u043f\u0435\u043d \u043e\u0440\u044b\u043d\u0434\u0430\u043b\u0430\u0442\u044b\u043d\u044b\u043d \u0448\u0435\u0448\u0456\u04a3\u0456\u0437.",
|
||||||
"DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere."
|
"DashboardTourMobile": "Media Browser \u0431\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0434\u0430\u0440\u0434\u0430 \u0436\u04d9\u043d\u0435 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0442\u0435\u0440\u0434\u0435 \u0442\u0430\u043c\u0430\u0448\u0430 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456. \u0421\u0435\u0440\u0432\u0435\u0440\u0456\u04a3\u0456\u0437\u0434\u0456 \u04d9\u0440 \u0443\u0430\u049b\u044b\u0442\u0442\u0430, \u04d9\u0440 \u0436\u0435\u0440\u0434\u0435 \u049b\u043e\u043b\u044b\u04a3\u044b\u0437\u0434\u044b\u04a3 \u0430\u043b\u0430\u049b\u0430\u043d\u044b\u043d\u0430\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u044b\u04a3\u044b\u0437."
|
||||||
}
|
}
|
@ -542,7 +542,7 @@
|
|||||||
"MediaInfoExternal": "Extern",
|
"MediaInfoExternal": "Extern",
|
||||||
"MediaInfoTimestamp": "Tijdstempel",
|
"MediaInfoTimestamp": "Tijdstempel",
|
||||||
"MediaInfoPixelFormat": "Pixel formaat",
|
"MediaInfoPixelFormat": "Pixel formaat",
|
||||||
"MediaInfoBitDepth": "Bit depth",
|
"MediaInfoBitDepth": "Bitdiepte",
|
||||||
"MediaInfoSampleRate": "Samplesnelheid",
|
"MediaInfoSampleRate": "Samplesnelheid",
|
||||||
"MediaInfoBitrate": "Bitrate",
|
"MediaInfoBitrate": "Bitrate",
|
||||||
"MediaInfoChannels": "Kanalen",
|
"MediaInfoChannels": "Kanalen",
|
||||||
@ -585,13 +585,13 @@
|
|||||||
"WebClientTourMobile1": "De web client werk perfect op smartphones en tablets...",
|
"WebClientTourMobile1": "De web client werk perfect op smartphones en tablets...",
|
||||||
"WebClientTourMobile2": "en kan elke andere Media Browser app bedienen",
|
"WebClientTourMobile2": "en kan elke andere Media Browser app bedienen",
|
||||||
"MessageEnjoyYourStay": "Geniet van uw verblijf",
|
"MessageEnjoyYourStay": "Geniet van uw verblijf",
|
||||||
"DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.",
|
"DashboardTourDashboard": "Het server-dashboard steld u in staat uw server en uw gebruikers te monitoren . U zult altijd weten wie wat doet en waar ze zijn.",
|
||||||
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
|
"DashboardTourUsers": "Maak gemakkelijk gebruikersaccounts voor uw vrienden en familie, elk met hun eigen machtigingen, bibliotheek toegang, ouderlijk toezicht en meer.",
|
||||||
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
"DashboardTourCinemaMode": "Cinema mode brengt de theater ervaring naar je woonkamer met de mogelijkheid om trailers en eigen intro's voor de film af te spelen",
|
||||||
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
|
"DashboardTourChapters": "Schakel hoofdstuk afbeeldingen genereren in voor uw video's voor een aantrekkelijker presentatie tijdens het kijken.",
|
||||||
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
|
"DashboardTourSubtitles": "Download automatisch ondertitels voor uw video's in een andere talen.",
|
||||||
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
"DashboardTourPlugins": "Installeer plugins zoals Internet videokanalen, live tv, metadata, scanners en meer.",
|
||||||
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
"DashboardTourNotifications": "Meldingen van de server gebeurtenissen automatisch verzenden naar uw mobiele apparaat, e-mail en meer.",
|
||||||
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
"DashboardTourScheduledTasks": "Beheer eenvoudig langlopende transacties met geplande taken. Beslis zelf wanneer ze worden uitgevoerd en hoe vaak.",
|
||||||
"DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere."
|
"DashboardTourMobile": "Het dashboard van Media Browser werkt geweldig op smartphones en tablets. Uw server beheren vanuit de palm van uw hand, overal en altijd."
|
||||||
}
|
}
|
@ -585,13 +585,13 @@
|
|||||||
"WebClientTourMobile1": "\u0412\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445...",
|
"WebClientTourMobile1": "\u0412\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445...",
|
||||||
"WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser",
|
"WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser",
|
||||||
"MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u044f\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f",
|
"MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u044f\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f",
|
||||||
"DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.",
|
"DashboardTourDashboard": "\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0412\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0442\u044c, \u043a\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u043c \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f.",
|
||||||
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
|
"DashboardTourUsers": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0447\u043b\u0435\u043d\u043e\u0432 \u0441\u0435\u043c\u044c\u0438, \u043a\u0430\u0436\u0434\u0443\u044e \u0441 \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u043c \u0438 \u0442.\u0434.",
|
||||||
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
"DashboardTourCinemaMode": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u043d\u043e\u0437\u0430\u043b\u0430 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0432 \u0432\u0430\u0448\u0443 \u0433\u043e\u0441\u0442\u0438\u043d\u0443\u044e, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.",
|
||||||
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
|
"DashboardTourChapters": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0441\u0446\u0435\u043d \u043a \u0432\u0438\u0434\u0435\u043e, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.",
|
||||||
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
|
"DashboardTourSubtitles": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0439\u0442\u0435 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435.",
|
||||||
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
"DashboardTourPlugins": "\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432\u0438\u0434\u0435\u043e, \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0442\u0432, \u0441\u043a\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0442.\u043f.",
|
||||||
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
"DashboardTourNotifications": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u043d\u0430 \u0432\u0430\u0448\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u044d-\u043f\u043e\u0447\u0442\u0443 \u0438 \u0442.\u043f.",
|
||||||
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
"DashboardTourScheduledTasks": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u043d\u0438\u0439. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f, \u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u043e.",
|
||||||
"DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere."
|
"DashboardTourMobile": "\u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u044c Media Browser \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0441 \u0432\u0430\u0448\u0435\u0439 \u043b\u0430\u0434\u043e\u043d\u0438 \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435."
|
||||||
}
|
}
|
@ -11,7 +11,7 @@
|
|||||||
"FileNotFound": "Kan inte hitta filen.",
|
"FileNotFound": "Kan inte hitta filen.",
|
||||||
"FileReadError": "Ett fel intr\u00e4ffade vid inl\u00e4sningen av filen.",
|
"FileReadError": "Ett fel intr\u00e4ffade vid inl\u00e4sningen av filen.",
|
||||||
"DeleteUser": "Ta bort anv\u00e4ndare",
|
"DeleteUser": "Ta bort anv\u00e4ndare",
|
||||||
"DeleteUserConfirmation": "Are you sure you wish to delete this user?",
|
"DeleteUserConfirmation": "\u00c4r du s\u00e4ker p\u00e5 att du vill radera denna anv\u00e4ndare?",
|
||||||
"PasswordResetHeader": "\u00c5terst\u00e4ll l\u00f6senordet",
|
"PasswordResetHeader": "\u00c5terst\u00e4ll l\u00f6senordet",
|
||||||
"PasswordResetComplete": "L\u00f6senordet har \u00e5terst\u00e4llts.",
|
"PasswordResetComplete": "L\u00f6senordet har \u00e5terst\u00e4llts.",
|
||||||
"PasswordResetConfirmation": "\u00c4r du s\u00e4ker p\u00e5 att du vill \u00e5terst\u00e4lla l\u00f6senordet?",
|
"PasswordResetConfirmation": "\u00c4r du s\u00e4ker p\u00e5 att du vill \u00e5terst\u00e4lla l\u00f6senordet?",
|
||||||
@ -58,14 +58,14 @@
|
|||||||
"ButtonMute": "Tyst",
|
"ButtonMute": "Tyst",
|
||||||
"ButtonUnmute": "Muting av",
|
"ButtonUnmute": "Muting av",
|
||||||
"ButtonStop": "Stopp",
|
"ButtonStop": "Stopp",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "N\u00e4sta sp\u00e5r",
|
||||||
"ButtonPause": "Paus",
|
"ButtonPause": "Paus",
|
||||||
"ButtonPlay": "Spela upp",
|
"ButtonPlay": "Spela upp",
|
||||||
"ButtonEdit": "\u00c4ndra",
|
"ButtonEdit": "\u00c4ndra",
|
||||||
"ButtonQueue": "K\u00f6",
|
"ButtonQueue": "K\u00f6",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Visa trailer",
|
||||||
"ButtonPlaylist": "Spellista",
|
"ButtonPlaylist": "Spellista",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "F\u00f6reg\u00e5ende sp\u00e5r",
|
||||||
"LabelEnabled": "Aktiverad",
|
"LabelEnabled": "Aktiverad",
|
||||||
"LabelDisabled": "Avaktiverad",
|
"LabelDisabled": "Avaktiverad",
|
||||||
"ButtonMoreInformation": "Mer information",
|
"ButtonMoreInformation": "Mer information",
|
||||||
@ -121,10 +121,10 @@
|
|||||||
"MessageConfirmItemGrouping": "Media Browser-klienter kommer automatiskt att v\u00e4lja den b\u00e4sta versionen f\u00f6r uppspelning baserat p\u00e5 enhets- och n\u00e4tverksprestanda.Vill du forts\u00e4tta?",
|
"MessageConfirmItemGrouping": "Media Browser-klienter kommer automatiskt att v\u00e4lja den b\u00e4sta versionen f\u00f6r uppspelning baserat p\u00e5 enhets- och n\u00e4tverksprestanda.Vill du forts\u00e4tta?",
|
||||||
"HeaderResume": "\u00c5teruppta",
|
"HeaderResume": "\u00c5teruppta",
|
||||||
"HeaderMyViews": "Mina vyer",
|
"HeaderMyViews": "Mina vyer",
|
||||||
"HeaderLibraryFolders": "Media Folders",
|
"HeaderLibraryFolders": "Mediamappar",
|
||||||
"HeaderLatestMedia": "Nytillkommet",
|
"HeaderLatestMedia": "Nytillkommet",
|
||||||
"ButtonMoreItems": "Mer...",
|
"ButtonMoreItems": "Mer...",
|
||||||
"ButtonMore": "More",
|
"ButtonMore": "Mer",
|
||||||
"HeaderFavoriteMovies": "Favoritfilmer",
|
"HeaderFavoriteMovies": "Favoritfilmer",
|
||||||
"HeaderFavoriteShows": "Favoritserier",
|
"HeaderFavoriteShows": "Favoritserier",
|
||||||
"HeaderFavoriteEpisodes": "Favoritavsnitt",
|
"HeaderFavoriteEpisodes": "Favoritavsnitt",
|
||||||
@ -136,7 +136,7 @@
|
|||||||
"HeaderSelectTranscodingPath": "V\u00e4lj plats f\u00f6r mellanlagring vid omkodning",
|
"HeaderSelectTranscodingPath": "V\u00e4lj plats f\u00f6r mellanlagring vid omkodning",
|
||||||
"HeaderSelectImagesByNamePath": "V\u00e4lj plats f\u00f6r ImagesByName",
|
"HeaderSelectImagesByNamePath": "V\u00e4lj plats f\u00f6r ImagesByName",
|
||||||
"HeaderSelectMetadataPath": "V\u00e4lj plats f\u00f6r metadatalagring",
|
"HeaderSelectMetadataPath": "V\u00e4lj plats f\u00f6r metadatalagring",
|
||||||
"HeaderSelectServerCachePathHelp": "Browse or enter the path to use for server cache files. The folder must be writeable.",
|
"HeaderSelectServerCachePathHelp": "Bl\u00e4ddra fram till eller ange plats f\u00f6r serverns cache. Katalogen m\u00e5ste vara tillg\u00e4nglig f\u00f6r skrivning.",
|
||||||
"HeaderSelectTranscodingPathHelp": "Bl\u00e4ddra fram till eller ange plats f\u00f6r omkodarens mellanlagring. Katalogen m\u00e5ste vara tillg\u00e4nglig f\u00f6r skrivning.",
|
"HeaderSelectTranscodingPathHelp": "Bl\u00e4ddra fram till eller ange plats f\u00f6r omkodarens mellanlagring. Katalogen m\u00e5ste vara tillg\u00e4nglig f\u00f6r skrivning.",
|
||||||
"HeaderSelectImagesByNamePathHelp": "Bl\u00e4ddra fram till eller ange plats f\u00f6r ImagesByName-mappen. Katalogen m\u00e5ste vara tillg\u00e4nglig f\u00f6r skrivning.",
|
"HeaderSelectImagesByNamePathHelp": "Bl\u00e4ddra fram till eller ange plats f\u00f6r ImagesByName-mappen. Katalogen m\u00e5ste vara tillg\u00e4nglig f\u00f6r skrivning.",
|
||||||
"HeaderSelectMetadataPathHelp": "Bl\u00e4ddra fram till eller ange plats f\u00f6r lagring av metadata. Katalogen m\u00e5ste vara tillg\u00e4nglig f\u00f6r skrivning.",
|
"HeaderSelectMetadataPathHelp": "Bl\u00e4ddra fram till eller ange plats f\u00f6r lagring av metadata. Katalogen m\u00e5ste vara tillg\u00e4nglig f\u00f6r skrivning.",
|
||||||
@ -319,7 +319,7 @@
|
|||||||
"HeaderSelectPlayer": "V\u00e4lj uppspelare:",
|
"HeaderSelectPlayer": "V\u00e4lj uppspelare:",
|
||||||
"ButtonSelect": "V\u00e4lj",
|
"ButtonSelect": "V\u00e4lj",
|
||||||
"ButtonNew": "Nytillkommet",
|
"ButtonNew": "Nytillkommet",
|
||||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
"MessageInternetExplorerWebm": "F\u00f6r b\u00e4sta resultat med Internet Explorer, installera uppspelningstill\u00e4gget WebM.",
|
||||||
"HeaderVideoError": "Videofel",
|
"HeaderVideoError": "Videofel",
|
||||||
"ButtonAddToPlaylist": "L\u00e4gg till i spellista",
|
"ButtonAddToPlaylist": "L\u00e4gg till i spellista",
|
||||||
"HeaderAddToPlaylist": "L\u00e4gg till i Spellista",
|
"HeaderAddToPlaylist": "L\u00e4gg till i Spellista",
|
||||||
@ -585,13 +585,13 @@
|
|||||||
"WebClientTourMobile1": "Webbklienten fungerar perfekt p\u00e5 smarta telefoner och surfplattor...",
|
"WebClientTourMobile1": "Webbklienten fungerar perfekt p\u00e5 smarta telefoner och surfplattor...",
|
||||||
"WebClientTourMobile2": "och kan enkelt fj\u00e4rrstyra andra enheter och Media Browser-appar",
|
"WebClientTourMobile2": "och kan enkelt fj\u00e4rrstyra andra enheter och Media Browser-appar",
|
||||||
"MessageEnjoyYourStay": "Ha ett trevligt bes\u00f6k",
|
"MessageEnjoyYourStay": "Ha ett trevligt bes\u00f6k",
|
||||||
"DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.",
|
"DashboardTourDashboard": "Via serverns kontrollpanel kan du \u00f6vervaka din server och alla anv\u00e4ndare. Du kommer alltid att kunna veta vem som g\u00f6r vad och var de \u00e4r.",
|
||||||
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
|
"DashboardTourUsers": "Skapa enkelt anv\u00e4ndarkonton f\u00f6r dina v\u00e4nner och familj, alla med sina egna beh\u00f6righeter, biblioteks \u00e5tkomst, f\u00f6r\u00e4ldrakontroll och mycket mer.",
|
||||||
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
"DashboardTourCinemaMode": "Biol\u00e4get g\u00f6r ditt vardagsrum till en biograf genom m\u00f6jligheten att visa trailers och egna vinjetter innan filmen b\u00f6rjar.",
|
||||||
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
|
"DashboardTourChapters": "Ta fram kapitelbildrutor fr\u00e5n videofiler f\u00f6r att f\u00e5 en snyggare presentation.",
|
||||||
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
|
"DashboardTourSubtitles": "H\u00e4mta automatiskt undertexter f\u00f6r dina videor p\u00e5 alla spr\u00e5k.",
|
||||||
"DashboardTourPlugins": "Install plugins such as internet video channels, live tv, metadata scanners, and more.",
|
"DashboardTourPlugins": "Installera till\u00e4gg s\u00e5som Internetvideokanaler, live-TV, metadatah\u00e4mtare och mycket mer.",
|
||||||
"DashboardTourNotifications": "Automatically send notifications of server events to your mobile device, email and more.",
|
"DashboardTourNotifications": "Skicka automatiskt meddelanden om serverh\u00e4ndelser till din mobiltelefon, e-post och mycket mer.",
|
||||||
"DashboardTourScheduledTasks": "Easily manage long running operations with scheduled tasks. Decide when they run, and how often.",
|
"DashboardTourScheduledTasks": "Hantera enkelt tidskr\u00e4vande uppgifter med hj\u00e4lp av schemalagda aktiviteter. Best\u00e4m n\u00e4r de skall k\u00f6ras, och hur ofta.",
|
||||||
"DashboardTourMobile": "The Media Browser dashboard works great on smartphones and tablets. Manage your server from the palm of your hand anytime, anywhere."
|
"DashboardTourMobile": "Media Browsers kontrollpanel fungerar utm\u00e4rkt p\u00e5 smarta telefoner och surfplattor. Administrera din server n\u00e4r som helst, varifr\u00e5n som helst."
|
||||||
}
|
}
|
@ -384,7 +384,7 @@
|
|||||||
"TabAdvanced": "Erweitert",
|
"TabAdvanced": "Erweitert",
|
||||||
"HeaderCinemaMode": "Kino-Modus",
|
"HeaderCinemaMode": "Kino-Modus",
|
||||||
"HeaderStatus": "Status",
|
"HeaderStatus": "Status",
|
||||||
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
"HeaderWelcomeToMediaBrowserServerDashboard": "Willkommen zur Media Browser \u00dcbersicht",
|
||||||
"OptionContinuing": "Fortdauernd",
|
"OptionContinuing": "Fortdauernd",
|
||||||
"OptionEnded": "Beendent",
|
"OptionEnded": "Beendent",
|
||||||
"HeaderAirDays": "Ausstrahlungstage",
|
"HeaderAirDays": "Ausstrahlungstage",
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
"UserCreatedWithName": "Se ha creado el usuario {0}",
|
"UserCreatedWithName": "Se ha creado el usuario {0}",
|
||||||
"LabelYourFirstName": "Su nombre:",
|
"LabelYourFirstName": "Su nombre:",
|
||||||
"UserPasswordChangedWithName": "Se ha cambiado la contrase\u00f1a para el usuario {0}",
|
"UserPasswordChangedWithName": "Se ha cambiado la contrase\u00f1a para el usuario {0}",
|
||||||
"MoreUsersCanBeAddedLater": "Se pueden agregar m\u00e1s usuarios posteriormente en el panel de control.",
|
"MoreUsersCanBeAddedLater": "Se pueden agregar m\u00e1s usuarios posteriormente en el Panel de Control.",
|
||||||
"UserDeletedWithName": "Se ha eliminado al usuario {0}",
|
"UserDeletedWithName": "Se ha eliminado al usuario {0}",
|
||||||
"UserProfilesIntro": "Media Browser incluye soporte integrado para perfiles de usuario, permiti\u00e9ndo a cada usuario tener su propia configuraci\u00f3n de pantalla, estado de reproducci\u00f3n y controles parentales.",
|
"UserProfilesIntro": "Media Browser incluye soporte integrado para perfiles de usuario, permiti\u00e9ndo a cada usuario tener su propia configuraci\u00f3n de pantalla, estado de reproducci\u00f3n y controles parentales.",
|
||||||
"MessageServerConfigurationUpdated": "Se ha actualizado la configuraci\u00f3n del servidor",
|
"MessageServerConfigurationUpdated": "Se ha actualizado la configuraci\u00f3n del servidor",
|
||||||
@ -51,7 +51,7 @@
|
|||||||
"AuthenticationSucceededWithUserName": "{0} autenticado con \u00e9xito",
|
"AuthenticationSucceededWithUserName": "{0} autenticado con \u00e9xito",
|
||||||
"WindowsServiceIntro2": "Si utiliza el servicio de Windows, tenga en cuenta que no se puede ejecutar simult\u00e1neamiente con el icono en el \u00e1rea de notificaci\u00f3n, por lo que tendr\u00e1 que finalizar desde el icono para poder ejecutar el servicio. Adicionalmente, el servicio deber\u00e1 ser configurado con privilegios administrativos a trav\u00e9s del panel de control del servicio. Tenga en cuenta que en este momento el servicio no es capaz de actualizarse a s\u00ed mismo, por lo que las nuevas versiones requerir\u00e1n de interacci\u00f3n manual.",
|
"WindowsServiceIntro2": "Si utiliza el servicio de Windows, tenga en cuenta que no se puede ejecutar simult\u00e1neamiente con el icono en el \u00e1rea de notificaci\u00f3n, por lo que tendr\u00e1 que finalizar desde el icono para poder ejecutar el servicio. Adicionalmente, el servicio deber\u00e1 ser configurado con privilegios administrativos a trav\u00e9s del panel de control del servicio. Tenga en cuenta que en este momento el servicio no es capaz de actualizarse a s\u00ed mismo, por lo que las nuevas versiones requerir\u00e1n de interacci\u00f3n manual.",
|
||||||
"FailedLoginAttemptWithUserName": "Intento fallido de inicio de sesi\u00f3n de {0}",
|
"FailedLoginAttemptWithUserName": "Intento fallido de inicio de sesi\u00f3n de {0}",
|
||||||
"WizardCompleted": "Eso es todo lo que necesitamos por ahora. Media Browser ha comenzado a recolectar informaci\u00f3n sobre su biblioteca de medios. Eche un vistazo a algunas de nuestras aplicaciones, y luego haga clic en <b>Finalizar<\/b> para ver el <b>Panel de Control<\/b>.",
|
"WizardCompleted": "\u00baEso es todo lo que necesitamos por ahora. Media Browser ha comenzado a recolectar informaci\u00f3n sobre su biblioteca de medios. Eche un vistazo a algunas de nuestras aplicaciones, y luego haga clic en <b>Finalizar<\/b> para ver el <b>Panel de Control<\/b>.",
|
||||||
"UserStartedPlayingItemWithValues": "{0} ha iniciado la reproducci\u00f3n de {1}",
|
"UserStartedPlayingItemWithValues": "{0} ha iniciado la reproducci\u00f3n de {1}",
|
||||||
"LabelConfigureSettings": "Configuraci\u00f3n de opciones",
|
"LabelConfigureSettings": "Configuraci\u00f3n de opciones",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} ha detenido la reproducci\u00f3n de {1}",
|
"UserStoppedPlayingItemWithValues": "{0} ha detenido la reproducci\u00f3n de {1}",
|
||||||
@ -294,7 +294,7 @@
|
|||||||
"OptionBackdrop": "Imagen de Fondo",
|
"OptionBackdrop": "Imagen de Fondo",
|
||||||
"LabelExtractChaptersDuringLibraryScan": "Extraer im\u00e1genes de cap\u00edtulos durante el escaneo de la biblioteca",
|
"LabelExtractChaptersDuringLibraryScan": "Extraer im\u00e1genes de cap\u00edtulos durante el escaneo de la biblioteca",
|
||||||
"OptionTimeline": "L\u00ednea de Tiempo",
|
"OptionTimeline": "L\u00ednea de Tiempo",
|
||||||
"LabelExtractChaptersDuringLibraryScanHelp": "Si se habilita, las im\u00e1genes de cap\u00edtulos ser\u00e1n extra\u00eddas cuando los videos sean importados durante el escaneo de la biblioteca. Si se deshabilita, ser\u00e1n extra\u00eddas durante la ejecuci\u00f3n de la tarea programada de extracci\u00f3n de im\u00e1genes de cap\u00edtulos, permiti\u00e9ndo que el escaneo normal de la biblioteca se complete m\u00e1s r\u00e1pidamente.",
|
"LabelExtractChaptersDuringLibraryScanHelp": "Si se activa, las im\u00e1genes de cap\u00edtulos ser\u00e1n extra\u00eddas cuando los videos sean importados durante el escaneo de la biblioteca. Si se deshabilita, ser\u00e1n extra\u00eddas durante la ejecuci\u00f3n de la tarea programada de extracci\u00f3n de im\u00e1genes de cap\u00edtulos, permiti\u00e9ndo que el escaneo normal de la biblioteca se complete m\u00e1s r\u00e1pidamente.",
|
||||||
"OptionThumb": "Miniatura",
|
"OptionThumb": "Miniatura",
|
||||||
"LabelConnectUserName": "Nombre de Usuario\/email de Media Browser:",
|
"LabelConnectUserName": "Nombre de Usuario\/email de Media Browser:",
|
||||||
"OptionBanner": "T\u00edtulo",
|
"OptionBanner": "T\u00edtulo",
|
||||||
@ -378,13 +378,13 @@
|
|||||||
"OptionParentalRating": "Clasificaci\u00f3n Parental",
|
"OptionParentalRating": "Clasificaci\u00f3n Parental",
|
||||||
"LabelDisplayTrailersWithinMovieSuggestionsHelp": "Requiere la instalaci\u00f3n del canal de avances.",
|
"LabelDisplayTrailersWithinMovieSuggestionsHelp": "Requiere la instalaci\u00f3n del canal de avances.",
|
||||||
"OptionPremiereDate": "Fecha de Estreno",
|
"OptionPremiereDate": "Fecha de Estreno",
|
||||||
"CinemaModeConfigurationHelp2": "Individual users will have the ability to disable cinema mode within their own preferences.",
|
"CinemaModeConfigurationHelp2": "Los usuarios individuales podr\u00e1n desactivar el modo cine desde sus preferencias personales.",
|
||||||
"TabBasic": "B\u00e1sico",
|
"TabBasic": "B\u00e1sico",
|
||||||
"LabelEnableCinemaMode": "Enable cinema mode",
|
"LabelEnableCinemaMode": "Activar modo cine",
|
||||||
"TabAdvanced": "Avanzado",
|
"TabAdvanced": "Avanzado",
|
||||||
"HeaderCinemaMode": "Cinema Mode",
|
"HeaderCinemaMode": "Modo cine",
|
||||||
"HeaderStatus": "Estado",
|
"HeaderStatus": "Estado",
|
||||||
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
"HeaderWelcomeToMediaBrowserServerDashboard": "Bienvenido al Panel de Control de Media Browser",
|
||||||
"OptionContinuing": "Continuando",
|
"OptionContinuing": "Continuando",
|
||||||
"OptionEnded": "Finalizado",
|
"OptionEnded": "Finalizado",
|
||||||
"HeaderAirDays": "D\u00edas de Emisi\u00f3n",
|
"HeaderAirDays": "D\u00edas de Emisi\u00f3n",
|
||||||
@ -414,8 +414,8 @@
|
|||||||
"VisitMediaBrowserWebsite": "Visitar el Sitio Web de Media Browser",
|
"VisitMediaBrowserWebsite": "Visitar el Sitio Web de Media Browser",
|
||||||
"VisitMediaBrowserWebsiteLong": "Visite el Sitio Web de Media Browser para estar conocer las \u00faltimas not\u00edcias y mantenerse al d\u00eda con el blog de los desarrolladores.",
|
"VisitMediaBrowserWebsiteLong": "Visite el Sitio Web de Media Browser para estar conocer las \u00faltimas not\u00edcias y mantenerse al d\u00eda con el blog de los desarrolladores.",
|
||||||
"OptionHideUser": "Ocultar este usuario en las pantallas de inicio de sesi\u00f3n",
|
"OptionHideUser": "Ocultar este usuario en las pantallas de inicio de sesi\u00f3n",
|
||||||
"OptionDisableUser": "Deshabilitar este usuario",
|
"OptionDisableUser": "Desactivar este usuario",
|
||||||
"OptionDisableUserHelp": "Si est\u00e1 deshabilitado, el servidor no aceptar\u00e1 conexiones de este usuario. Las conexiones existentes ser\u00e1n finalizadas abruptamente.",
|
"OptionDisableUserHelp": "Si est\u00e1 desactivado, el servidor no aceptar\u00e1 conexiones de este usuario. Las conexiones existentes ser\u00e1n finalizadas abruptamente.",
|
||||||
"HeaderAdvancedControl": "Control Avanzado",
|
"HeaderAdvancedControl": "Control Avanzado",
|
||||||
"LabelName": "Nombre:",
|
"LabelName": "Nombre:",
|
||||||
"OptionAllowUserToManageServer": "Permitir a este usuario administrar el servidor",
|
"OptionAllowUserToManageServer": "Permitir a este usuario administrar el servidor",
|
||||||
@ -769,7 +769,7 @@
|
|||||||
"OptionCelsius": "Cent\u00edgrados",
|
"OptionCelsius": "Cent\u00edgrados",
|
||||||
"OptionFahrenheit": "Fahrenheit",
|
"OptionFahrenheit": "Fahrenheit",
|
||||||
"HeaderRequireManualLogin": "Requerir captura de nombre de usuario manual para:",
|
"HeaderRequireManualLogin": "Requerir captura de nombre de usuario manual para:",
|
||||||
"HeaderRequireManualLoginHelp": "Cuando se encuentra deshabilitado los clientes podr\u00edan mostrar una pantalla de inicio de sesi\u00f3n con una selecci\u00f3n visual de los usuarios.",
|
"HeaderRequireManualLoginHelp": "Cuando se encuentra desactivado los clientes podr\u00edan mostrar una pantalla de inicio de sesi\u00f3n con una selecci\u00f3n visual de los usuarios.",
|
||||||
"OptionOtherApps": "Otras applicaciones",
|
"OptionOtherApps": "Otras applicaciones",
|
||||||
"OptionMobileApps": "Apps m\u00f3viles",
|
"OptionMobileApps": "Apps m\u00f3viles",
|
||||||
"HeaderNotificationList": "Haga clic en una notificaci\u00f3n para configurar sus opciones de envio.",
|
"HeaderNotificationList": "Haga clic en una notificaci\u00f3n para configurar sus opciones de envio.",
|
||||||
@ -1068,7 +1068,7 @@
|
|||||||
"LabelProtocolInfo": "Informaci\u00f3n del protocolo:",
|
"LabelProtocolInfo": "Informaci\u00f3n del protocolo:",
|
||||||
"LabelProtocolInfoHelp": "El valor que ser\u00e1 utilizado cuando se responde a solicitudes GetProtocolInfo desde el dispositivo.",
|
"LabelProtocolInfoHelp": "El valor que ser\u00e1 utilizado cuando se responde a solicitudes GetProtocolInfo desde el dispositivo.",
|
||||||
"TabKodiMetadata": "Kodi",
|
"TabKodiMetadata": "Kodi",
|
||||||
"HeaderKodiMetadataHelp": "Media Browser incluye soporte nativo para metadados NFO e im\u00e1genes de Kodi. Para habilitar o deshabilitar metadatos de Kodi, utilice la pesta\u00f1a Avanzado para configurar opciones para sus tipos de medios.",
|
"HeaderKodiMetadataHelp": "Media Browser incluye soporte nativo para metadados NFO e im\u00e1genes de Kodi. Para activar o desactivar metadatos de Kodi, utilice la pesta\u00f1a Avanzado para configurar opciones para sus tipos de medios.",
|
||||||
"LabelKodiMetadataUser": "A\u00f1adir usuario para monitoreo de datos de nfo\u00b4s para:",
|
"LabelKodiMetadataUser": "A\u00f1adir usuario para monitoreo de datos de nfo\u00b4s para:",
|
||||||
"LabelKodiMetadataUserHelp": "Habilitar esto para mantener monitoreo de datos en sincron\u00eda entre Media Browser y Kodi.",
|
"LabelKodiMetadataUserHelp": "Habilitar esto para mantener monitoreo de datos en sincron\u00eda entre Media Browser y Kodi.",
|
||||||
"LabelKodiMetadataDateFormat": "Formato de fecha de estreno:",
|
"LabelKodiMetadataDateFormat": "Formato de fecha de estreno:",
|
||||||
@ -1079,7 +1079,7 @@
|
|||||||
"LabelKodiMetadataEnablePathSubstitutionHelp": "Habilita la sustituci\u00f3n de trayectorias de im\u00e1genes usando la configuraci\u00f3n de sustituci\u00f3n de trayectorias del servidor.",
|
"LabelKodiMetadataEnablePathSubstitutionHelp": "Habilita la sustituci\u00f3n de trayectorias de im\u00e1genes usando la configuraci\u00f3n de sustituci\u00f3n de trayectorias del servidor.",
|
||||||
"LabelKodiMetadataEnablePathSubstitutionHelp2": "Ver sustituci\u00f3n de trayectoras.",
|
"LabelKodiMetadataEnablePathSubstitutionHelp2": "Ver sustituci\u00f3n de trayectoras.",
|
||||||
"LabelGroupChannelsIntoViews": "Desplegar los siguientes canales directamente en mis vistas:",
|
"LabelGroupChannelsIntoViews": "Desplegar los siguientes canales directamente en mis vistas:",
|
||||||
"LabelGroupChannelsIntoViewsHelp": "Al habilitarse, estos canales ser\u00e1n desplegados directamente junto con otras vistas. Si permanecen deshabilitados, ser\u00e1n desplegados dentro de una vista independiente de Canales.",
|
"LabelGroupChannelsIntoViewsHelp": "Al activarse, estos canales ser\u00e1n desplegados directamente junto con otras vistas. Si permanecen deshabilitados, ser\u00e1n desplegados dentro de una vista independiente de Canales.",
|
||||||
"LabelDisplayCollectionsView": "Desplegar una vista de colecciones para mostrar las colecciones de pel\u00edculas",
|
"LabelDisplayCollectionsView": "Desplegar una vista de colecciones para mostrar las colecciones de pel\u00edculas",
|
||||||
"LabelKodiMetadataEnableExtraThumbs": "Copiar extrafanart en extrathumbs",
|
"LabelKodiMetadataEnableExtraThumbs": "Copiar extrafanart en extrathumbs",
|
||||||
"LabelKodiMetadataEnableExtraThumbsHelp": "Cuando se descargan im\u00e1genes pueden ser almacenadas tanto en extrafanart como extrathumb para maximizar la compatibilidad con skins de Kodi.",
|
"LabelKodiMetadataEnableExtraThumbsHelp": "Cuando se descargan im\u00e1genes pueden ser almacenadas tanto en extrafanart como extrathumb para maximizar la compatibilidad con skins de Kodi.",
|
||||||
|
@ -380,9 +380,9 @@
|
|||||||
"OptionPremiereDate": "Date de la premi\u00e8re",
|
"OptionPremiereDate": "Date de la premi\u00e8re",
|
||||||
"CinemaModeConfigurationHelp2": "Individual users will have the ability to disable cinema mode within their own preferences.",
|
"CinemaModeConfigurationHelp2": "Individual users will have the ability to disable cinema mode within their own preferences.",
|
||||||
"TabBasic": "Standard",
|
"TabBasic": "Standard",
|
||||||
"LabelEnableCinemaMode": "Enable cinema mode",
|
"LabelEnableCinemaMode": "Activer le mode cin\u00e9ma",
|
||||||
"TabAdvanced": "Avanc\u00e9",
|
"TabAdvanced": "Avanc\u00e9",
|
||||||
"HeaderCinemaMode": "Cinema Mode",
|
"HeaderCinemaMode": "Mode cin\u00e9ma",
|
||||||
"HeaderStatus": "\u00c9tat",
|
"HeaderStatus": "\u00c9tat",
|
||||||
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
||||||
"OptionContinuing": "En continuation",
|
"OptionContinuing": "En continuation",
|
||||||
|
@ -755,10 +755,10 @@
|
|||||||
"LabelEnableDlnaServer": "Omogu\u0107i Dlna server",
|
"LabelEnableDlnaServer": "Omogu\u0107i Dlna server",
|
||||||
"LabelEnableDlnaServerHelp": "Omogu\u0107i svojim UPnP ure\u0111ajima na mre\u017ei da pretra\u017euji i reproduciraju Media Browser sadr\u017eaj.",
|
"LabelEnableDlnaServerHelp": "Omogu\u0107i svojim UPnP ure\u0111ajima na mre\u017ei da pretra\u017euji i reproduciraju Media Browser sadr\u017eaj.",
|
||||||
"LabelEnableBlastAliveMessages": "Objavi poruke dostupnosti",
|
"LabelEnableBlastAliveMessages": "Objavi poruke dostupnosti",
|
||||||
"LabelEnableBlastAliveMessagesHelp": "Enable this if the server is not detected reliably by other UPnP devices on your network.",
|
"LabelEnableBlastAliveMessagesHelp": "Omogu\u0107i ovo ako server nije prikazan kao siguran za druge UPnP ure\u0111aje na mre\u017ei.",
|
||||||
"LabelBlastMessageInterval": "Alive message interval (seconds)",
|
"LabelBlastMessageInterval": "Interval poruka dostupnosti (sekunde)",
|
||||||
"LabelBlastMessageIntervalHelp": "Determines the duration in seconds between server alive messages.",
|
"LabelBlastMessageIntervalHelp": "Odre\u0111uje trajanje u sekundama izme\u0111u svake poruke dostupnosti servera.",
|
||||||
"LabelDefaultUser": "Default user:",
|
"LabelDefaultUser": "Zadani korisnik:",
|
||||||
"LabelDefaultUserHelp": "Determines which user library should be displayed on connected devices. This can be overridden for each device using profiles.",
|
"LabelDefaultUserHelp": "Determines which user library should be displayed on connected devices. This can be overridden for each device using profiles.",
|
||||||
"TitleDlna": "DLNA",
|
"TitleDlna": "DLNA",
|
||||||
"TitleChannels": "Channels",
|
"TitleChannels": "Channels",
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
"SubtitlesDownloadedForItem": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u043b\u0435\u0440 {0} \u04af\u0448\u0456\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u044b\u043d\u0434\u044b",
|
"SubtitlesDownloadedForItem": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u043b\u0435\u0440 {0} \u04af\u0448\u0456\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u044b\u043d\u0434\u044b",
|
||||||
"LabelYoureDone": "\u0411\u04d9\u0440\u0456 \u0434\u0430\u0439\u044b\u043d!",
|
"LabelYoureDone": "\u0411\u04d9\u0440\u0456 \u0434\u0430\u0439\u044b\u043d!",
|
||||||
"SubtitleDownloadFailureForItem": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u043b\u0435\u0440 {0} \u04af\u0448\u0456\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u044b\u043d\u0443\u044b \u0441\u04d9\u0442\u0441\u0456\u0437",
|
"SubtitleDownloadFailureForItem": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u043b\u0435\u0440 {0} \u04af\u0448\u0456\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u044b\u043d\u0443\u044b \u0441\u04d9\u0442\u0441\u0456\u0437",
|
||||||
"WelcomeToMediaBrowser": "Media Browser-\u0433\u0435 \u049b\u043e\u0448 \u043a\u0435\u043b\u0434\u0456\u04a3\u0456\u0437!",
|
"WelcomeToMediaBrowser": "Media Browser \u0431\u0430\u0493\u0434\u0430\u0440\u043b\u0430\u043c\u0430\u0441\u044b\u043d\u0430 \u049b\u043e\u0448 \u043a\u0435\u043b\u0434\u0456\u04a3\u0456\u0437!",
|
||||||
"LabelRunningTimeValue": "\u0406\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u043b\u0443 \u0443\u0430\u049b\u044b\u0442\u044b: {0}",
|
"LabelRunningTimeValue": "\u0406\u0441\u043a\u0435 \u049b\u043e\u0441\u044b\u043b\u0443 \u0443\u0430\u049b\u044b\u0442\u044b: {0}",
|
||||||
"TitleMediaBrowser": "Media Browser",
|
"TitleMediaBrowser": "Media Browser",
|
||||||
"LabelIpAddressValue": "IP \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b: {0}",
|
"LabelIpAddressValue": "IP \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b: {0}",
|
||||||
@ -384,7 +384,7 @@
|
|||||||
"TabAdvanced": "\u049a\u043e\u0441\u044b\u043c\u0448\u0430",
|
"TabAdvanced": "\u049a\u043e\u0441\u044b\u043c\u0448\u0430",
|
||||||
"HeaderCinemaMode": "\u041a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440 \u0440\u0435\u0436\u0456\u043c\u0456",
|
"HeaderCinemaMode": "\u041a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440 \u0440\u0435\u0436\u0456\u043c\u0456",
|
||||||
"HeaderStatus": "\u041a\u04af\u0439",
|
"HeaderStatus": "\u041a\u04af\u0439",
|
||||||
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
"HeaderWelcomeToMediaBrowserServerDashboard": "Media Browser \u0431\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d\u0430 \u049b\u043e\u0448 \u043a\u0435\u043b\u0434\u0456\u04a3\u0456\u0437!",
|
||||||
"OptionContinuing": "\u0416\u0430\u043b\u0493\u0430\u0441\u0443\u0434\u0430",
|
"OptionContinuing": "\u0416\u0430\u043b\u0493\u0430\u0441\u0443\u0434\u0430",
|
||||||
"OptionEnded": "\u0410\u044f\u049b\u0442\u0430\u043b\u0434\u044b",
|
"OptionEnded": "\u0410\u044f\u049b\u0442\u0430\u043b\u0434\u044b",
|
||||||
"HeaderAirDays": "\u042d\u0444\u0438\u0440 \u043a\u04af\u043d\u0434\u0435\u0440\u0456",
|
"HeaderAirDays": "\u042d\u0444\u0438\u0440 \u043a\u04af\u043d\u0434\u0435\u0440\u0456",
|
||||||
@ -1007,7 +1007,7 @@
|
|||||||
"MessageNoCollectionsAvailable": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440\u0434\u0456, \u0441\u0435\u0440\u0438\u0430\u043b\u0434\u0430\u0440\u0434\u044b, \u0430\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440\u0434\u044b, \u043a\u0456\u0442\u0430\u043f\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 \u043e\u0439\u044b\u043d\u0434\u0430\u0440\u0434\u044b \u0436\u0435\u043a\u0435\u043b\u0435\u043d\u0433\u0435\u043d \u0442\u043e\u043f\u0442\u0430\u0441\u0442\u044b\u0440\u0443 \u04af\u0448\u0456\u043d \u0436\u0438\u044b\u043d\u0442\u044b\u049b\u0442\u0430\u0440 \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u043a \u0431\u0435\u0440\u0435\u0434\u0456. \u0416\u0438\u044b\u043d\u0442\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0436\u0430\u0441\u0430\u0439 \u0431\u0430\u0441\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \"\u0416\u0430\u0441\u0430\u0443\" \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u0433\u0456\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.",
|
"MessageNoCollectionsAvailable": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440\u0434\u0456, \u0441\u0435\u0440\u0438\u0430\u043b\u0434\u0430\u0440\u0434\u044b, \u0430\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440\u0434\u044b, \u043a\u0456\u0442\u0430\u043f\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 \u043e\u0439\u044b\u043d\u0434\u0430\u0440\u0434\u044b \u0436\u0435\u043a\u0435\u043b\u0435\u043d\u0433\u0435\u043d \u0442\u043e\u043f\u0442\u0430\u0441\u0442\u044b\u0440\u0443 \u04af\u0448\u0456\u043d \u0436\u0438\u044b\u043d\u0442\u044b\u049b\u0442\u0430\u0440 \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u043a \u0431\u0435\u0440\u0435\u0434\u0456. \u0416\u0438\u044b\u043d\u0442\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0436\u0430\u0441\u0430\u0439 \u0431\u0430\u0441\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \"\u0416\u0430\u0441\u0430\u0443\" \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u0433\u0456\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.",
|
||||||
"MessageNoPlaylistsAvailable": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0456 \u0431\u0456\u0440 \u043a\u0435\u0437\u0434\u0435 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043c\u0430\u0437\u043c\u04b1\u043d \u0442\u0456\u0437\u0456\u043c\u0456\u043d \u0436\u0430\u0441\u0430\u0443\u0493\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0433\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0434\u0456 \u04af\u0441\u0442\u0435\u0443 \u04af\u0448\u0456\u043d, \u0442\u0456\u043d\u0442\u0443\u0456\u0440\u0434\u0456\u04a3 \u043e\u04a3 \u0436\u0430\u049b \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u0433\u0456\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0442\u04af\u0440\u0442\u0456\u043f \u0436\u04d9\u043d\u0435 \u04b1\u0441\u0442\u0430\u043f \u0442\u04b1\u0440\u044b\u04a3\u044b\u0437, \u0441\u043e\u043d\u0434\u0430 \u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d\u0435 \u04af\u0441\u0442\u0435\u0443 \u0434\u0435\u0433\u0435\u043d\u0434\u0456 \u0442\u0430\u04a3\u0434\u0430\u04a3\u044b\u0437.",
|
"MessageNoPlaylistsAvailable": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0456 \u0431\u0456\u0440 \u043a\u0435\u0437\u0434\u0435 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043c\u0430\u0437\u043c\u04b1\u043d \u0442\u0456\u0437\u0456\u043c\u0456\u043d \u0436\u0430\u0441\u0430\u0443\u0493\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0433\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0434\u0456 \u04af\u0441\u0442\u0435\u0443 \u04af\u0448\u0456\u043d, \u0442\u0456\u043d\u0442\u0443\u0456\u0440\u0434\u0456\u04a3 \u043e\u04a3 \u0436\u0430\u049b \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u0433\u0456\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0442\u04af\u0440\u0442\u0456\u043f \u0436\u04d9\u043d\u0435 \u04b1\u0441\u0442\u0430\u043f \u0442\u04b1\u0440\u044b\u04a3\u044b\u0437, \u0441\u043e\u043d\u0434\u0430 \u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d\u0435 \u04af\u0441\u0442\u0435\u0443 \u0434\u0435\u0433\u0435\u043d\u0434\u0456 \u0442\u0430\u04a3\u0434\u0430\u04a3\u044b\u0437.",
|
||||||
"MessageNoPlaylistItemsAvailable": "\u041e\u0441\u044b \u043e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c \u0430\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0431\u043e\u0441.",
|
"MessageNoPlaylistItemsAvailable": "\u041e\u0441\u044b \u043e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c \u0430\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0431\u043e\u0441.",
|
||||||
"HeaderWelcomeToMediaBrowserWebClient": "Media Browser \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0430\u0493\u0434\u0430\u0440\u043b\u0430\u043c\u0430\u0441\u044b\u043d\u0430 \u0445\u043e\u0448 \u043a\u0435\u043b\u0434\u0456\u04a3\u0456\u0437!",
|
"HeaderWelcomeToMediaBrowserWebClient": "Media Browser \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442\u0456\u043d\u0435 \u049b\u043e\u0448 \u043a\u0435\u043b\u0434\u0456\u04a3\u0456\u0437!",
|
||||||
"ButtonDismiss": "\u0416\u0430\u0441\u044b\u0440\u0443",
|
"ButtonDismiss": "\u0416\u0430\u0441\u044b\u0440\u0443",
|
||||||
"ButtonTakeTheTour": "\u0410\u0440\u0430\u043b\u0430\u043f \u0448\u044b\u0493\u044b\u04a3\u044b\u0437",
|
"ButtonTakeTheTour": "\u0410\u0440\u0430\u043b\u0430\u043f \u0448\u044b\u0493\u044b\u04a3\u044b\u0437",
|
||||||
"ButtonEditOtherUserPreferences": "\u041e\u0441\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0456\u043d \u04e9\u04a3\u0434\u0435\u0443.",
|
"ButtonEditOtherUserPreferences": "\u041e\u0441\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0456\u043d \u04e9\u04a3\u0434\u0435\u0443.",
|
||||||
|
@ -384,7 +384,7 @@
|
|||||||
"TabAdvanced": "Geavanceerd",
|
"TabAdvanced": "Geavanceerd",
|
||||||
"HeaderCinemaMode": "Cinema Mode",
|
"HeaderCinemaMode": "Cinema Mode",
|
||||||
"HeaderStatus": "Status",
|
"HeaderStatus": "Status",
|
||||||
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
"HeaderWelcomeToMediaBrowserServerDashboard": "Welkom bij de Media Browser Dashboard",
|
||||||
"OptionContinuing": "Wordt vervolgd...",
|
"OptionContinuing": "Wordt vervolgd...",
|
||||||
"OptionEnded": "Gestopt",
|
"OptionEnded": "Gestopt",
|
||||||
"HeaderAirDays": "Uitzend Dagen",
|
"HeaderAirDays": "Uitzend Dagen",
|
||||||
|
@ -56,8 +56,8 @@
|
|||||||
"LabelConfigureSettings": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",
|
"LabelConfigureSettings": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} - \u0432\u043e\u0441\u043f\u0440-\u0438\u0435 \u00ab{1}\u00bb \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e",
|
"UserStoppedPlayingItemWithValues": "{0} - \u0432\u043e\u0441\u043f\u0440-\u0438\u0435 \u00ab{1}\u00bb \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e",
|
||||||
"LabelEnableVideoImageExtraction": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0438\u0437 \u0432\u0438\u0434\u0435\u043e",
|
"LabelEnableVideoImageExtraction": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0438\u0437 \u0432\u0438\u0434\u0435\u043e",
|
||||||
"AppDeviceValues": "\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435: {0}, \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e: {1}",
|
"AppDeviceValues": "\u041f\u0440\u0438\u043b-\u0438\u0435: {0}, \u0423\u0441\u0442\u0440-\u0432\u043e: {1}",
|
||||||
"VideoImageExtractionHelp": "\u0414\u043b\u044f \u0432\u0438\u0434\u0435\u043e, \u0433\u0434\u0435 \u0435\u0449\u0451 \u200b\u200b\u043d\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432, \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0435\u0449\u0451 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043f\u043e\u0441\u043e\u0431\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.",
|
"VideoImageExtractionHelp": "\u0414\u043b\u044f \u0432\u0438\u0434\u0435\u043e, \u0433\u0434\u0435 \u0435\u0449\u0451 \u200b\u200b\u043d\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432, \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0435\u0449\u0451 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438.",
|
||||||
"ProviderValue": "\u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a: {0}",
|
"ProviderValue": "\u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a: {0}",
|
||||||
"LabelEnableChapterImageExtractionForMovies": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0441\u0446\u0435\u043d \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u043c\u043e\u0432",
|
"LabelEnableChapterImageExtractionForMovies": "\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0441\u0446\u0435\u043d \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u043c\u043e\u0432",
|
||||||
"LabelChannelDownloadSizeLimit": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e, \u0413\u0411:",
|
"LabelChannelDownloadSizeLimit": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e, \u0413\u0411:",
|
||||||
@ -346,7 +346,7 @@
|
|||||||
"LabelStatus": "\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:",
|
"LabelStatus": "\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:",
|
||||||
"LabelEnableCinemaModeFor": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u0434\u043b\u044f:",
|
"LabelEnableCinemaModeFor": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u0434\u043b\u044f:",
|
||||||
"LabelVersion": "\u0412\u0435\u0440\u0441\u0438\u044f:",
|
"LabelVersion": "\u0412\u0435\u0440\u0441\u0438\u044f:",
|
||||||
"CinemaModeConfigurationHelp": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442, \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u043d\u043e\u0437\u0430\u043b\u0430 \u0432 \u0432\u0430\u0448\u0443 \u0433\u043e\u0441\u0442\u0438\u043d\u0443\u044e, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.",
|
"CinemaModeConfigurationHelp": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u043d\u043e\u0437\u0430\u043b\u0430 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0432 \u0432\u0430\u0448\u0443 \u0433\u043e\u0441\u0442\u0438\u043d\u0443\u044e, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.",
|
||||||
"LabelLastResult": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:",
|
"LabelLastResult": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:",
|
||||||
"OptionTrailersFromMyMovies": "\u041e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u043a \u0444\u0438\u043b\u044c\u043c\u0430\u043c \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0432 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435",
|
"OptionTrailersFromMyMovies": "\u041e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u043a \u0444\u0438\u043b\u044c\u043c\u0430\u043c \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0432 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435",
|
||||||
"OptionHasSubtitles": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u044b",
|
"OptionHasSubtitles": "\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u044b",
|
||||||
@ -384,7 +384,7 @@
|
|||||||
"TabAdvanced": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",
|
"TabAdvanced": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",
|
||||||
"HeaderCinemaMode": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430",
|
"HeaderCinemaMode": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430",
|
||||||
"HeaderStatus": "\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435",
|
"HeaderStatus": "\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435",
|
||||||
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
"HeaderWelcomeToMediaBrowserServerDashboard": "\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u043c \u0432 \u0418\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u0438 Media Browser",
|
||||||
"OptionContinuing": "\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f",
|
"OptionContinuing": "\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f",
|
||||||
"OptionEnded": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f",
|
"OptionEnded": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f",
|
||||||
"HeaderAirDays": "\u0414\u043d\u0438 \u044d\u0444\u0438\u0440\u0430",
|
"HeaderAirDays": "\u0414\u043d\u0438 \u044d\u0444\u0438\u0440\u0430",
|
||||||
|
@ -181,7 +181,7 @@
|
|||||||
"HeaderAlternateEpisodeNumbers": "Alternativ avsnittsnumrering",
|
"HeaderAlternateEpisodeNumbers": "Alternativ avsnittsnumrering",
|
||||||
"HeaderUploadNewImage": "Ladda upp ny bild",
|
"HeaderUploadNewImage": "Ladda upp ny bild",
|
||||||
"HeaderSpecialEpisodeInfo": "Info om specialavsnitt",
|
"HeaderSpecialEpisodeInfo": "Info om specialavsnitt",
|
||||||
"LabelDropImageHere": "Drop image here",
|
"LabelDropImageHere": "Dra bild hit",
|
||||||
"HeaderExternalIds": "Externa ID:n",
|
"HeaderExternalIds": "Externa ID:n",
|
||||||
"ImageUploadAspectRatioHelp": "Bildf\u00f6rh\u00e5llande 1:1 rekommenderas. Endast JPG\/PNG.",
|
"ImageUploadAspectRatioHelp": "Bildf\u00f6rh\u00e5llande 1:1 rekommenderas. Endast JPG\/PNG.",
|
||||||
"LabelDvdSeasonNumber": "S\u00e4songsnummer p\u00e5 DVD:",
|
"LabelDvdSeasonNumber": "S\u00e4songsnummer p\u00e5 DVD:",
|
||||||
@ -384,10 +384,10 @@
|
|||||||
"TabAdvanced": "Avancerat",
|
"TabAdvanced": "Avancerat",
|
||||||
"HeaderCinemaMode": "Biol\u00e4ge",
|
"HeaderCinemaMode": "Biol\u00e4ge",
|
||||||
"HeaderStatus": "Status",
|
"HeaderStatus": "Status",
|
||||||
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
|
"HeaderWelcomeToMediaBrowserServerDashboard": "V\u00e4lkommen till Media Browsers kontrollpanel",
|
||||||
"OptionContinuing": "P\u00e5g\u00e5ende",
|
"OptionContinuing": "P\u00e5g\u00e5ende",
|
||||||
"OptionEnded": "Avslutad",
|
"OptionEnded": "Avslutad",
|
||||||
"HeaderAirDays": "Air Days",
|
"HeaderAirDays": "S\u00e4ndningsdagar",
|
||||||
"OptionSunday": "S\u00f6ndag",
|
"OptionSunday": "S\u00f6ndag",
|
||||||
"OptionMonday": "M\u00e5ndag",
|
"OptionMonday": "M\u00e5ndag",
|
||||||
"OptionTuesday": "Tisdag",
|
"OptionTuesday": "Tisdag",
|
||||||
@ -395,7 +395,7 @@
|
|||||||
"OptionThursday": "Torsdag",
|
"OptionThursday": "Torsdag",
|
||||||
"OptionFriday": "Fredag",
|
"OptionFriday": "Fredag",
|
||||||
"OptionSaturday": "L\u00f6rdag",
|
"OptionSaturday": "L\u00f6rdag",
|
||||||
"HeaderManagement": "Management",
|
"HeaderManagement": "Administration",
|
||||||
"LabelManagement": "Administration:",
|
"LabelManagement": "Administration:",
|
||||||
"OptionMissingImdbId": "IMDB-ID saknas",
|
"OptionMissingImdbId": "IMDB-ID saknas",
|
||||||
"OptionMissingTvdbId": "TVDB-ID saknas",
|
"OptionMissingTvdbId": "TVDB-ID saknas",
|
||||||
@ -453,13 +453,13 @@
|
|||||||
"ButtonSelectDirectory": "V\u00e4lj mapp",
|
"ButtonSelectDirectory": "V\u00e4lj mapp",
|
||||||
"LabelCustomPaths": "Ange anpassade s\u00f6kv\u00e4gar d\u00e4r s\u00e5 \u00f6nskas. L\u00e4mna tomt f\u00f6r att anv\u00e4nda standardv\u00e4rdena.",
|
"LabelCustomPaths": "Ange anpassade s\u00f6kv\u00e4gar d\u00e4r s\u00e5 \u00f6nskas. L\u00e4mna tomt f\u00f6r att anv\u00e4nda standardv\u00e4rdena.",
|
||||||
"LabelCachePath": "Plats f\u00f6r cache:",
|
"LabelCachePath": "Plats f\u00f6r cache:",
|
||||||
"LabelCachePathHelp": "Specify a custom location for server cache files, such as images.",
|
"LabelCachePathHelp": "Ange en plats f\u00f6r serverns cachefiler, t ex bilder.",
|
||||||
"LabelImagesByNamePath": "Plats f\u00f6r bilddatabasen (ImagesByName):",
|
"LabelImagesByNamePath": "Plats f\u00f6r bilddatabasen (ImagesByName):",
|
||||||
"LabelImagesByNamePathHelp": "Specify a custom location for downloaded actor, artist, genre and studio images.",
|
"LabelImagesByNamePathHelp": "Ange en plats f\u00f6r nerladdade sk\u00e5despelar-, artist-, genre- och studiobilder.",
|
||||||
"LabelMetadataPath": "Plats f\u00f6r metadata:",
|
"LabelMetadataPath": "Plats f\u00f6r metadata:",
|
||||||
"LabelMetadataPathHelp": "Specify a custom location for downloaded artwork and metadata, if not saving within media folders.",
|
"LabelMetadataPathHelp": "Ange en plats f\u00f6r nerladdad grafik och metadata, om du inte vill spara dessa i mediamapparna.",
|
||||||
"LabelTranscodingTempPath": "Mellanlagringsplats f\u00f6r omkodning:",
|
"LabelTranscodingTempPath": "Mellanlagringsplats f\u00f6r omkodning:",
|
||||||
"LabelTranscodingTempPathHelp": "This folder contains working files used by the transcoder. Specify a custom path, or leave empty to use the default within the server's data folder.",
|
"LabelTranscodingTempPathHelp": "Denna mapp inneh\u00e5ller tillf\u00e4lliga filer som anv\u00e4nds vid omkodning. Ange en plats f\u00f6r dessa, eller l\u00e4mna blankt f\u00f6r att anv\u00e4nda f\u00f6rvald plats.",
|
||||||
"TabBasics": "Grunderna",
|
"TabBasics": "Grunderna",
|
||||||
"TabTV": "TV",
|
"TabTV": "TV",
|
||||||
"TabGames": "Spel",
|
"TabGames": "Spel",
|
||||||
@ -476,12 +476,12 @@
|
|||||||
"LabelAutomaticUpdatesFanartHelp": "Om aktiverat h\u00e4mtas nya bilder automatiskt efter hand som de blir tillg\u00e4ngliga p\u00e5 fanart.tv. Befintliga bilder p\u00e5verkas ej.",
|
"LabelAutomaticUpdatesFanartHelp": "Om aktiverat h\u00e4mtas nya bilder automatiskt efter hand som de blir tillg\u00e4ngliga p\u00e5 fanart.tv. Befintliga bilder p\u00e5verkas ej.",
|
||||||
"LabelAutomaticUpdatesTmdbHelp": "Om aktiverat h\u00e4mtas nya bilder automatiskt efter hand som de blir tillg\u00e4ngliga p\u00e5 TheMovieDB.org. Befintliga bilder p\u00e5verkas ej.",
|
"LabelAutomaticUpdatesTmdbHelp": "Om aktiverat h\u00e4mtas nya bilder automatiskt efter hand som de blir tillg\u00e4ngliga p\u00e5 TheMovieDB.org. Befintliga bilder p\u00e5verkas ej.",
|
||||||
"LabelAutomaticUpdatesTvdbHelp": "Om aktiverat h\u00e4mtas nya bilder automatiskt efter hand som de blir tillg\u00e4ngliga p\u00e5 TheTVDB.com. Befintliga bilder p\u00e5verkas ej.",
|
"LabelAutomaticUpdatesTvdbHelp": "Om aktiverat h\u00e4mtas nya bilder automatiskt efter hand som de blir tillg\u00e4ngliga p\u00e5 TheTVDB.com. Befintliga bilder p\u00e5verkas ej.",
|
||||||
"ExtractChapterImagesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task at 4am. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.",
|
"ExtractChapterImagesHelp": "Detta m\u00f6jligg\u00f6r grafisk visning av menyer f\u00f6r val av kapitel. Processen kan vara tids- och CPU-kr\u00e4vande och beh\u00f6va flera gigabyte lagringsutrymme. Processen k\u00f6rs varje natt kl 04:00 men intervallet kan anpassas enligt \u00f6nskem\u00e5l i Schemal\u00e4ggaren. Vi rekommenderar inte att den k\u00f6rs vid tider d\u00e5 anv\u00e4ndare \u00e4r aktiva.",
|
||||||
"LabelMetadataDownloadLanguage": "\u00d6nskat spr\u00e5k:",
|
"LabelMetadataDownloadLanguage": "\u00d6nskat spr\u00e5k:",
|
||||||
"ButtonAutoScroll": "Rulla listor automatiskt",
|
"ButtonAutoScroll": "Rulla listor automatiskt",
|
||||||
"LabelImageSavingConvention": "Namngivningsformat f\u00f6r bilder:",
|
"LabelImageSavingConvention": "Namngivningsformat f\u00f6r bilder:",
|
||||||
"LabelImageSavingConventionHelp": "Media Browser kan anv\u00e4nda bilder fr\u00e5n de flesta vanliga mediaprogram. Genom att v\u00e4lja h\u00e4r kan du underl\u00e4tta anv\u00e4ndandet av Media Browser tillsammans med andra program.",
|
"LabelImageSavingConventionHelp": "Media Browser kan anv\u00e4nda bilder fr\u00e5n de flesta vanliga mediaprogram. Genom att v\u00e4lja h\u00e4r kan du underl\u00e4tta anv\u00e4ndandet av Media Browser tillsammans med andra program.",
|
||||||
"OptionImageSavingCompatible": "Compatible - Media Browser\/Kodi\/Plex",
|
"OptionImageSavingCompatible": "Kompatibelt - Media Browser\/Kodi\/Plex",
|
||||||
"OptionImageSavingStandard": "Standard - MB2",
|
"OptionImageSavingStandard": "Standard - MB2",
|
||||||
"ButtonSignIn": "Logga in",
|
"ButtonSignIn": "Logga in",
|
||||||
"TitleSignIn": "Logga in",
|
"TitleSignIn": "Logga in",
|
||||||
@ -748,8 +748,8 @@
|
|||||||
"ButtonRetrieveKey": "H\u00e4mta donationskod",
|
"ButtonRetrieveKey": "H\u00e4mta donationskod",
|
||||||
"LabelSupporterKey": "Donationskod (klistra in fr\u00e5n e-postmeddelandet)",
|
"LabelSupporterKey": "Donationskod (klistra in fr\u00e5n e-postmeddelandet)",
|
||||||
"LabelSupporterKeyHelp": "Ange din donationskod s\u00e5 att du kan b\u00f6rja anv\u00e4nda de extrafunktioner som har utvecklats inom Media Browsers anv\u00e4ndargrupper.",
|
"LabelSupporterKeyHelp": "Ange din donationskod s\u00e5 att du kan b\u00f6rja anv\u00e4nda de extrafunktioner som har utvecklats inom Media Browsers anv\u00e4ndargrupper.",
|
||||||
"MessageInvalidKey": "Supporter key is missing or invalid.",
|
"MessageInvalidKey": "Supporterkod ogiltig eller saknas.",
|
||||||
"ErrorMessageInvalidKey": "In order for any premium content to be registered, you must also be a Media Browser Supporter. Please donate and support the continued development of the core product. Thank you.",
|
"ErrorMessageInvalidKey": "F\u00f6r att registrera premiuminneh\u00e5ll m\u00e5ste du vara Media Browser-supporter. Bidra g\u00e4rna till fortsatt utveckling av projektet genom att donera. Tack p\u00e5 f\u00f6rhand.",
|
||||||
"HeaderDisplaySettings": "Bildsk\u00e4rmsinst\u00e4llningar",
|
"HeaderDisplaySettings": "Bildsk\u00e4rmsinst\u00e4llningar",
|
||||||
"TabPlayTo": "Spela upp p\u00e5",
|
"TabPlayTo": "Spela upp p\u00e5",
|
||||||
"LabelEnableDlnaServer": "Aktivera DLNA-server",
|
"LabelEnableDlnaServer": "Aktivera DLNA-server",
|
||||||
@ -778,9 +778,9 @@
|
|||||||
"NotificationOptionPluginUpdateInstalled": "Till\u00e4gg har uppdaterats",
|
"NotificationOptionPluginUpdateInstalled": "Till\u00e4gg har uppdaterats",
|
||||||
"NotificationOptionPluginInstalled": "Till\u00e4gg har installerats",
|
"NotificationOptionPluginInstalled": "Till\u00e4gg har installerats",
|
||||||
"NotificationOptionPluginUninstalled": "Till\u00e4gg har avinstallerats",
|
"NotificationOptionPluginUninstalled": "Till\u00e4gg har avinstallerats",
|
||||||
"NotificationOptionVideoPlayback": "Video playback started",
|
"NotificationOptionVideoPlayback": "Videouppspelning har p\u00e5b\u00f6rjats",
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Ljuduppspelning har p\u00e5b\u00f6rjats",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
"NotificationOptionGamePlayback": "Spel har startats",
|
||||||
"NotificationOptionVideoPlaybackStopped": "Videouppspelning stoppad",
|
"NotificationOptionVideoPlaybackStopped": "Videouppspelning stoppad",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Ljuduppspelning stoppad",
|
"NotificationOptionAudioPlaybackStopped": "Ljuduppspelning stoppad",
|
||||||
"NotificationOptionGamePlaybackStopped": "Spel stoppat",
|
"NotificationOptionGamePlaybackStopped": "Spel stoppat",
|
||||||
@ -934,7 +934,7 @@
|
|||||||
"OptionReportByteRangeSeekingWhenTranscodingHelp": "Detta kr\u00e4vs f\u00f6r vissa enheter som inte kan utf\u00f6ra tidss\u00f6kning p\u00e5 ett tillfredsst\u00e4llande s\u00e4tt.",
|
"OptionReportByteRangeSeekingWhenTranscodingHelp": "Detta kr\u00e4vs f\u00f6r vissa enheter som inte kan utf\u00f6ra tidss\u00f6kning p\u00e5 ett tillfredsst\u00e4llande s\u00e4tt.",
|
||||||
"HeaderSubtitleDownloadingHelp": "N\u00e4r Media Browser s\u00f6ker igenom dina videofiler kan den identifiera saknade undertexter och ladda ner dem fr\u00e5n en onlinetj\u00e4nst, t ex OpenSubtitles.org.",
|
"HeaderSubtitleDownloadingHelp": "N\u00e4r Media Browser s\u00f6ker igenom dina videofiler kan den identifiera saknade undertexter och ladda ner dem fr\u00e5n en onlinetj\u00e4nst, t ex OpenSubtitles.org.",
|
||||||
"HeaderDownloadSubtitlesFor": "Ladda ner undertexter f\u00f6r:",
|
"HeaderDownloadSubtitlesFor": "Ladda ner undertexter f\u00f6r:",
|
||||||
"MessageNoChapterProviders": "Install a chapter provider plugin such as ChapterDb to enable additional chapter options.",
|
"MessageNoChapterProviders": "Installera ett kapiteltill\u00e4gg s\u00e5som ChapterDb f\u00f6r att ge fler kapitelfunktioner.",
|
||||||
"LabelSkipIfGraphicalSubsPresent": "Hoppa \u00f6ver om videon redan inneh\u00e5ller grafiska undertexter",
|
"LabelSkipIfGraphicalSubsPresent": "Hoppa \u00f6ver om videon redan inneh\u00e5ller grafiska undertexter",
|
||||||
"LabelSkipIfGraphicalSubsPresentHelp": "Om du sparar textversioner av undertexterna f\u00e5r du ett b\u00e4ttre resultat vid anv\u00e4ndning av mobila enheter.",
|
"LabelSkipIfGraphicalSubsPresentHelp": "Om du sparar textversioner av undertexterna f\u00e5r du ett b\u00e4ttre resultat vid anv\u00e4ndning av mobila enheter.",
|
||||||
"TabSubtitles": "Undertexter",
|
"TabSubtitles": "Undertexter",
|
||||||
@ -942,7 +942,7 @@
|
|||||||
"HeaderDownloadChaptersFor": "H\u00e4mta kapitelnamn f\u00f6r:",
|
"HeaderDownloadChaptersFor": "H\u00e4mta kapitelnamn f\u00f6r:",
|
||||||
"LabelOpenSubtitlesUsername": "Inloggnings-ID hos Open Subtitles:",
|
"LabelOpenSubtitlesUsername": "Inloggnings-ID hos Open Subtitles:",
|
||||||
"LabelOpenSubtitlesPassword": "L\u00f6senord hos Open Subtitles:",
|
"LabelOpenSubtitlesPassword": "L\u00f6senord hos Open Subtitles:",
|
||||||
"HeaderChapterDownloadingHelp": "When Media Browser scans your video files it can download friendly chapter names from the internet using chapter plugins such as ChapterDb.",
|
"HeaderChapterDownloadingHelp": "N\u00e4r Media Browser s\u00f6ker igenom dina videofiler kan den identifiera kapitelnamn och ladda ner dem med hj\u00e4lp av kapiteltill\u00e4gg s\u00e5som ChapterDb.",
|
||||||
"LabelPlayDefaultAudioTrack": "Anv\u00e4nd det f\u00f6rvalda ljudsp\u00e5ret oavsett spr\u00e5k",
|
"LabelPlayDefaultAudioTrack": "Anv\u00e4nd det f\u00f6rvalda ljudsp\u00e5ret oavsett spr\u00e5k",
|
||||||
"LabelSubtitlePlaybackMode": "Undertextl\u00e4ge:",
|
"LabelSubtitlePlaybackMode": "Undertextl\u00e4ge:",
|
||||||
"LabelDownloadLanguages": "Spr\u00e5k att ladda ner:",
|
"LabelDownloadLanguages": "Spr\u00e5k att ladda ner:",
|
||||||
@ -981,10 +981,10 @@
|
|||||||
"OptionAuto": "Auto",
|
"OptionAuto": "Auto",
|
||||||
"OptionYes": "Ja",
|
"OptionYes": "Ja",
|
||||||
"OptionNo": "Nej",
|
"OptionNo": "Nej",
|
||||||
"LabelHomePageSection1": "Home page section 1:",
|
"LabelHomePageSection1": "Startsidans sektion 1:",
|
||||||
"LabelHomePageSection2": "Home page section 2:",
|
"LabelHomePageSection2": "Startsidans sektion 2:",
|
||||||
"LabelHomePageSection3": "Home page section 3:",
|
"LabelHomePageSection3": "Startsidans sektion 3:",
|
||||||
"LabelHomePageSection4": "Home page section 4:",
|
"LabelHomePageSection4": "Startsidans sektion 4:",
|
||||||
"OptionMyViewsButtons": "Mina vyer (knappar)",
|
"OptionMyViewsButtons": "Mina vyer (knappar)",
|
||||||
"OptionMyViews": "Mina vyer",
|
"OptionMyViews": "Mina vyer",
|
||||||
"OptionMyViewsSmall": "Mina vyer (liten)",
|
"OptionMyViewsSmall": "Mina vyer (liten)",
|
||||||
@ -1059,10 +1059,10 @@
|
|||||||
"ViewTypeMusicFavoriteArtists": "Favoritartister",
|
"ViewTypeMusicFavoriteArtists": "Favoritartister",
|
||||||
"ViewTypeMusicFavoriteSongs": "Favoritl\u00e5tar",
|
"ViewTypeMusicFavoriteSongs": "Favoritl\u00e5tar",
|
||||||
"HeaderMyViews": "Mina vyer",
|
"HeaderMyViews": "Mina vyer",
|
||||||
"LabelSelectFolderGroups": "Automatically group content from the following folders into views such as Movies, Music and TV:",
|
"LabelSelectFolderGroups": "Gruppera automatiskt inneh\u00e5ll fr\u00e5n dessa mappar i vyer, t ex Filmer, Musik eller TV:",
|
||||||
"LabelSelectFolderGroupsHelp": "Folders that are unchecked will be displayed by themselves in their own view.",
|
"LabelSelectFolderGroupsHelp": "Ej valda mappar kommer att visas f\u00f6r sig sj\u00e4lva i en egen vy.",
|
||||||
"OptionDisplayAdultContent": "Visa erotiskt inneh\u00e5ll",
|
"OptionDisplayAdultContent": "Visa erotiskt inneh\u00e5ll",
|
||||||
"OptionLibraryFolders": "Media folders",
|
"OptionLibraryFolders": "Mediamappar",
|
||||||
"TitleRemoteControl": "Fj\u00e4rrkontroll",
|
"TitleRemoteControl": "Fj\u00e4rrkontroll",
|
||||||
"OptionLatestTvRecordings": "Senaste inspelningar",
|
"OptionLatestTvRecordings": "Senaste inspelningar",
|
||||||
"LabelProtocolInfo": "Protokollinfo:",
|
"LabelProtocolInfo": "Protokollinfo:",
|
||||||
@ -1080,7 +1080,7 @@
|
|||||||
"LabelKodiMetadataEnablePathSubstitutionHelp2": "Se \"s\u00f6kv\u00e4gsutbyte\".",
|
"LabelKodiMetadataEnablePathSubstitutionHelp2": "Se \"s\u00f6kv\u00e4gsutbyte\".",
|
||||||
"LabelGroupChannelsIntoViews": "Visa dessa kanaler direkt i mina vyer:",
|
"LabelGroupChannelsIntoViews": "Visa dessa kanaler direkt i mina vyer:",
|
||||||
"LabelGroupChannelsIntoViewsHelp": "Om aktiverat kommer dessa kanaler att visas tillsammans med andra vyer. Annars visas de i en separat vy f\u00f6r Kanaler.",
|
"LabelGroupChannelsIntoViewsHelp": "Om aktiverat kommer dessa kanaler att visas tillsammans med andra vyer. Annars visas de i en separat vy f\u00f6r Kanaler.",
|
||||||
"LabelDisplayCollectionsView": "Display a collections view to show movie collections",
|
"LabelDisplayCollectionsView": "Vy som visar filmsamlingar",
|
||||||
"LabelKodiMetadataEnableExtraThumbs": "Kopiera extrafanart till extrathumbs",
|
"LabelKodiMetadataEnableExtraThumbs": "Kopiera extrafanart till extrathumbs",
|
||||||
"LabelKodiMetadataEnableExtraThumbsHelp": "N\u00e4r bilder h\u00e4mtas fr\u00e5n Internet kan de sparas i b\u00e5de extrafanart- och extrathumbs-mapparna f\u00f6r att ge maximal kompatibilitet med Kodi-skins.",
|
"LabelKodiMetadataEnableExtraThumbsHelp": "N\u00e4r bilder h\u00e4mtas fr\u00e5n Internet kan de sparas i b\u00e5de extrafanart- och extrathumbs-mapparna f\u00f6r att ge maximal kompatibilitet med Kodi-skins.",
|
||||||
"TabServices": "Tj\u00e4nster",
|
"TabServices": "Tj\u00e4nster",
|
||||||
@ -1090,7 +1090,7 @@
|
|||||||
"HeaderBrandingHelp": "Anpassa utseendet p\u00e5 Media Browser till din grupp eller f\u00f6retags \u00f6nskem\u00e5l.",
|
"HeaderBrandingHelp": "Anpassa utseendet p\u00e5 Media Browser till din grupp eller f\u00f6retags \u00f6nskem\u00e5l.",
|
||||||
"LabelLoginDisclaimer": "Ansvarsbegr\u00e4nsning vid inloggning:",
|
"LabelLoginDisclaimer": "Ansvarsbegr\u00e4nsning vid inloggning:",
|
||||||
"LabelLoginDisclaimerHelp": "Detta visas l\u00e4ngst ned p\u00e5 inloggningssidan.",
|
"LabelLoginDisclaimerHelp": "Detta visas l\u00e4ngst ned p\u00e5 inloggningssidan.",
|
||||||
"LabelAutomaticallyDonate": "Automatically donate this amount every month",
|
"LabelAutomaticallyDonate": "Donera detta belopp automatiskt varje m\u00e5nad",
|
||||||
"LabelAutomaticallyDonateHelp": "Du kan avbryta n\u00e4r som helst via ditt PayPal-konto.",
|
"LabelAutomaticallyDonateHelp": "Du kan avbryta n\u00e4r som helst via ditt PayPal-konto.",
|
||||||
"OptionList": "Lista",
|
"OptionList": "Lista",
|
||||||
"TabDashboard": "Kontrollpanel",
|
"TabDashboard": "Kontrollpanel",
|
||||||
@ -1189,7 +1189,7 @@
|
|||||||
"OptionReportArtists": "Artister",
|
"OptionReportArtists": "Artister",
|
||||||
"OptionReportAlbums": "Album",
|
"OptionReportAlbums": "Album",
|
||||||
"OptionReportAdultVideos": "Vuxen videos",
|
"OptionReportAdultVideos": "Vuxen videos",
|
||||||
"ButtonMore": "More",
|
"ButtonMore": "Mer",
|
||||||
"HeaderActivity": "Aktivitet",
|
"HeaderActivity": "Aktivitet",
|
||||||
"ScheduledTaskStartedWithName": "{0} startad"
|
"ScheduledTaskStartedWithName": "{0} startad"
|
||||||
}
|
}
|
@ -93,7 +93,6 @@
|
|||||||
<Reference Include="ServiceStack.Text">
|
<Reference Include="ServiceStack.Text">
|
||||||
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Mono.Posix" Condition=" '$(ConfigurationName)' == 'Release Mono' " />
|
|
||||||
<Reference Include="websocket-sharp, Version=1.0.2.508, Culture=neutral, PublicKeyToken=5660b08a1845a91e, processorArchitecture=MSIL">
|
<Reference Include="websocket-sharp, Version=1.0.2.508, Culture=neutral, PublicKeyToken=5660b08a1845a91e, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\ThirdParty\WebsocketSharp\websocket-sharp.dll</HintPath>
|
<HintPath>..\ThirdParty\WebsocketSharp\websocket-sharp.dll</HintPath>
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
using MediaBrowser.Common.IO;
|
|
||||||
using MediaBrowser.Model.Logging;
|
|
||||||
using MediaBrowser.Common.Implementations.IO;
|
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication.IO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class FileSystemFactory
|
|
||||||
/// </summary>
|
|
||||||
public static class FileSystemFactory
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates the file system manager.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>IFileSystem.</returns>
|
|
||||||
public static IFileSystem CreateFileSystemManager(ILogManager logManager)
|
|
||||||
{
|
|
||||||
return new CommonFileSystem(logManager.GetLogger("FileSystem"), false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Gtk;
|
|
||||||
|
|
||||||
public partial class MainWindow: Gtk.Window
|
|
||||||
{
|
|
||||||
public MainWindow (): base (Gtk.WindowType.Toplevel)
|
|
||||||
{
|
|
||||||
Build ();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
|
|
||||||
{
|
|
||||||
Application.Quit ();
|
|
||||||
a.RetVal = true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,4 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<dllmap dll="MediaInfo" target="./MediaInfo/linux/lib/libmediainfo.so" os="linux" wordsize="32"/>
|
|
||||||
<dllmap dll="MediaInfo" target="./MediaInfo/linux/lib64/libmediainfo.so" os="linux" wordsize="64"/>
|
|
||||||
<dllmap dll="MediaInfo" target="./MediaInfo/osx/libmediainfo.dylib" os="osx"/>
|
<dllmap dll="MediaInfo" target="./MediaInfo/osx/libmediainfo.dylib" os="osx"/>
|
||||||
<dllmap dll="MediaInfo" target="libmediainfo.so" os="linux" cpu="!x86,!x86_64"/>
|
<dllmap dll="MediaInfo" target="libmediainfo.so" os="linux"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
@ -11,6 +11,8 @@
|
|||||||
<AssemblyName>MediaBrowser.Server.Mono</AssemblyName>
|
<AssemblyName>MediaBrowser.Server.Mono</AssemblyName>
|
||||||
<StartupObject>MediaBrowser.Server.Mono.MainClass</StartupObject>
|
<StartupObject>MediaBrowser.Server.Mono.MainClass</StartupObject>
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||||
|
<RestorePackages>true</RestorePackages>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@ -43,16 +45,22 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="Mono.Posix, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\packages\Mono.Posix.4.0.0.0\lib\net40\Mono.Posix.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="ServiceStack.Interfaces">
|
<Reference Include="ServiceStack.Interfaces">
|
||||||
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
|
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Mono.Posix" Condition=" '$(ConfigurationName)' == 'Release Mono' " />
|
|
||||||
<Reference Include="MediaBrowser.IsoMounting.Linux">
|
<Reference Include="MediaBrowser.IsoMounting.Linux">
|
||||||
<HintPath>..\ThirdParty\MediaBrowser.IsoMounting.Linux\MediaBrowser.IsoMounting.Linux.dll</HintPath>
|
<HintPath>..\ThirdParty\MediaBrowser.IsoMounting.Linux\MediaBrowser.IsoMounting.Linux.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="..\MediaBrowser.ServerApplication\IO\StartupOptions.cs">
|
||||||
|
<Link>IO\StartupOptions.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\SharedVersion.cs">
|
<Compile Include="..\SharedVersion.cs">
|
||||||
<Link>Properties\SharedVersion.cs</Link>
|
<Link>Properties\SharedVersion.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
@ -78,13 +86,9 @@
|
|||||||
<Compile Include="..\MediaBrowser.ServerApplication\FFMpeg\FFMpegDownloader.cs">
|
<Compile Include="..\MediaBrowser.ServerApplication\FFMpeg\FFMpegDownloader.cs">
|
||||||
<Link>FFMpeg\FFMpegDownloader.cs</Link>
|
<Link>FFMpeg\FFMpegDownloader.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="IO\FileSystemFactory.cs" />
|
|
||||||
<Compile Include="..\MediaBrowser.ServerApplication\FFMpeg\FFMpegDownloadInfo.cs">
|
<Compile Include="..\MediaBrowser.ServerApplication\FFMpeg\FFMpegDownloadInfo.cs">
|
||||||
<Link>FFMpeg\FFMpegDownloadInfo.cs</Link>
|
<Link>FFMpeg\FFMpegDownloadInfo.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.ServerApplication\IO\StartupOptions.cs">
|
|
||||||
<Link>IO\StartupOptions.cs"</Link>
|
|
||||||
</Compile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -137,68 +141,59 @@
|
|||||||
<Name>MediaBrowser.XbmcMetadata</Name>
|
<Name>MediaBrowser.XbmcMetadata</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="EntryPoints\" />
|
<None Include="..\thirdparty\libwebp\linux\x86\libwebp.so">
|
||||||
<Folder Include="Native\" />
|
|
||||||
<Folder Include="FFMpeg\" />
|
|
||||||
<Folder Include="Networking\" />
|
|
||||||
<Folder Include="IO\" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="app.config" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Content Include="..\ThirdParty\MediaInfo\linux\x86\libmediainfo.so">
|
|
||||||
<Link>MediaInfo\linux\lib\libmediainfo.so</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="..\ThirdParty\MediaInfo\linux\x86_64\libmediainfo.so">
|
|
||||||
<Link>MediaInfo\linux\lib64\libmediainfo.so</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="..\ThirdParty\MediaInfo\osx\libmediainfo.dylib">
|
|
||||||
<Link>MediaInfo\osx\libmediainfo.dylib</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="..\ThirdParty\libwebp\linux\x86\libwebp.so">
|
|
||||||
<Link>libwebp\linux\lib\libwebp.so</Link>
|
<Link>libwebp\linux\lib\libwebp.so</Link>
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</None>
|
||||||
<Content Include="..\ThirdParty\libwebp\linux\x86_64\libwebp.so">
|
<None Include="..\thirdparty\libwebp\linux\x86_64\libwebp.so">
|
||||||
<Link>libwebp\linux\lib64\libwebp.so</Link>
|
<Link>libwebp\linux\lib64\libwebp.so</Link>
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</None>
|
||||||
<Content Include="..\ThirdParty\libwebp\osx\libwebp.5.dylib">
|
<None Include="..\thirdparty\libwebp\osx\libwebp.5.dylib">
|
||||||
<Link>libwebp\osx\libwebp.5.dylib</Link>
|
<Link>libwebp\osx\libwebp.5.dylib</Link>
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</None>
|
||||||
|
<None Include="..\thirdparty\mediainfo\osx\libmediainfo.dylib">
|
||||||
|
<Link>MediaInfo\osx\libmediainfo.dylib</Link>
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="..\thirdparty\sqlite3\linux\x86\3.8.2\libsqlite3.so.0.8.6">
|
||||||
|
<Link>sqlite3\linux\lib\libsqlite3.so.0.8.6</Link>
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="..\thirdparty\sqlite3\linux\x86_64\3.8.2\libsqlite3.so.0.8.6">
|
||||||
|
<Link>sqlite3\linux\lib64\libsqlite3.so.0.8.6</Link>
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="..\thirdparty\sqlite3\mac\universal\3.8.2\libsqlite3.0.dylib">
|
||||||
|
<Link>sqlite3\mac\libsqlite3.0.dylib</Link>
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="Imazen.WebP.dll.config">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="MediaBrowser.MediaInfo.dll.config">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
<None Include="System.Data.SQLite.dll.config">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
<Content Include="..\ThirdParty\SQLite3\windows\x86\3.8.2\sqlite3.dll">
|
<Content Include="..\ThirdParty\SQLite3\windows\x86\3.8.2\sqlite3.dll">
|
||||||
<Link>sqlite3.dll</Link>
|
<Link>sqlite3.dll</Link>
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="..\ThirdParty\SQLite3\linux\x86\3.8.2\libsqlite3.so.0.8.6">
|
|
||||||
<Link>sqlite3\linux\lib\libsqlite3.so.0.8.6</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="..\ThirdParty\SQLite3\linux\x86_64\3.8.2\libsqlite3.so.0.8.6">
|
|
||||||
<Link>sqlite3\linux\lib64\libsqlite3.so.0.8.6</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="..\ThirdParty\SQLite3\mac\universal\3.8.2\libsqlite3.0.dylib">
|
|
||||||
<Link>sqlite3\mac\libsqlite3.0.dylib</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="System.Data.SQLite.dll.config">
|
|
||||||
<Link>System.Data.SQLite.dll.config</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="Imazen.WebP.dll.config">
|
|
||||||
<Link>Imazen.WebP.dll.config</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="MediaBrowser.MediaInfo.dll.config">
|
|
||||||
<Link>MediaBrowser.MediaInfo.dll.config</Link>
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
|
||||||
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,30 +1,19 @@
|
|||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Constants;
|
using MediaBrowser.Common.Implementations.IO;
|
||||||
using MediaBrowser.Common.Implementations.Logging;
|
using MediaBrowser.Common.Implementations.Logging;
|
||||||
using MediaBrowser.Common.Implementations.Updates;
|
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Server.Implementations;
|
using MediaBrowser.Server.Implementations;
|
||||||
using MediaBrowser.ServerApplication;
|
using MediaBrowser.ServerApplication;
|
||||||
using MediaBrowser.ServerApplication.Native;
|
|
||||||
using MediaBrowser.ServerApplication.IO;
|
using MediaBrowser.ServerApplication.IO;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Threading;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Security;
|
using System.Net.Security;
|
||||||
|
using System.Reflection;
|
||||||
using System.Security.Cryptography.X509Certificates;
|
using System.Security.Cryptography.X509Certificates;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Reflection;
|
|
||||||
using System.Linq;
|
|
||||||
// MONOMKBUNDLE: For the embedded version, mkbundle tool
|
|
||||||
#if MONOMKBUNDLE
|
|
||||||
using Mono.Unix;
|
|
||||||
using Mono.Unix.Native;
|
|
||||||
using System.Text;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Mono
|
namespace MediaBrowser.Server.Mono
|
||||||
{
|
{
|
||||||
@ -123,7 +112,9 @@ namespace MediaBrowser.Server.Mono
|
|||||||
// Allow all https requests
|
// Allow all https requests
|
||||||
ServicePointManager.ServerCertificateValidationCallback = _ignoreCertificates;
|
ServicePointManager.ServerCertificateValidationCallback = _ignoreCertificates;
|
||||||
|
|
||||||
_appHost = new ApplicationHost(appPaths, logManager, false, false, options, "MBServer.Mono");
|
var fileSystem = new CommonFileSystem(logManager.GetLogger("FileSystem"), false, true);
|
||||||
|
|
||||||
|
_appHost = new ApplicationHost(appPaths, logManager, false, false, options, fileSystem, "MBServer.Mono", false);
|
||||||
|
|
||||||
if (options.ContainsOption("-v")) {
|
if (options.ContainsOption("-v")) {
|
||||||
Console.WriteLine (_appHost.ApplicationVersion.ToString());
|
Console.WriteLine (_appHost.ApplicationVersion.ToString());
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
|
|
||||||
// This file has been generated by the GUI designer. Do not modify.
|
|
||||||
public partial class MainWindow
|
|
||||||
{
|
|
||||||
protected virtual void Build ()
|
|
||||||
{
|
|
||||||
global::Stetic.Gui.Initialize (this);
|
|
||||||
// Widget MainWindow
|
|
||||||
this.Name = "MainWindow";
|
|
||||||
this.Title = global::Mono.Unix.Catalog.GetString ("MainWindow");
|
|
||||||
this.WindowPosition = ((global::Gtk.WindowPosition)(4));
|
|
||||||
if ((this.Child != null)) {
|
|
||||||
this.Child.ShowAll ();
|
|
||||||
}
|
|
||||||
this.DefaultWidth = 400;
|
|
||||||
this.DefaultHeight = 300;
|
|
||||||
this.Show ();
|
|
||||||
this.DeleteEvent += new global::Gtk.DeleteEventHandler (this.OnDeleteEvent);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
|
|
||||||
// This file has been generated by the GUI designer. Do not modify.
|
|
||||||
namespace Stetic
|
|
||||||
{
|
|
||||||
internal class Gui
|
|
||||||
{
|
|
||||||
private static bool initialized;
|
|
||||||
|
|
||||||
internal static void Initialize (Gtk.Widget iconRenderer)
|
|
||||||
{
|
|
||||||
if ((Stetic.Gui.initialized == false)) {
|
|
||||||
Stetic.Gui.initialized = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class ActionGroups
|
|
||||||
{
|
|
||||||
public static Gtk.ActionGroup GetActionGroup (System.Type type)
|
|
||||||
{
|
|
||||||
return Stetic.ActionGroups.GetActionGroup (type.FullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Gtk.ActionGroup GetActionGroup (string name)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<stetic-interface>
|
|
||||||
<configuration>
|
|
||||||
<images-root-path>..</images-root-path>
|
|
||||||
<target-gtk-version>2.12</target-gtk-version>
|
|
||||||
</configuration>
|
|
||||||
<import>
|
|
||||||
<widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
|
|
||||||
<widget-library name="../bin/Debug/MediaBrowser.Server.Mono.exe" internal="true" />
|
|
||||||
</import>
|
|
||||||
<widget class="Gtk.Window" id="MainWindow" design-size="400 300">
|
|
||||||
<property name="MemberName" />
|
|
||||||
<property name="Title" translatable="yes">MainWindow</property>
|
|
||||||
<property name="WindowPosition">CenterOnParent</property>
|
|
||||||
<signal name="DeleteEvent" handler="OnDeleteEvent" />
|
|
||||||
<child>
|
|
||||||
<placeholder />
|
|
||||||
</child>
|
|
||||||
</widget>
|
|
||||||
</stetic-interface>
|
|
4
MediaBrowser.Server.Mono/packages.config
Normal file
4
MediaBrowser.Server.Mono/packages.config
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Mono.Posix" version="4.0.0.0" targetFramework="net45" />
|
||||||
|
</packages>
|
Binary file not shown.
Before Width: | Height: | Size: 55 KiB |
@ -222,6 +222,8 @@ namespace MediaBrowser.ServerApplication
|
|||||||
private readonly StartupOptions _startupOptions;
|
private readonly StartupOptions _startupOptions;
|
||||||
private readonly string _remotePackageName;
|
private readonly string _remotePackageName;
|
||||||
|
|
||||||
|
private readonly bool _supportsNativeWebSocket;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="ApplicationHost" /> class.
|
/// Initializes a new instance of the <see cref="ApplicationHost" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -230,16 +232,21 @@ namespace MediaBrowser.ServerApplication
|
|||||||
/// <param name="supportsRunningAsService">if set to <c>true</c> [supports running as service].</param>
|
/// <param name="supportsRunningAsService">if set to <c>true</c> [supports running as service].</param>
|
||||||
/// <param name="isRunningAsService">if set to <c>true</c> [is running as service].</param>
|
/// <param name="isRunningAsService">if set to <c>true</c> [is running as service].</param>
|
||||||
/// <param name="options">The options.</param>
|
/// <param name="options">The options.</param>
|
||||||
|
/// <param name="fileSystem">The file system.</param>
|
||||||
/// <param name="remotePackageName">Name of the remote package.</param>
|
/// <param name="remotePackageName">Name of the remote package.</param>
|
||||||
public ApplicationHost(ServerApplicationPaths applicationPaths,
|
public ApplicationHost(ServerApplicationPaths applicationPaths,
|
||||||
ILogManager logManager,
|
ILogManager logManager,
|
||||||
bool supportsRunningAsService,
|
bool supportsRunningAsService,
|
||||||
bool isRunningAsService,
|
bool isRunningAsService,
|
||||||
StartupOptions options, string remotePackageName)
|
StartupOptions options,
|
||||||
: base(applicationPaths, logManager)
|
IFileSystem fileSystem,
|
||||||
|
string remotePackageName,
|
||||||
|
bool supportsNativeWebSocket)
|
||||||
|
: base(applicationPaths, logManager, fileSystem)
|
||||||
{
|
{
|
||||||
_startupOptions = options;
|
_startupOptions = options;
|
||||||
_remotePackageName = remotePackageName;
|
_remotePackageName = remotePackageName;
|
||||||
|
_supportsNativeWebSocket = supportsNativeWebSocket;
|
||||||
_isRunningAsService = isRunningAsService;
|
_isRunningAsService = isRunningAsService;
|
||||||
SupportsRunningAsService = supportsRunningAsService;
|
SupportsRunningAsService = supportsRunningAsService;
|
||||||
}
|
}
|
||||||
@ -433,7 +440,7 @@ namespace MediaBrowser.ServerApplication
|
|||||||
|
|
||||||
RegisterSingleInstance<ISearchEngine>(() => new SearchEngine(LogManager, LibraryManager, UserManager));
|
RegisterSingleInstance<ISearchEngine>(() => new SearchEngine(LogManager, LibraryManager, UserManager));
|
||||||
|
|
||||||
HttpServer = ServerFactory.CreateServer(this, LogManager, "Media Browser", WebApplicationName, "dashboard/index.html");
|
HttpServer = ServerFactory.CreateServer(this, LogManager, "Media Browser", WebApplicationName, "dashboard/index.html", _supportsNativeWebSocket);
|
||||||
RegisterSingleInstance(HttpServer, false);
|
RegisterSingleInstance(HttpServer, false);
|
||||||
progress.Report(10);
|
progress.Report(10);
|
||||||
|
|
||||||
@ -548,11 +555,6 @@ namespace MediaBrowser.ServerApplication
|
|||||||
return new NetworkManager(logger);
|
return new NetworkManager(logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IFileSystem CreateFileSystemManager()
|
|
||||||
{
|
|
||||||
return FileSystemFactory.CreateFileSystemManager(LogManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers the media encoder.
|
/// Registers the media encoder.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
using System;
|
using Mono.Unix.Native;
|
||||||
#if __MonoCS__
|
using System;
|
||||||
using Mono.Unix.Native;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.IO;
|
|
||||||
#endif
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
@ -33,7 +29,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||||||
switch (arg)
|
switch (arg)
|
||||||
{
|
{
|
||||||
case "Version":
|
case "Version":
|
||||||
return "20140827";
|
return "20141005";
|
||||||
case "FFMpegFilename":
|
case "FFMpegFilename":
|
||||||
return "ffmpeg.exe";
|
return "ffmpeg.exe";
|
||||||
case "FFProbeFilename":
|
case "FFProbeFilename":
|
||||||
@ -82,7 +78,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||||||
switch (arg)
|
switch (arg)
|
||||||
{
|
{
|
||||||
case "Version":
|
case "Version":
|
||||||
return "20140506";
|
return "20140716";
|
||||||
case "FFMpegFilename":
|
case "FFMpegFilename":
|
||||||
return "ffmpeg";
|
return "ffmpeg";
|
||||||
case "FFProbeFilename":
|
case "FFProbeFilename":
|
||||||
@ -98,7 +94,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||||||
switch (arg)
|
switch (arg)
|
||||||
{
|
{
|
||||||
case "Version":
|
case "Version":
|
||||||
return "20140505";
|
return "20140716";
|
||||||
case "FFMpegFilename":
|
case "FFMpegFilename":
|
||||||
return "ffmpeg";
|
return "ffmpeg";
|
||||||
case "FFProbeFilename":
|
case "FFProbeFilename":
|
||||||
@ -138,15 +134,15 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||||||
{
|
{
|
||||||
return new[]
|
return new[]
|
||||||
{
|
{
|
||||||
"http://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20140827-git-9e8ab36-win64-static.7z",
|
"http://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20141005-git-e079d43-win64-static.7z",
|
||||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/windows/ffmpeg-20140827-git-9e8ab36-win64-static.7z"
|
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/windows/ffmpeg-20141005-git-e079d43-win64-static.7z"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return new[]
|
return new[]
|
||||||
{
|
{
|
||||||
"http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20140827-git-9e8ab36-win32-static.7z",
|
"http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20141005-git-e079d43-win32-static.7z",
|
||||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/windows/ffmpeg-20140827-git-9e8ab36-win32-static.7z"
|
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/windows/ffmpeg-20141005-git-e079d43-win32-static.7z"
|
||||||
};
|
};
|
||||||
|
|
||||||
case PlatformID.Unix:
|
case PlatformID.Unix:
|
||||||
@ -173,7 +169,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||||||
return new[]
|
return new[]
|
||||||
{
|
{
|
||||||
"http://ffmpeg.gusari.org/static/32bit/ffmpeg.static.32bit.latest.tar.gz",
|
"http://ffmpeg.gusari.org/static/32bit/ffmpeg.static.32bit.latest.tar.gz",
|
||||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/linux/ffmpeg.static.32bit.2014-05-06.tar.gz"
|
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/linux/ffmpeg.static.32bit.2014-07-16.tar.gz"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +178,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||||||
return new[]
|
return new[]
|
||||||
{
|
{
|
||||||
"http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.latest.tar.gz",
|
"http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.latest.tar.gz",
|
||||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/linux/ffmpeg.static.64bit.2014-05-05.tar.gz"
|
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/linux/ffmpeg.static.64bit.2014-07-16.tar.gz"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,8 +233,6 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||||||
private static Uname GetUnixName()
|
private static Uname GetUnixName()
|
||||||
{
|
{
|
||||||
var uname = new Uname();
|
var uname = new Uname();
|
||||||
|
|
||||||
#if __MonoCS__
|
|
||||||
Utsname utsname;
|
Utsname utsname;
|
||||||
var callResult = Syscall.uname(out utsname);
|
var callResult = Syscall.uname(out utsname);
|
||||||
if (callResult == 0)
|
if (callResult == 0)
|
||||||
@ -246,7 +240,6 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||||||
uname.sysname = utsname.sysname;
|
uname.sysname = utsname.sysname;
|
||||||
uname.machine = utsname.machine;
|
uname.machine = utsname.machine;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return uname;
|
return uname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user