connect updates

This commit is contained in:
Luke Pulverenti 2014-10-25 14:32:58 -04:00
parent c8a735bcb1
commit d74e3b2dea
122 changed files with 549 additions and 278 deletions

View File

@ -107,7 +107,7 @@ namespace MediaBrowser.Api
return ResultFactory.GetStaticFileResult(Request, path); return ResultFactory.GetStaticFileResult(Request, path);
} }
private readonly char[] _dashReplaceChars = { '?', '/' }; private readonly char[] _dashReplaceChars = { '?', '/', '&' };
private const char SlugChar = '-'; private const char SlugChar = '-';
protected MusicArtist GetArtist(string name, ILibraryManager libraryManager) protected MusicArtist GetArtist(string name, ILibraryManager libraryManager)

View File

@ -152,7 +152,7 @@ namespace MediaBrowser.Api
private MetadataRefreshOptions GetRefreshOptions(BaseRefreshRequest request) private MetadataRefreshOptions GetRefreshOptions(BaseRefreshRequest request)
{ {
return new MetadataRefreshOptions return new MetadataRefreshOptions(new DirectoryService())
{ {
MetadataRefreshMode = request.MetadataRefreshMode, MetadataRefreshMode = request.MetadataRefreshMode,
ImageRefreshMode = request.ImageRefreshMode, ImageRefreshMode = request.ImageRefreshMode,

View File

@ -13,7 +13,6 @@ using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.LiveTv;
using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.MediaInfo;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -1545,6 +1544,7 @@ namespace MediaBrowser.Api.Playback
state.InputVideoSync = "-1"; state.InputVideoSync = "-1";
state.InputAudioSync = "1"; state.InputAudioSync = "1";
state.InputContainer = recording.Container; state.InputContainer = recording.Container;
state.ReadInputAtNativeFramerate = source.ReadAtNativeFramerate;
} }
else if (item is LiveTvChannel) else if (item is LiveTvChannel)
{ {
@ -1572,6 +1572,7 @@ namespace MediaBrowser.Api.Playback
state.RemoteHttpHeaders = mediaSource.RequiredHttpHeaders; state.RemoteHttpHeaders = mediaSource.RequiredHttpHeaders;
state.InputBitrate = mediaSource.Bitrate; state.InputBitrate = mediaSource.Bitrate;
state.InputFileSize = mediaSource.Size; state.InputFileSize = mediaSource.Size;
state.ReadInputAtNativeFramerate = mediaSource.ReadAtNativeFramerate;
mediaStreams = mediaSource.MediaStreams; mediaStreams = mediaSource.MediaStreams;
} }
else else
@ -1588,6 +1589,7 @@ namespace MediaBrowser.Api.Playback
state.InputContainer = mediaSource.Container; state.InputContainer = mediaSource.Container;
state.InputFileSize = mediaSource.Size; state.InputFileSize = mediaSource.Size;
state.InputBitrate = mediaSource.Bitrate; state.InputBitrate = mediaSource.Bitrate;
state.ReadInputAtNativeFramerate = mediaSource.ReadAtNativeFramerate;
var video = item as Video; var video = item as Video;
@ -1687,6 +1689,7 @@ namespace MediaBrowser.Api.Playback
state.RemoteHttpHeaders = mediaSource.RequiredHttpHeaders; state.RemoteHttpHeaders = mediaSource.RequiredHttpHeaders;
state.InputBitrate = mediaSource.Bitrate; state.InputBitrate = mediaSource.Bitrate;
state.InputFileSize = mediaSource.Size; state.InputFileSize = mediaSource.Size;
state.ReadInputAtNativeFramerate = mediaSource.ReadAtNativeFramerate;
AttachMediaStreamInfo(state, mediaSource.MediaStreams, videoRequest, requestedUrl); AttachMediaStreamInfo(state, mediaSource.MediaStreams, videoRequest, requestedUrl);
} }

View File

@ -95,15 +95,7 @@ namespace MediaBrowser.Api.Playback
public bool DeInterlace { get; set; } public bool DeInterlace { get; set; }
public bool ReadInputAtNativeFramerate public bool ReadInputAtNativeFramerate { get; set; }
{
get {
return InputProtocol == MediaProtocol.Rtmp ||
string.Equals(InputContainer, "wtv", StringComparison.OrdinalIgnoreCase) ||
!string.IsNullOrEmpty(LiveTvStreamId);
}
}
public TransportStreamTimestamp InputTimestamp { get; set; } public TransportStreamTimestamp InputTimestamp { get; set; }

View File

@ -254,7 +254,7 @@ namespace MediaBrowser.Api.Subtitles
await _subtitleManager.DownloadSubtitles(video, request.SubtitleId, CancellationToken.None) await _subtitleManager.DownloadSubtitles(video, request.SubtitleId, CancellationToken.None)
.ConfigureAwait(false); .ConfigureAwait(false);
await video.RefreshMetadata(new MetadataRefreshOptions(), CancellationToken.None).ConfigureAwait(false); await video.RefreshMetadata(new MetadataRefreshOptions(new DirectoryService()), CancellationToken.None).ConfigureAwait(false);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -375,11 +375,11 @@ namespace MediaBrowser.Api.UserLibrary
if (wasPlayed) if (wasPlayed)
{ {
await item.MarkPlayed(user, datePlayed, _userDataRepository).ConfigureAwait(false); await item.MarkPlayed(user, datePlayed, true).ConfigureAwait(false);
} }
else else
{ {
await item.MarkUnplayed(user, _userDataRepository).ConfigureAwait(false); await item.MarkUnplayed(user).ConfigureAwait(false);
} }
return _userDataRepository.GetUserDataDto(item, user); return _userDataRepository.GetUserDataDto(item, user);

View File

@ -37,6 +37,8 @@ namespace MediaBrowser.Controller.Channels
public string Id { get; set; } public string Id { get; set; }
public bool ReadAtNativeFramerate { get; set; }
public ChannelMediaInfo() public ChannelMediaInfo()
{ {
RequiredHttpHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); RequiredHttpHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
@ -59,7 +61,8 @@ namespace MediaBrowser.Controller.Channels
RequiredHttpHeaders = RequiredHttpHeaders, RequiredHttpHeaders = RequiredHttpHeaders,
RunTimeTicks = RunTimeTicks, RunTimeTicks = RunTimeTicks,
Name = id, Name = id,
Id = id Id = id,
ReadAtNativeFramerate = ReadAtNativeFramerate
}; };
var bitrate = (AudioBitrate ?? 0) + (VideoBitrate ?? 0); var bitrate = (AudioBitrate ?? 0) + (VideoBitrate ?? 0);

View File

@ -766,7 +766,7 @@ namespace MediaBrowser.Controller.Entities
public Task RefreshMetadata(CancellationToken cancellationToken) public Task RefreshMetadata(CancellationToken cancellationToken)
{ {
return RefreshMetadata(new MetadataRefreshOptions(), cancellationToken); return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService()), cancellationToken);
} }
/// <summary> /// <summary>
@ -783,8 +783,6 @@ namespace MediaBrowser.Controller.Entities
if (IsFolder || Parent != null) if (IsFolder || Parent != null)
{ {
options.DirectoryService = options.DirectoryService ?? new DirectoryService(Logger);
try try
{ {
var files = locationType != LocationType.Remote && locationType != LocationType.Virtual ? var files = locationType != LocationType.Remote && locationType != LocationType.Virtual ?
@ -1360,10 +1358,12 @@ namespace MediaBrowser.Controller.Entities
/// </summary> /// </summary>
/// <param name="user">The user.</param> /// <param name="user">The user.</param>
/// <param name="datePlayed">The date played.</param> /// <param name="datePlayed">The date played.</param>
/// <param name="userManager">The user manager.</param> /// <param name="resetPosition">if set to <c>true</c> [reset position].</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
/// <exception cref="System.ArgumentNullException"></exception> /// <exception cref="System.ArgumentNullException"></exception>
public virtual async Task MarkPlayed(User user, DateTime? datePlayed, IUserDataManager userManager) public virtual async Task MarkPlayed(User user,
DateTime? datePlayed,
bool resetPosition)
{ {
if (user == null) if (user == null)
{ {
@ -1372,7 +1372,7 @@ namespace MediaBrowser.Controller.Entities
var key = GetUserDataKey(); var key = GetUserDataKey();
var data = userManager.GetUserData(user.Id, key); var data = UserDataManager.GetUserData(user.Id, key);
if (datePlayed.HasValue) if (datePlayed.HasValue)
{ {
@ -1383,20 +1383,24 @@ namespace MediaBrowser.Controller.Entities
// Ensure it's at least one // Ensure it's at least one
data.PlayCount = Math.Max(data.PlayCount, 1); data.PlayCount = Math.Max(data.PlayCount, 1);
if (resetPosition)
{
data.PlaybackPositionTicks = 0;
}
data.LastPlayedDate = datePlayed ?? data.LastPlayedDate; data.LastPlayedDate = datePlayed ?? data.LastPlayedDate;
data.Played = true; data.Played = true;
await userManager.SaveUserData(user.Id, this, data, UserDataSaveReason.TogglePlayed, CancellationToken.None).ConfigureAwait(false); await UserDataManager.SaveUserData(user.Id, this, data, UserDataSaveReason.TogglePlayed, CancellationToken.None).ConfigureAwait(false);
} }
/// <summary> /// <summary>
/// Marks the unplayed. /// Marks the unplayed.
/// </summary> /// </summary>
/// <param name="user">The user.</param> /// <param name="user">The user.</param>
/// <param name="userManager">The user manager.</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
/// <exception cref="System.ArgumentNullException"></exception> /// <exception cref="System.ArgumentNullException"></exception>
public virtual async Task MarkUnplayed(User user, IUserDataManager userManager) public virtual async Task MarkUnplayed(User user)
{ {
if (user == null) if (user == null)
{ {
@ -1405,7 +1409,7 @@ namespace MediaBrowser.Controller.Entities
var key = GetUserDataKey(); var key = GetUserDataKey();
var data = userManager.GetUserData(user.Id, key); var data = UserDataManager.GetUserData(user.Id, key);
//I think it is okay to do this here. //I think it is okay to do this here.
// if this is only called when a user is manually forcing something to un-played // if this is only called when a user is manually forcing something to un-played
@ -1415,7 +1419,7 @@ namespace MediaBrowser.Controller.Entities
data.LastPlayedDate = null; data.LastPlayedDate = null;
data.Played = false; data.Played = false;
await userManager.SaveUserData(user.Id, this, data, UserDataSaveReason.TogglePlayed, CancellationToken.None).ConfigureAwait(false); await UserDataManager.SaveUserData(user.Id, this, data, UserDataSaveReason.TogglePlayed, CancellationToken.None).ConfigureAwait(false);
} }
/// <summary> /// <summary>

View File

@ -319,7 +319,7 @@ namespace MediaBrowser.Controller.Entities
public Task ValidateChildren(IProgress<double> progress, CancellationToken cancellationToken) public Task ValidateChildren(IProgress<double> progress, CancellationToken cancellationToken)
{ {
return ValidateChildren(progress, cancellationToken, new MetadataRefreshOptions()); return ValidateChildren(progress, cancellationToken, new MetadataRefreshOptions(new DirectoryService()));
} }
/// <summary> /// <summary>
@ -332,8 +332,6 @@ namespace MediaBrowser.Controller.Entities
/// <returns>Task.</returns> /// <returns>Task.</returns>
public Task ValidateChildren(IProgress<double> progress, CancellationToken cancellationToken, MetadataRefreshOptions metadataRefreshOptions, bool recursive = true) public Task ValidateChildren(IProgress<double> progress, CancellationToken cancellationToken, MetadataRefreshOptions metadataRefreshOptions, bool recursive = true)
{ {
metadataRefreshOptions.DirectoryService = metadataRefreshOptions.DirectoryService ?? new DirectoryService(Logger);
return ValidateChildrenWithCancellationSupport(progress, cancellationToken, recursive, true, metadataRefreshOptions, metadataRefreshOptions.DirectoryService); return ValidateChildrenWithCancellationSupport(progress, cancellationToken, recursive, true, metadataRefreshOptions, metadataRefreshOptions.DirectoryService);
} }
@ -1141,12 +1139,16 @@ namespace MediaBrowser.Controller.Entities
/// </summary> /// </summary>
/// <param name="user">The user.</param> /// <param name="user">The user.</param>
/// <param name="datePlayed">The date played.</param> /// <param name="datePlayed">The date played.</param>
/// <param name="userManager">The user manager.</param> /// <param name="resetPosition">if set to <c>true</c> [reset position].</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
public override async Task MarkPlayed(User user, DateTime? datePlayed, IUserDataManager userManager) public override async Task MarkPlayed(User user,
DateTime? datePlayed,
bool resetPosition)
{ {
// Sweep through recursively and update status // Sweep through recursively and update status
var tasks = GetRecursiveChildren(user, true).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual).Select(c => c.MarkPlayed(user, datePlayed, userManager)); var tasks = GetRecursiveChildren(user, true)
.Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual)
.Select(c => c.MarkPlayed(user, datePlayed, resetPosition));
await Task.WhenAll(tasks).ConfigureAwait(false); await Task.WhenAll(tasks).ConfigureAwait(false);
} }
@ -1155,12 +1157,13 @@ namespace MediaBrowser.Controller.Entities
/// Marks the unplayed. /// Marks the unplayed.
/// </summary> /// </summary>
/// <param name="user">The user.</param> /// <param name="user">The user.</param>
/// <param name="userManager">The user manager.</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
public override async Task MarkUnplayed(User user, IUserDataManager userManager) public override async Task MarkUnplayed(User user)
{ {
// Sweep through recursively and update status // Sweep through recursively and update status
var tasks = GetRecursiveChildren(user, true).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual).Select(c => c.MarkUnplayed(user, userManager)); var tasks = GetRecursiveChildren(user, true)
.Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual)
.Select(c => c.MarkUnplayed(user));
await Task.WhenAll(tasks).ConfigureAwait(false); await Task.WhenAll(tasks).ConfigureAwait(false);
} }
@ -1195,14 +1198,14 @@ namespace MediaBrowser.Controller.Entities
public override bool IsPlayed(User user) public override bool IsPlayed(User user)
{ {
return GetRecursiveChildren(user).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual) return GetRecursiveChildren(user)
.Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual)
.All(i => i.IsPlayed(user)); .All(i => i.IsPlayed(user));
} }
public override bool IsUnplayed(User user) public override bool IsUnplayed(User user)
{ {
return GetRecursiveChildren(user).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual) return !IsPlayed(user);
.All(i => i.IsUnplayed(user));
} }
public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, User user) public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, User user)

View File

@ -179,7 +179,7 @@ namespace MediaBrowser.Controller.Entities
Name = newName; Name = newName;
return RefreshMetadata(new MetadataRefreshOptions return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService())
{ {
ReplaceAllMetadata = true, ReplaceAllMetadata = true,
ImageRefreshMode = ImageRefreshMode.FullRefresh, ImageRefreshMode = ImageRefreshMode.FullRefresh,

View File

@ -398,9 +398,8 @@ namespace MediaBrowser.Controller.Entities
var currentImagePath = video.GetImagePath(ImageType.Primary); var currentImagePath = video.GetImagePath(ImageType.Primary);
var ownerImagePath = this.GetImagePath(ImageType.Primary); var ownerImagePath = this.GetImagePath(ImageType.Primary);
var newOptions = new MetadataRefreshOptions var newOptions = new MetadataRefreshOptions(options.DirectoryService)
{ {
DirectoryService = options.DirectoryService,
ImageRefreshMode = options.ImageRefreshMode, ImageRefreshMode = options.ImageRefreshMode,
MetadataRefreshMode = options.MetadataRefreshMode, MetadataRefreshMode = options.MetadataRefreshMode,
ReplaceAllMetadata = options.ReplaceAllMetadata ReplaceAllMetadata = options.ReplaceAllMetadata

View File

@ -25,7 +25,13 @@ namespace MediaBrowser.Controller.IO
/// <param name="resolveShortcuts">if set to <c>true</c> [resolve shortcuts].</param> /// <param name="resolveShortcuts">if set to <c>true</c> [resolve shortcuts].</param>
/// <returns>Dictionary{System.StringFileSystemInfo}.</returns> /// <returns>Dictionary{System.StringFileSystemInfo}.</returns>
/// <exception cref="System.ArgumentNullException">path</exception> /// <exception cref="System.ArgumentNullException">path</exception>
public static Dictionary<string, FileSystemInfo> GetFilteredFileSystemEntries(IDirectoryService directoryService, string path, IFileSystem fileSystem, ILogger logger, ItemResolveArgs args, int flattenFolderDepth = 0, bool resolveShortcuts = true) public static Dictionary<string, FileSystemInfo> GetFilteredFileSystemEntries(IDirectoryService directoryService,
string path,
IFileSystem fileSystem,
ILogger logger,
ItemResolveArgs args,
int flattenFolderDepth = 0,
bool resolveShortcuts = true)
{ {
if (string.IsNullOrEmpty(path)) if (string.IsNullOrEmpty(path))
{ {
@ -36,21 +42,13 @@ namespace MediaBrowser.Controller.IO
throw new ArgumentNullException("args"); throw new ArgumentNullException("args");
} }
var entries = directoryService.GetFileSystemEntries(path);
if (!resolveShortcuts && flattenFolderDepth == 0) if (!resolveShortcuts && flattenFolderDepth == 0)
{ {
// Seeing dupes on some users file system for some reason return directoryService.GetFileSystemDictionary(path);
var dictionary = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase);
foreach (var info in entries)
{
dictionary[info.FullName] = info;
}
return dictionary;
} }
var entries = directoryService.GetFileSystemEntries(path);
var dict = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase); var dict = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase);
foreach (var entry in entries) foreach (var entry in entries)

View File

@ -213,38 +213,38 @@ namespace MediaBrowser.Controller.Library
return false; return false;
} }
// It's a season folder if it's named as such and does not contain any audio files, apart from theme.mp3 //// It's a season folder if it's named as such and does not contain any audio files, apart from theme.mp3
foreach (var fileSystemInfo in directoryService.GetFileSystemEntries(path)) //foreach (var fileSystemInfo in directoryService.GetFileSystemEntries(path))
{ //{
var attributes = fileSystemInfo.Attributes; // var attributes = fileSystemInfo.Attributes;
if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) // if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{ // {
continue; // continue;
} // }
// Can't enforce this because files saved by Bitcasa are always marked System // // Can't enforce this because files saved by Bitcasa are always marked System
//if ((attributes & FileAttributes.System) == FileAttributes.System) // //if ((attributes & FileAttributes.System) == FileAttributes.System)
//{ // //{
// continue; // // continue;
//} // //}
if ((attributes & FileAttributes.Directory) == FileAttributes.Directory) // if ((attributes & FileAttributes.Directory) == FileAttributes.Directory)
{ // {
//if (IsBadFolder(fileSystemInfo.Name)) // //if (IsBadFolder(fileSystemInfo.Name))
//{ // //{
// return false; // // return false;
//} // //}
} // }
else // else
{ // {
if (EntityResolutionHelper.IsAudioFile(fileSystemInfo.FullName) && // if (EntityResolutionHelper.IsAudioFile(fileSystemInfo.FullName) &&
!string.Equals(fileSystem.GetFileNameWithoutExtension(fileSystemInfo), BaseItem.ThemeSongFilename)) // !string.Equals(fileSystem.GetFileNameWithoutExtension(fileSystemInfo), BaseItem.ThemeSongFilename))
{ // {
return false; // return false;
} // }
} // }
} //}
return true; return true;
} }

View File

@ -9,35 +9,47 @@ namespace MediaBrowser.Controller.Providers
{ {
public interface IDirectoryService public interface IDirectoryService
{ {
List<FileSystemInfo> GetFileSystemEntries(string path); IEnumerable<FileSystemInfo> GetFileSystemEntries(string path);
IEnumerable<FileSystemInfo> GetFiles(string path); IEnumerable<FileSystemInfo> GetFiles(string path);
IEnumerable<FileSystemInfo> GetFiles(string path, bool clearCache); IEnumerable<FileSystemInfo> GetFiles(string path, bool clearCache);
FileSystemInfo GetFile(string path); FileSystemInfo GetFile(string path);
Dictionary<string, FileSystemInfo> GetFileSystemDictionary(string path);
} }
public class DirectoryService : IDirectoryService public class DirectoryService : IDirectoryService
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly ConcurrentDictionary<string, List<FileSystemInfo>> _cache = new ConcurrentDictionary<string, List<FileSystemInfo>>(StringComparer.OrdinalIgnoreCase); private readonly ConcurrentDictionary<string, Dictionary<string,FileSystemInfo>> _cache =
new ConcurrentDictionary<string, Dictionary<string, FileSystemInfo>>(StringComparer.OrdinalIgnoreCase);
public DirectoryService(ILogger logger) public DirectoryService(ILogger logger)
{ {
_logger = logger; _logger = logger;
} }
public List<FileSystemInfo> GetFileSystemEntries(string path) public DirectoryService()
: this(new NullLogger())
{
}
public IEnumerable<FileSystemInfo> GetFileSystemEntries(string path)
{ {
return GetFileSystemEntries(path, false); return GetFileSystemEntries(path, false);
} }
private List<FileSystemInfo> GetFileSystemEntries(string path, bool clearCache) public Dictionary<string, FileSystemInfo> GetFileSystemDictionary(string path)
{ {
List<FileSystemInfo> entries; return GetFileSystemDictionary(path, false);
}
private Dictionary<string, FileSystemInfo> GetFileSystemDictionary(string path, bool clearCache)
{
Dictionary<string, FileSystemInfo> entries;
if (clearCache) if (clearCache)
{ {
List<FileSystemInfo> removed; Dictionary<string, FileSystemInfo> removed;
_cache.TryRemove(path, out removed); _cache.TryRemove(path, out removed);
} }
@ -46,21 +58,36 @@ namespace MediaBrowser.Controller.Providers
{ {
//_logger.Debug("Getting files for " + path); //_logger.Debug("Getting files for " + path);
entries = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase);
try try
{ {
entries = new DirectoryInfo(path).EnumerateFileSystemInfos("*", SearchOption.TopDirectoryOnly).ToList(); var list = new DirectoryInfo(path)
.EnumerateFileSystemInfos("*", SearchOption.TopDirectoryOnly);
// Seeing dupes on some users file system for some reason
foreach (var item in list)
{
entries[item.FullName] = item;
}
} }
catch (DirectoryNotFoundException) catch (DirectoryNotFoundException)
{ {
entries = new List<FileSystemInfo>();
} }
//var group = entries.ToLookup(i => Path.GetDirectoryName(i.FullName)).ToList();
_cache.TryAdd(path, entries); _cache.TryAdd(path, entries);
} }
return entries; return entries;
} }
private IEnumerable<FileSystemInfo> GetFileSystemEntries(string path, bool clearCache)
{
return GetFileSystemDictionary(path, clearCache).Values;
}
public IEnumerable<FileSystemInfo> GetFiles(string path) public IEnumerable<FileSystemInfo> GetFiles(string path)
{ {
return GetFiles(path, false); return GetFiles(path, false);
@ -74,9 +101,13 @@ namespace MediaBrowser.Controller.Providers
public FileSystemInfo GetFile(string path) public FileSystemInfo GetFile(string path)
{ {
var directory = Path.GetDirectoryName(path); var directory = Path.GetDirectoryName(path);
var filename = Path.GetFileName(path);
return GetFiles(directory).FirstOrDefault(i => string.Equals(i.Name, filename, StringComparison.OrdinalIgnoreCase)); var dict = GetFileSystemDictionary(directory, false);
FileSystemInfo entry;
dict.TryGetValue(path, out entry);
return entry;
} }
} }
} }

View File

@ -17,9 +17,12 @@ namespace MediaBrowser.Controller.Providers
/// Gets the metadata. /// Gets the metadata.
/// </summary> /// </summary>
/// <param name="info">The information.</param> /// <param name="info">The information.</param>
/// <param name="directoryService">The directory service.</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{MetadataResult{`0}}.</returns> /// <returns>Task{MetadataResult{`0}}.</returns>
Task<LocalMetadataResult<TItemType>> GetMetadata(ItemInfo info, CancellationToken cancellationToken); Task<LocalMetadataResult<TItemType>> GetMetadata(ItemInfo info,
IDirectoryService directoryService,
CancellationToken cancellationToken);
} }
public class ItemInfo public class ItemInfo

View File

@ -1,5 +1,4 @@
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -17,18 +16,24 @@ namespace MediaBrowser.Controller.Providers
public bool ForceSave { get; set; } public bool ForceSave { get; set; }
public MetadataRefreshOptions() public MetadataRefreshOptions()
: this(new DirectoryService())
{
}
public MetadataRefreshOptions(IDirectoryService directoryService)
: base(directoryService)
{ {
MetadataRefreshMode = MetadataRefreshMode.Default; MetadataRefreshMode = MetadataRefreshMode.Default;
} }
public MetadataRefreshOptions(MetadataRefreshOptions copy) public MetadataRefreshOptions( MetadataRefreshOptions copy)
: base(copy.DirectoryService)
{ {
MetadataRefreshMode = copy.MetadataRefreshMode; MetadataRefreshMode = copy.MetadataRefreshMode;
ForceSave = copy.ForceSave; ForceSave = copy.ForceSave;
ReplaceAllMetadata = copy.ReplaceAllMetadata; ReplaceAllMetadata = copy.ReplaceAllMetadata;
ImageRefreshMode = copy.ImageRefreshMode; ImageRefreshMode = copy.ImageRefreshMode;
DirectoryService = copy.DirectoryService;
ReplaceAllImages = copy.ReplaceAllImages; ReplaceAllImages = copy.ReplaceAllImages;
ReplaceImages = copy.ReplaceImages.ToList(); ReplaceImages = copy.ReplaceImages.ToList();
} }
@ -37,15 +42,16 @@ namespace MediaBrowser.Controller.Providers
public class ImageRefreshOptions public class ImageRefreshOptions
{ {
public ImageRefreshMode ImageRefreshMode { get; set; } public ImageRefreshMode ImageRefreshMode { get; set; }
public IDirectoryService DirectoryService { get; set; } public IDirectoryService DirectoryService { get; private set; }
public bool ReplaceAllImages { get; set; } public bool ReplaceAllImages { get; set; }
public List<ImageType> ReplaceImages { get; set; } public List<ImageType> ReplaceImages { get; set; }
public ImageRefreshOptions() public ImageRefreshOptions(IDirectoryService directoryService)
{ {
ImageRefreshMode = ImageRefreshMode.Default; ImageRefreshMode = ImageRefreshMode.Default;
DirectoryService = directoryService;
ReplaceImages = new List<ImageType>(); ReplaceImages = new List<ImageType>();
} }

View File

@ -789,11 +789,9 @@ namespace MediaBrowser.Dlna.Didl
} }
} }
var imageLimit = _profile.DidlAlbumArtLimit ?? 100;
AddImageResElement(item, element, 160, 160, playbackPercentage, "jpg", "JPEG_TN"); AddImageResElement(item, element, 160, 160, playbackPercentage, "jpg", "JPEG_TN");
if (imageLimit > 1) if (!_profile.EnableSingleAlbumArtLimit)
{ {
AddImageResElement(item, element, 4096, 4096, playbackPercentage, "jpg", "JPEG_LRG"); AddImageResElement(item, element, 4096, 4096, playbackPercentage, "jpg", "JPEG_LRG");
AddImageResElement(item, element, 1024, 768, playbackPercentage, "jpg", "JPEG_MED"); AddImageResElement(item, element, 1024, 768, playbackPercentage, "jpg", "JPEG_MED");

View File

@ -47,7 +47,7 @@ namespace MediaBrowser.Dlna.Profiles
ProtocolInfo = ProtocolInfo =
"http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000"; "http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=81500000000000000000000000000000,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_FLAGS=00D00000000000000000000000000000,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL;DLNA.ORG_OP=11;DLNA.ORG_FLAGS=81500000000000000000000000000000";
DidlAlbumArtLimit = 1; EnableSingleAlbumArtLimit = true;
TranscodingProfiles = new[] TranscodingProfiles = new[]
{ {

View File

@ -44,7 +44,7 @@ namespace MediaBrowser.Dlna.Profiles
Manufacturer = "Microsoft Corporation"; Manufacturer = "Microsoft Corporation";
ManufacturerUrl = "http://www.microsoft.com/"; ManufacturerUrl = "http://www.microsoft.com/";
SonyAggregationFlags = "10"; SonyAggregationFlags = "10";
DidlAlbumArtLimit = 1; EnableSingleAlbumArtLimit = true;
TranscodingProfiles = new[] TranscodingProfiles = new[]
{ {

View File

@ -44,7 +44,7 @@ namespace MediaBrowser.Dlna.Profiles
Manufacturer = "Microsoft Corporation"; Manufacturer = "Microsoft Corporation";
ManufacturerUrl = "http://www.microsoft.com/"; ManufacturerUrl = "http://www.microsoft.com/";
SonyAggregationFlags = "10"; SonyAggregationFlags = "10";
DidlAlbumArtLimit = 1; EnableSingleAlbumArtLimit = true;
TranscodingProfiles = new[] TranscodingProfiles = new[]
{ {

View File

@ -44,7 +44,7 @@ namespace MediaBrowser.Dlna.Profiles
Manufacturer = "Microsoft Corporation"; Manufacturer = "Microsoft Corporation";
ManufacturerUrl = "http://www.microsoft.com/"; ManufacturerUrl = "http://www.microsoft.com/";
SonyAggregationFlags = "10"; SonyAggregationFlags = "10";
DidlAlbumArtLimit = 1; EnableSingleAlbumArtLimit = true;
TranscodingProfiles = new[] TranscodingProfiles = new[]
{ {

View File

@ -37,7 +37,7 @@ namespace MediaBrowser.Dlna.Profiles
SonyAggregationFlags = "10"; SonyAggregationFlags = "10";
XDlnaDoc = "DMS-1.50"; XDlnaDoc = "DMS-1.50";
DidlAlbumArtLimit = 1; EnableSingleAlbumArtLimit = true;
DirectPlayProfiles = new[] DirectPlayProfiles = new[]
{ {

View File

@ -10,7 +10,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -10,7 +10,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -15,7 +15,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -16,7 +16,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -16,7 +16,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -14,7 +14,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -16,7 +16,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio</SupportedMediaTypes> <SupportedMediaTypes>Audio</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>
@ -72,7 +72,11 @@
</Conditions> </Conditions>
</CodecProfile> </CodecProfile>
</CodecProfiles> </CodecProfiles>
<ResponseProfiles /> <ResponseProfiles>
<ResponseProfile container="ts" type="Video" orgPn="MPEG_TS_SD_EU,MPEG_TS_SD_NA,MPEG_TS_SD_KO" mimeType="video/vnd.dlna.mpeg-tts">
<Conditions />
</ResponseProfile>
</ResponseProfiles>
<SubtitleProfiles> <SubtitleProfiles>
<SubtitleProfile format="srt" method="External" /> <SubtitleProfile format="srt" method="External" />
</SubtitleProfiles> </SubtitleProfiles>

View File

@ -10,7 +10,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -16,7 +16,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>true</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>true</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -16,7 +16,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -18,7 +18,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://www.microsoft.com/</ModelUrl> <ModelUrl>http://www.microsoft.com/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit>1</DidlAlbumArtLimit> <EnableSingleAlbumArtLimit>true</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_TN</AlbumArtPn> <AlbumArtPn>JPEG_TN</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://www.microsoft.com/</ModelUrl> <ModelUrl>http://www.microsoft.com/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit>1</DidlAlbumArtLimit> <EnableSingleAlbumArtLimit>true</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_TN</AlbumArtPn> <AlbumArtPn>JPEG_TN</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://www.microsoft.com/</ModelUrl> <ModelUrl>http://www.microsoft.com/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit>1</DidlAlbumArtLimit> <EnableSingleAlbumArtLimit>true</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_TN</AlbumArtPn> <AlbumArtPn>JPEG_TN</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://www.microsoft.com/</ModelUrl> <ModelUrl>http://www.microsoft.com/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit>1</DidlAlbumArtLimit> <EnableSingleAlbumArtLimit>true</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_TN</AlbumArtPn> <AlbumArtPn>JPEG_TN</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit>1</DidlAlbumArtLimit> <EnableSingleAlbumArtLimit>true</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_TN</AlbumArtPn> <AlbumArtPn>JPEG_TN</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>true</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>true</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -14,7 +14,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -10,7 +10,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -17,7 +17,7 @@
<ModelUrl>http://www.microsoft.com/</ModelUrl> <ModelUrl>http://www.microsoft.com/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -15,7 +15,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes> <SupportedMediaTypes>Audio,Photo,Video</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -16,7 +16,7 @@
<ModelUrl>http://mediabrowser.tv/</ModelUrl> <ModelUrl>http://mediabrowser.tv/</ModelUrl>
<IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests> <IgnoreTranscodeByteRangeRequests>false</IgnoreTranscodeByteRangeRequests>
<EnableAlbumArtInDidl>false</EnableAlbumArtInDidl> <EnableAlbumArtInDidl>false</EnableAlbumArtInDidl>
<DidlAlbumArtLimit xsi:nil="true" /> <EnableSingleAlbumArtLimit>false</EnableSingleAlbumArtLimit>
<SupportedMediaTypes>Audio</SupportedMediaTypes> <SupportedMediaTypes>Audio</SupportedMediaTypes>
<AlbumArtPn>JPEG_SM</AlbumArtPn> <AlbumArtPn>JPEG_SM</AlbumArtPn>
<MaxAlbumArtWidth>480</MaxAlbumArtWidth> <MaxAlbumArtWidth>480</MaxAlbumArtWidth>

View File

@ -1,7 +1,6 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using System; using System;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
@ -14,11 +13,13 @@ namespace MediaBrowser.LocalMetadata
{ {
protected IFileSystem FileSystem; protected IFileSystem FileSystem;
public async Task<LocalMetadataResult<T>> GetMetadata(ItemInfo info, CancellationToken cancellationToken) public async Task<LocalMetadataResult<T>> GetMetadata(ItemInfo info,
IDirectoryService directoryService,
CancellationToken cancellationToken)
{ {
var result = new LocalMetadataResult<T>(); var result = new LocalMetadataResult<T>();
var file = GetXmlFile(info, new DirectoryService(new NullLogger())); var file = GetXmlFile(info, directoryService);
if (file == null) if (file == null)
{ {

View File

@ -33,7 +33,8 @@ namespace MediaBrowser.LocalMetadata.Images
{ {
var parentPath = Path.GetDirectoryName(item.Path); var parentPath = Path.GetDirectoryName(item.Path);
var parentPathFiles = directoryService.GetFileSystemEntries(parentPath); var parentPathFiles = directoryService.GetFileSystemEntries(parentPath)
.ToList();
var nameWithoutExtension = _fileSystem.GetFileNameWithoutExtension(item.Path); var nameWithoutExtension = _fileSystem.GetFileNameWithoutExtension(item.Path);

View File

@ -37,7 +37,7 @@ namespace MediaBrowser.Model.Dlna
public bool IgnoreTranscodeByteRangeRequests { get; set; } public bool IgnoreTranscodeByteRangeRequests { get; set; }
public bool EnableAlbumArtInDidl { get; set; } public bool EnableAlbumArtInDidl { get; set; }
public int? DidlAlbumArtLimit { get; set; } public bool EnableSingleAlbumArtLimit { get; set; }
public string SupportedMediaTypes { get; set; } public string SupportedMediaTypes { get; set; }

View File

@ -21,6 +21,7 @@ namespace MediaBrowser.Model.Dto
public string Name { get; set; } public string Name { get; set; }
public long? RunTimeTicks { get; set; } public long? RunTimeTicks { get; set; }
public bool ReadAtNativeFramerate { get; set; }
public VideoType? VideoType { get; set; } public VideoType? VideoType { get; set; }

View File

@ -89,11 +89,6 @@ namespace MediaBrowser.Providers.Manager
public async Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken) public async Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
{ {
if (refreshOptions.DirectoryService == null)
{
refreshOptions.DirectoryService = new DirectoryService(Logger);
}
var itemOfType = (TItemType)item; var itemOfType = (TItemType)item;
var config = ProviderManager.GetMetadataOptions(item); var config = ProviderManager.GetMetadataOptions(item);
@ -324,7 +319,12 @@ namespace MediaBrowser.Providers.Manager
return item is TItemType; return item is TItemType;
} }
protected virtual async Task<RefreshResult> RefreshWithProviders(TItemType item, TIdType id, MetadataRefreshOptions options, List<IMetadataProvider> providers, ItemImageProvider imageService, CancellationToken cancellationToken) protected virtual async Task<RefreshResult> RefreshWithProviders(TItemType item,
TIdType id,
MetadataRefreshOptions options,
List<IMetadataProvider> providers,
ItemImageProvider imageService,
CancellationToken cancellationToken)
{ {
var refreshResult = new RefreshResult var refreshResult = new RefreshResult
{ {
@ -369,7 +369,7 @@ namespace MediaBrowser.Providers.Manager
try try
{ {
var localItem = await provider.GetMetadata(itemInfo, cancellationToken).ConfigureAwait(false); var localItem = await provider.GetMetadata(itemInfo, options.DirectoryService, cancellationToken).ConfigureAwait(false);
if (localItem.HasMetadata) if (localItem.HasMetadata)
{ {

View File

@ -1,4 +1,5 @@
using MediaBrowser.Common.Configuration; using System.Net;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
@ -7,6 +8,7 @@ using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Providers; using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Music; using MediaBrowser.Providers.Music;
@ -88,7 +90,18 @@ namespace MediaBrowser.Providers.Movies
if (!string.IsNullOrEmpty(movieId)) if (!string.IsNullOrEmpty(movieId))
{ {
await EnsureMovieJson(movieId, cancellationToken).ConfigureAwait(false); // Bad id entered
try
{
await EnsureMovieJson(movieId, cancellationToken).ConfigureAwait(false);
}
catch (HttpException ex)
{
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
{
throw;
}
}
var path = GetFanartJsonPath(movieId); var path = GetFanartJsonPath(movieId);

View File

@ -252,7 +252,7 @@ namespace MediaBrowser.Providers.Subtitles
_monitor.ReportFileSystemChangeComplete(path, false); _monitor.ReportFileSystemChangeComplete(path, false);
} }
return _libraryManager.GetItemById(itemId).RefreshMetadata(new MetadataRefreshOptions return _libraryManager.GetItemById(itemId).RefreshMetadata(new MetadataRefreshOptions(new DirectoryService())
{ {
ImageRefreshMode = ImageRefreshMode.ValidationOnly, ImageRefreshMode = ImageRefreshMode.ValidationOnly,
MetadataRefreshMode = MetadataRefreshMode.ValidationOnly MetadataRefreshMode = MetadataRefreshMode.ValidationOnly

View File

@ -1,4 +1,5 @@
using MediaBrowser.Common.IO; using System.Net;
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
@ -6,6 +7,7 @@ using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Providers; using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Music; using MediaBrowser.Providers.Music;
@ -72,7 +74,18 @@ namespace MediaBrowser.Providers.TV
if (!string.IsNullOrEmpty(id) && season.IndexNumber.HasValue) if (!string.IsNullOrEmpty(id) && season.IndexNumber.HasValue)
{ {
await FanartSeriesProvider.Current.EnsureSeriesJson(id, cancellationToken).ConfigureAwait(false); // Bad id entered
try
{
await FanartSeriesProvider.Current.EnsureSeriesJson(id, cancellationToken).ConfigureAwait(false);
}
catch (HttpException ex)
{
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
{
throw;
}
}
var path = FanartSeriesProvider.Current.GetFanartJsonPath(id); var path = FanartSeriesProvider.Current.GetFanartJsonPath(id);

View File

@ -1,4 +1,5 @@
using MediaBrowser.Common.Configuration; using System.Net;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
@ -7,6 +8,7 @@ using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Providers; using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Music; using MediaBrowser.Providers.Music;
@ -81,7 +83,18 @@ namespace MediaBrowser.Providers.TV
if (!string.IsNullOrEmpty(id)) if (!string.IsNullOrEmpty(id))
{ {
await EnsureSeriesJson(id, cancellationToken).ConfigureAwait(false); // Bad id entered
try
{
await EnsureSeriesJson(id, cancellationToken).ConfigureAwait(false);
}
catch (HttpException ex)
{
if (!ex.StatusCode.HasValue || ex.StatusCode.Value != HttpStatusCode.NotFound)
{
throw;
}
}
var path = GetFanartJsonPath(id); var path = GetFanartJsonPath(id);

View File

@ -122,11 +122,13 @@ namespace MediaBrowser.Providers.TV
{ {
foreach (var series in group) foreach (var series in group)
{ {
await series.RefreshMetadata(new MetadataRefreshOptions var directoryService = new DirectoryService();
await series.RefreshMetadata(new MetadataRefreshOptions(directoryService)
{ {
}, cancellationToken).ConfigureAwait(false); }, cancellationToken).ConfigureAwait(false);
await series.ValidateChildren(new Progress<double>(), cancellationToken, new MetadataRefreshOptions(), true) await series.ValidateChildren(new Progress<double>(), cancellationToken, new MetadataRefreshOptions(directoryService), true)
.ConfigureAwait(false); .ConfigureAwait(false);
} }
} }
@ -469,7 +471,9 @@ namespace MediaBrowser.Providers.TV
/// <param name="seasonNumber">The season number.</param> /// <param name="seasonNumber">The season number.</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{Season}.</returns> /// <returns>Task{Season}.</returns>
private async Task<Season> AddSeason(Series series, int seasonNumber, CancellationToken cancellationToken) private async Task<Season> AddSeason(Series series,
int seasonNumber,
CancellationToken cancellationToken)
{ {
_logger.Info("Creating Season {0} entry for {1}", seasonNumber, series.Name); _logger.Info("Creating Season {0} entry for {1}", seasonNumber, series.Name);

View File

@ -77,7 +77,7 @@ namespace MediaBrowser.Server.Implementations.Collections
await parentFolder.AddChild(collection, CancellationToken.None).ConfigureAwait(false); await parentFolder.AddChild(collection, CancellationToken.None).ConfigureAwait(false);
await collection.RefreshMetadata(new MetadataRefreshOptions(), CancellationToken.None) await collection.RefreshMetadata(new MetadataRefreshOptions(new DirectoryService()), CancellationToken.None)
.ConfigureAwait(false); .ConfigureAwait(false);
if (options.ItemIdList.Count > 0) if (options.ItemIdList.Count > 0)

View File

@ -530,7 +530,9 @@ namespace MediaBrowser.Server.Implementations.Library
return item; return item;
} }
public BaseItem ResolvePath(FileSystemInfo fileInfo, Folder parent = null, string collectionType = null) public BaseItem ResolvePath(FileSystemInfo fileInfo,
Folder parent = null,
string collectionType = null)
{ {
return ResolvePath(fileInfo, new DirectoryService(_logger), parent, collectionType); return ResolvePath(fileInfo, new DirectoryService(_logger), parent, collectionType);
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Kindersicherung", "ButtonParentalControl": "Kindersicherung",
"HeaderInvitationSent": "Einladung verschickt", "HeaderInvitationSent": "Einladung verschickt",
"MessageInvitationSentToUser": "Eine E-Mail mit der Einladung zum Sharing ist an {0} geschickt worden.", "MessageInvitationSentToUser": "Eine E-Mail mit der Einladung zum Sharing ist an {0} geschickt worden.",
"MessageInvitationSentToNewUser": "Eine E-Mail mit der Einladung zur Anmeldung am Media Browser ist an {0} geschickt worden." "MessageInvitationSentToNewUser": "Eine E-Mail mit der Einladung zur Anmeldung am Media Browser ist an {0} geschickt worden.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -600,13 +600,15 @@
"DeviceLastUsedByUserName": "\u00daltimo usado por {0}", "DeviceLastUsedByUserName": "\u00daltimo usado por {0}",
"HeaderDeleteDevice": "Eliminar Dispositivo", "HeaderDeleteDevice": "Eliminar Dispositivo",
"DeleteDeviceConfirmation": "\u00bfEsta seguro de querer eliminar este dispositivo? Volver\u00e1 a aparecer la siguiente vez que un usuario inicie sesi\u00f3n en \u00e9l.", "DeleteDeviceConfirmation": "\u00bfEsta seguro de querer eliminar este dispositivo? Volver\u00e1 a aparecer la siguiente vez que un usuario inicie sesi\u00f3n en \u00e9l.",
"LabelEnableCameraUploadFor": "Habilitar subida desde la c\u00e1mara para:", "LabelEnableCameraUploadFor": "Habilitar subir desde la c\u00e1mara para:",
"HeaderSelectUploadPath": "Seleccionar ruta de subida", "HeaderSelectUploadPath": "Seleccionar ruta de subida",
"LabelEnableCameraUploadForHelp": "La subida ocurrir\u00e1 autom\u00e1ticamente en segundo plano al iniciar sesi\u00f3n en Media Browser.", "LabelEnableCameraUploadForHelp": "Las subidas ocurrir\u00e1n autom\u00e1ticamente en segundo plano al iniciar sesi\u00f3n en Media Browser.",
"ErrorMessageStartHourGreaterThanEnd": "El horario de fin debe ser mayor al de comienzo.", "ErrorMessageStartHourGreaterThanEnd": "El horario de fin debe ser mayor al de comienzo.",
"ButtonLibraryAccess": "Acceso a biblioteca", "ButtonLibraryAccess": "Acceso a biblioteca",
"ButtonParentalControl": "Control parental", "ButtonParentalControl": "Control parental",
"HeaderInvitationSent": "Invitaci\u00f3n Enviada", "HeaderInvitationSent": "Invitaci\u00f3n Enviada",
"MessageInvitationSentToUser": "Se ha enviado un correo electr\u00f3nico a {0}, invit\u00e1ndolo a aceptar tu invitaci\u00f3n para compartir.", "MessageInvitationSentToUser": "Se ha enviado un correo electr\u00f3nico a {0}, invit\u00e1ndolo a aceptar tu invitaci\u00f3n para compartir.",
"MessageInvitationSentToNewUser": "Se ha enviado un correo electr\u00f3nico a {0} invit\u00e1ndolo a registrarse con Media Browser." "MessageInvitationSentToNewUser": "Se ha enviado un correo electr\u00f3nico a {0} invit\u00e1ndolo a registrarse con Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -24,7 +24,7 @@
"UninstallPluginConfirmation": "\u00cates-vous s\u00fbr de vouloir d\u00e9sinstaller {0}?", "UninstallPluginConfirmation": "\u00cates-vous s\u00fbr de vouloir d\u00e9sinstaller {0}?",
"NoPluginConfigurationMessage": "Ce plugin n'a rien \u00e0 configurer.", "NoPluginConfigurationMessage": "Ce plugin n'a rien \u00e0 configurer.",
"NoPluginsInstalledMessage": "Vous n'avez aucun plugin install\u00e9.", "NoPluginsInstalledMessage": "Vous n'avez aucun plugin install\u00e9.",
"BrowsePluginCatalogMessage": "Explorer notre catalogue de Plugins disponibles.", "BrowsePluginCatalogMessage": "Explorer notre catalogue des plugins pour voir les plugins disponibles.",
"MessageKeyEmailedTo": "Cl\u00e9 envoy\u00e9e par courriel \u00e0 {0}", "MessageKeyEmailedTo": "Cl\u00e9 envoy\u00e9e par courriel \u00e0 {0}",
"MessageKeysLinked": "Cl\u00e9s associ\u00e9es.", "MessageKeysLinked": "Cl\u00e9s associ\u00e9es.",
"HeaderConfirmation": "Confirmation", "HeaderConfirmation": "Confirmation",
@ -573,7 +573,7 @@
"LabelShortRatingDescription": "Evaluation courte:", "LabelShortRatingDescription": "Evaluation courte:",
"OptionIRecommendThisItem": "Je recommande cet article", "OptionIRecommendThisItem": "Je recommande cet article",
"WebClientTourContent": "Voir les medias ajout\u00e9s r\u00e9cemment, les prochains \u00e9pisodes et bien plus. Les cercles verts indiquent le nombre d'items que vous n'avez pas vu.", "WebClientTourContent": "Voir les medias ajout\u00e9s r\u00e9cemment, les prochains \u00e9pisodes et bien plus. Les cercles verts indiquent le nombre d'items que vous n'avez pas vu.",
"WebClientTourMovies": "Lire les films, bandes-annonces et plus depuis n'importe quel p\u00e9riph\u00e9rique depuis un navigateur web", "WebClientTourMovies": "Lire les films, bandes-annonces et plus depuis n'importe quel p\u00e9riph\u00e9rique avec un navigateur Web",
"WebClientTourMouseOver": "Laisser la souris au dessus des posters pour un acc\u00e8s rapide aux informations essentiels", "WebClientTourMouseOver": "Laisser la souris au dessus des posters pour un acc\u00e8s rapide aux informations essentiels",
"WebClientTourTapHold": "Maintenir cliqu\u00e9 ou faire un clic droit sur n'importe quel poster pour le menu contextuel", "WebClientTourTapHold": "Maintenir cliqu\u00e9 ou faire un clic droit sur n'importe quel poster pour le menu contextuel",
"WebClientTourMetadataManager": "Cliquer sur modifier pour ouvrir l'\u00e9diteur de m\u00e9dadonn\u00e9es", "WebClientTourMetadataManager": "Cliquer sur modifier pour ouvrir l'\u00e9diteur de m\u00e9dadonn\u00e9es",
@ -608,5 +608,7 @@
"ButtonParentalControl": "Contr\u00f4le parental", "ButtonParentalControl": "Contr\u00f4le parental",
"HeaderInvitationSent": "Invitation envoy\u00e9", "HeaderInvitationSent": "Invitation envoy\u00e9",
"MessageInvitationSentToUser": "Un mail a \u00e9t\u00e9 envoy\u00e9 \u00e0 {0} pour les inviter \u00e0 accepter votre invitation de partage.", "MessageInvitationSentToUser": "Un mail a \u00e9t\u00e9 envoy\u00e9 \u00e0 {0} pour les inviter \u00e0 accepter votre invitation de partage.",
"MessageInvitationSentToNewUser": "Un mail a \u00e9t\u00e9 envoy\u00e9 \u00e0 {0} pour les inviter \u00e0 s'inscrire sur Media Browser." "MessageInvitationSentToNewUser": "Un mail a \u00e9t\u00e9 envoy\u00e9 \u00e0 {0} pour les inviter \u00e0 s'inscrire sur Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -615,6 +615,8 @@
"ButtonLibraryAccess": "Library access", "ButtonLibraryAccess": "Library access",
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "\u041c\u0430\u0437\u043c\u04b1\u043d\u0434\u044b \u0431\u0430\u0441\u049b\u0430\u0440\u0443", "ButtonParentalControl": "\u041c\u0430\u0437\u043c\u04b1\u043d\u0434\u044b \u0431\u0430\u0441\u049b\u0430\u0440\u0443",
"HeaderInvitationSent": "\u0428\u0430\u049b\u044b\u0440\u0443 \u0436\u0456\u0431\u0435\u0440\u0456\u043b\u0434\u0456", "HeaderInvitationSent": "\u0428\u0430\u049b\u044b\u0440\u0443 \u0436\u0456\u0431\u0435\u0440\u0456\u043b\u0434\u0456",
"MessageInvitationSentToUser": "\u041e\u043b\u0430\u0440\u0493\u0430 \u043e\u0440\u0442\u0430\u049b\u0442\u0430\u0441\u0443 \u0448\u0430\u049b\u044b\u0440\u0443\u044b\u04a3\u044b\u0437\u0434\u044b \u049b\u0430\u0431\u044b\u043b\u0434\u0430\u0443 \u04b1\u0441\u044b\u043d\u044b\u0441\u044b\u043c\u0435\u043d, \u044d-\u043f\u043e\u0448\u0442\u0430 {0} \u0430\u0440\u043d\u0430\u043f \u0436\u0456\u0431\u0435\u0440\u0456\u043b\u0434\u0456.", "MessageInvitationSentToUser": "\u041e\u043b\u0430\u0440\u0493\u0430 \u043e\u0440\u0442\u0430\u049b\u0442\u0430\u0441\u0443 \u0448\u0430\u049b\u044b\u0440\u0443\u044b\u04a3\u044b\u0437\u0434\u044b \u049b\u0430\u0431\u044b\u043b\u0434\u0430\u0443 \u04b1\u0441\u044b\u043d\u044b\u0441\u044b\u043c\u0435\u043d, \u044d-\u043f\u043e\u0448\u0442\u0430 {0} \u0430\u0440\u043d\u0430\u043f \u0436\u0456\u0431\u0435\u0440\u0456\u043b\u0434\u0456.",
"MessageInvitationSentToNewUser": "\u041e\u043b\u0430\u0440\u0493\u0430 Media Browser \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u0441\u0456\u043d \u0436\u0430\u0441\u0430\u0443 \u04b1\u0441\u044b\u043d\u044b\u0441\u044b\u043c\u0435\u043d, \u044d-\u043f\u043e\u0448\u0442\u0430 {0} \u0430\u0440\u043d\u0430\u043f \u0436\u0456\u0431\u0435\u0440\u0456\u043b\u0434\u0456." "MessageInvitationSentToNewUser": "\u041e\u043b\u0430\u0440\u0493\u0430 Media Browser \u0442\u0456\u0440\u043a\u0435\u043b\u0433\u0456\u0441\u0456\u043d \u0436\u0430\u0441\u0430\u0443 \u04b1\u0441\u044b\u043d\u044b\u0441\u044b\u043c\u0435\u043d, \u044d-\u043f\u043e\u0448\u0442\u0430 {0} \u0430\u0440\u043d\u0430\u043f \u0436\u0456\u0431\u0435\u0440\u0456\u043b\u0434\u0456.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -436,7 +436,7 @@
"HeaderPluginInstallation": "Programtillegg installasjon", "HeaderPluginInstallation": "Programtillegg installasjon",
"MessageAlreadyInstalled": "Denne versjonen er allerede installert.", "MessageAlreadyInstalled": "Denne versjonen er allerede installert.",
"ValueReviewCount": "{0} Anmeldelser", "ValueReviewCount": "{0} Anmeldelser",
"MessageYouHaveVersionInstalled": "You currently have version {0} installed.", "MessageYouHaveVersionInstalled": "Du har for \u00f8yeblikket versjon {0} installert",
"MessageTrialExpired": "Pr\u00f8veperioden for denne funksjonen er utl\u00f8pt", "MessageTrialExpired": "Pr\u00f8veperioden for denne funksjonen er utl\u00f8pt",
"MessageTrialWillExpireIn": "Pr\u00f8veperioden for denne funksjonen utl\u00f8per om {0} dag (er)", "MessageTrialWillExpireIn": "Pr\u00f8veperioden for denne funksjonen utl\u00f8per om {0} dag (er)",
"MessageInstallPluginFromApp": "Dette programtillegget m\u00e5 installeres direkte i appen du har tenkt \u00e5 bruke den i.", "MessageInstallPluginFromApp": "Dette programtillegget m\u00e5 installeres direkte i appen du har tenkt \u00e5 bruke den i.",
@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Ouderlijk toezicht", "ButtonParentalControl": "Ouderlijk toezicht",
"HeaderInvitationSent": "Uitnodiging verzonden", "HeaderInvitationSent": "Uitnodiging verzonden",
"MessageInvitationSentToUser": "Een email is verzonden naar {0} om je uitnodiging om media te delen te accepteren.", "MessageInvitationSentToUser": "Een email is verzonden naar {0} om je uitnodiging om media te delen te accepteren.",
"MessageInvitationSentToNewUser": "Een email is verzonden naar {0} om je uitnodiging aan te melden bij Media Browser" "MessageInvitationSentToNewUser": "Een email is verzonden naar {0} om je uitnodiging aan te melden bij Media Browser",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -74,8 +74,8 @@
"ButtonMarkTheseRead": "Marcar como lida", "ButtonMarkTheseRead": "Marcar como lida",
"ButtonClose": "Fechar", "ButtonClose": "Fechar",
"LabelAllPlaysSentToPlayer": "Todas as reprodu\u00e7\u00f5es ser\u00e3o enviadas para o reprodutor selecionado.", "LabelAllPlaysSentToPlayer": "Todas as reprodu\u00e7\u00f5es ser\u00e3o enviadas para o reprodutor selecionado.",
"MessageInvalidUser": "Invalid username or password. Please try again.", "MessageInvalidUser": "Nome de usu\u00e1rio ou senha inv\u00e1lidos. Por favor, tente novamente.",
"HeaderLoginFailure": "Login Failure", "HeaderLoginFailure": "Falha no Login",
"HeaderAllRecordings": "Todas as Grava\u00e7\u00f5es", "HeaderAllRecordings": "Todas as Grava\u00e7\u00f5es",
"RecommendationBecauseYouLike": "Porque voc\u00ea gosta de {0}", "RecommendationBecauseYouLike": "Porque voc\u00ea gosta de {0}",
"RecommendationBecauseYouWatched": "Porque voc\u00ea assistiu {0}", "RecommendationBecauseYouWatched": "Porque voc\u00ea assistiu {0}",
@ -604,9 +604,11 @@
"HeaderSelectUploadPath": "Selecione o caminho para carga", "HeaderSelectUploadPath": "Selecione o caminho para carga",
"LabelEnableCameraUploadForHelp": "Cargas ser\u00e3o executadas automaticamente em retaguarda quando logar no Media Browser.", "LabelEnableCameraUploadForHelp": "Cargas ser\u00e3o executadas automaticamente em retaguarda quando logar no Media Browser.",
"ErrorMessageStartHourGreaterThanEnd": "O tempo final deve ser maior que o tempo inicial.", "ErrorMessageStartHourGreaterThanEnd": "O tempo final deve ser maior que o tempo inicial.",
"ButtonLibraryAccess": "Library access", "ButtonLibraryAccess": "Acesso \u00e0 biblioteca",
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Controle Parental",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Convite Enviado",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "Um email foi enviado para {0}, convidando para aceitar seu convite de compartilhamento.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "Um email foi enviado para {0}, convidando para inscrever-se no Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u043c", "ButtonParentalControl": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u043c",
"HeaderInvitationSent": "\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e", "HeaderInvitationSent": "\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e",
"MessageInvitationSentToUser": "\u042d-\u043f\u043e\u0447\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043a {0}, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044f \u0438\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043a \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e.", "MessageInvitationSentToUser": "\u042d-\u043f\u043e\u0447\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043a {0}, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044f \u0438\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043a \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e.",
"MessageInvitationSentToNewUser": "\u042d-\u043f\u043e\u0447\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043a {0}, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044f \u0438\u043c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 Media Browser." "MessageInvitationSentToNewUser": "\u042d-\u043f\u043e\u0447\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043a {0}, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044f \u0438\u043c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -608,5 +608,7 @@
"ButtonParentalControl": "Parental control", "ButtonParentalControl": "Parental control",
"HeaderInvitationSent": "Invitation Sent", "HeaderInvitationSent": "Invitation Sent",
"MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.", "MessageInvitationSentToUser": "An email has been sent to {0}, inviting them to accept your sharing invitation.",
"MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser." "MessageInvitationSentToNewUser": "An email has been sent to {0} inviting them to sign up with Media Browser.",
"HeaderConnectionFailure": "Connection Failure",
"MessageUnableToConnectToServer": "We're unable to connect to the selected right now. Please try again later."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "Keine Trailer gefunden. Installiere das Trailer Channel Plugin, um eine Bibliothek aus Trailern vom Internet zu importieren.", "MessageNoTrailersFound": "Keine Trailer gefunden. Installiere das Trailer Channel Plugin, um eine Bibliothek aus Trailern vom Internet zu importieren.",
"HeaderNewUsers": "Neue Benutzer", "HeaderNewUsers": "Neue Benutzer",
"ButtonSignUp": "Anmeldung", "ButtonSignUp": "Anmeldung",
"ButtonForgotPassword": "Passwort vergessen?" "ButtonForgotPassword": "Passwort vergessen?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -256,7 +256,7 @@
"LabelAllowServerAutoRestartHelp": "El servidor reiniciar\u00e1 \u00fanicamente durante periodos ociosos, cuando no haya usuarios activos.", "LabelAllowServerAutoRestartHelp": "El servidor reiniciar\u00e1 \u00fanicamente durante periodos ociosos, cuando no haya usuarios activos.",
"LabelEnableDebugLogging": "Habilitar bit\u00e1coras de depuraci\u00f3n", "LabelEnableDebugLogging": "Habilitar bit\u00e1coras de depuraci\u00f3n",
"LabelRunServerAtStartup": "Ejecutar el servidor al iniciar", "LabelRunServerAtStartup": "Ejecutar el servidor al iniciar",
"LabelRunServerAtStartupHelp": "Esto iniciar\u00e1 el icono den el \u00e1rea de notificaci\u00f3n cuando windows arranque. Para iniciar el servicio de windows, desmarque esta opci\u00f3n y ejecute el servicio desde el panel de control de windows. Por favor tome en cuenta que no puede ejecutar ambos simult\u00e1neamente, por lo que deber\u00e1 finalizar el icono del \u00e1rea de notificaci\u00f3n antes de iniciar el servicio.", "LabelRunServerAtStartupHelp": "Esto iniciar\u00e1 el icono en el \u00e1rea de notificaci\u00f3n cuando windows arranque. Para iniciar el servicio de windows, desmarque esta opci\u00f3n y ejecute el servicio desde el panel de control de windows. Por favor tome en cuenta que no puede ejecutar ambos simult\u00e1neamente, por lo que deber\u00e1 finalizar el icono del \u00e1rea de notificaci\u00f3n antes de iniciar el servicio.",
"ButtonSelectDirectory": "Seleccionar Carpeta", "ButtonSelectDirectory": "Seleccionar Carpeta",
"LabelCustomPaths": "Especificar rutas personalizadas cuando se desee. Deje los campos vac\u00edos para usar los valores predeterminados.", "LabelCustomPaths": "Especificar rutas personalizadas cuando se desee. Deje los campos vac\u00edos para usar los valores predeterminados.",
"LabelCachePath": "Ruta para el Cach\u00e9:", "LabelCachePath": "Ruta para el Cach\u00e9:",
@ -1203,18 +1203,18 @@
"LabelDateAddedBehaviorHelp": "Si se encuentra un valor en los metadados siempre ser\u00e1 empleado antes que cualquiera de estas opciones.", "LabelDateAddedBehaviorHelp": "Si se encuentra un valor en los metadados siempre ser\u00e1 empleado antes que cualquiera de estas opciones.",
"LabelNumberTrailerToPlay": "N\u00famero de avances a reproducir:", "LabelNumberTrailerToPlay": "N\u00famero de avances a reproducir:",
"TitleDevices": "Dispositivos", "TitleDevices": "Dispositivos",
"TabCameraUpload": "Subida de C\u00e1mara", "TabCameraUpload": "Subir desde la C\u00e1mara",
"TabDevices": "Dispositivos", "TabDevices": "Dispositivos",
"HeaderCameraUploadHelp": "Suba a Media Broswer fotos y videos tomados desde sus dispositivos m\u00f3viles de forma autom\u00e1tica.", "HeaderCameraUploadHelp": "Suba a Media Broswer fotos y videos tomados desde sus dispositivos m\u00f3viles de forma autom\u00e1tica.",
"MessageNoDevicesSupportCameraUpload": "Actualmente no cuenta con ning\u00fan dispositivo que soporte subida desde c\u00e1mara.", "MessageNoDevicesSupportCameraUpload": "Actualmente no cuenta con ning\u00fan dispositivo que soporte subir desde la c\u00e1mara.",
"LabelCameraUploadPath": "Ruta de subida desde c\u00e1mara:", "LabelCameraUploadPath": "Ruta para subir desde la c\u00e1mara:",
"LabelCameraUploadPathHelp": "Seleccione una ruta personalizada. si lo desea. Si no se especifica, se emplear\u00e1 una carpeta por omisi\u00f3n.", "LabelCameraUploadPathHelp": "Seleccione una ruta personalizada. si lo desea. Si no se especifica, se emplear\u00e1 una carpeta por omisi\u00f3n.",
"LabelCreateCameraUploadSubfolder": "Crear una subcarpeta para cada dispositivo", "LabelCreateCameraUploadSubfolder": "Crear una subcarpeta para cada dispositivo",
"LabelCreateCameraUploadSubfolderHelp": "Se pueden especificar carpetas espec\u00edficas para un dispositivo haciendo clic en \u00e9l desde la p\u00e1gina de Dispositivos.", "LabelCreateCameraUploadSubfolderHelp": "Se pueden especificar carpetas espec\u00edficas para un dispositivo haciendo clic en \u00e9l desde la p\u00e1gina de Dispositivos.",
"LabelCustomDeviceDisplayName": "Nombre a Desplegar:", "LabelCustomDeviceDisplayName": "Nombre a Desplegar:",
"LabelCustomDeviceDisplayNameHelp": "Proporcione un nombre a desplegar personalizado o d\u00e9jelo vac\u00edo para usar el nombre reportado por el dispositivo.", "LabelCustomDeviceDisplayNameHelp": "Proporcione un nombre a desplegar personalizado o d\u00e9jelo vac\u00edo para usar el nombre reportado por el dispositivo.",
"HeaderInviteUser": "Invitar Usuario", "HeaderInviteUser": "Invitar Usuario",
"LabelConnectGuestUserNameHelp": "This is the username that your friend uses to sign in to the Media Browser website, or their email address.", "LabelConnectGuestUserNameHelp": "Este es el nombre de usuario que su amigo utiliza para iniciar sesi\u00f3n en el sitio web de Media Browser, o su cuenta de correo electr\u00f3nico.",
"HeaderInviteUserHelp": "Compartir sus medios con amigos es m\u00e1s f\u00e1cil que nunca con Media Browser Connect.", "HeaderInviteUserHelp": "Compartir sus medios con amigos es m\u00e1s f\u00e1cil que nunca con Media Browser Connect.",
"ButtonSendInvitation": "Enviar invitaci\u00f3n", "ButtonSendInvitation": "Enviar invitaci\u00f3n",
"HeaderGuests": "Invitados", "HeaderGuests": "Invitados",
@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No se encontraron avances. Instalar el complemento \"Canal trailers\" para importar una biblioteca de avances de internet.", "MessageNoTrailersFound": "No se encontraron avances. Instalar el complemento \"Canal trailers\" para importar una biblioteca de avances de internet.",
"HeaderNewUsers": "Nuevos Usuarios", "HeaderNewUsers": "Nuevos Usuarios",
"ButtonSignUp": "Registrarse", "ButtonSignUp": "Registrarse",
"ButtonForgotPassword": "\u00bfOlvidaste la contrase\u00f1a?" "ButtonForgotPassword": "\u00bfOlvidaste la contrase\u00f1a?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -39,7 +39,7 @@
"HeaderSetupLibrary": "Configurer votre biblioth\u00e8que de m\u00e9dia", "HeaderSetupLibrary": "Configurer votre biblioth\u00e8que de m\u00e9dia",
"ButtonAddMediaFolder": "Ajouter un r\u00e9pertoire de m\u00e9dia", "ButtonAddMediaFolder": "Ajouter un r\u00e9pertoire de m\u00e9dia",
"LabelFolderType": "Type de r\u00e9pertoire:", "LabelFolderType": "Type de r\u00e9pertoire:",
"MediaFolderHelpPluginRequired": "* Requiert l'utilisation d'un plug-in, Ex: GameBrowser ou MB BookShelf", "MediaFolderHelpPluginRequired": "* N\u00e9cessite l'utilisation d'un plugin, par exemple : \"GameBrowser\" ou \"MB BookShelf\".",
"ReferToMediaLibraryWiki": "Se r\u00e9f\u00e9rer au wiki des biblioth\u00e8ques de m\u00e9dia", "ReferToMediaLibraryWiki": "Se r\u00e9f\u00e9rer au wiki des biblioth\u00e8ques de m\u00e9dia",
"LabelCountry": "Pays:", "LabelCountry": "Pays:",
"LabelLanguage": "Langue:", "LabelLanguage": "Langue:",
@ -726,7 +726,7 @@
"LabelDeviceDescription": "Description du p\u00e9riph\u00e9rique", "LabelDeviceDescription": "Description du p\u00e9riph\u00e9rique",
"HeaderIdentificationCriteriaHelp": "Entrer au moins un crit\u00e8re d'identification.", "HeaderIdentificationCriteriaHelp": "Entrer au moins un crit\u00e8re d'identification.",
"HeaderDirectPlayProfileHelp": "Ajouter des profils de lecture directe pour indiquer quels formats le p\u00e9riph\u00e9rique peut lire de fa\u00e7on native.", "HeaderDirectPlayProfileHelp": "Ajouter des profils de lecture directe pour indiquer quels formats le p\u00e9riph\u00e9rique peut lire de fa\u00e7on native.",
"HeaderTranscodingProfileHelp": "Ajoutez des profils de transcodage pour sp\u00e9cifier quels formats doit \u00eatre transcod\u00e9.", "HeaderTranscodingProfileHelp": "Ajoutez des profils de transcodage pour indiquer quels formats devraient \u00eatre utilis\u00e9s quand le transcodage est requis.",
"HeaderResponseProfileHelp": "Les profils de r\u00e9ponse permettent de personnaliser l'information envoy\u00e9e au p\u00e9riph\u00e9rique lors de la lecture de certains types de m\u00e9dia.", "HeaderResponseProfileHelp": "Les profils de r\u00e9ponse permettent de personnaliser l'information envoy\u00e9e au p\u00e9riph\u00e9rique lors de la lecture de certains types de m\u00e9dia.",
"LabelXDlnaCap": "Cap X-Dlna:", "LabelXDlnaCap": "Cap X-Dlna:",
"LabelXDlnaCapHelp": "D\u00e9termine le contenu des \u00e9l\u00e9ments X_DLNACAP dans l'espace de nom urn:schemas-dlna-org:device-1-0.", "LabelXDlnaCapHelp": "D\u00e9termine le contenu des \u00e9l\u00e9ments X_DLNACAP dans l'espace de nom urn:schemas-dlna-org:device-1-0.",
@ -1172,27 +1172,27 @@
"ButtonLearnMore": "Apprendre plus", "ButtonLearnMore": "Apprendre plus",
"TabPlayback": "Lecture", "TabPlayback": "Lecture",
"HeaderTrailersAndExtras": "Bandes-annonces et extras", "HeaderTrailersAndExtras": "Bandes-annonces et extras",
"OptionFindTrailers": "Trouver automatiquement les bandes-annonces sur Internet", "OptionFindTrailers": "Rechercher automatiquement les bandes-annonces sur Internet",
"HeaderLanguagePreferences": "Pr\u00e9f\u00e9rences de langue", "HeaderLanguagePreferences": "Pr\u00e9f\u00e9rences de langue",
"TabCinemaMode": "Mode cin\u00e9ma", "TabCinemaMode": "Mode cin\u00e9ma",
"TitlePlayback": "Lecture", "TitlePlayback": "Lecture",
"LabelEnableCinemaModeFor": "Activer le mode cin\u00e9ma pour :", "LabelEnableCinemaModeFor": "Activer le mode cin\u00e9ma pour :",
"CinemaModeConfigurationHelp": "Le mode cin\u00e9ma apporte l'exp\u00e9rience du cin\u00e9ma directement dans votre salon avec l'abilit\u00e9 de lire les bandes-annonces et les introductions personnalis\u00e9es avant le programme principal.", "CinemaModeConfigurationHelp": "Le mode cin\u00e9ma apporte l'exp\u00e9rience du cin\u00e9ma directement dans votre salon avec l'abilit\u00e9 de lire les bandes-annonces et les introductions personnalis\u00e9es avant le programme principal.",
"OptionTrailersFromMyMovies": "Inclure les bandes-annonces des films dans la biblioth\u00e8que", "OptionTrailersFromMyMovies": "Inclure les bandes-annonces des films dans ma biblioth\u00e8que",
"OptionUpcomingMoviesInTheaters": "Inclure les bandes-annonces des nouveaux et anciens films", "OptionUpcomingMoviesInTheaters": "Inclure les bandes-annonces des nouveaut\u00e9s et des films \u00e0 l'affiche",
"LabelLimitIntrosToUnwatchedContent": "Utiliser uniquement les bandes-annonces du contenu non visionn\u00e9", "LabelLimitIntrosToUnwatchedContent": "Utiliser seulement les bandes-annonces du contenu non lu",
"LabelEnableIntroParentalControl": "Activer le control parental intelligent", "LabelEnableIntroParentalControl": "Activer le control parental intelligent",
"LabelEnableIntroParentalControlHelp": "Les bandes-annonces ne pourront \u00eatre s\u00e9lectionn\u00e9es qu'avec un niveau d'acc\u00e8s \u00e9gal ou inf\u00e9rieur \u00e0 celui du contenu \u00e0 visionner.", "LabelEnableIntroParentalControlHelp": "Les bandes-annonces seront seulement s\u00e9lectionn\u00e9es avec un niveau de contr\u00f4le parental \u00e9gal ou inf\u00e9rieur \u00e0 celui du contenu en cours de lecture.",
"LabelTheseFeaturesRequireSupporterHelpAndTrailers": "Ces fonctionnalit\u00e9s n\u00e9cessitent un compte membre actif et l'installation du plugin Bande annonces.", "LabelTheseFeaturesRequireSupporterHelpAndTrailers": "Ces fonctionnalit\u00e9s n\u00e9cessitent un abonnement actif comme supporteur et l'installation du plugin \"Trailer channel\".",
"OptionTrailersFromMyMoviesHelp": "Requiert la configuration des bandes-annonces locales.", "OptionTrailersFromMyMoviesHelp": "N\u00e9cessite la configuration des bandes-annonces locales.",
"LabelCustomIntrosPath": "Chemin des intros personnalis\u00e9es :", "LabelCustomIntrosPath": "Chemin des intros personnalis\u00e9es :",
"LabelCustomIntrosPathHelp": "Un r\u00e9pertoire contenant des fichiers vid\u00e9os. Une vid\u00e9o sera s\u00e9lectionn\u00e9e al\u00e9atoirement et jou\u00e9e apr\u00e8s les bandes-annonces.", "LabelCustomIntrosPathHelp": "Un r\u00e9pertoire contenant des fichiers vid\u00e9os. Une vid\u00e9o sera s\u00e9lectionn\u00e9e al\u00e9atoirement et lue apr\u00e8s les bandes-annonces.",
"ValueSpecialEpisodeName": "Sp\u00e9cial - {0}", "ValueSpecialEpisodeName": "Sp\u00e9cial - {0}",
"LabelSelectInternetTrailersForCinemaMode": "Bandes-annonces Internet :", "LabelSelectInternetTrailersForCinemaMode": "Bandes-annonces Internet :",
"OptionUpcomingDvdMovies": "Inclure les bandes annonces des nouveaux et prochains films en DVD et Blu-Ray", "OptionUpcomingDvdMovies": "Inclure les bandes-annonces des nouveaut\u00e9s et des films \u00e0 venir sur DVD et Blu-Ray",
"OptionUpcomingStreamingMovies": "Inclure les bandes annonces des nouveaux et prochains films de NetFlix", "OptionUpcomingStreamingMovies": "Inclure les bandes-annonces des nouveaut\u00e9s et des films \u00e0 l'affiche sur Netflix",
"LabelDisplayTrailersWithinMovieSuggestions": "Afficher les bandes-annonces dans les suggestions de film.", "LabelDisplayTrailersWithinMovieSuggestions": "Afficher les bandes-annonces dans les suggestions de films.",
"LabelDisplayTrailersWithinMovieSuggestionsHelp": "N\u00e9cessite l'installation du plugin Trailer", "LabelDisplayTrailersWithinMovieSuggestionsHelp": "N\u00e9cessite l'installation du plugin \"Trailer channel\".",
"CinemaModeConfigurationHelp2": "Les utilisateurs ont la possibilit\u00e9 de d\u00e9sactiver le mode cin\u00e9ma dans leurs propres pr\u00e9f\u00e9rences.", "CinemaModeConfigurationHelp2": "Les utilisateurs ont la possibilit\u00e9 de d\u00e9sactiver le mode cin\u00e9ma dans leurs propres pr\u00e9f\u00e9rences.",
"LabelEnableCinemaMode": "Activer le mode cin\u00e9ma", "LabelEnableCinemaMode": "Activer le mode cin\u00e9ma",
"HeaderCinemaMode": "Mode cin\u00e9ma", "HeaderCinemaMode": "Mode cin\u00e9ma",
@ -1235,10 +1235,14 @@
"HeaderOptionalLinkMediaBrowserAccount": "Optionnel: lier votre compte Media Browser", "HeaderOptionalLinkMediaBrowserAccount": "Optionnel: lier votre compte Media Browser",
"ButtonTrailerReel": "Trailer reel", "ButtonTrailerReel": "Trailer reel",
"HeaderTrailerReel": "Trailer reel", "HeaderTrailerReel": "Trailer reel",
"OptionPlayUnwatchedTrailersOnly": "Visionner uniquement les bandes annonces non vues", "OptionPlayUnwatchedTrailersOnly": "Lire seulement les bandes-annonces non lus.",
"HeaderTrailerReelHelp": "Commencer un \"trailer reel\" pour lire une longue liste de lecture de bandes-annonces.", "HeaderTrailerReelHelp": "Commencer un \"trailer reel\" pour lire une longue liste de lecture de bandes-annonces.",
"MessageNoTrailersFound": "Aucune bande-annonce trouv\u00e9e. Installer le \"Trailer channel\" plugin pour importer une biblioth\u00e8que de bandes-annonces Internet.", "MessageNoTrailersFound": "Aucune bande-annonce trouv\u00e9e. Installer le plugin \"Trailer channel\" pour importer une biblioth\u00e8que de bandes-annonces Internet.",
"HeaderNewUsers": "Nouveaux utilisateurs", "HeaderNewUsers": "Nouveaux utilisateurs",
"ButtonSignUp": "S'inscrire", "ButtonSignUp": "S'inscrire",
"ButtonForgotPassword": "Mot de passe oubli\u00e9 ?" "ButtonForgotPassword": "Mot de passe oubli\u00e9 ?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

View File

@ -1240,5 +1240,9 @@
"MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.", "MessageNoTrailersFound": "No trailers found. Install the Trailer channel plugin to import a library of internet trailers.",
"HeaderNewUsers": "New Users", "HeaderNewUsers": "New Users",
"ButtonSignUp": "Sign up", "ButtonSignUp": "Sign up",
"ButtonForgotPassword": "Forgot password?" "ButtonForgotPassword": "Forgot password?",
"OptionDisableUserPreferences": "Disable access to user preferences",
"OptionDisableUserPreferencesHelp": "If enabled, only administrators will be able to configure user profile images, passwords, and language preferences.",
"HeaderSelectServer": "Select Server",
"MessageNoServersAvailableToConnect": "No servers are available to connect to. If you've been invited to share a server, make sure to confirm it by clicking the link in the email."
} }

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