remove mono compiler directives

pull/702/head
Luke Pulverenti 10 years ago
parent a9eed234ba
commit f02f322208

@ -316,14 +316,14 @@ namespace MediaBrowser.Api
/// <param name="deleteFiles">The delete files.</param>
/// <returns>Task.</returns>
/// <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))
{
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>
@ -332,7 +332,7 @@ namespace MediaBrowser.Api
/// <param name="killJob">The kill job.</param>
/// <param name="deleteFiles">The delete files.</param>
/// <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>();
@ -348,18 +348,9 @@ namespace MediaBrowser.Api
return;
}
await TranscodingStartLock.WaitAsync(CancellationToken.None).ConfigureAwait(false);
try
{
foreach (var job in jobs)
{
KillTranscodingJob(job, deleteFiles);
}
}
finally
foreach (var job in jobs)
{
TranscodingStartLock.Release();
KillTranscodingJob(job, deleteFiles);
}
}
@ -501,7 +492,7 @@ namespace MediaBrowser.Api
}
catch (FileNotFoundException)
{
}
catch (IOException ex)
{
@ -563,7 +554,7 @@ namespace MediaBrowser.Api
public long? BytesDownloaded { get; set; }
public long? BytesTranscoded { get; set; }
public long? TranscodingPositionTicks { get; set; }
public long? DownloadPositionTicks { get; set; }

@ -126,8 +126,14 @@ namespace MediaBrowser.Api.Movies
movies = _libraryManager.ReplaceVideosWithPrimaryVersions(movies);
var listEligibleForCategories = new List<BaseItem>();
var listEligibleForSuggestion = new List<BaseItem> ();
var list = movies.ToList();
listEligibleForCategories.AddRange(list);
listEligibleForSuggestion.AddRange(list);
if (user.Configuration.IncludeTrailersInSuggestions)
{
var trailerResult = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery
@ -138,17 +144,20 @@ namespace MediaBrowser.Api.Movies
}, CancellationToken.None).ConfigureAwait(false);
var newTrailers = trailerResult.Items;
listEligibleForSuggestion.AddRange(trailerResult.Items);
}
list.AddRange(newTrailers);
listEligibleForCategories = listEligibleForCategories
.DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
.DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString(), StringComparer.OrdinalIgnoreCase)
.ToList();
list = list
.DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
.DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString(), StringComparer.OrdinalIgnoreCase)
.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, list, request.CategoryLimit, request.ItemLimit, request.GetItemFields().ToList());
var result = GetRecommendationCategories(user, listEligibleForCategories, listEligibleForSuggestion, request.CategoryLimit, request.ItemLimit, request.GetItemFields().ToList());
return ToOptimizedResult(result);
}
@ -210,11 +219,11 @@ namespace MediaBrowser.Api.Movies
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 recentlyPlayedMovies = allMovies
var recentlyPlayedMovies = allMoviesForCategories
.Select(i =>
{
var userdata = _userDataRepository.GetUserData(user.Id, i.GetUserDataKey());

@ -1645,6 +1645,17 @@ namespace MediaBrowser.Api.Playback
{
state.OutputVideoCodec = GetVideoCodec(videoRequest);
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);

@ -139,7 +139,7 @@ namespace MediaBrowser.Api.Playback.Hls
// If the playlist doesn't already exist, startup ffmpeg
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)
{
@ -157,7 +157,7 @@ namespace MediaBrowser.Api.Playback.Hls
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 queryString = queryStringIndex == -1 ? string.Empty : Request.RawUrl.Substring(queryStringIndex);
var isLiveStream = (state.RunTimeTicks ?? 0) == 0;
// Main stream
var playlistUrl = (state.RunTimeTicks ?? 0) > 0 ? "main.m3u8" : "live.m3u8";
var playlistUrl = isLiveStream ? "live.m3u8" : "main.m3u8";
playlistUrl += queryString;
var request = (GetMasterHlsVideoStream)state.Request;
@ -418,7 +420,7 @@ namespace MediaBrowser.Api.Playback.Hls
AppendPlaylist(builder, playlistUrl, totalBitrate, subtitleGroup);
if (EnableAdaptiveBitrateStreaming(state))
if (EnableAdaptiveBitrateStreaming(state, isLiveStream))
{
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.
if (Request.IsLocal || NetworkManager.IsInLocalNetwork(Request.RemoteIp))
@ -491,13 +493,12 @@ namespace MediaBrowser.Api.Playback.Hls
}
var request = state.Request as GetMasterHlsVideoStream;
if (request != null && !request.EnableAdaptiveBitrateStreaming)
{
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
return false;

@ -72,9 +72,7 @@ namespace MediaBrowser.Api.Playback.Hls
public void Delete(StopEncodingProcess request)
{
var task = ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, path => true);
Task.WaitAll(task);
ApiEntryPoint.Instance.KillTranscodingJobs(request.DeviceId, path => true);
}
/// <summary>

@ -3,6 +3,7 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using ServiceStack;
using System;
@ -101,7 +102,7 @@ namespace MediaBrowser.Api.UserLibrary
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();

@ -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")]
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>
/// Gets the filters.
/// </summary>
@ -132,7 +147,7 @@ namespace MediaBrowser.Api.UserLibrary
/// Gets the order by.
/// </summary>
/// <returns>IEnumerable{ItemSortBy}.</returns>
public IEnumerable<string> GetOrderBy()
public string[] GetOrderBy()
{
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));
return personTypes.Length == 0 ?
people :
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.Where(p => personTypes.Contains(p.Type ?? string.Empty, StringComparer.OrdinalIgnoreCase) || personTypes.Contains(p.Role ?? string.Empty, StringComparer.OrdinalIgnoreCase));
return people;
}
}
}

@ -196,12 +196,15 @@ namespace MediaBrowser.Common.Implementations
/// <summary>
/// Initializes a new instance of the <see cref="BaseApplicationHost{TApplicationPathsType}"/> class.
/// </summary>
protected BaseApplicationHost(TApplicationPathsType applicationPaths, ILogManager logManager)
protected BaseApplicationHost(TApplicationPathsType applicationPaths,
ILogManager logManager,
IFileSystem fileSystem)
{
FailedAssemblies = new List<string>();
ApplicationPaths = applicationPaths;
LogManager = logManager;
FileSystemManager = fileSystem;
ConfigurationManager = GetConfigurationManager();
}
@ -441,7 +444,6 @@ namespace MediaBrowser.Common.Implementations
RegisterSingleInstance(TaskManager);
FileSystemManager = CreateFileSystemManager();
RegisterSingleInstance(FileSystemManager);
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>
/// 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

@ -15,11 +15,31 @@ namespace MediaBrowser.Common.Implementations.IO
protected ILogger Logger;
private readonly bool _supportsAsyncFileStreams;
private char[] _invalidFileNameChars;
public CommonFileSystem(ILogger logger, bool supportsAsyncFileStreams)
public CommonFileSystem(ILogger logger, bool supportsAsyncFileStreams, bool usePresetInvalidFileNameChars)
{
Logger = logger;
_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>
@ -129,18 +149,6 @@ namespace MediaBrowser.Common.Implementations.IO
/// The space char
/// </summary>
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>
/// Takes a filename and removes invalid characters
@ -157,7 +165,7 @@ namespace MediaBrowser.Common.Implementations.IO
var builder = new StringBuilder(filename);
foreach (var c in InvalidFileNameChars)
foreach (var c in _invalidFileNameChars)
{
builder = builder.Replace(c, SpaceChar);
}
@ -300,7 +308,7 @@ namespace MediaBrowser.Common.Implementations.IO
{
throw new ArgumentNullException("path");
}
return path.IndexOf(parentPath.TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase) != -1;
}
@ -310,12 +318,12 @@ namespace MediaBrowser.Common.Implementations.IO
{
throw new ArgumentNullException("path");
}
var parent = Path.GetDirectoryName(path);
if (!string.IsNullOrEmpty(parent))
{
return false;
return false;
}
return true;

@ -22,7 +22,7 @@ namespace MediaBrowser.Controller.Channels
return base.IsVisible(user);
}
public override async Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query)
public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
{
try
{

@ -44,7 +44,7 @@ namespace MediaBrowser.Controller.Channels
return ExternalId;
}
public override async Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query)
public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
{
try
{

@ -770,7 +770,7 @@ namespace MediaBrowser.Controller.Entities
return item;
}
public virtual Task<QueryResult<BaseItem>> GetUserItems(UserItemsQuery query)
public virtual Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
{
var user = query.User;
@ -783,7 +783,7 @@ namespace MediaBrowser.Controller.Entities
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);
}

@ -3,7 +3,7 @@ using System;
namespace MediaBrowser.Controller.Entities
{
public class UserItemsQuery
public class InternalItemsQuery
{
public bool Recursive { get; set; }
@ -21,15 +21,21 @@ namespace MediaBrowser.Controller.Entities
public bool? IsFolder { get; set; }
public bool? IsFavorite { get; set; }
public bool? IsFavoriteOrLiked { get; set; }
public bool? IsLiked { get; set; }
public bool? IsPlayed { get; set; }
public bool? IsResumable { get; set; }
public string[] MediaTypes { get; set; }
public UserItemsQuery()
public string[] IncludeItemTypes { get; set; }
public string[] ExcludeItemTypes { get; set; }
public InternalItemsQuery()
{
SortBy = new string[] { };
MediaTypes = new string[] { };
IncludeItemTypes = new string[] { };
ExcludeItemTypes = new string[] { };
}
}
}

@ -16,8 +16,14 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
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
{
UserId = query.User.Id.ToString("N")

@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.Entities
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)
.GetUserItems(this, ViewType, query);
@ -23,7 +23,7 @@ namespace MediaBrowser.Controller.Entities
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{
var result = GetUserItems(new UserItemsQuery
var result = GetItems(new InternalItemsQuery
{
User = user
@ -34,7 +34,7 @@ namespace MediaBrowser.Controller.Entities
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true)
{
var result = GetUserItems(new UserItemsQuery
var result = GetItems(new InternalItemsQuery
{
User = user,
Recursive = true

@ -39,7 +39,7 @@ namespace MediaBrowser.Controller.Entities
_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;
@ -214,7 +214,7 @@ namespace MediaBrowser.Controller.Entities
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)
{
@ -236,7 +236,7 @@ namespace MediaBrowser.Controller.Entities
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>();
@ -249,7 +249,7 @@ namespace MediaBrowser.Controller.Entities
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 })
.Where(i => !i.IsFolder)
@ -273,7 +273,7 @@ namespace MediaBrowser.Controller.Entities
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 })
.Where(i => !i.IsFolder)
@ -297,7 +297,7 @@ namespace MediaBrowser.Controller.Entities
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 })
.Where(i => !i.IsFolder)
@ -321,17 +321,17 @@ namespace MediaBrowser.Controller.Entities
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);
}
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);
}
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.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);
}
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)
{
@ -360,52 +360,52 @@ namespace MediaBrowser.Controller.Entities
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;
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;
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;
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;
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;
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);
}
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);
}
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.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);
}
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.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);
}
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 })
.Where(i => i is Movie)
@ -447,7 +447,7 @@ namespace MediaBrowser.Controller.Entities
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)
{
@ -469,7 +469,7 @@ namespace MediaBrowser.Controller.Entities
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)
{
@ -489,7 +489,7 @@ namespace MediaBrowser.Controller.Entities
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.SortOrder = SortOrder.Descending;
@ -497,7 +497,7 @@ namespace MediaBrowser.Controller.Entities
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.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);
}
private QueryResult<BaseItem> GetFavoriteGames(Folder parent, User user, UserItemsQuery query)
private QueryResult<BaseItem> GetFavoriteGames(Folder parent, User user, InternalItemsQuery query)
{
query.IsFavorite = true;
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.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);
}
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 });
@ -536,7 +536,7 @@ namespace MediaBrowser.Controller.Entities
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.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);
}
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);
}
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 })
.OfType<Series>()
@ -575,12 +575,12 @@ namespace MediaBrowser.Controller.Entities
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);
}
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 })
.OfType<Game>()
@ -616,7 +616,7 @@ namespace MediaBrowser.Controller.Entities
}
private QueryResult<BaseItem> GetResult<T>(IEnumerable<T> items,
UserItemsQuery query)
InternalItemsQuery query)
where T : BaseItem
{
return GetResult(items, null, query);
@ -624,7 +624,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetResult<T>(IEnumerable<T> items,
int? totalRecordLimit,
UserItemsQuery query)
InternalItemsQuery query)
where T : BaseItem
{
return SortAndFilter(items, totalRecordLimit, query, _libraryManager, _userDataManager);
@ -632,7 +632,7 @@ namespace MediaBrowser.Controller.Entities
public static QueryResult<BaseItem> SortAndFilter(IEnumerable<BaseItem> items,
int? totalRecordLimit,
UserItemsQuery query,
InternalItemsQuery query,
ILibraryManager libraryManager,
IUserDataManager userDataManager)
{
@ -645,7 +645,7 @@ namespace MediaBrowser.Controller.Entities
public static QueryResult<BaseItem> Sort(IEnumerable<BaseItem> items,
int? totalRecordLimit,
UserItemsQuery query,
InternalItemsQuery query,
ILibraryManager libraryManager)
{
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))
{
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)
{
return false;
@ -695,6 +705,27 @@ namespace MediaBrowser.Controller.Entities
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)
{
userData = userData ?? userDataManager.GetUserData(user.Id, item.GetUserDataKey());

@ -151,6 +151,7 @@
<Compile Include="Entities\ILibraryItem.cs" />
<Compile Include="Entities\ImageSourceInfo.cs" />
<Compile Include="Entities\IMetadataContainer.cs" />
<Compile Include="Entities\InternalItemsQuery.cs" />
<Compile Include="Entities\ISupportsBoxSetGrouping.cs" />
<Compile Include="Entities\ISupportsPlaceHolders.cs" />
<Compile Include="Entities\ItemImageInfo.cs" />
@ -160,7 +161,6 @@
<Compile Include="Entities\IHasAwards.cs" />
<Compile Include="Entities\Photo.cs" />
<Compile Include="Entities\PhotoAlbum.cs" />
<Compile Include="Entities\UserItemsQuery.cs" />
<Compile Include="Entities\UserView.cs" />
<Compile Include="Entities\UserViewBuilder.cs" />
<Compile Include="FileOrganization\IFileOrganizationService.cs" />

@ -341,7 +341,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
isFolder = true;
}
return await folder.GetUserItems(new UserItemsQuery
return await folder.GetItems(new InternalItemsQuery
{
Limit = limit,
StartIndex = startIndex,
@ -364,7 +364,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
sortOrders.Add(ItemSortBy.SortName);
}
return await folder.GetUserItems(new UserItemsQuery
return await folder.GetItems(new InternalItemsQuery
{
Limit = limit,
StartIndex = startIndex,

@ -766,12 +766,10 @@ namespace MediaBrowser.Dlna.Didl
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;
}
}

@ -6,6 +6,7 @@ using MediaBrowser.Controller.Drawing;
using MediaBrowser.Dlna.Profiles;
using MediaBrowser.Dlna.Server;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Dlna.Profiles;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
using System;

@ -87,7 +87,6 @@
<Compile Include="Common\ServiceAction.cs" />
<Compile Include="PlayTo\TRANSPORTSTATE.cs" />
<Compile Include="PlayTo\uParserObject.cs" />
<Compile Include="Profiles\AndroidProfile.cs" />
<Compile Include="Profiles\Foobar2000Profile.cs" />
<Compile Include="Profiles\MediaMonkeyProfile.cs" />
<Compile Include="Profiles\Windows81Profile.cs" />
@ -114,7 +113,6 @@
<Compile Include="Common\DeviceIcon.cs" />
<Compile Include="PlayTo\uParser.cs" />
<Compile Include="PlayTo\uPnpNamespaces.cs" />
<Compile Include="Profiles\DefaultProfile.cs" />
<Compile Include="Profiles\DenonAvrProfile.cs" />
<Compile Include="Profiles\LgTvProfile.cs" />
<Compile Include="Profiles\LinksysDMA2100Profile.cs" />

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,6 +1,7 @@
using System.Xml.Serialization;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
using MediaBrowser.Model.MediaInfo;
namespace MediaBrowser.Dlna.Profiles

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -1,5 +1,6 @@
using MediaBrowser.Model.Dlna;
using System.Xml.Serialization;
using MediaBrowser.Model.Dlna.Profiles;
namespace MediaBrowser.Dlna.Profiles
{

@ -49,6 +49,7 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- 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.

@ -248,6 +248,15 @@
<Compile Include="..\MediaBrowser.Model\Dlna\ProfileConditionValue.cs">
<Link>Dlna\ProfileConditionValue.cs</Link>
</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">
<Link>Dlna\ResponseProfile.cs</Link>
</Compile>

@ -220,6 +220,15 @@
<Compile Include="..\MediaBrowser.Model\Dlna\ProfileConditionValue.cs">
<Link>Dlna\ProfileConditionValue.cs</Link>
</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">
<Link>Dlna\ResponseProfile.cs</Link>
</Compile>

@ -6,6 +6,11 @@ namespace MediaBrowser.Model.ApiClient
public ConnectionState State { get; set; }
public ServerInfo ServerInfo { get; set; }
public IApiClient ApiClient { get; set; }
public ConnectionResult()
{
State = ConnectionState.Unavailable;
}
}
public enum ConnectionState

@ -175,7 +175,7 @@ namespace MediaBrowser.Model.Configuration
public PeopleMetadataOptions PeopleMetadataOptions { get; set; }
public string[] SecureApps2 { get; set; }
public string[] InsecureApps { get; set; }
public bool SaveMetadataHidden { get; set; }
@ -226,15 +226,12 @@ namespace MediaBrowser.Model.Configuration
PeopleMetadataOptions = new PeopleMetadataOptions();
SecureApps2 = new[]
InsecureApps = new[]
{
"Dashboard",
"MBKinect",
"NuVue",
"Media Browser Theater",
//"Chrome Companion",
"MB-Classic"
"Roku",
"Chromecast",
"iOS",
"Android"
};
MetadataOptions = new[]

@ -20,5 +20,19 @@ namespace MediaBrowser.Model.Dlna
{
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")]
public class AndroidProfile : DefaultProfile
@ -91,33 +90,10 @@ namespace MediaBrowser.Dlna.Profiles
Type = CodecType.Video,
Conditions = new []
{
new ProfileCondition
{
Condition = ProfileConditionType.LessThanEqual,
Property = ProfileConditionValue.Width,
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
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Width, "1920"),
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.Height, "1080"),
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.VideoBitDepth, "8"),
new ProfileCondition(ProfileConditionType.NotEquals, ProfileConditionValue.IsAnamorphic, "true")
}
},
@ -127,12 +103,7 @@ namespace MediaBrowser.Dlna.Profiles
Codec = "aac",
Conditions = new []
{
new ProfileCondition
{
Condition = ProfileConditionType.LessThanEqual,
Property = ProfileConditionValue.AudioChannels,
Value = "2"
}
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.AudioChannels, "2")
}
},
@ -142,12 +113,7 @@ namespace MediaBrowser.Dlna.Profiles
Codec = "aac",
Conditions = new []
{
new ProfileCondition
{
Condition = ProfileConditionType.LessThanEqual,
Property = ProfileConditionValue.AudioChannels,
Value = "2"
}
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.AudioChannels, "2")
}
},
@ -157,18 +123,8 @@ namespace MediaBrowser.Dlna.Profiles
Codec = "mp3",
Conditions = new []
{
new ProfileCondition
{
Condition = ProfileConditionType.LessThanEqual,
Property = ProfileConditionValue.AudioChannels,
Value = "2"
},
new ProfileCondition
{
Condition = ProfileConditionType.LessThanEqual,
Property = ProfileConditionValue.AudioBitrate,
Value = "320000"
}
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.AudioChannels, "2"),
new ProfileCondition(ProfileConditionType.LessThanEqual, ProfileConditionValue.AudioBitrate, "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")]
public class DefaultProfile : DeviceProfile

@ -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\SubtitlePlaybackMode.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="Dto\StreamOptions.cs" />
<Compile Include="Entities\ExtraType.cs" />

@ -162,26 +162,14 @@ namespace MediaBrowser.Providers.BoxSets
{
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 preferred language isn't english, get those images too
if (!imageLanguages.Contains(language, StringComparer.OrdinalIgnoreCase))
{
imageLanguages.Add(language);
}
url += string.Format("&language={0}", language);
}
var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
// Get images in english and with no language
url += "&include_image_language=" + string.Join(",", imageLanguages.ToArray());
url += "&include_image_language=" + includeImageLanguageParam;
cancellationToken.ThrowIfCancellationRequested();
@ -231,7 +219,7 @@ namespace MediaBrowser.Providers.BoxSets
if (fileInfo.Exists)
{
// 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;
}

@ -136,6 +136,7 @@
<Compile Include="Music\MusicBrainzArtistProvider.cs" />
<Compile Include="Music\MusicExternalIds.cs" />
<Compile Include="Music\MusicVideoMetadataService.cs" />
<Compile Include="Omdb\OmdbImageProvider.cs" />
<Compile Include="Omdb\OmdbProvider.cs" />
<Compile Include="Omdb\OmdbItemProvider.cs" />
<Compile Include="People\MovieDbPersonImageProvider.cs" />

@ -432,7 +432,7 @@ namespace MediaBrowser.Providers.Movies
if (fileInfo.Exists)
{
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 3)
{
return _cachedTask;
}

@ -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
{
private static readonly SemaphoreSlim ResourcePool = new SemaphoreSlim(1, 1);
internal static readonly SemaphoreSlim ResourcePool = new SemaphoreSlim(1, 1);
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
private readonly CultureInfo _usCulture = new CultureInfo("en-US");

@ -185,7 +185,7 @@ namespace MediaBrowser.Providers.People
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;
}

@ -381,7 +381,7 @@ namespace MediaBrowser.Providers.TV
if (fileInfo.Exists)
{
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
if ((DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 3)
{
return;
}

@ -214,26 +214,14 @@ namespace MediaBrowser.Providers.TV
{
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 preferred language isn't english, get those images too
if (imageLanguages.Contains(language, StringComparer.OrdinalIgnoreCase))
{
imageLanguages.Add(language);
}
url += string.Format("&language={0}", language);
}
var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
// Get images in english and with no language
url += "&include_image_language=" + string.Join(",", imageLanguages.ToArray());
url += "&include_image_language=" + includeImageLanguageParam;
cancellationToken.ThrowIfCancellationRequested();

@ -198,26 +198,14 @@ namespace MediaBrowser.Providers.TV
{
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 preferred language isn't english, get those images too
if (imageLanguages.Contains(language, StringComparer.OrdinalIgnoreCase))
{
imageLanguages.Add(language);
}
url += string.Format("&language={0}", language);
}
var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
// Get images in english and with no language
url += "&include_image_language=" + string.Join(",", imageLanguages.ToArray());
url += "&include_image_language=" + includeImageLanguageParam;
cancellationToken.ThrowIfCancellationRequested();

@ -295,26 +295,14 @@ namespace MediaBrowser.Providers.TV
{
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 preferred language isn't english, get those images too
if (imageLanguages.Contains(language, StringComparer.OrdinalIgnoreCase))
{
imageLanguages.Add(language);
}
url += string.Format("&language={0}", language);
}
var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(_localization, language);
// Get images in english and with no language
url += "&include_image_language=" + string.Join(",", imageLanguages.ToArray());
url += "&include_image_language=" + includeImageLanguageParam;
cancellationToken.ThrowIfCancellationRequested();

@ -214,13 +214,9 @@ namespace MediaBrowser.Server.Implementations.Configuration
public void DisableMetadataService(string service)
{
DisableMetadataService(typeof(Movie), Configuration, service);
DisableMetadataService(typeof(MusicAlbum), Configuration, service);
DisableMetadataService(typeof(MusicArtist), Configuration, service);
DisableMetadataService(typeof(Episode), Configuration, service);
DisableMetadataService(typeof(Season), Configuration, service);
DisableMetadataService(typeof(Series), Configuration, service);
DisableMetadataService(typeof(MusicVideo), Configuration, service);
DisableMetadataService(typeof(Trailer), Configuration, service);
DisableMetadataService(typeof(Video), Configuration, service);
}

@ -43,6 +43,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
private readonly ReaderWriterLockSlim _localEndpointLock = new ReaderWriterLockSlim();
private readonly bool _supportsNativeWebSocket;
/// <summary>
/// Gets the local end points.
/// </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)
{
DefaultRedirectPath = defaultRedirectPath;
_supportsNativeWebSocket = supportsNativeWebSocket;
HandlerPath = handlerPath;
_logger = logManager.GetLogger("HttpServer");
@ -195,7 +204,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
{
HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
_listener = NativeWebSocket.IsSupported
_listener = _supportsNativeWebSocket && NativeWebSocket.IsSupported
? _listener = new HttpListenerServer(_logger, OnRequestReceived)
//? _listener = new WebSocketSharpListener(_logger, OnRequestReceived)
: _listener = new WebSocketSharpListener(_logger, OnRequestReceived);

@ -219,11 +219,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer
{
get
{
#if __MonoCS__
return false;
#else
#endif
if (!_supportsNativeWebSocket.HasValue)
{
try

@ -1,4 +1,5 @@
using MediaBrowser.Controller.Configuration;
using System.Collections.Generic;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Session;
@ -57,15 +58,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
}
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);
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);
}

@ -18,12 +18,18 @@ namespace MediaBrowser.Server.Implementations.HttpServer
/// <param name="serverName">Name of the server.</param>
/// <param name="handlerPath">The handler path.</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>
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);
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)
{
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)
{
@ -501,14 +503,15 @@ namespace MediaBrowser.Server.Implementations.Library
if (primary != null)
{
return primary;
dict[primary.Id] = primary;
continue;
}
}
}
dict[item.Id] = item;
}
return i;
}).DistinctBy(i => i.Id);
return dict.Values;
}
/// <summary>

@ -593,5 +593,5 @@
"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.",
"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.",
"ButtonPreviousTrack": "Pista Anterior",
"LabelEnabled": "Habilitado",
"LabelDisabled": "Deshabilitado",
"LabelDisabled": "Desactivado",
"ButtonMoreInformation": "Mas Informaci\u00f3n",
"LabelNoUnreadNotifications": "No hay notificaciones sin leer.",
"ButtonViewNotifications": "Ver notificaciones",
@ -585,13 +585,13 @@
"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",
"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.",
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
"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.",
"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."
"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": "Cree cuentas f\u00e1cilmente para sus amigos y familia, cada una con sus propios permisos, accesos a la biblioteca, controles parentales y m\u00e1s.",
"DashboardTourCinemaMode": "El modo cine trae la experiencia del cine directo a su sala de TV con la capacidad de reproducir avances e intros personalizados antes de la presentaci\u00f3n estelar.",
"DashboardTourChapters": "Active la generaci\u00f3n de im\u00e1genes de cap\u00edtulos de sus videos para una presentaci\u00f3n m\u00e1s agradable al desplegar.",
"DashboardTourSubtitles": "Descargue autom\u00e1ticamente subt\u00edtulos para sus videos en cualquier lenguaje.",
"DashboardTourPlugins": "Instale complementos como canales de video de Internet, TV en vivo, buscadores de metadatos y m\u00e1s.",
"DashboardTourNotifications": "Env\u00ede notificaciones automatizadas de eventos del servidor a sus dispositivos m\u00f3viles, correo electr\u00f3nico y m\u00e1s.",
"DashboardTourScheduledTasks": "Administre f\u00e1cilmente operaciones de larga duraci\u00f3n con tareas programadas. Decida cuando se ejecutar\u00e1n y con que periodicidad.",
"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.",
"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.",
"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.",
"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.",

@ -601,5 +601,6 @@
"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.",
"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",
"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",
"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.",
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
"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.",
"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."
"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": "\u0414\u043e\u0441\u0442\u0430\u0440\u044b\u04a3\u044b\u0437 \u0431\u0435\u043d \u043e\u0442\u0431\u0430\u0441\u044b\u04a3\u044b\u0437 \u04d9\u0440\u049b\u0430\u0439\u0441\u044b\u043d\u0430 \u04e9\u0437\u0456\u043d\u0456\u04a3 \u049b\u04b1\u049b\u044b\u049b\u0442\u0430\u0440\u044b, \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430 \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443\u044b, \u043c\u0430\u0437\u043c\u04b1\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0443\u044b \u0436\u04d9\u043d\u0435 \u0442.\u0431. \u0431\u0430\u0440 \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u043b\u0435\u0440\u0456\u043d \u0436\u0435\u04a3\u0456\u043b \u0436\u0430\u0441\u0430\u04a3\u044b\u0437.",
"DashboardTourCinemaMode": "\u041a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440 \u0440\u0435\u0436\u0456\u043c\u0456 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0442\u0435\u04a3\u0448\u0435\u043b\u0433\u0435\u043d \u043a\u04e9\u0440\u043d\u0435\u0443\u0434\u0456 \u0431\u0430\u0441\u0442\u044b \u049b\u0430\u0441\u0438\u0435\u0442\u0442\u0456\u04a3 \u0430\u043b\u0434\u044b\u043d\u0434\u0430 \u043e\u0439\u043d\u0430\u0442\u0443 \u049b\u0430\u0431\u0456\u043b\u0435\u0442\u0456\u043c\u0435\u043d \u043a\u0438\u043d\u043e \u043a\u04e9\u0440\u0441\u0435\u0442\u0435\u0442\u0456\u043d \u0437\u0430\u043b \u04d9\u0441\u0435\u0440\u0456\u043d \u049b\u043e\u043d\u0430\u049b\u0436\u0430\u0439\u044b\u04a3\u044b\u0437\u0493\u0430 \u0442\u0456\u043a\u0435\u043b\u0435\u0439 \u0436\u0435\u0442\u043a\u0456\u0437\u0435\u0434\u0456.",
"DashboardTourChapters": "\u0411\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0434\u0456 \u049b\u0430\u0440\u0430\u0493\u0430\u043d \u043a\u0435\u0437\u0434\u0435 \u04b1\u043d\u0430\u043c\u0434\u044b\u043b\u0430\u0443 \u043a\u04e9\u0440\u0441\u0435\u0442\u0456\u043c \u04af\u0448\u0456\u043d \u0441\u0430\u0445\u043d\u0430 \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0456\u043d \u0442\u0443\u0434\u044b\u0440\u0443\u044b\u043d \u049b\u043e\u0441\u044b\u04a3\u044b\u0437.",
"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": "\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": "\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": "\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": "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",
"MediaInfoTimestamp": "Tijdstempel",
"MediaInfoPixelFormat": "Pixel formaat",
"MediaInfoBitDepth": "Bit depth",
"MediaInfoBitDepth": "Bitdiepte",
"MediaInfoSampleRate": "Samplesnelheid",
"MediaInfoBitrate": "Bitrate",
"MediaInfoChannels": "Kanalen",
@ -585,13 +585,13 @@
"WebClientTourMobile1": "De web client werk perfect op smartphones en tablets...",
"WebClientTourMobile2": "en kan elke andere Media Browser app bedienen",
"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.",
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
"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.",
"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."
"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": "Maak gemakkelijk gebruikersaccounts voor uw vrienden en familie, elk met hun eigen machtigingen, bibliotheek toegang, ouderlijk toezicht en meer.",
"DashboardTourCinemaMode": "Cinema mode brengt de theater ervaring naar je woonkamer met de mogelijkheid om trailers en eigen intro's voor de film af te spelen",
"DashboardTourChapters": "Schakel hoofdstuk afbeeldingen genereren in voor uw video's voor een aantrekkelijker presentatie tijdens het kijken.",
"DashboardTourSubtitles": "Download automatisch ondertitels voor uw video's in een andere talen.",
"DashboardTourPlugins": "Installeer plugins zoals Internet videokanalen, live tv, metadata, scanners en meer.",
"DashboardTourNotifications": "Meldingen van de server gebeurtenissen automatisch verzenden naar uw mobiele apparaat, e-mail en meer.",
"DashboardTourScheduledTasks": "Beheer eenvoudig langlopende transacties met geplande taken. Beslis zelf wanneer ze worden uitgevoerd en hoe vaak.",
"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...",
"WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser",
"MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u044f\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f",
"DashboardTourDashboard": "The server dashboard allows you to monitor your server and your users. You'll always know who is doing what and where they are.",
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
"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.",
"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."
"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": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0447\u043b\u0435\u043d\u043e\u0432 \u0441\u0435\u043c\u044c\u0438, \u043a\u0430\u0436\u0434\u0443\u044e \u0441 \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u043c \u0438 \u0442.\u0434.",
"DashboardTourCinemaMode": "\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440\u0430 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u0438\u043d\u043e\u0437\u0430\u043b\u0430 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0432 \u0432\u0430\u0448\u0443 \u0433\u043e\u0441\u0442\u0438\u043d\u0443\u044e, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.",
"DashboardTourChapters": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0441\u0446\u0435\u043d \u043a \u0432\u0438\u0434\u0435\u043e, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.",
"DashboardTourSubtitles": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0439\u0442\u0435 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435.",
"DashboardTourPlugins": "\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432\u0438\u0434\u0435\u043e, \u044d\u0444\u0438\u0440\u043d\u043e\u0433\u043e \u0442\u0432, \u0441\u043a\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0442.\u043f.",
"DashboardTourNotifications": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u043d\u0430 \u0432\u0430\u0448\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u044d-\u043f\u043e\u0447\u0442\u0443 \u0438 \u0442.\u043f.",
"DashboardTourScheduledTasks": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\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": "\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.",
"FileReadError": "Ett fel intr\u00e4ffade vid inl\u00e4sningen av filen.",
"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",
"PasswordResetComplete": "L\u00f6senordet har \u00e5terst\u00e4llts.",
"PasswordResetConfirmation": "\u00c4r du s\u00e4ker p\u00e5 att du vill \u00e5terst\u00e4lla l\u00f6senordet?",
@ -58,14 +58,14 @@
"ButtonMute": "Tyst",
"ButtonUnmute": "Muting av",
"ButtonStop": "Stopp",
"ButtonNextTrack": "Next Track",
"ButtonNextTrack": "N\u00e4sta sp\u00e5r",
"ButtonPause": "Paus",
"ButtonPlay": "Spela upp",
"ButtonEdit": "\u00c4ndra",
"ButtonQueue": "K\u00f6",
"ButtonPlayTrailer": "Play trailer",
"ButtonPlayTrailer": "Visa trailer",
"ButtonPlaylist": "Spellista",
"ButtonPreviousTrack": "Previous Track",
"ButtonPreviousTrack": "F\u00f6reg\u00e5ende sp\u00e5r",
"LabelEnabled": "Aktiverad",
"LabelDisabled": "Avaktiverad",
"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?",
"HeaderResume": "\u00c5teruppta",
"HeaderMyViews": "Mina vyer",
"HeaderLibraryFolders": "Media Folders",
"HeaderLibraryFolders": "Mediamappar",
"HeaderLatestMedia": "Nytillkommet",
"ButtonMoreItems": "Mer...",
"ButtonMore": "More",
"ButtonMore": "Mer",
"HeaderFavoriteMovies": "Favoritfilmer",
"HeaderFavoriteShows": "Favoritserier",
"HeaderFavoriteEpisodes": "Favoritavsnitt",
@ -136,7 +136,7 @@
"HeaderSelectTranscodingPath": "V\u00e4lj plats f\u00f6r mellanlagring vid omkodning",
"HeaderSelectImagesByNamePath": "V\u00e4lj plats f\u00f6r ImagesByName",
"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.",
"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.",
@ -319,7 +319,7 @@
"HeaderSelectPlayer": "V\u00e4lj uppspelare:",
"ButtonSelect": "V\u00e4lj",
"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",
"ButtonAddToPlaylist": "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...",
"WebClientTourMobile2": "och kan enkelt fj\u00e4rrstyra andra enheter och Media Browser-appar",
"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.",
"DashboardTourUsers": "Easily create user accounts for your friends and family, each with their own permissions, library access, parental controls and more.",
"DashboardTourCinemaMode": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
"DashboardTourChapters": "Enable chapter image generation for your videos for a more pleasing presentation while viewing.",
"DashboardTourSubtitles": "Automatically download subtitles for your videos in any language.",
"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.",
"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."
"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": "Skapa enkelt anv\u00e4ndarkonton f\u00f6r dina v\u00e4nner och familj, alla med sina egna beh\u00f6righeter, biblioteks \u00e5tkomst, f\u00f6r\u00e4ldrakontroll och mycket mer.",
"DashboardTourCinemaMode": "Biol\u00e4get g\u00f6r ditt vardagsrum till en biograf genom m\u00f6jligheten att visa trailers och egna vinjetter innan filmen b\u00f6rjar.",
"DashboardTourChapters": "Ta fram kapitelbildrutor fr\u00e5n videofiler f\u00f6r att f\u00e5 en snyggare presentation.",
"DashboardTourSubtitles": "H\u00e4mta automatiskt undertexter f\u00f6r dina videor p\u00e5 alla spr\u00e5k.",
"DashboardTourPlugins": "Installera till\u00e4gg s\u00e5som Internetvideokanaler, live-TV, metadatah\u00e4mtare och mycket mer.",
"DashboardTourNotifications": "Skicka automatiskt meddelanden om serverh\u00e4ndelser till din mobiltelefon, e-post och mycket mer.",
"DashboardTourScheduledTasks": "Hantera enkelt tidskr\u00e4vande uppgifter med hj\u00e4lp av schemalagda aktiviteter. Best\u00e4m n\u00e4r de skall k\u00f6ras, och hur ofta.",
"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",
"HeaderCinemaMode": "Kino-Modus",
"HeaderStatus": "Status",
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
"HeaderWelcomeToMediaBrowserServerDashboard": "Willkommen zur Media Browser \u00dcbersicht",
"OptionContinuing": "Fortdauernd",
"OptionEnded": "Beendent",
"HeaderAirDays": "Ausstrahlungstage",

@ -39,7 +39,7 @@
"UserCreatedWithName": "Se ha creado el usuario {0}",
"LabelYourFirstName": "Su nombre:",
"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}",
"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",
@ -51,7 +51,7 @@
"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.",
"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}",
"LabelConfigureSettings": "Configuraci\u00f3n de opciones",
"UserStoppedPlayingItemWithValues": "{0} ha detenido la reproducci\u00f3n de {1}",
@ -294,7 +294,7 @@
"OptionBackdrop": "Imagen de Fondo",
"LabelExtractChaptersDuringLibraryScan": "Extraer im\u00e1genes de cap\u00edtulos durante el escaneo de la biblioteca",
"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",
"LabelConnectUserName": "Nombre de Usuario\/email de Media Browser:",
"OptionBanner": "T\u00edtulo",
@ -378,13 +378,13 @@
"OptionParentalRating": "Clasificaci\u00f3n Parental",
"LabelDisplayTrailersWithinMovieSuggestionsHelp": "Requiere la instalaci\u00f3n del canal de avances.",
"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",
"LabelEnableCinemaMode": "Enable cinema mode",
"LabelEnableCinemaMode": "Activar modo cine",
"TabAdvanced": "Avanzado",
"HeaderCinemaMode": "Cinema Mode",
"HeaderCinemaMode": "Modo cine",
"HeaderStatus": "Estado",
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
"HeaderWelcomeToMediaBrowserServerDashboard": "Bienvenido al Panel de Control de Media Browser",
"OptionContinuing": "Continuando",
"OptionEnded": "Finalizado",
"HeaderAirDays": "D\u00edas de Emisi\u00f3n",
@ -414,8 +414,8 @@
"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.",
"OptionHideUser": "Ocultar este usuario en las pantallas de inicio de sesi\u00f3n",
"OptionDisableUser": "Deshabilitar este usuario",
"OptionDisableUserHelp": "Si est\u00e1 deshabilitado, el servidor no aceptar\u00e1 conexiones de este usuario. Las conexiones existentes ser\u00e1n finalizadas abruptamente.",
"OptionDisableUser": "Desactivar este usuario",
"OptionDisableUserHelp": "Si est\u00e1 desactivado, el servidor no aceptar\u00e1 conexiones de este usuario. Las conexiones existentes ser\u00e1n finalizadas abruptamente.",
"HeaderAdvancedControl": "Control Avanzado",
"LabelName": "Nombre:",
"OptionAllowUserToManageServer": "Permitir a este usuario administrar el servidor",
@ -769,7 +769,7 @@
"OptionCelsius": "Cent\u00edgrados",
"OptionFahrenheit": "Fahrenheit",
"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",
"OptionMobileApps": "Apps m\u00f3viles",
"HeaderNotificationList": "Haga clic en una notificaci\u00f3n para configurar sus opciones de envio.",
@ -1068,7 +1068,7 @@
"LabelProtocolInfo": "Informaci\u00f3n del protocolo:",
"LabelProtocolInfoHelp": "El valor que ser\u00e1 utilizado cuando se responde a solicitudes GetProtocolInfo desde el dispositivo.",
"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:",
"LabelKodiMetadataUserHelp": "Habilitar esto para mantener monitoreo de datos en sincron\u00eda entre Media Browser y Kodi.",
"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.",
"LabelKodiMetadataEnablePathSubstitutionHelp2": "Ver sustituci\u00f3n de trayectoras.",
"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",
"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.",

@ -380,9 +380,9 @@
"OptionPremiereDate": "Date de la premi\u00e8re",
"CinemaModeConfigurationHelp2": "Individual users will have the ability to disable cinema mode within their own preferences.",
"TabBasic": "Standard",
"LabelEnableCinemaMode": "Enable cinema mode",
"LabelEnableCinemaMode": "Activer le mode cin\u00e9ma",
"TabAdvanced": "Avanc\u00e9",
"HeaderCinemaMode": "Cinema Mode",
"HeaderCinemaMode": "Mode cin\u00e9ma",
"HeaderStatus": "\u00c9tat",
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
"OptionContinuing": "En continuation",

@ -755,10 +755,10 @@
"LabelEnableDlnaServer": "Omogu\u0107i Dlna server",
"LabelEnableDlnaServerHelp": "Omogu\u0107i svojim UPnP ure\u0111ajima na mre\u017ei da pretra\u017euji i reproduciraju Media Browser sadr\u017eaj.",
"LabelEnableBlastAliveMessages": "Objavi poruke dostupnosti",
"LabelEnableBlastAliveMessagesHelp": "Enable this if the server is not detected reliably by other UPnP devices on your network.",
"LabelBlastMessageInterval": "Alive message interval (seconds)",
"LabelBlastMessageIntervalHelp": "Determines the duration in seconds between server alive messages.",
"LabelDefaultUser": "Default user:",
"LabelEnableBlastAliveMessagesHelp": "Omogu\u0107i ovo ako server nije prikazan kao siguran za druge UPnP ure\u0111aje na mre\u017ei.",
"LabelBlastMessageInterval": "Interval poruka dostupnosti (sekunde)",
"LabelBlastMessageIntervalHelp": "Odre\u0111uje trajanje u sekundama izme\u0111u svake poruke dostupnosti servera.",
"LabelDefaultUser": "Zadani korisnik:",
"LabelDefaultUserHelp": "Determines which user library should be displayed on connected devices. This can be overridden for each device using profiles.",
"TitleDlna": "DLNA",
"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",
"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",
"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}",
"TitleMediaBrowser": "Media Browser",
"LabelIpAddressValue": "IP \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b: {0}",
@ -384,7 +384,7 @@
"TabAdvanced": "\u049a\u043e\u0441\u044b\u043c\u0448\u0430",
"HeaderCinemaMode": "\u041a\u0438\u043d\u043e\u0442\u0435\u0430\u0442\u0440 \u0440\u0435\u0436\u0456\u043c\u0456",
"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",
"OptionEnded": "\u0410\u044f\u049b\u0442\u0430\u043b\u0434\u044b",
"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.",
"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.",
"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",
"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.",

@ -384,7 +384,7 @@
"TabAdvanced": "Geavanceerd",
"HeaderCinemaMode": "Cinema Mode",
"HeaderStatus": "Status",
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
"HeaderWelcomeToMediaBrowserServerDashboard": "Welkom bij de Media Browser Dashboard",
"OptionContinuing": "Wordt vervolgd...",
"OptionEnded": "Gestopt",
"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",
"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",
"AppDeviceValues": "\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435: {0}, \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\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.",
"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\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438.",
"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",
"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:",
"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:",
"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:",
"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",
@ -384,7 +384,7 @@
"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",
"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",
"OptionEnded": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f",
"HeaderAirDays": "\u0414\u043d\u0438 \u044d\u0444\u0438\u0440\u0430",

@ -181,7 +181,7 @@
"HeaderAlternateEpisodeNumbers": "Alternativ avsnittsnumrering",
"HeaderUploadNewImage": "Ladda upp ny bild",
"HeaderSpecialEpisodeInfo": "Info om specialavsnitt",
"LabelDropImageHere": "Drop image here",
"LabelDropImageHere": "Dra bild hit",
"HeaderExternalIds": "Externa ID:n",
"ImageUploadAspectRatioHelp": "Bildf\u00f6rh\u00e5llande 1:1 rekommenderas. Endast JPG\/PNG.",
"LabelDvdSeasonNumber": "S\u00e4songsnummer p\u00e5 DVD:",
@ -384,10 +384,10 @@
"TabAdvanced": "Avancerat",
"HeaderCinemaMode": "Biol\u00e4ge",
"HeaderStatus": "Status",
"HeaderWelcomeToMediaBrowserServerDashboard": "Welcome to the Media Browser Dashboard",
"HeaderWelcomeToMediaBrowserServerDashboard": "V\u00e4lkommen till Media Browsers kontrollpanel",
"OptionContinuing": "P\u00e5g\u00e5ende",
"OptionEnded": "Avslutad",
"HeaderAirDays": "Air Days",
"HeaderAirDays": "S\u00e4ndningsdagar",
"OptionSunday": "S\u00f6ndag",
"OptionMonday": "M\u00e5ndag",
"OptionTuesday": "Tisdag",
@ -395,7 +395,7 @@
"OptionThursday": "Torsdag",
"OptionFriday": "Fredag",
"OptionSaturday": "L\u00f6rdag",
"HeaderManagement": "Management",
"HeaderManagement": "Administration",
"LabelManagement": "Administration:",
"OptionMissingImdbId": "IMDB-ID saknas",
"OptionMissingTvdbId": "TVDB-ID saknas",
@ -453,13 +453,13 @@
"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.",
"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):",
"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:",
"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:",
"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",
"TabTV": "TV",
"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.",
"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.",
"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:",
"ButtonAutoScroll": "Rulla listor automatiskt",
"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.",
"OptionImageSavingCompatible": "Compatible - Media Browser\/Kodi\/Plex",
"OptionImageSavingCompatible": "Kompatibelt - Media Browser\/Kodi\/Plex",
"OptionImageSavingStandard": "Standard - MB2",
"ButtonSignIn": "Logga in",
"TitleSignIn": "Logga in",
@ -748,8 +748,8 @@
"ButtonRetrieveKey": "H\u00e4mta donationskod",
"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.",
"MessageInvalidKey": "Supporter key is missing or invalid.",
"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.",
"MessageInvalidKey": "Supporterkod ogiltig eller saknas.",
"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",
"TabPlayTo": "Spela upp p\u00e5",
"LabelEnableDlnaServer": "Aktivera DLNA-server",
@ -778,9 +778,9 @@
"NotificationOptionPluginUpdateInstalled": "Till\u00e4gg har uppdaterats",
"NotificationOptionPluginInstalled": "Till\u00e4gg har installerats",
"NotificationOptionPluginUninstalled": "Till\u00e4gg har avinstallerats",
"NotificationOptionVideoPlayback": "Video playback started",
"NotificationOptionAudioPlayback": "Audio playback started",
"NotificationOptionGamePlayback": "Game playback started",
"NotificationOptionVideoPlayback": "Videouppspelning har p\u00e5b\u00f6rjats",
"NotificationOptionAudioPlayback": "Ljuduppspelning har p\u00e5b\u00f6rjats",
"NotificationOptionGamePlayback": "Spel har startats",
"NotificationOptionVideoPlaybackStopped": "Videouppspelning stoppad",
"NotificationOptionAudioPlaybackStopped": "Ljuduppspelning stoppad",
"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.",
"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:",
"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",
"LabelSkipIfGraphicalSubsPresentHelp": "Om du sparar textversioner av undertexterna f\u00e5r du ett b\u00e4ttre resultat vid anv\u00e4ndning av mobila enheter.",
"TabSubtitles": "Undertexter",
@ -942,7 +942,7 @@
"HeaderDownloadChaptersFor": "H\u00e4mta kapitelnamn f\u00f6r:",
"LabelOpenSubtitlesUsername": "Inloggnings-ID 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",
"LabelSubtitlePlaybackMode": "Undertextl\u00e4ge:",
"LabelDownloadLanguages": "Spr\u00e5k att ladda ner:",
@ -981,10 +981,10 @@
"OptionAuto": "Auto",
"OptionYes": "Ja",
"OptionNo": "Nej",
"LabelHomePageSection1": "Home page section 1:",
"LabelHomePageSection2": "Home page section 2:",
"LabelHomePageSection3": "Home page section 3:",
"LabelHomePageSection4": "Home page section 4:",
"LabelHomePageSection1": "Startsidans sektion 1:",
"LabelHomePageSection2": "Startsidans sektion 2:",
"LabelHomePageSection3": "Startsidans sektion 3:",
"LabelHomePageSection4": "Startsidans sektion 4:",
"OptionMyViewsButtons": "Mina vyer (knappar)",
"OptionMyViews": "Mina vyer",
"OptionMyViewsSmall": "Mina vyer (liten)",
@ -1059,10 +1059,10 @@
"ViewTypeMusicFavoriteArtists": "Favoritartister",
"ViewTypeMusicFavoriteSongs": "Favoritl\u00e5tar",
"HeaderMyViews": "Mina vyer",
"LabelSelectFolderGroups": "Automatically group content from the following folders into views such as Movies, Music and TV:",
"LabelSelectFolderGroupsHelp": "Folders that are unchecked will be displayed by themselves in their own view.",
"LabelSelectFolderGroups": "Gruppera automatiskt inneh\u00e5ll fr\u00e5n dessa mappar i vyer, t ex Filmer, Musik eller TV:",
"LabelSelectFolderGroupsHelp": "Ej valda mappar kommer att visas f\u00f6r sig sj\u00e4lva i en egen vy.",
"OptionDisplayAdultContent": "Visa erotiskt inneh\u00e5ll",
"OptionLibraryFolders": "Media folders",
"OptionLibraryFolders": "Mediamappar",
"TitleRemoteControl": "Fj\u00e4rrkontroll",
"OptionLatestTvRecordings": "Senaste inspelningar",
"LabelProtocolInfo": "Protokollinfo:",
@ -1080,7 +1080,7 @@
"LabelKodiMetadataEnablePathSubstitutionHelp2": "Se \"s\u00f6kv\u00e4gsutbyte\".",
"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.",
"LabelDisplayCollectionsView": "Display a collections view to show movie collections",
"LabelDisplayCollectionsView": "Vy som visar filmsamlingar",
"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.",
"TabServices": "Tj\u00e4nster",
@ -1090,7 +1090,7 @@
"HeaderBrandingHelp": "Anpassa utseendet p\u00e5 Media Browser till din grupp eller f\u00f6retags \u00f6nskem\u00e5l.",
"LabelLoginDisclaimer": "Ansvarsbegr\u00e4nsning vid inloggning:",
"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.",
"OptionList": "Lista",
"TabDashboard": "Kontrollpanel",
@ -1189,7 +1189,7 @@
"OptionReportArtists": "Artister",
"OptionReportAlbums": "Album",
"OptionReportAdultVideos": "Vuxen videos",
"ButtonMore": "More",
"ButtonMore": "Mer",
"HeaderActivity": "Aktivitet",
"ScheduledTaskStartedWithName": "{0} startad"
}

@ -93,7 +93,6 @@
<Reference Include="ServiceStack.Text">
<HintPath>..\ThirdParty\ServiceStack.Text\ServiceStack.Text.dll</HintPath>
</Reference>
<Reference Include="Mono.Posix" Condition=" '$(ConfigurationName)' == 'Release Mono' " />
<Reference Include="websocket-sharp, Version=1.0.2.508, Culture=neutral, PublicKeyToken=5660b08a1845a91e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<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>
<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="libmediainfo.so" os="linux" cpu="!x86,!x86_64"/>
<dllmap dll="MediaInfo" target="libmediainfo.so" os="linux"/>
</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">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@ -11,6 +11,8 @@
<AssemblyName>MediaBrowser.Server.Mono</AssemblyName>
<StartupObject>MediaBrowser.Server.Mono.MainClass</StartupObject>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
@ -43,16 +45,22 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<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="ServiceStack.Interfaces">
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
</Reference>
<Reference Include="Mono.Posix" Condition=" '$(ConfigurationName)' == 'Release Mono' " />
<Reference Include="MediaBrowser.IsoMounting.Linux">
<HintPath>..\ThirdParty\MediaBrowser.IsoMounting.Linux\MediaBrowser.IsoMounting.Linux.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\MediaBrowser.ServerApplication\IO\StartupOptions.cs">
<Link>IO\StartupOptions.cs</Link>
</Compile>
<Compile Include="..\SharedVersion.cs">
<Link>Properties\SharedVersion.cs</Link>
</Compile>
@ -78,13 +86,9 @@
<Compile Include="..\MediaBrowser.ServerApplication\FFMpeg\FFMpegDownloader.cs">
<Link>FFMpeg\FFMpegDownloader.cs</Link>
</Compile>
<Compile Include="IO\FileSystemFactory.cs" />
<Compile Include="..\MediaBrowser.ServerApplication\FFMpeg\FFMpegDownloadInfo.cs">
<Link>FFMpeg\FFMpegDownloadInfo.cs</Link>
</Compile>
<Compile Include="..\MediaBrowser.ServerApplication\IO\StartupOptions.cs">
<Link>IO\StartupOptions.cs"</Link>
</Compile>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
@ -137,68 +141,59 @@
<Name>MediaBrowser.XbmcMetadata</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Folder Include="EntryPoints\" />
<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">
<None Include="..\thirdparty\libwebp\linux\x86\libwebp.so">
<Link>libwebp\linux\lib\libwebp.so</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\libwebp\linux\x86_64\libwebp.so">
</None>
<None Include="..\thirdparty\libwebp\linux\x86_64\libwebp.so">
<Link>libwebp\linux\lib64\libwebp.so</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\libwebp\osx\libwebp.5.dylib">
</None>
<None Include="..\thirdparty\libwebp\osx\libwebp.5.dylib">
<Link>libwebp\osx\libwebp.5.dylib</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\SQLite3\windows\x86\3.8.2\sqlite3.dll">
<Link>sqlite3.dll</Link>
</None>
<None Include="..\thirdparty\mediainfo\osx\libmediainfo.dylib">
<Link>MediaInfo\osx\libmediainfo.dylib</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\ThirdParty\SQLite3\linux\x86\3.8.2\libsqlite3.so.0.8.6">
</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>
</Content>
<Content Include="..\ThirdParty\SQLite3\linux\x86_64\3.8.2\libsqlite3.so.0.8.6">
</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>
</Content>
<Content Include="..\ThirdParty\SQLite3\mac\universal\3.8.2\libsqlite3.0.dylib">
</None>
<None 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>
</None>
<None Include="app.config" />
<None Include="Imazen.WebP.dll.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Imazen.WebP.dll.config">
<Link>Imazen.WebP.dll.config</Link>
</None>
<None Include="MediaBrowser.MediaInfo.dll.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="MediaBrowser.MediaInfo.dll.config">
<Link>MediaBrowser.MediaInfo.dll.config</Link>
</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">
<Link>sqlite3.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
<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>

@ -1,30 +1,19 @@
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Constants;
using MediaBrowser.Common.Implementations.IO;
using MediaBrowser.Common.Implementations.Logging;
using MediaBrowser.Common.Implementations.Updates;
using MediaBrowser.Model.Logging;
using MediaBrowser.Server.Implementations;
using MediaBrowser.ServerApplication;
using MediaBrowser.ServerApplication.Native;
using MediaBrowser.ServerApplication.IO;
using Microsoft.Win32;
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Windows;
using System.Net;
using System.Net.Security;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
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
{
@ -123,7 +112,9 @@ namespace MediaBrowser.Server.Mono
// Allow all https requests
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")) {
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>

@ -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 string _remotePackageName;
private readonly bool _supportsNativeWebSocket;
/// <summary>
/// Initializes a new instance of the <see cref="ApplicationHost" /> class.
/// </summary>
@ -230,16 +232,21 @@ namespace MediaBrowser.ServerApplication
/// <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="options">The options.</param>
/// <param name="fileSystem">The file system.</param>
/// <param name="remotePackageName">Name of the remote package.</param>
public ApplicationHost(ServerApplicationPaths applicationPaths,
ILogManager logManager,
bool supportsRunningAsService,
bool isRunningAsService,
StartupOptions options, string remotePackageName)
: base(applicationPaths, logManager)
StartupOptions options,
IFileSystem fileSystem,
string remotePackageName,
bool supportsNativeWebSocket)
: base(applicationPaths, logManager, fileSystem)
{
_startupOptions = options;
_remotePackageName = remotePackageName;
_supportsNativeWebSocket = supportsNativeWebSocket;
_isRunningAsService = isRunningAsService;
SupportsRunningAsService = supportsRunningAsService;
}
@ -433,7 +440,7 @@ namespace MediaBrowser.ServerApplication
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);
progress.Report(10);
@ -548,11 +555,6 @@ namespace MediaBrowser.ServerApplication
return new NetworkManager(logger);
}
protected override IFileSystem CreateFileSystemManager()
{
return FileSystemFactory.CreateFileSystemManager(LogManager);
}
/// <summary>
/// Registers the media encoder.
/// </summary>

@ -1,9 +1,5 @@
using System;
#if __MonoCS__
using Mono.Unix.Native;
using System.Text.RegularExpressions;
using System.IO;
#endif
using Mono.Unix.Native;
using System;
using System.IO;
using System.Text.RegularExpressions;
@ -33,7 +29,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
switch (arg)
{
case "Version":
return "20140827";
return "20141005";
case "FFMpegFilename":
return "ffmpeg.exe";
case "FFProbeFilename":
@ -82,7 +78,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
switch (arg)
{
case "Version":
return "20140506";
return "20140716";
case "FFMpegFilename":
return "ffmpeg";
case "FFProbeFilename":
@ -98,7 +94,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
switch (arg)
{
case "Version":
return "20140505";
return "20140716";
case "FFMpegFilename":
return "ffmpeg";
case "FFProbeFilename":
@ -138,15 +134,15 @@ namespace MediaBrowser.ServerApplication.FFMpeg
{
return new[]
{
"http://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20140827-git-9e8ab36-win64-static.7z",
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/windows/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-20141005-git-e079d43-win64-static.7z"
};
}
return new[]
{
"http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20140827-git-9e8ab36-win32-static.7z",
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/windows/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-20141005-git-e079d43-win32-static.7z"
};
case PlatformID.Unix:
@ -173,7 +169,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
return new[]
{
"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[]
{
"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,16 +233,13 @@ namespace MediaBrowser.ServerApplication.FFMpeg
private static Uname GetUnixName()
{
var uname = new Uname();
#if __MonoCS__
Utsname utsname;
var callResult = Syscall.uname(out utsname);
if (callResult == 0)
{
uname.sysname= utsname.sysname;
uname.machine= utsname.machine;
}
#endif
Utsname utsname;
var callResult = Syscall.uname(out utsname);
if (callResult == 0)
{
uname.sysname = utsname.sysname;
uname.machine = utsname.machine;
}
return uname;
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save