mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-04-24 14:08:44 -04:00
update translations
This commit is contained in:
parent
02e25b4855
commit
9c5cceb4ec
124 changed files with 1569 additions and 534 deletions
|
@ -3,6 +3,8 @@ using MediaBrowser.Controller.Net;
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
using MediaBrowser.Model.Querying;
|
using MediaBrowser.Model.Querying;
|
||||||
using ServiceStack;
|
using ServiceStack;
|
||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
namespace MediaBrowser.Api.System
|
namespace MediaBrowser.Api.System
|
||||||
{
|
{
|
||||||
|
@ -22,6 +24,9 @@ namespace MediaBrowser.Api.System
|
||||||
/// <value>The limit.</value>
|
/// <value>The limit.</value>
|
||||||
[ApiMember(Name = "Limit", Description = "Optional. The maximum number of records to return", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "Limit", Description = "Optional. The maximum number of records to return", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
|
|
||||||
|
[ApiMember(Name = "MinDate", Description = "Optional. The minimum date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
|
||||||
|
public string MinDate { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Authenticated]
|
[Authenticated]
|
||||||
|
@ -36,7 +41,11 @@ namespace MediaBrowser.Api.System
|
||||||
|
|
||||||
public object Get(GetActivityLogs request)
|
public object Get(GetActivityLogs request)
|
||||||
{
|
{
|
||||||
var result = _activityManager.GetActivityLogEntries(request.StartIndex, request.Limit);
|
DateTime? minDate = string.IsNullOrWhiteSpace(request.MinDate) ?
|
||||||
|
(DateTime?)null :
|
||||||
|
DateTime.Parse(request.MinDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
|
||||||
|
|
||||||
|
var result = _activityManager.GetActivityLogEntries(minDate, request.StartIndex, request.Limit);
|
||||||
|
|
||||||
return ToOptimizedResult(result);
|
return ToOptimizedResult(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,11 +318,12 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
.OrderByDescending(i => i.DateCreated)
|
.OrderByDescending(i => i.DateCreated)
|
||||||
.Where(i => i.LocationType != LocationType.Virtual);
|
.Where(i => i.LocationType != LocationType.Virtual);
|
||||||
|
|
||||||
if (request.IsFolder.HasValue)
|
|
||||||
{
|
//if (request.IsFolder.HasValue)
|
||||||
var val = request.IsFolder.Value;
|
//{
|
||||||
libraryItems = libraryItems.Where(f => f.IsFolder == val);
|
//var val = request.IsFolder.Value;
|
||||||
}
|
libraryItems = libraryItems.Where(f => f.IsFolder == false);
|
||||||
|
//}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(request.IncludeItemTypes))
|
if (!string.IsNullOrEmpty(request.IncludeItemTypes))
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,6 +12,6 @@ namespace MediaBrowser.Controller.Activity
|
||||||
|
|
||||||
Task Create(ActivityLogEntry entry);
|
Task Create(ActivityLogEntry entry);
|
||||||
|
|
||||||
QueryResult<ActivityLogEntry> GetActivityLogEntries(int? startIndex, int? limit);
|
QueryResult<ActivityLogEntry> GetActivityLogEntries(DateTime? minDate, int? startIndex, int? limit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
using MediaBrowser.Model.Querying;
|
using MediaBrowser.Model.Querying;
|
||||||
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Activity
|
namespace MediaBrowser.Controller.Activity
|
||||||
|
@ -8,6 +9,6 @@ namespace MediaBrowser.Controller.Activity
|
||||||
{
|
{
|
||||||
Task Create(ActivityLogEntry entry);
|
Task Create(ActivityLogEntry entry);
|
||||||
|
|
||||||
QueryResult<ActivityLogEntry> GetActivityLogEntries(int? startIndex, int? limit);
|
QueryResult<ActivityLogEntry> GetActivityLogEntries(DateTime? minDate, int? startIndex, int? limit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Model.Channels;
|
using MediaBrowser.Model.Channels;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Channels
|
namespace MediaBrowser.Controller.Channels
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
using MediaBrowser.Common.IO;
|
using MediaBrowser.Common.IO;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using MediaBrowser.Controller.LiveTv;
|
||||||
using MediaBrowser.Controller.Localization;
|
using MediaBrowser.Controller.Localization;
|
||||||
using MediaBrowser.Controller.Persistence;
|
using MediaBrowser.Controller.Persistence;
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
|
@ -66,6 +67,15 @@ namespace MediaBrowser.Controller.Entities
|
||||||
/// <value><c>true</c> if this instance is in mixed folder; otherwise, <c>false</c>.</value>
|
/// <value><c>true</c> if this instance is in mixed folder; otherwise, <c>false</c>.</value>
|
||||||
public bool IsInMixedFolder { get; set; }
|
public bool IsInMixedFolder { get; set; }
|
||||||
|
|
||||||
|
[IgnoreDataMember]
|
||||||
|
public virtual bool SupportsRemoteImageDownloading
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private string _name;
|
private string _name;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name.
|
/// Gets or sets the name.
|
||||||
|
@ -227,6 +237,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
public static IItemRepository ItemRepository { get; set; }
|
public static IItemRepository ItemRepository { get; set; }
|
||||||
public static IFileSystem FileSystem { get; set; }
|
public static IFileSystem FileSystem { get; set; }
|
||||||
public static IUserDataManager UserDataManager { get; set; }
|
public static IUserDataManager UserDataManager { get; set; }
|
||||||
|
public static ILiveTvManager LiveTvManager { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a <see cref="System.String" /> that represents this instance.
|
/// Returns a <see cref="System.String" /> that represents this instance.
|
||||||
|
|
|
@ -840,7 +840,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
if (includeLinkedChildren)
|
if (includeLinkedChildren)
|
||||||
{
|
{
|
||||||
foreach (var child in GetLinkedChildren())
|
foreach (var child in GetLinkedChildren(user))
|
||||||
{
|
{
|
||||||
if (child.IsVisible(user))
|
if (child.IsVisible(user))
|
||||||
{
|
{
|
||||||
|
@ -924,6 +924,31 @@ namespace MediaBrowser.Controller.Entities
|
||||||
.Where(i => i != null);
|
.Where(i => i != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual bool FilterLinkedChildrenPerUser
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<BaseItem> GetLinkedChildren(User user)
|
||||||
|
{
|
||||||
|
if (!FilterLinkedChildrenPerUser)
|
||||||
|
{
|
||||||
|
return GetLinkedChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
var locations = user.RootFolder
|
||||||
|
.Children
|
||||||
|
.OfType<CollectionFolder>()
|
||||||
|
.SelectMany(i => i.PhysicalLocations)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
return LinkedChildren.Where(i => string.IsNullOrWhiteSpace(i.Path) || locations.Any(l => FileSystem.ContainsSubPath(l, i.Path)))
|
||||||
|
.Select(GetLinkedChild)
|
||||||
|
.Where(i => i != null);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the linked children.
|
/// Gets the linked children.
|
||||||
|
|
|
@ -154,6 +154,12 @@ namespace MediaBrowser.Controller.Entities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value><c>true</c> if this instance is locked; otherwise, <c>false</c>.</value>
|
/// <value><c>true</c> if this instance is locked; otherwise, <c>false</c>.</value>
|
||||||
bool IsLocked { get; }
|
bool IsLocked { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a value indicating whether [supports remote image downloading].
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>true</c> if [supports remote image downloading]; otherwise, <c>false</c>.</value>
|
||||||
|
bool SupportsRemoteImageDownloading { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class HasImagesExtensions
|
public static class HasImagesExtensions
|
||||||
|
|
|
@ -9,6 +9,12 @@ namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
public interface IHasMediaSources
|
public interface IHasMediaSources
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the identifier.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The identifier.</value>
|
||||||
|
Guid Id { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the media sources.
|
/// Gets the media sources.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -19,7 +19,6 @@ namespace MediaBrowser.Controller.Entities
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serves as a cache
|
/// Serves as a cache
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[IgnoreDataMember]
|
|
||||||
public Guid? ItemId { get; set; }
|
public Guid? ItemId { get; set; }
|
||||||
|
|
||||||
public static LinkedChild Create(BaseItem item)
|
public static LinkedChild Create(BaseItem item)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
using MediaBrowser.Common.Progress;
|
using MediaBrowser.Common.Progress;
|
||||||
|
using MediaBrowser.Controller.Playlists;
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
|
@ -26,6 +27,14 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
Keywords = new List<string>();
|
Keywords = new List<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool FilterLinkedChildrenPerUser
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public List<Guid> LocalTrailerIds { get; set; }
|
public List<Guid> LocalTrailerIds { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -72,6 +81,8 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
{
|
{
|
||||||
var children = base.GetChildren(user, includeLinkedChildren);
|
var children = base.GetChildren(user, includeLinkedChildren);
|
||||||
|
|
||||||
|
children = Playlist.FilterInaccessibleItems(children, user);
|
||||||
|
|
||||||
if (string.Equals(DisplayOrder, ItemSortBy.SortName, StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(DisplayOrder, ItemSortBy.SortName, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
// Sort by name
|
// Sort by name
|
||||||
|
@ -83,11 +94,17 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
// Sort by release date
|
// Sort by release date
|
||||||
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
|
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default sorting
|
// Default sorting
|
||||||
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
|
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true)
|
||||||
|
{
|
||||||
|
var children = base.GetRecursiveChildren(user, includeLinkedChildren);
|
||||||
|
return Playlist.FilterInaccessibleItems(children, user);
|
||||||
|
}
|
||||||
|
|
||||||
public BoxSetInfo GetLookupInfo()
|
public BoxSetInfo GetLookupInfo()
|
||||||
{
|
{
|
||||||
return GetItemLookupInfo<BoxSetInfo>();
|
return GetItemLookupInfo<BoxSetInfo>();
|
||||||
|
|
|
@ -188,6 +188,20 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[IgnoreDataMember]
|
||||||
|
public override bool SupportsRemoteImageDownloading
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (IsMissingEpisode)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
public bool IsMissingEpisode
|
public bool IsMissingEpisode
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,15 +1,20 @@
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
|
using MediaBrowser.Model.LiveTv;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
public class UserView : Folder
|
public class UserView : Folder
|
||||||
{
|
{
|
||||||
public string ViewType { get; set; }
|
public string ViewType { get; set; }
|
||||||
|
public static IUserViewManager UserViewManager { get; set; }
|
||||||
|
|
||||||
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
||||||
{
|
{
|
||||||
|
@ -17,6 +22,23 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
switch (ViewType)
|
switch (ViewType)
|
||||||
{
|
{
|
||||||
|
case CollectionType.LiveTvChannels:
|
||||||
|
return LiveTvManager.GetInternalChannels(new LiveTvChannelQuery
|
||||||
|
{
|
||||||
|
UserId = user.Id.ToString("N")
|
||||||
|
|
||||||
|
}, CancellationToken.None).Result.Items;
|
||||||
|
case CollectionType.LiveTvRecordingGroups:
|
||||||
|
return LiveTvManager.GetInternalRecordings(new RecordingQuery
|
||||||
|
{
|
||||||
|
UserId = user.Id.ToString("N"),
|
||||||
|
Status = RecordingStatus.Completed
|
||||||
|
|
||||||
|
}, CancellationToken.None).Result.Items;
|
||||||
|
case CollectionType.LiveTv:
|
||||||
|
return GetLiveTvFolders(user).Result;
|
||||||
|
case CollectionType.Folders:
|
||||||
|
return user.RootFolder.GetChildren(user, includeLinkedChildren);
|
||||||
case CollectionType.Games:
|
case CollectionType.Games:
|
||||||
return mediaFolders.SelectMany(i => i.GetRecursiveChildren(user, includeLinkedChildren))
|
return mediaFolders.SelectMany(i => i.GetRecursiveChildren(user, includeLinkedChildren))
|
||||||
.OfType<GameSystem>();
|
.OfType<GameSystem>();
|
||||||
|
@ -34,6 +56,16 @@ namespace MediaBrowser.Controller.Entities
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<IEnumerable<BaseItem>> GetLiveTvFolders(User user)
|
||||||
|
{
|
||||||
|
var list = new List<BaseItem>();
|
||||||
|
|
||||||
|
list.Add(await UserViewManager.GetUserView(CollectionType.LiveTvChannels, user, string.Empty, CancellationToken.None).ConfigureAwait(false));
|
||||||
|
list.Add(await UserViewManager.GetUserView(CollectionType.LiveTvRecordingGroups, user, string.Empty, CancellationToken.None).ConfigureAwait(false));
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user)
|
protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user)
|
||||||
{
|
{
|
||||||
return GetChildren(user, false);
|
return GetChildren(user, false);
|
||||||
|
|
|
@ -9,5 +9,7 @@ namespace MediaBrowser.Controller.Library
|
||||||
public interface IUserViewManager
|
public interface IUserViewManager
|
||||||
{
|
{
|
||||||
Task<IEnumerable<Folder>> GetUserViews(UserViewQuery query, CancellationToken cancellationToken);
|
Task<IEnumerable<Folder>> GetUserViews(UserViewQuery query, CancellationToken cancellationToken);
|
||||||
|
|
||||||
|
Task<UserView> GetUserView(string type, User user, string sortName, CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -280,5 +280,22 @@ namespace MediaBrowser.Controller.LiveTv
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>IEnumerable{User}.</returns>
|
/// <returns>IEnumerable{User}.</returns>
|
||||||
IEnumerable<User> GetEnabledUsers();
|
IEnumerable<User> GetEnabledUsers();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the internal channels.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="query">The query.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns>Task<QueryResult<LiveTvChannel>>.</returns>
|
||||||
|
Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query,
|
||||||
|
CancellationToken cancellationToken);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the internal recordings.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="query">The query.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
|
/// <returns>Task<QueryResult<BaseItem>>.</returns>
|
||||||
|
Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
22
MediaBrowser.Controller/LiveTv/RecordingGroup.cs
Normal file
22
MediaBrowser.Controller/LiveTv/RecordingGroup.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Model.Configuration;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Controller.LiveTv
|
||||||
|
{
|
||||||
|
public class RecordingGroup : Folder
|
||||||
|
{
|
||||||
|
protected override bool GetBlockUnratedValue(UserConfiguration config)
|
||||||
|
{
|
||||||
|
// Don't block.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool SupportsLocalMetadata
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -168,6 +168,7 @@
|
||||||
<Compile Include="Library\LibraryManagerExtensions.cs" />
|
<Compile Include="Library\LibraryManagerExtensions.cs" />
|
||||||
<Compile Include="Library\PlaybackStopEventArgs.cs" />
|
<Compile Include="Library\PlaybackStopEventArgs.cs" />
|
||||||
<Compile Include="Library\UserDataSaveEventArgs.cs" />
|
<Compile Include="Library\UserDataSaveEventArgs.cs" />
|
||||||
|
<Compile Include="LiveTv\RecordingGroup.cs" />
|
||||||
<Compile Include="LiveTv\RecordingStatusChangedEventArgs.cs" />
|
<Compile Include="LiveTv\RecordingStatusChangedEventArgs.cs" />
|
||||||
<Compile Include="LiveTv\ILiveTvRecording.cs" />
|
<Compile Include="LiveTv\ILiveTvRecording.cs" />
|
||||||
<Compile Include="LiveTv\LiveStreamInfo.cs" />
|
<Compile Include="LiveTv\LiveStreamInfo.cs" />
|
||||||
|
|
|
@ -12,6 +12,14 @@ namespace MediaBrowser.Controller.Playlists
|
||||||
{
|
{
|
||||||
public string OwnerUserId { get; set; }
|
public string OwnerUserId { get; set; }
|
||||||
|
|
||||||
|
protected override bool FilterLinkedChildrenPerUser
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
||||||
{
|
{
|
||||||
return GetPlayableItems(user);
|
return GetPlayableItems(user);
|
||||||
|
@ -34,7 +42,12 @@ namespace MediaBrowser.Controller.Playlists
|
||||||
|
|
||||||
public static IEnumerable<BaseItem> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user)
|
public static IEnumerable<BaseItem> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user)
|
||||||
{
|
{
|
||||||
return inputItems.SelectMany(i =>
|
if (user != null)
|
||||||
|
{
|
||||||
|
inputItems = inputItems.Where(i => i.IsVisible(user));
|
||||||
|
}
|
||||||
|
|
||||||
|
inputItems = inputItems.SelectMany(i =>
|
||||||
{
|
{
|
||||||
var folder = i as Folder;
|
var folder = i as Folder;
|
||||||
|
|
||||||
|
@ -58,6 +71,31 @@ namespace MediaBrowser.Controller.Playlists
|
||||||
return new[] { i };
|
return new[] { i };
|
||||||
|
|
||||||
}).Where(m => string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase));
|
}).Where(m => string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
return FilterInaccessibleItems(inputItems, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerable<BaseItem> FilterInaccessibleItems(IEnumerable<BaseItem> items, User user)
|
||||||
|
{
|
||||||
|
return items;
|
||||||
|
//var locations = user.RootFolder.Children.OfType<CollectionFolder>().SelectMany(i => i.PhysicalLocations).ToList();
|
||||||
|
|
||||||
|
//return items.Where(i =>
|
||||||
|
//{
|
||||||
|
// var parent = i.Parent;
|
||||||
|
|
||||||
|
// while (parent != null)
|
||||||
|
// {
|
||||||
|
// parent = parent.Parent;
|
||||||
|
|
||||||
|
// if (parent != null && parent.Parent is AggregateFolder)
|
||||||
|
// {
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return parent == null || locations.Contains(parent.Path, StringComparer.OrdinalIgnoreCase);
|
||||||
|
//});
|
||||||
}
|
}
|
||||||
|
|
||||||
[IgnoreDataMember]
|
[IgnoreDataMember]
|
||||||
|
|
|
@ -442,10 +442,6 @@ namespace MediaBrowser.Dlna.ContentDirectory
|
||||||
|
|
||||||
private async Task<IEnumerable<BaseItem>> GetUserViewChildren(UserView folder, User user, SortCriteria sort)
|
private async Task<IEnumerable<BaseItem>> GetUserViewChildren(UserView folder, User user, SortCriteria sort)
|
||||||
{
|
{
|
||||||
if (string.Equals(folder.ViewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return new List<BaseItem>();
|
|
||||||
}
|
|
||||||
if (string.Equals(folder.ViewType, CollectionType.Channels, StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(folder.ViewType, CollectionType.Channels, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var result = await _channelManager.GetChannelsInternal(new ChannelQuery()
|
var result = await _channelManager.GetChannelsInternal(new ChannelQuery()
|
||||||
|
@ -468,6 +464,22 @@ namespace MediaBrowser.Dlna.ContentDirectory
|
||||||
{
|
{
|
||||||
return SortItems(folder.GetChildren(user, true).OfType<MusicArtist>(), user, sort);
|
return SortItems(folder.GetChildren(user, true).OfType<MusicArtist>(), user, sort);
|
||||||
}
|
}
|
||||||
|
if (string.Equals(folder.ViewType, CollectionType.Folders, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return SortItems(folder.GetChildren(user, true), user, sort);
|
||||||
|
}
|
||||||
|
if (string.Equals(folder.ViewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return SortItems(folder.GetChildren(user, true), user, sort);
|
||||||
|
}
|
||||||
|
if (string.Equals(folder.ViewType, CollectionType.LiveTvRecordingGroups, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return SortItems(folder.GetChildren(user, true), user, sort);
|
||||||
|
}
|
||||||
|
if (string.Equals(folder.ViewType, CollectionType.LiveTvChannels, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return SortItems(folder.GetChildren(user, true), user, sort);
|
||||||
|
}
|
||||||
|
|
||||||
return GetPlainFolderChildrenSorted(folder, user, sort);
|
return GetPlainFolderChildrenSorted(folder, user, sort);
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,16 +80,18 @@ namespace MediaBrowser.Dlna.Didl
|
||||||
// refID?
|
// refID?
|
||||||
// storeAttribute(itemNode, object, ClassProperties.REF_ID, false);
|
// storeAttribute(itemNode, object, ClassProperties.REF_ID, false);
|
||||||
|
|
||||||
var audio = item as Audio;
|
var hasMediaSources = item as IHasMediaSources;
|
||||||
if (audio != null)
|
|
||||||
{
|
|
||||||
AddAudioResource(element, audio, deviceId, filter, streamInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
var video = item as Video;
|
if (hasMediaSources != null)
|
||||||
if (video != null)
|
|
||||||
{
|
{
|
||||||
AddVideoResource(element, video, deviceId, filter, streamInfo);
|
if (string.Equals(item.MediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
AddAudioResource(element, hasMediaSources, deviceId, filter, streamInfo);
|
||||||
|
}
|
||||||
|
else if (string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
AddVideoResource(element, hasMediaSources, deviceId, filter, streamInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AddCover(item, element);
|
AddCover(item, element);
|
||||||
|
@ -97,7 +99,7 @@ namespace MediaBrowser.Dlna.Didl
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddVideoResource(XmlElement container, Video video, string deviceId, Filter filter, StreamInfo streamInfo = null)
|
private void AddVideoResource(XmlElement container, IHasMediaSources video, string deviceId, Filter filter, StreamInfo streamInfo = null)
|
||||||
{
|
{
|
||||||
if (streamInfo == null)
|
if (streamInfo == null)
|
||||||
{
|
{
|
||||||
|
@ -181,7 +183,7 @@ namespace MediaBrowser.Dlna.Didl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddVideoResource(XmlElement container, Video video, string deviceId, Filter filter, string contentFeatures, StreamInfo streamInfo)
|
private void AddVideoResource(XmlElement container, IHasMediaSources video, string deviceId, Filter filter, string contentFeatures, StreamInfo streamInfo)
|
||||||
{
|
{
|
||||||
var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL);
|
var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL);
|
||||||
|
|
||||||
|
@ -270,7 +272,7 @@ namespace MediaBrowser.Dlna.Didl
|
||||||
container.AppendChild(res);
|
container.AppendChild(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddAudioResource(XmlElement container, Audio audio, string deviceId, Filter filter, StreamInfo streamInfo = null)
|
private void AddAudioResource(XmlElement container, IHasMediaSources audio, string deviceId, Filter filter, StreamInfo streamInfo = null)
|
||||||
{
|
{
|
||||||
var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL);
|
var res = container.OwnerDocument.CreateElement(string.Empty, "res", NS_DIDL);
|
||||||
|
|
||||||
|
@ -636,9 +638,12 @@ namespace MediaBrowser.Dlna.Didl
|
||||||
|
|
||||||
if (!_profile.EnableAlbumArtInDidl)
|
if (!_profile.EnableAlbumArtInDidl)
|
||||||
{
|
{
|
||||||
if (!(item is Photo) && !(item is Video))
|
if (!string.Equals(item.MediaType, MediaType.Photo, StringComparison.OrdinalIgnoreCase) && !string.Equals(item.MediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return;
|
if (!item.IsFolder)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,8 @@ namespace MediaBrowser.Dlna.Profiles
|
||||||
|
|
||||||
MaxStreamingBitrate = 8000000;
|
MaxStreamingBitrate = 8000000;
|
||||||
MaxStaticBitrate = 8000000;
|
MaxStaticBitrate = 8000000;
|
||||||
|
MusicStreamingTranscodingBitrate = 128000;
|
||||||
|
MusicSyncBitrate = 128000;
|
||||||
|
|
||||||
EnableAlbumArtInDidl = false;
|
EnableAlbumArtInDidl = false;
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -25,6 +25,8 @@
|
||||||
<MaxIconHeight>48</MaxIconHeight>
|
<MaxIconHeight>48</MaxIconHeight>
|
||||||
<MaxStreamingBitrate>8000000</MaxStreamingBitrate>
|
<MaxStreamingBitrate>8000000</MaxStreamingBitrate>
|
||||||
<MaxStaticBitrate>8000000</MaxStaticBitrate>
|
<MaxStaticBitrate>8000000</MaxStaticBitrate>
|
||||||
|
<MusicStreamingTranscodingBitrate>128000</MusicStreamingTranscodingBitrate>
|
||||||
|
<MusicSyncBitrate>128000</MusicSyncBitrate>
|
||||||
<XDlnaDoc>DMS-1.50</XDlnaDoc>
|
<XDlnaDoc>DMS-1.50</XDlnaDoc>
|
||||||
<SonyAggregationFlags>10</SonyAggregationFlags>
|
<SonyAggregationFlags>10</SonyAggregationFlags>
|
||||||
<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</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</ProtocolInfo>
|
||||||
|
@ -107,4 +109,5 @@
|
||||||
<Conditions />
|
<Conditions />
|
||||||
</ResponseProfile>
|
</ResponseProfile>
|
||||||
</ResponseProfiles>
|
</ResponseProfiles>
|
||||||
|
<SubtitleProfiles />
|
||||||
</Profile>
|
</Profile>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -184,7 +184,7 @@ namespace MediaBrowser.Dlna.Ssdp
|
||||||
values["ST"] = d.Type;
|
values["ST"] = d.Type;
|
||||||
values["USN"] = d.USN;
|
values["USN"] = d.USN;
|
||||||
|
|
||||||
SendDatagram(header, values, endpoint);
|
SendDatagram(header, values, endpoint, null);
|
||||||
|
|
||||||
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
if (_config.GetDlnaConfiguration().EnableDebugLogging)
|
||||||
{
|
{
|
||||||
|
|
|
@ -761,6 +761,9 @@
|
||||||
<Compile Include="..\MediaBrowser.Model\Querying\ItemsResult.cs">
|
<Compile Include="..\MediaBrowser.Model\Querying\ItemsResult.cs">
|
||||||
<Link>Querying\ItemsResult.cs</Link>
|
<Link>Querying\ItemsResult.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Querying\LatestItemsQuery.cs">
|
||||||
|
<Link>Querying\LatestItemsQuery.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Querying\NextUpQuery.cs">
|
<Compile Include="..\MediaBrowser.Model\Querying\NextUpQuery.cs">
|
||||||
<Link>Querying\NextUpQuery.cs</Link>
|
<Link>Querying\NextUpQuery.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -718,6 +718,9 @@
|
||||||
<Compile Include="..\MediaBrowser.Model\Querying\ItemsResult.cs">
|
<Compile Include="..\MediaBrowser.Model\Querying\ItemsResult.cs">
|
||||||
<Link>Querying\ItemsResult.cs</Link>
|
<Link>Querying\ItemsResult.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.Model\Querying\LatestItemsQuery.cs">
|
||||||
|
<Link>Querying\LatestItemsQuery.cs</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\MediaBrowser.Model\Querying\NextUpQuery.cs">
|
<Compile Include="..\MediaBrowser.Model\Querying\NextUpQuery.cs">
|
||||||
<Link>Querying\NextUpQuery.cs</Link>
|
<Link>Querying\NextUpQuery.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -203,6 +203,13 @@ namespace MediaBrowser.Model.ApiClient
|
||||||
/// <exception cref="ArgumentNullException">id</exception>
|
/// <exception cref="ArgumentNullException">id</exception>
|
||||||
Task<BaseItemDto> GetItemAsync(string id, string userId);
|
Task<BaseItemDto> GetItemAsync(string id, string userId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the latest items.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="query">The query.</param>
|
||||||
|
/// <returns>Task<QueryResult<BaseItemDto>>.</returns>
|
||||||
|
Task<QueryResult<BaseItemDto>> GetLatestItems(LatestItemsQuery query);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the intros async.
|
/// Gets the intros async.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -9,9 +9,12 @@
|
||||||
|
|
||||||
public string[] DownloadingChannels { get; set; }
|
public string[] DownloadingChannels { get; set; }
|
||||||
|
|
||||||
|
public double? DownloadSizeLimit { get; set; }
|
||||||
|
|
||||||
public ChannelOptions()
|
public ChannelOptions()
|
||||||
{
|
{
|
||||||
DownloadingChannels = new string[] { };
|
DownloadingChannels = new string[] { };
|
||||||
|
DownloadSizeLimit = 1;
|
||||||
MaxDownloadAge = 30;
|
MaxDownloadAge = 30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,6 +186,7 @@ namespace MediaBrowser.Model.Configuration
|
||||||
public bool DefaultMetadataSettingsApplied { get; set; }
|
public bool DefaultMetadataSettingsApplied { get; set; }
|
||||||
|
|
||||||
public bool EnableTokenAuthentication { get; set; }
|
public bool EnableTokenAuthentication { get; set; }
|
||||||
|
public PeopleMetadataOptions PeopleMetadataOptions { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
|
/// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
|
||||||
|
@ -229,6 +230,8 @@ namespace MediaBrowser.Model.Configuration
|
||||||
|
|
||||||
UICulture = "en-us";
|
UICulture = "en-us";
|
||||||
|
|
||||||
|
PeopleMetadataOptions = new PeopleMetadataOptions();
|
||||||
|
|
||||||
MetadataOptions = new[]
|
MetadataOptions = new[]
|
||||||
{
|
{
|
||||||
new MetadataOptions(1, 1280) {ItemType = "Book"},
|
new MetadataOptions(1, 1280) {ItemType = "Book"},
|
||||||
|
@ -288,4 +291,21 @@ namespace MediaBrowser.Model.Configuration
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class PeopleMetadataOptions
|
||||||
|
{
|
||||||
|
public bool DownloadActorMetadata { get; set; }
|
||||||
|
public bool DownloadDirectorMetadata { get; set; }
|
||||||
|
public bool DownloadProducerMetadata { get; set; }
|
||||||
|
public bool DownloadWriterMetadata { get; set; }
|
||||||
|
public bool DownloadComposerMetadata { get; set; }
|
||||||
|
public bool DownloadOtherPeopleMetadata { get; set; }
|
||||||
|
public bool DownloadGuestStarMetadata { get; set; }
|
||||||
|
|
||||||
|
public PeopleMetadataOptions()
|
||||||
|
{
|
||||||
|
DownloadActorMetadata = true;
|
||||||
|
DownloadDirectorMetadata = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,7 @@ namespace MediaBrowser.Model.Configuration
|
||||||
|
|
||||||
public SubtitlePlaybackMode SubtitleMode { get; set; }
|
public SubtitlePlaybackMode SubtitleMode { get; set; }
|
||||||
public bool DisplayCollectionsView { get; set; }
|
public bool DisplayCollectionsView { get; set; }
|
||||||
|
public bool DisplayFoldersView { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="UserConfiguration" /> class.
|
/// Initializes a new instance of the <see cref="UserConfiguration" /> class.
|
||||||
|
|
|
@ -36,6 +36,12 @@ namespace MediaBrowser.Model.Dlna
|
||||||
/// <value>The context.</value>
|
/// <value>The context.</value>
|
||||||
public EncodingContext Context { get; set; }
|
public EncodingContext Context { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the audio transcoding bitrate.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The audio transcoding bitrate.</value>
|
||||||
|
public int? AudioTranscodingBitrate { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the maximum bitrate.
|
/// Gets the maximum bitrate.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -52,6 +52,9 @@ namespace MediaBrowser.Model.Dlna
|
||||||
public int? MaxStreamingBitrate { get; set; }
|
public int? MaxStreamingBitrate { get; set; }
|
||||||
public int? MaxStaticBitrate { get; set; }
|
public int? MaxStaticBitrate { get; set; }
|
||||||
|
|
||||||
|
public int? MusicStreamingTranscodingBitrate { get; set; }
|
||||||
|
public int? MusicSyncBitrate { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Controls the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.
|
/// Controls the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -217,10 +217,11 @@ namespace MediaBrowser.Model.Dlna
|
||||||
playlistItem.MaxAudioChannels = Math.Min(options.MaxAudioChannels.Value, currentValue);
|
playlistItem.MaxAudioChannels = Math.Min(options.MaxAudioChannels.Value, currentValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!playlistItem.AudioBitrate.HasValue)
|
var configuredBitrate = options.AudioTranscodingBitrate ??
|
||||||
{
|
(options.Context == EncodingContext.Static ? options.Profile.MusicSyncBitrate : options.Profile.MusicStreamingTranscodingBitrate) ??
|
||||||
playlistItem.AudioBitrate = 128000;
|
128000;
|
||||||
}
|
|
||||||
|
playlistItem.AudioBitrate = Math.Min(configuredBitrate, playlistItem.AudioBitrate ?? configuredBitrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
return playlistItem;
|
return playlistItem;
|
||||||
|
|
|
@ -24,5 +24,9 @@
|
||||||
public const string Channels = "channels";
|
public const string Channels = "channels";
|
||||||
public const string LiveTv = "livetv";
|
public const string LiveTv = "livetv";
|
||||||
public const string Playlists = "playlists";
|
public const string Playlists = "playlists";
|
||||||
|
public const string Folders = "folders";
|
||||||
|
|
||||||
|
public const string LiveTvChannels = "LiveTvChannels";
|
||||||
|
public const string LiveTvRecordingGroups = "LiveTvRecordingGroups";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,6 +243,7 @@
|
||||||
<Compile Include="Querying\ItemCountsQuery.cs" />
|
<Compile Include="Querying\ItemCountsQuery.cs" />
|
||||||
<Compile Include="Querying\ItemsByNameQuery.cs" />
|
<Compile Include="Querying\ItemsByNameQuery.cs" />
|
||||||
<Compile Include="Entities\BaseItemInfo.cs" />
|
<Compile Include="Entities\BaseItemInfo.cs" />
|
||||||
|
<Compile Include="Querying\LatestItemsQuery.cs" />
|
||||||
<Compile Include="Querying\NextUpQuery.cs" />
|
<Compile Include="Querying\NextUpQuery.cs" />
|
||||||
<Compile Include="Querying\QueryResult.cs" />
|
<Compile Include="Querying\QueryResult.cs" />
|
||||||
<Compile Include="Querying\SeasonQuery.cs" />
|
<Compile Include="Querying\SeasonQuery.cs" />
|
||||||
|
|
54
MediaBrowser.Model/Querying/LatestItemsQuery.cs
Normal file
54
MediaBrowser.Model/Querying/LatestItemsQuery.cs
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Querying
|
||||||
|
{
|
||||||
|
public class LatestItemsQuery
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The user to localize search results for
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The user id.</value>
|
||||||
|
public string UserId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Specify this to localize the search to a specific item or folder. Omit to use the root.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The parent id.</value>
|
||||||
|
public string ParentId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Skips over a given number of items within the results. Use for paging.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The start index.</value>
|
||||||
|
public int? StartIndex { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The maximum number of items to return
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The limit.</value>
|
||||||
|
public int? Limit { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Fields to return within the items, in addition to basic information
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The fields.</value>
|
||||||
|
public ItemFields[] Fields { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the include item types.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The include item types.</value>
|
||||||
|
public string[] IncludeItemTypes { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether this instance is played.
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>null</c> if [is played] contains no value, <c>true</c> if [is played]; otherwise, <c>false</c>.</value>
|
||||||
|
public bool? IsPlayed { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether [group items].
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>true</c> if [group items]; otherwise, <c>false</c>.</value>
|
||||||
|
public bool GroupItems { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -236,6 +236,11 @@ namespace MediaBrowser.Providers.Manager
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (!item.SupportsRemoteImageDownloading)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!refreshOptions.ReplaceAllImages &&
|
if (!refreshOptions.ReplaceAllImages &&
|
||||||
refreshOptions.ReplaceImages.Count == 0 &&
|
refreshOptions.ReplaceImages.Count == 0 &&
|
||||||
ContainsImages(item, provider.GetSupportedImages(item).ToList(), savedOptions, backdropLimit, screenshotLimit))
|
ContainsImages(item, provider.GetSupportedImages(item).ToList(), savedOptions, backdropLimit, screenshotLimit))
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
using MediaBrowser.Common.IO;
|
using System.Linq;
|
||||||
|
using MediaBrowser.Common.IO;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Playlists;
|
using MediaBrowser.Controller.Playlists;
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
|
@ -40,7 +42,11 @@ namespace MediaBrowser.Providers.Playlists
|
||||||
|
|
||||||
if (mergeMetadataSettings)
|
if (mergeMetadataSettings)
|
||||||
{
|
{
|
||||||
target.LinkedChildren = source.LinkedChildren;
|
var list = source.LinkedChildren.ToList();
|
||||||
|
|
||||||
|
list.AddRange(target.LinkedChildren);
|
||||||
|
|
||||||
|
target.LinkedChildren = list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,9 +188,11 @@ namespace MediaBrowser.Providers.TV
|
||||||
|
|
||||||
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
|
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date)
|
||||||
{
|
{
|
||||||
if (item.LocationType != LocationType.Virtual)
|
var episode = (Episode)item;
|
||||||
|
|
||||||
|
if (!episode.IsVirtualUnaired)
|
||||||
{
|
{
|
||||||
// For non-virtual items, only enable if configured
|
// For non-unaired items, only enable if configured
|
||||||
if (!_config.Configuration.EnableTvDbUpdates)
|
if (!_config.Configuration.EnableTvDbUpdates)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -199,7 +201,6 @@ namespace MediaBrowser.Providers.TV
|
||||||
|
|
||||||
if (!item.HasImage(ImageType.Primary))
|
if (!item.HasImage(ImageType.Primary))
|
||||||
{
|
{
|
||||||
var episode = (Episode)item;
|
|
||||||
var series = episode.Series;
|
var series = episode.Series;
|
||||||
|
|
||||||
var seriesId = series != null ? series.GetProviderId(MetadataProviders.Tvdb) : null;
|
var seriesId = series != null ? series.GetProviderId(MetadataProviders.Tvdb) : null;
|
||||||
|
|
|
@ -32,9 +32,9 @@ namespace MediaBrowser.Server.Implementations.Activity
|
||||||
EventHelper.FireEventIfNotNull(EntryCreated, this, new GenericEventArgs<ActivityLogEntry>(entry), _logger);
|
EventHelper.FireEventIfNotNull(EntryCreated, this, new GenericEventArgs<ActivityLogEntry>(entry), _logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryResult<ActivityLogEntry> GetActivityLogEntries(int? startIndex, int? limit)
|
public QueryResult<ActivityLogEntry> GetActivityLogEntries(DateTime? minDate, int? startIndex, int? limit)
|
||||||
{
|
{
|
||||||
return _repo.GetActivityLogEntries(startIndex, limit);
|
return _repo.GetActivityLogEntries(minDate, startIndex, limit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,7 +139,7 @@ namespace MediaBrowser.Server.Implementations.Activity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryResult<ActivityLogEntry> GetActivityLogEntries(int? startIndex, int? limit)
|
public QueryResult<ActivityLogEntry> GetActivityLogEntries(DateTime? minDate, int? startIndex, int? limit)
|
||||||
{
|
{
|
||||||
using (var cmd = _connection.CreateCommand())
|
using (var cmd = _connection.CreateCommand())
|
||||||
{
|
{
|
||||||
|
@ -147,16 +147,32 @@ namespace MediaBrowser.Server.Implementations.Activity
|
||||||
|
|
||||||
var whereClauses = new List<string>();
|
var whereClauses = new List<string>();
|
||||||
|
|
||||||
|
if (minDate.HasValue)
|
||||||
|
{
|
||||||
|
whereClauses.Add("DateCreated>=@DateCreated");
|
||||||
|
cmd.Parameters.Add(cmd, "@DateCreated", DbType.Date).Value = minDate.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
var whereTextWithoutPaging = whereClauses.Count == 0 ?
|
||||||
|
string.Empty :
|
||||||
|
" where " + string.Join(" AND ", whereClauses.ToArray());
|
||||||
|
|
||||||
if (startIndex.HasValue && startIndex.Value > 0)
|
if (startIndex.HasValue && startIndex.Value > 0)
|
||||||
{
|
{
|
||||||
whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM ActivityLogEntries ORDER BY DateCreated DESC LIMIT {0})",
|
var pagingWhereText = whereClauses.Count == 0 ?
|
||||||
|
string.Empty :
|
||||||
|
" where " + string.Join(" AND ", whereClauses.ToArray());
|
||||||
|
|
||||||
|
whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM ActivityLogEntries {0} ORDER BY DateCreated DESC LIMIT {1})",
|
||||||
|
pagingWhereText,
|
||||||
startIndex.Value.ToString(_usCulture)));
|
startIndex.Value.ToString(_usCulture)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (whereClauses.Count > 0)
|
var whereText = whereClauses.Count == 0 ?
|
||||||
{
|
string.Empty :
|
||||||
cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray());
|
" where " + string.Join(" AND ", whereClauses.ToArray());
|
||||||
}
|
|
||||||
|
cmd.CommandText += whereText;
|
||||||
|
|
||||||
cmd.CommandText += " ORDER BY DateCreated DESC";
|
cmd.CommandText += " ORDER BY DateCreated DESC";
|
||||||
|
|
||||||
|
@ -165,7 +181,7 @@ namespace MediaBrowser.Server.Implementations.Activity
|
||||||
cmd.CommandText += " LIMIT " + limit.Value.ToString(_usCulture);
|
cmd.CommandText += " LIMIT " + limit.Value.ToString(_usCulture);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.CommandText += "; select count (Id) from ActivityLogEntries";
|
cmd.CommandText += "; select count (Id) from ActivityLogEntries" + whereTextWithoutPaging;
|
||||||
|
|
||||||
var list = new List<ActivityLogEntry>();
|
var list = new List<ActivityLogEntry>();
|
||||||
var count = 0;
|
var count = 0;
|
||||||
|
|
|
@ -7,6 +7,7 @@ using MediaBrowser.Controller.Channels;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Model.Channels;
|
using MediaBrowser.Model.Channels;
|
||||||
|
using MediaBrowser.Model.Configuration;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.MediaInfo;
|
using MediaBrowser.Model.MediaInfo;
|
||||||
|
@ -154,7 +155,7 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await DownloadChannelItem(item, cancellationToken, path);
|
await DownloadChannelItem(item, options, cancellationToken, path);
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
|
@ -176,9 +177,18 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task DownloadChannelItem(BaseItemDto item,
|
private async Task DownloadChannelItem(BaseItemDto item,
|
||||||
|
ChannelOptions channelOptions,
|
||||||
CancellationToken cancellationToken,
|
CancellationToken cancellationToken,
|
||||||
string path)
|
string path)
|
||||||
{
|
{
|
||||||
|
if (channelOptions.DownloadSizeLimit.HasValue)
|
||||||
|
{
|
||||||
|
if (IsSizeLimitReached(path, channelOptions.DownloadSizeLimit.Value))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var sources = await _manager.GetChannelItemMediaSources(item.Id, cancellationToken)
|
var sources = await _manager.GetChannelItemMediaSources(item.Id, cancellationToken)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -253,6 +263,25 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsSizeLimitReached(string path, double gbLimit)
|
||||||
|
{
|
||||||
|
var byteLimit = gbLimit*1000000000;
|
||||||
|
|
||||||
|
long total = 0;
|
||||||
|
|
||||||
|
foreach (var file in new DirectoryInfo(path).EnumerateFiles("*", SearchOption.AllDirectories))
|
||||||
|
{
|
||||||
|
total += file.Length;
|
||||||
|
|
||||||
|
if (total >= byteLimit)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task RefreshMediaSourceItems(IEnumerable<MediaSourceInfo> items, CancellationToken cancellationToken)
|
private async Task RefreshMediaSourceItems(IEnumerable<MediaSourceInfo> items, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
foreach (var item in items)
|
foreach (var item in items)
|
||||||
|
|
|
@ -61,15 +61,15 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
|
|
||||||
public void Run()
|
public void Run()
|
||||||
{
|
{
|
||||||
_taskManager.TaskExecuting += _taskManager_TaskExecuting;
|
//_taskManager.TaskExecuting += _taskManager_TaskExecuting;
|
||||||
_taskManager.TaskCompleted += _taskManager_TaskCompleted;
|
//_taskManager.TaskCompleted += _taskManager_TaskCompleted;
|
||||||
|
|
||||||
_installationManager.PluginInstalled += _installationManager_PluginInstalled;
|
//_installationManager.PluginInstalled += _installationManager_PluginInstalled;
|
||||||
_installationManager.PluginUninstalled += _installationManager_PluginUninstalled;
|
//_installationManager.PluginUninstalled += _installationManager_PluginUninstalled;
|
||||||
_installationManager.PluginUpdated += _installationManager_PluginUpdated;
|
//_installationManager.PluginUpdated += _installationManager_PluginUpdated;
|
||||||
|
|
||||||
_libraryManager.ItemAdded += _libraryManager_ItemAdded;
|
//_libraryManager.ItemAdded += _libraryManager_ItemAdded;
|
||||||
_libraryManager.ItemRemoved += _libraryManager_ItemRemoved;
|
//_libraryManager.ItemRemoved += _libraryManager_ItemRemoved;
|
||||||
|
|
||||||
_sessionManager.SessionStarted += _sessionManager_SessionStarted;
|
_sessionManager.SessionStarted += _sessionManager_SessionStarted;
|
||||||
_sessionManager.AuthenticationFailed += _sessionManager_AuthenticationFailed;
|
_sessionManager.AuthenticationFailed += _sessionManager_AuthenticationFailed;
|
||||||
|
@ -79,7 +79,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
_sessionManager.PlaybackStart += _sessionManager_PlaybackStart;
|
_sessionManager.PlaybackStart += _sessionManager_PlaybackStart;
|
||||||
_sessionManager.PlaybackStopped += _sessionManager_PlaybackStopped;
|
_sessionManager.PlaybackStopped += _sessionManager_PlaybackStopped;
|
||||||
|
|
||||||
_subManager.SubtitlesDownloaded += _subManager_SubtitlesDownloaded;
|
//_subManager.SubtitlesDownloaded += _subManager_SubtitlesDownloaded;
|
||||||
_subManager.SubtitleDownloadFailure += _subManager_SubtitleDownloadFailure;
|
_subManager.SubtitleDownloadFailure += _subManager_SubtitleDownloadFailure;
|
||||||
|
|
||||||
_userManager.UserCreated += _userManager_UserCreated;
|
_userManager.UserCreated += _userManager_UserCreated;
|
||||||
|
@ -87,8 +87,8 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
_userManager.UserDeleted += _userManager_UserDeleted;
|
_userManager.UserDeleted += _userManager_UserDeleted;
|
||||||
_userManager.UserConfigurationUpdated += _userManager_UserConfigurationUpdated;
|
_userManager.UserConfigurationUpdated += _userManager_UserConfigurationUpdated;
|
||||||
|
|
||||||
_config.ConfigurationUpdated += _config_ConfigurationUpdated;
|
//_config.ConfigurationUpdated += _config_ConfigurationUpdated;
|
||||||
_config.NamedConfigurationUpdated += _config_NamedConfigurationUpdated;
|
//_config.NamedConfigurationUpdated += _config_NamedConfigurationUpdated;
|
||||||
|
|
||||||
//_logManager.LoggerLoaded += _logManager_LoggerLoaded;
|
//_logManager.LoggerLoaded += _logManager_LoggerLoaded;
|
||||||
|
|
||||||
|
@ -165,6 +165,9 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
if (string.IsNullOrWhiteSpace(session.UserName))
|
if (string.IsNullOrWhiteSpace(session.UserName))
|
||||||
{
|
{
|
||||||
name = string.Format(_localization.GetLocalizedString("DeviceOfflineWithName"), session.DeviceName);
|
name = string.Format(_localization.GetLocalizedString("DeviceOfflineWithName"), session.DeviceName);
|
||||||
|
|
||||||
|
// Causing too much spam for now
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -288,6 +291,9 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
if (string.IsNullOrWhiteSpace(session.UserName))
|
if (string.IsNullOrWhiteSpace(session.UserName))
|
||||||
{
|
{
|
||||||
name = string.Format(_localization.GetLocalizedString("DeviceOnlineWithName"), session.DeviceName);
|
name = string.Format(_localization.GetLocalizedString("DeviceOnlineWithName"), session.DeviceName);
|
||||||
|
|
||||||
|
// Causing too much spam for now
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -394,6 +400,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
|
|
||||||
if (result.Status == TaskCompletionStatus.Cancelled)
|
if (result.Status == TaskCompletionStatus.Cancelled)
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
CreateLogEntry(new ActivityLogEntry
|
CreateLogEntry(new ActivityLogEntry
|
||||||
{
|
{
|
||||||
Name = string.Format(_localization.GetLocalizedString("ScheduledTaskCancelledWithName"), task.Name),
|
Name = string.Format(_localization.GetLocalizedString("ScheduledTaskCancelledWithName"), task.Name),
|
||||||
|
@ -403,6 +410,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints
|
||||||
}
|
}
|
||||||
else if (result.Status == TaskCompletionStatus.Completed)
|
else if (result.Status == TaskCompletionStatus.Completed)
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
CreateLogEntry(new ActivityLogEntry
|
CreateLogEntry(new ActivityLogEntry
|
||||||
{
|
{
|
||||||
Name = string.Format(_localization.GetLocalizedString("ScheduledTaskCompletedWithName"), task.Name),
|
Name = string.Format(_localization.GetLocalizedString("ScheduledTaskCompletedWithName"), task.Name),
|
||||||
|
|
|
@ -35,8 +35,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||||
|
|
||||||
private IHttpListener _listener;
|
private IHttpListener _listener;
|
||||||
|
|
||||||
private const int IdleTimeout = 300;
|
|
||||||
|
|
||||||
private readonly ContainerAdapter _containerAdapter;
|
private readonly ContainerAdapter _containerAdapter;
|
||||||
|
|
||||||
public event EventHandler<WebSocketConnectEventArgs> WebSocketConnected;
|
public event EventHandler<WebSocketConnectEventArgs> WebSocketConnected;
|
||||||
|
@ -152,7 +150,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||||
HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
|
HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
|
||||||
|
|
||||||
_listener = NativeWebSocket.IsSupported
|
_listener = NativeWebSocket.IsSupported
|
||||||
? _listener = new WebSocketSharpListener(_logger)
|
? _listener = new HttpListenerServer(_logger)
|
||||||
|
//? _listener = new WebSocketSharpListener(_logger)
|
||||||
: _listener = new WebSocketSharpListener(_logger);
|
: _listener = new WebSocketSharpListener(_logger);
|
||||||
|
|
||||||
_listener.WebSocketHandler = WebSocketHandler;
|
_listener.WebSocketHandler = WebSocketHandler;
|
||||||
|
|
|
@ -7,16 +7,17 @@ using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using WebSocketSharp.Net;
|
using WebSocketSharp.Net;
|
||||||
using WebSocketSharp.Server;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
|
namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
|
||||||
{
|
{
|
||||||
public class WebSocketSharpListener : IHttpListener
|
public class WebSocketSharpListener : IHttpListener
|
||||||
{
|
{
|
||||||
private readonly ConcurrentDictionary<string, string> _localEndPoints = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
private readonly ConcurrentDictionary<string, string> _localEndPoints = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
private WebSocketSharp.Server.HttpServer _httpsv;
|
private WebSocketSharp.Net.HttpListener _listener;
|
||||||
|
private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false);
|
||||||
|
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
@ -38,16 +39,85 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
|
||||||
|
|
||||||
public void Start(IEnumerable<string> urlPrefixes)
|
public void Start(IEnumerable<string> urlPrefixes)
|
||||||
{
|
{
|
||||||
_httpsv = new WebSocketSharp.Server.HttpServer(8096, false, urlPrefixes.First());
|
if (_listener == null)
|
||||||
|
_listener = new WebSocketSharp.Net.HttpListener();
|
||||||
|
|
||||||
_httpsv.OnRequest += _httpsv_OnRequest;
|
foreach (var prefix in urlPrefixes)
|
||||||
|
{
|
||||||
|
_logger.Info("Adding HttpListener prefix " + prefix);
|
||||||
|
_listener.Prefixes.Add(prefix);
|
||||||
|
}
|
||||||
|
|
||||||
_httpsv.Start();
|
_listener.Start();
|
||||||
|
|
||||||
|
Task.Factory.StartNew(Listen, TaskCreationOptions.LongRunning);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _httpsv_OnRequest(object sender, HttpRequestEventArgs e)
|
private bool IsListening
|
||||||
{
|
{
|
||||||
Task.Factory.StartNew(() => InitTask(e.Context));
|
get { return _listener != null && _listener.IsListening; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop here to begin processing of new requests.
|
||||||
|
private void Listen()
|
||||||
|
{
|
||||||
|
while (IsListening)
|
||||||
|
{
|
||||||
|
if (_listener == null) return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_listener.BeginGetContext(ListenerCallback, _listener);
|
||||||
|
_listenForNextRequest.WaitOne();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Error("Listen()", ex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (_listener == null) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle the processing of a request in here.
|
||||||
|
private void ListenerCallback(IAsyncResult asyncResult)
|
||||||
|
{
|
||||||
|
var listener = asyncResult.AsyncState as HttpListener;
|
||||||
|
HttpListenerContext context;
|
||||||
|
|
||||||
|
if (listener == null) return;
|
||||||
|
var isListening = listener.IsListening;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!isListening)
|
||||||
|
{
|
||||||
|
_logger.Debug("Ignoring ListenerCallback() as HttpListener is no longer listening"); return;
|
||||||
|
}
|
||||||
|
// The EndGetContext() method, as with all Begin/End asynchronous methods in the .NET Framework,
|
||||||
|
// blocks until there is a request to be processed or some type of data is available.
|
||||||
|
context = listener.EndGetContext(asyncResult);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// You will get an exception when httpListener.Stop() is called
|
||||||
|
// because there will be a thread stopped waiting on the .EndGetContext()
|
||||||
|
// method, and again, that is just the way most Begin/End asynchronous
|
||||||
|
// methods of the .NET Framework work.
|
||||||
|
var errMsg = ex + ": " + IsListening;
|
||||||
|
_logger.Warn(errMsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
// Once we know we have a request (or exception), we signal the other thread
|
||||||
|
// so that it calls the BeginGetContext() (or possibly exits if we're not
|
||||||
|
// listening any more) method to start handling the next incoming request
|
||||||
|
// while we continue to process this request on a different thread.
|
||||||
|
_listenForNextRequest.Set();
|
||||||
|
}
|
||||||
|
|
||||||
|
Task.Factory.StartNew(() => InitTask(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitTask(HttpListenerContext context)
|
private void InitTask(HttpListenerContext context)
|
||||||
|
@ -169,20 +239,39 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
{
|
{
|
||||||
_httpsv.Stop();
|
if (_listener != null)
|
||||||
|
{
|
||||||
|
foreach (var prefix in _listener.Prefixes.ToList())
|
||||||
|
{
|
||||||
|
_listener.Prefixes.Remove(prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
_listener.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly object _disposeLock = new object();
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
Dispose(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool _disposed;
|
||||||
|
private readonly object _disposeLock = new object();
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (_disposed) return;
|
||||||
|
|
||||||
lock (_disposeLock)
|
lock (_disposeLock)
|
||||||
{
|
{
|
||||||
if (_httpsv != null)
|
if (_disposed) return;
|
||||||
|
|
||||||
|
if (disposing)
|
||||||
{
|
{
|
||||||
_httpsv.OnRequest -= _httpsv_OnRequest;
|
Stop();
|
||||||
_httpsv.Stop();
|
|
||||||
_httpsv = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//release unmanaged resources here...
|
||||||
|
_disposed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -906,7 +906,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
// Ensure the location is available.
|
// Ensure the location is available.
|
||||||
Directory.CreateDirectory(ConfigurationManager.ApplicationPaths.PeoplePath);
|
Directory.CreateDirectory(ConfigurationManager.ApplicationPaths.PeoplePath);
|
||||||
|
|
||||||
return new PeopleValidator(this, _logger).ValidatePeople(cancellationToken, new MetadataRefreshOptions(), progress);
|
return new PeopleValidator(this, _logger, ConfigurationManager).ValidatePeople(cancellationToken, progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -93,7 +93,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
if (user.Configuration.DisplayCollectionsView &&
|
if (user.Configuration.DisplayCollectionsView &&
|
||||||
recursiveChildren.OfType<BoxSet>().Any())
|
recursiveChildren.OfType<BoxSet>().Any())
|
||||||
{
|
{
|
||||||
list.Add(await GetUserView(CollectionType.BoxSets, user, CollectionType.BoxSets, cancellationToken).ConfigureAwait(false));
|
list.Add(await GetUserView(CollectionType.BoxSets, user, string.Empty, cancellationToken).ConfigureAwait(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (recursiveChildren.OfType<Playlist>().Any())
|
if (recursiveChildren.OfType<Playlist>().Any())
|
||||||
|
@ -101,6 +101,11 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
list.Add(_playlists.GetPlaylistsFolder(user.Id.ToString("N")));
|
list.Add(_playlists.GetPlaylistsFolder(user.Id.ToString("N")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (user.Configuration.DisplayFoldersView)
|
||||||
|
{
|
||||||
|
list.Add(await GetUserView(CollectionType.Folders, user, "zz_" + CollectionType.Folders, cancellationToken).ConfigureAwait(false));
|
||||||
|
}
|
||||||
|
|
||||||
if (query.IncludeExternalContent)
|
if (query.IncludeExternalContent)
|
||||||
{
|
{
|
||||||
var channelResult = await _channelManager.GetChannels(new ChannelQuery
|
var channelResult = await _channelManager.GetChannels(new ChannelQuery
|
||||||
|
@ -131,7 +136,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
return _libraryManager.Sort(list, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending).Cast<Folder>();
|
return _libraryManager.Sort(list, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending).Cast<Folder>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task<UserView> GetUserView(string type, User user, string sortName, CancellationToken cancellationToken)
|
public Task<UserView> GetUserView(string type, User user, string sortName, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var name = _localizationManager.GetLocalizedString("ViewType" + type);
|
var name = _localizationManager.GetLocalizedString("ViewType" + type);
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
using MediaBrowser.Common.Progress;
|
using MediaBrowser.Common.Progress;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
|
using MediaBrowser.Model.Configuration;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -23,46 +28,128 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="PeopleValidator" /> class.
|
/// Initializes a new instance of the <see cref="PeopleValidator" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="libraryManager">The library manager.</param>
|
/// <param name="libraryManager">The library manager.</param>
|
||||||
/// <param name="logger">The logger.</param>
|
/// <param name="logger">The logger.</param>
|
||||||
public PeopleValidator(ILibraryManager libraryManager, ILogger logger)
|
public PeopleValidator(ILibraryManager libraryManager, ILogger logger, IServerConfigurationManager config)
|
||||||
{
|
{
|
||||||
_libraryManager = libraryManager;
|
_libraryManager = libraryManager;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool DownloadMetadata(PersonInfo i, PeopleMetadataOptions options)
|
||||||
|
{
|
||||||
|
if (i.IsType(PersonType.Actor))
|
||||||
|
{
|
||||||
|
return options.DownloadActorMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.Director))
|
||||||
|
{
|
||||||
|
return options.DownloadDirectorMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.Composer))
|
||||||
|
{
|
||||||
|
return options.DownloadComposerMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.Writer))
|
||||||
|
{
|
||||||
|
return options.DownloadWriterMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.Producer))
|
||||||
|
{
|
||||||
|
return options.DownloadProducerMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.GuestStar))
|
||||||
|
{
|
||||||
|
return options.DownloadGuestStarMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
return options.DownloadOtherPeopleMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<PersonInfo> GetPeopleToValidate(BaseItem item, PeopleMetadataOptions options)
|
||||||
|
{
|
||||||
|
return item.People.Where(i =>
|
||||||
|
{
|
||||||
|
if (i.IsType(PersonType.Actor))
|
||||||
|
{
|
||||||
|
return options.DownloadActorMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.Director))
|
||||||
|
{
|
||||||
|
return options.DownloadDirectorMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.Composer))
|
||||||
|
{
|
||||||
|
return options.DownloadComposerMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.Writer))
|
||||||
|
{
|
||||||
|
return options.DownloadWriterMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.Producer))
|
||||||
|
{
|
||||||
|
return options.DownloadProducerMetadata;
|
||||||
|
}
|
||||||
|
if (i.IsType(PersonType.GuestStar))
|
||||||
|
{
|
||||||
|
return options.DownloadGuestStarMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
return options.DownloadOtherPeopleMetadata;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Validates the people.
|
/// Validates the people.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
/// <param name="cancellationToken">The cancellation token.</param>
|
||||||
/// <param name="options">The options.</param>
|
|
||||||
/// <param name="progress">The progress.</param>
|
/// <param name="progress">The progress.</param>
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
public async Task ValidatePeople(CancellationToken cancellationToken, MetadataRefreshOptions options, IProgress<double> progress)
|
public async Task ValidatePeople(CancellationToken cancellationToken, IProgress<double> progress)
|
||||||
{
|
{
|
||||||
var innerProgress = new ActionableProgress<double>();
|
var innerProgress = new ActionableProgress<double>();
|
||||||
|
|
||||||
innerProgress.RegisterAction(pct => progress.Report(pct * .15));
|
innerProgress.RegisterAction(pct => progress.Report(pct * .15));
|
||||||
|
|
||||||
|
var peopleOptions = _config.Configuration.PeopleMetadataOptions;
|
||||||
|
|
||||||
var people = _libraryManager.RootFolder.GetRecursiveChildren()
|
var people = _libraryManager.RootFolder.GetRecursiveChildren()
|
||||||
.SelectMany(c => c.People)
|
.SelectMany(i => i.People)
|
||||||
.Where(i => !string.IsNullOrWhiteSpace(i.Name))
|
.Where(i => !string.IsNullOrWhiteSpace(i.Name))
|
||||||
.Select(i => i.Name)
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
var dict = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
foreach (var person in people)
|
||||||
|
{
|
||||||
|
bool current;
|
||||||
|
if (!dict.TryGetValue(person.Name, out current) || !current)
|
||||||
|
{
|
||||||
|
dict[person.Name] = DownloadMetadata(person, peopleOptions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var numComplete = 0;
|
var numComplete = 0;
|
||||||
|
|
||||||
foreach (var person in people)
|
foreach (var person in dict)
|
||||||
{
|
{
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var item = _libraryManager.GetPerson(person);
|
var item = _libraryManager.GetPerson(person.Key);
|
||||||
|
|
||||||
|
var options = new MetadataRefreshOptions
|
||||||
|
{
|
||||||
|
MetadataRefreshMode = person.Value ? MetadataRefreshMode.Default : MetadataRefreshMode.ValidationOnly,
|
||||||
|
ImageRefreshMode = person.Value ? ImageRefreshMode.Default : ImageRefreshMode.ValidationOnly
|
||||||
|
};
|
||||||
|
|
||||||
await item.RefreshMetadata(options, cancellationToken).ConfigureAwait(false);
|
await item.RefreshMetadata(options, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,7 +128,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
_taskManager.CancelIfRunningAndQueue<RefreshChannelsScheduledTask>();
|
_taskManager.CancelIfRunningAndQueue<RefreshChannelsScheduledTask>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<QueryResult<ChannelInfoDto>> GetChannels(LiveTvChannelQuery query, CancellationToken cancellationToken)
|
public async Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
|
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
|
||||||
|
|
||||||
|
@ -217,9 +217,24 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
allEnumerable = allEnumerable.Take(query.Limit.Value);
|
allEnumerable = allEnumerable.Take(query.Limit.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var result = new QueryResult<LiveTvChannel>
|
||||||
|
{
|
||||||
|
Items = allEnumerable.ToArray(),
|
||||||
|
TotalRecordCount = allChannels.Count
|
||||||
|
};
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<QueryResult<ChannelInfoDto>> GetChannels(LiveTvChannelQuery query, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
|
||||||
|
|
||||||
|
var internalResult = await GetInternalChannels(query, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
var returnList = new List<ChannelInfoDto>();
|
var returnList = new List<ChannelInfoDto>();
|
||||||
|
|
||||||
foreach (var channel in allEnumerable)
|
foreach (var channel in internalResult.Items)
|
||||||
{
|
{
|
||||||
var currentProgram = await GetCurrentProgram(channel.ExternalId, cancellationToken).ConfigureAwait(false);
|
var currentProgram = await GetCurrentProgram(channel.ExternalId, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -229,7 +244,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
var result = new QueryResult<ChannelInfoDto>
|
var result = new QueryResult<ChannelInfoDto>
|
||||||
{
|
{
|
||||||
Items = returnList.ToArray(),
|
Items = returnList.ToArray(),
|
||||||
TotalRecordCount = allChannels.Count
|
TotalRecordCount = internalResult.TotalRecordCount
|
||||||
};
|
};
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -260,12 +275,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RefreshIfNeeded(IEnumerable<LiveTvProgram> programs, CancellationToken cancellationToken)
|
private Task RefreshIfNeeded(IEnumerable<LiveTvProgram> programs, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
foreach (var program in programs)
|
var list = programs.ToList();
|
||||||
|
|
||||||
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await RefreshIfNeeded(program, cancellationToken).ConfigureAwait(false);
|
foreach (var program in list)
|
||||||
}
|
{
|
||||||
|
await RefreshIfNeeded(program, CancellationToken.None).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}, cancellationToken);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RefreshIfNeeded(LiveTvProgram program, CancellationToken cancellationToken)
|
private async Task RefreshIfNeeded(LiveTvProgram program, CancellationToken cancellationToken)
|
||||||
|
@ -275,9 +298,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await program.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
|
||||||
|
|
||||||
_refreshedPrograms.TryAdd(program.Id, true);
|
_refreshedPrograms.TryAdd(program.Id, true);
|
||||||
|
|
||||||
|
await program.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ILiveTvRecording> GetInternalRecording(string id, CancellationToken cancellationToken)
|
public async Task<ILiveTvRecording> GetInternalRecording(string id, CancellationToken cancellationToken)
|
||||||
|
@ -1028,15 +1051,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
return channels.Select(i => new Tuple<string, ChannelInfo>(service.Name, i));
|
return channels.Select(i => new Tuple<string, ChannelInfo>(service.Name, i));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<QueryResult<RecordingInfoDto>> GetRecordings(RecordingQuery query, CancellationToken cancellationToken)
|
public async Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var service = ActiveService;
|
var service = ActiveService;
|
||||||
|
|
||||||
if (service == null)
|
if (service == null)
|
||||||
{
|
{
|
||||||
return new QueryResult<RecordingInfoDto>
|
return new QueryResult<BaseItem>
|
||||||
{
|
{
|
||||||
Items = new RecordingInfoDto[] { }
|
Items = new BaseItem[] { }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1121,7 +1144,30 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
entities = entities.Take(query.Limit.Value);
|
entities = entities.Take(query.Limit.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
var returnArray = entities
|
return new QueryResult<BaseItem>
|
||||||
|
{
|
||||||
|
Items = entities.Cast<BaseItem>().ToArray(),
|
||||||
|
TotalRecordCount = entityList.Count
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<QueryResult<RecordingInfoDto>> GetRecordings(RecordingQuery query, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var service = ActiveService;
|
||||||
|
|
||||||
|
if (service == null)
|
||||||
|
{
|
||||||
|
return new QueryResult<RecordingInfoDto>
|
||||||
|
{
|
||||||
|
Items = new RecordingInfoDto[] { }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId));
|
||||||
|
|
||||||
|
var internalResult = await GetInternalRecordings(query, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
var returnArray = internalResult.Items.Cast<ILiveTvRecording>()
|
||||||
.Select(i =>
|
.Select(i =>
|
||||||
{
|
{
|
||||||
var channel = string.IsNullOrEmpty(i.RecordingInfo.ChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, i.RecordingInfo.ChannelId));
|
var channel = string.IsNullOrEmpty(i.RecordingInfo.ChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, i.RecordingInfo.ChannelId));
|
||||||
|
@ -1132,7 +1178,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
return new QueryResult<RecordingInfoDto>
|
return new QueryResult<RecordingInfoDto>
|
||||||
{
|
{
|
||||||
Items = returnArray,
|
Items = returnArray,
|
||||||
TotalRecordCount = entityList.Count
|
TotalRecordCount = internalResult.TotalRecordCount
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
"ButtonEdit": "Edit",
|
"ButtonEdit": "Edit",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
"ButtonEdit": "Edit",
|
"ButtonEdit": "Edit",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "P\u0159ehr\u00e1t",
|
"ButtonPlay": "P\u0159ehr\u00e1t",
|
||||||
"ButtonEdit": "Upravit",
|
"ButtonEdit": "Upravit",
|
||||||
|
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Afspil",
|
"ButtonPlay": "Afspil",
|
||||||
"ButtonEdit": "Rediger",
|
"ButtonEdit": "Rediger",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
"ButtonEdit": "Edit",
|
"ButtonEdit": "Edit",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
"ButtonEdit": "Edit",
|
"ButtonEdit": "Edit",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
"ButtonEdit": "Edit",
|
"ButtonEdit": "Edit",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -331,24 +331,24 @@
|
||||||
"ButtonViewSeriesRecording": "Ver grabaciones de series",
|
"ButtonViewSeriesRecording": "Ver grabaciones de series",
|
||||||
"ValueOriginalAirDate": "Fecha de transmisi\u00f3n original: {0}",
|
"ValueOriginalAirDate": "Fecha de transmisi\u00f3n original: {0}",
|
||||||
"ButtonRemoveFromPlaylist": "Eliminar de la lista de reproducci\u00f3n",
|
"ButtonRemoveFromPlaylist": "Eliminar de la lista de reproducci\u00f3n",
|
||||||
"HeaderSpecials": "Specials",
|
"HeaderSpecials": "Especiales",
|
||||||
"HeaderTrailers": "Trailers",
|
"HeaderTrailers": "Avances",
|
||||||
"HeaderAudio": "Audio",
|
"HeaderAudio": "Audio",
|
||||||
"HeaderResolution": "Resolution",
|
"HeaderResolution": "Resoluci\u00f3n",
|
||||||
"HeaderVideo": "Video",
|
"HeaderVideo": "Video",
|
||||||
"HeaderRuntime": "Runtime",
|
"HeaderRuntime": "Duraci\u00f3n",
|
||||||
"HeaderCommunityRating": "Community rating",
|
"HeaderCommunityRating": "Calificaci\u00f3n de la comunidad",
|
||||||
"HeaderParentalRating": "Parental rating",
|
"HeaderParentalRating": "Calificaci\u00f3n parental",
|
||||||
"HeaderReleaseDate": "Release date",
|
"HeaderReleaseDate": "Fecha de estreno",
|
||||||
"HeaderDateAdded": "Date added",
|
"HeaderDateAdded": "Fecha de adici\u00f3n",
|
||||||
"HeaderSeries": "Series",
|
"HeaderSeries": "Series",
|
||||||
"HeaderSeason": "Season",
|
"HeaderSeason": "Temporada",
|
||||||
"HeaderSeasonNumber": "Season number",
|
"HeaderSeasonNumber": "N\u00famero de temporada",
|
||||||
"HeaderNetwork": "Network",
|
"HeaderNetwork": "Cadena",
|
||||||
"HeaderYear": "Year",
|
"HeaderYear": "A\u00f1o",
|
||||||
"HeaderGameSystem": "Game system",
|
"HeaderGameSystem": "Sistema de Juegos",
|
||||||
"HeaderPlayers": "Players",
|
"HeaderPlayers": "Jugadores",
|
||||||
"HeaderEmbeddedImage": "Embedded image",
|
"HeaderEmbeddedImage": "Im\u00e1gen embebida",
|
||||||
"HeaderTrack": "Track",
|
"HeaderTrack": "Pista",
|
||||||
"HeaderDisc": "Disc"
|
"HeaderDisc": "Disco"
|
||||||
}
|
}
|
|
@ -321,34 +321,34 @@
|
||||||
"ButtonNew": "Nouveau",
|
"ButtonNew": "Nouveau",
|
||||||
"MessageInternetExplorerWebm": "Pour de meilleurs r\u00e9sultats avec Internet Explorer, merci d'installer le plugin WebM pour IE.",
|
"MessageInternetExplorerWebm": "Pour de meilleurs r\u00e9sultats avec Internet Explorer, merci d'installer le plugin WebM pour IE.",
|
||||||
"HeaderVideoError": "Erreur vid\u00e9o",
|
"HeaderVideoError": "Erreur vid\u00e9o",
|
||||||
"ButtonAddToPlaylist": "Add to playlist",
|
"ButtonAddToPlaylist": "Ajouter \u00e0 la liste de lecture",
|
||||||
"HeaderAddToPlaylist": "Add to Playlist",
|
"HeaderAddToPlaylist": "Ajouter \u00e0 la liste de lecture",
|
||||||
"LabelName": "Nom:",
|
"LabelName": "Nom:",
|
||||||
"ButtonSubmit": "Soumettre",
|
"ButtonSubmit": "Soumettre",
|
||||||
"LabelSelectPlaylist": "Playlist:",
|
"LabelSelectPlaylist": "Liste de lecture:",
|
||||||
"OptionNewPlaylist": "New playlist...",
|
"OptionNewPlaylist": "Nouvelle liste de lecture...",
|
||||||
"MessageAddedToPlaylistSuccess": "Ok",
|
"MessageAddedToPlaylistSuccess": "OK",
|
||||||
"ButtonViewSeriesRecording": "View series recording",
|
"ButtonViewSeriesRecording": "Voir enregistrements de s\u00e9ries",
|
||||||
"ValueOriginalAirDate": "Original air date: {0}",
|
"ValueOriginalAirDate": "Date de diffusion originale: {0}",
|
||||||
"ButtonRemoveFromPlaylist": "Remove from playlist",
|
"ButtonRemoveFromPlaylist": "Remove from playlist",
|
||||||
"HeaderSpecials": "Specials",
|
"HeaderSpecials": "Specials",
|
||||||
"HeaderTrailers": "Trailers",
|
"HeaderTrailers": "Bande-Annonces",
|
||||||
"HeaderAudio": "Audio",
|
"HeaderAudio": "Audio",
|
||||||
"HeaderResolution": "Resolution",
|
"HeaderResolution": "R\u00e9solution",
|
||||||
"HeaderVideo": "Video",
|
"HeaderVideo": "Vid\u00e9o",
|
||||||
"HeaderRuntime": "Runtime",
|
"HeaderRuntime": "Runtime",
|
||||||
"HeaderCommunityRating": "Community rating",
|
"HeaderCommunityRating": "Note de communaut\u00e9",
|
||||||
"HeaderParentalRating": "Parental rating",
|
"HeaderParentalRating": "Note parentale",
|
||||||
"HeaderReleaseDate": "Release date",
|
"HeaderReleaseDate": "Date de lancement",
|
||||||
"HeaderDateAdded": "Date added",
|
"HeaderDateAdded": "Date ajout\u00e9e",
|
||||||
"HeaderSeries": "Series",
|
"HeaderSeries": "S\u00e9ries",
|
||||||
"HeaderSeason": "Season",
|
"HeaderSeason": "Saison",
|
||||||
"HeaderSeasonNumber": "Season number",
|
"HeaderSeasonNumber": "Num\u00e9ro de saison",
|
||||||
"HeaderNetwork": "Network",
|
"HeaderNetwork": "R\u00e9seau",
|
||||||
"HeaderYear": "Year",
|
"HeaderYear": "Ann\u00e9e",
|
||||||
"HeaderGameSystem": "Game system",
|
"HeaderGameSystem": "Plateforme de jeu",
|
||||||
"HeaderPlayers": "Players",
|
"HeaderPlayers": "Lecteurs",
|
||||||
"HeaderEmbeddedImage": "Embedded image",
|
"HeaderEmbeddedImage": "Embedded image",
|
||||||
"HeaderTrack": "Track",
|
"HeaderTrack": "Track",
|
||||||
"HeaderDisc": "Disc"
|
"HeaderDisc": "Disque"
|
||||||
}
|
}
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "\u05e0\u05d2\u05df",
|
"ButtonPlay": "\u05e0\u05d2\u05df",
|
||||||
"ButtonEdit": "\u05e2\u05e8\u05d5\u05da",
|
"ButtonEdit": "\u05e2\u05e8\u05d5\u05da",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -321,15 +321,15 @@
|
||||||
"ButtonNew": "Nuovo",
|
"ButtonNew": "Nuovo",
|
||||||
"MessageInternetExplorerWebm": "Se utilizzi internet explorer installa WebM plugin",
|
"MessageInternetExplorerWebm": "Se utilizzi internet explorer installa WebM plugin",
|
||||||
"HeaderVideoError": "Video Error",
|
"HeaderVideoError": "Video Error",
|
||||||
"ButtonAddToPlaylist": "Add to playlist",
|
"ButtonAddToPlaylist": "Aggiungi alla playlist",
|
||||||
"HeaderAddToPlaylist": "Add to Playlist",
|
"HeaderAddToPlaylist": "Aggiungi alla playlist",
|
||||||
"LabelName": "Nome:",
|
"LabelName": "Nome:",
|
||||||
"ButtonSubmit": "Invia",
|
"ButtonSubmit": "Invia",
|
||||||
"LabelSelectPlaylist": "Playlist:",
|
"LabelSelectPlaylist": "Playlist:",
|
||||||
"OptionNewPlaylist": "New playlist...",
|
"OptionNewPlaylist": "Nuova playlist...",
|
||||||
"MessageAddedToPlaylistSuccess": "Ok",
|
"MessageAddedToPlaylistSuccess": "Ok",
|
||||||
"ButtonViewSeriesRecording": "View series recording",
|
"ButtonViewSeriesRecording": "Vista delle serie in registrazione",
|
||||||
"ValueOriginalAirDate": "Original air date: {0}",
|
"ValueOriginalAirDate": "Prima messa in onda (originale): {0}",
|
||||||
"ButtonRemoveFromPlaylist": "Remove from playlist",
|
"ButtonRemoveFromPlaylist": "Remove from playlist",
|
||||||
"HeaderSpecials": "Specials",
|
"HeaderSpecials": "Specials",
|
||||||
"HeaderTrailers": "Trailers",
|
"HeaderTrailers": "Trailers",
|
||||||
|
@ -345,10 +345,10 @@
|
||||||
"HeaderSeason": "Season",
|
"HeaderSeason": "Season",
|
||||||
"HeaderSeasonNumber": "Season number",
|
"HeaderSeasonNumber": "Season number",
|
||||||
"HeaderNetwork": "Network",
|
"HeaderNetwork": "Network",
|
||||||
"HeaderYear": "Year",
|
"HeaderYear": "Anno",
|
||||||
"HeaderGameSystem": "Game system",
|
"HeaderGameSystem": "Gioco Sistema",
|
||||||
"HeaderPlayers": "Players",
|
"HeaderPlayers": "Giocatori",
|
||||||
"HeaderEmbeddedImage": "Embedded image",
|
"HeaderEmbeddedImage": "Immagine incorporata",
|
||||||
"HeaderTrack": "Track",
|
"HeaderTrack": "Traccia",
|
||||||
"HeaderDisc": "Disc"
|
"HeaderDisc": "Disco"
|
||||||
}
|
}
|
|
@ -331,24 +331,24 @@
|
||||||
"ButtonViewSeriesRecording": "\u0421\u0435\u0440\u0438\u0430\u043b \u0436\u0430\u0437\u0431\u0430\u0441\u044b\u043d \u049b\u0430\u0440\u0430\u0443",
|
"ButtonViewSeriesRecording": "\u0421\u0435\u0440\u0438\u0430\u043b \u0436\u0430\u0437\u0431\u0430\u0441\u044b\u043d \u049b\u0430\u0440\u0430\u0443",
|
||||||
"ValueOriginalAirDate": "\u0411\u0430\u0441\u0442\u0430\u043f\u049b\u044b \u044d\u0444\u0438\u0440: {0}",
|
"ValueOriginalAirDate": "\u0411\u0430\u0441\u0442\u0430\u043f\u049b\u044b \u044d\u0444\u0438\u0440: {0}",
|
||||||
"ButtonRemoveFromPlaylist": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d\u0435\u043d \u0430\u043b\u0430\u0441\u0442\u0430\u0443",
|
"ButtonRemoveFromPlaylist": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d\u0435\u043d \u0430\u043b\u0430\u0441\u0442\u0430\u0443",
|
||||||
"HeaderSpecials": "Specials",
|
"HeaderSpecials": "\u0410\u0440\u043d\u0430\u0439\u044b\u043b\u0430\u0440",
|
||||||
"HeaderTrailers": "Trailers",
|
"HeaderTrailers": "\u0422\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440",
|
||||||
"HeaderAudio": "Audio",
|
"HeaderAudio": "\u0414\u044b\u0431\u044b\u0441",
|
||||||
"HeaderResolution": "Resolution",
|
"HeaderResolution": "\u0410\u0436\u044b\u0440\u0430\u0442\u044b\u043c\u0434\u044b\u043b\u044b\u0493\u044b",
|
||||||
"HeaderVideo": "Video",
|
"HeaderVideo": "\u0411\u0435\u0439\u043d\u0435",
|
||||||
"HeaderRuntime": "Runtime",
|
"HeaderRuntime": "\u04b0\u0437\u0430\u049b\u0442\u044b\u0493\u044b",
|
||||||
"HeaderCommunityRating": "Community rating",
|
"HeaderCommunityRating": "\u049a\u0430\u0443\u044b\u043c\u0434\u0430\u0441\u0442\u044b\u049b \u0431\u0430\u0493\u0430\u043b\u0430\u0443\u044b",
|
||||||
"HeaderParentalRating": "Parental rating",
|
"HeaderParentalRating": "\u0416\u0430\u0441\u0442\u0430\u0441 \u0441\u0430\u043d\u0430\u0442\u044b",
|
||||||
"HeaderReleaseDate": "Release date",
|
"HeaderReleaseDate": "\u0428\u044b\u0493\u0430\u0440\u0443 \u043a\u04af\u043d-\u0430\u0439\u044b",
|
||||||
"HeaderDateAdded": "Date added",
|
"HeaderDateAdded": "\u04ae\u0441\u0442\u0435\u0443 \u043a\u04af\u043d-\u0430\u0439\u044b",
|
||||||
"HeaderSeries": "Series",
|
"HeaderSeries": "\u0421\u0435\u0440\u0438\u0430\u043b",
|
||||||
"HeaderSeason": "Season",
|
"HeaderSeason": "\u041c\u0430\u0443\u0441\u044b\u043c",
|
||||||
"HeaderSeasonNumber": "Season number",
|
"HeaderSeasonNumber": "\u041c\u0430\u0443\u0441\u044b\u043c \u043d\u04e9\u043c\u0456\u0440\u0456",
|
||||||
"HeaderNetwork": "Network",
|
"HeaderNetwork": "\u0422\u0435\u043b\u0435\u0436\u0435\u043b\u0456",
|
||||||
"HeaderYear": "Year",
|
"HeaderYear": "\u0416\u044b\u043b\u044b",
|
||||||
"HeaderGameSystem": "Game system",
|
"HeaderGameSystem": "\u041e\u0439\u044b\u043d \u0436\u04af\u0439\u0435\u0441\u0456",
|
||||||
"HeaderPlayers": "Players",
|
"HeaderPlayers": "\u041e\u0439\u044b\u043d\u0448\u044b\u043b\u0430\u0440",
|
||||||
"HeaderEmbeddedImage": "Embedded image",
|
"HeaderEmbeddedImage": "\u0415\u043d\u0434\u0456\u0440\u0456\u043b\u0433\u0435\u043d \u0441\u0443\u0440\u0435\u0442",
|
||||||
"HeaderTrack": "Track",
|
"HeaderTrack": "\u0416\u043e\u043b\u0448\u044b\u049b",
|
||||||
"HeaderDisc": "Disc"
|
"HeaderDisc": "\u0414\u0438\u0441\u043a\u0456"
|
||||||
}
|
}
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
"ButtonEdit": "Edit",
|
"ButtonEdit": "Edit",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -334,21 +334,21 @@
|
||||||
"HeaderSpecials": "Specials",
|
"HeaderSpecials": "Specials",
|
||||||
"HeaderTrailers": "Trailers",
|
"HeaderTrailers": "Trailers",
|
||||||
"HeaderAudio": "Audio",
|
"HeaderAudio": "Audio",
|
||||||
"HeaderResolution": "Resolution",
|
"HeaderResolution": "Resolutie",
|
||||||
"HeaderVideo": "Video",
|
"HeaderVideo": "Video",
|
||||||
"HeaderRuntime": "Runtime",
|
"HeaderRuntime": "Speelduur",
|
||||||
"HeaderCommunityRating": "Community rating",
|
"HeaderCommunityRating": "Gemeenschap cijfer",
|
||||||
"HeaderParentalRating": "Parental rating",
|
"HeaderParentalRating": "Kijkwijzer classificering",
|
||||||
"HeaderReleaseDate": "Release date",
|
"HeaderReleaseDate": "Releasedatum ",
|
||||||
"HeaderDateAdded": "Date added",
|
"HeaderDateAdded": "Datum toegevoegd",
|
||||||
"HeaderSeries": "Series",
|
"HeaderSeries": "Series",
|
||||||
"HeaderSeason": "Season",
|
"HeaderSeason": "Seizoen",
|
||||||
"HeaderSeasonNumber": "Season number",
|
"HeaderSeasonNumber": "Seizoen nummer",
|
||||||
"HeaderNetwork": "Network",
|
"HeaderNetwork": "Zender",
|
||||||
"HeaderYear": "Year",
|
"HeaderYear": "Jaar",
|
||||||
"HeaderGameSystem": "Game system",
|
"HeaderGameSystem": "Spelsysteem",
|
||||||
"HeaderPlayers": "Players",
|
"HeaderPlayers": "Spelers",
|
||||||
"HeaderEmbeddedImage": "Embedded image",
|
"HeaderEmbeddedImage": "Ingesloten afbeelding",
|
||||||
"HeaderTrack": "Track",
|
"HeaderTrack": "Track",
|
||||||
"HeaderDisc": "Disc"
|
"HeaderDisc": "Schijf"
|
||||||
}
|
}
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
"ButtonEdit": "Edit",
|
"ButtonEdit": "Edit",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -331,24 +331,24 @@
|
||||||
"ButtonViewSeriesRecording": "Visualizar grava\u00e7\u00e3o de s\u00e9ries",
|
"ButtonViewSeriesRecording": "Visualizar grava\u00e7\u00e3o de s\u00e9ries",
|
||||||
"ValueOriginalAirDate": "Data original de exibi\u00e7\u00e3o: {0}",
|
"ValueOriginalAirDate": "Data original de exibi\u00e7\u00e3o: {0}",
|
||||||
"ButtonRemoveFromPlaylist": "Remover da lista de reprodu\u00e7\u00e3o",
|
"ButtonRemoveFromPlaylist": "Remover da lista de reprodu\u00e7\u00e3o",
|
||||||
"HeaderSpecials": "Specials",
|
"HeaderSpecials": "Especiais",
|
||||||
"HeaderTrailers": "Trailers",
|
"HeaderTrailers": "Trailers",
|
||||||
"HeaderAudio": "Audio",
|
"HeaderAudio": "\u00c1udio",
|
||||||
"HeaderResolution": "Resolution",
|
"HeaderResolution": "Resolu\u00e7\u00e3o",
|
||||||
"HeaderVideo": "Video",
|
"HeaderVideo": "V\u00eddeo",
|
||||||
"HeaderRuntime": "Runtime",
|
"HeaderRuntime": "Dura\u00e7\u00e3o",
|
||||||
"HeaderCommunityRating": "Community rating",
|
"HeaderCommunityRating": "Classifica\u00e7\u00e3o da Comunidade",
|
||||||
"HeaderParentalRating": "Parental rating",
|
"HeaderParentalRating": "Classifica\u00e7\u00e3o parental",
|
||||||
"HeaderReleaseDate": "Release date",
|
"HeaderReleaseDate": "Data de lan\u00e7amento",
|
||||||
"HeaderDateAdded": "Date added",
|
"HeaderDateAdded": "Data de adi\u00e7\u00e3o",
|
||||||
"HeaderSeries": "Series",
|
"HeaderSeries": "S\u00e9rie",
|
||||||
"HeaderSeason": "Season",
|
"HeaderSeason": "Temporada",
|
||||||
"HeaderSeasonNumber": "Season number",
|
"HeaderSeasonNumber": "N\u00famero da temporada",
|
||||||
"HeaderNetwork": "Network",
|
"HeaderNetwork": "Rede de TV",
|
||||||
"HeaderYear": "Year",
|
"HeaderYear": "Ano",
|
||||||
"HeaderGameSystem": "Game system",
|
"HeaderGameSystem": "Sistema do jogo",
|
||||||
"HeaderPlayers": "Players",
|
"HeaderPlayers": "Jogadores",
|
||||||
"HeaderEmbeddedImage": "Embedded image",
|
"HeaderEmbeddedImage": "Imagem incorporada",
|
||||||
"HeaderTrack": "Track",
|
"HeaderTrack": "Faixa",
|
||||||
"HeaderDisc": "Disc"
|
"HeaderDisc": "Disco"
|
||||||
}
|
}
|
|
@ -29,7 +29,7 @@
|
||||||
"MessageKeysLinked": "\u041a\u043b\u044e\u0447\u0438 \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b.",
|
"MessageKeysLinked": "\u041a\u043b\u044e\u0447\u0438 \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b.",
|
||||||
"HeaderConfirmation": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435",
|
"HeaderConfirmation": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435",
|
||||||
"MessageKeyUpdated": "\u041a\u043b\u044e\u0447 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d.",
|
"MessageKeyUpdated": "\u041a\u043b\u044e\u0447 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430 \u0431\u044b\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d.",
|
||||||
"MessageKeyRemoved": "\u041a\u043b\u044e\u0447 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430 \u0431\u044b\u043b \u0443\u0431\u0440\u0430\u043d.",
|
"MessageKeyRemoved": "\u041a\u043b\u044e\u0447 \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u0430 \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0451\u043d.",
|
||||||
"ErrorLaunchingChromecast": "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 Chromecast. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.",
|
"ErrorLaunchingChromecast": "\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 Chromecast. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.",
|
||||||
"HeaderSearch": "\u041f\u043e\u0438\u0441\u043a",
|
"HeaderSearch": "\u041f\u043e\u0438\u0441\u043a",
|
||||||
"LabelArtist": "\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c",
|
"LabelArtist": "\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c",
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
"ButtonPlay": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438",
|
"ButtonPlay": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438",
|
||||||
"ButtonEdit": "\u041f\u0440\u0430\u0432\u0438\u0442\u044c",
|
"ButtonEdit": "\u041f\u0440\u0430\u0432\u0438\u0442\u044c",
|
||||||
"ButtonQueue": "\u041e\u0447\u0435\u0440\u0435\u0434\u044c",
|
"ButtonQueue": "\u041e\u0447\u0435\u0440\u0435\u0434\u044c",
|
||||||
"ButtonPlayTrailer": "\u0412\u043e\u0441\u043f\u0440 \u0442\u0440\u0435\u0439\u043b\u0435\u0440",
|
"ButtonPlayTrailer": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0442\u0440\u0435\u0439\u043b\u0435\u0440",
|
||||||
"ButtonPlaylist": "\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f",
|
"ButtonPlaylist": "\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f",
|
||||||
"ButtonPreviousTrack": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0434\u043e\u0440\u043e\u0436\u043a\u0430",
|
"ButtonPreviousTrack": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0434\u043e\u0440\u043e\u0436\u043a\u0430",
|
||||||
"LabelEnabled": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
|
"LabelEnabled": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
"MessageInvalidUser": "\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c.",
|
"MessageInvalidUser": "\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c.",
|
||||||
"HeaderAllRecordings": "\u0412\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438",
|
"HeaderAllRecordings": "\u0412\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438",
|
||||||
"RecommendationBecauseYouLike": "\u0418\u0431\u043e \u0432\u0430\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f {0}",
|
"RecommendationBecauseYouLike": "\u0418\u0431\u043e \u0432\u0430\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f {0}",
|
||||||
"RecommendationBecauseYouWatched": "\u0422\u0430\u043a \u043a\u0430\u043a \u0432\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 {0}",
|
"RecommendationBecauseYouWatched": "\u0418\u0431\u043e \u0432\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 {0}",
|
||||||
"RecommendationDirectedBy": "\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a {0}",
|
"RecommendationDirectedBy": "\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a {0}",
|
||||||
"RecommendationStarring": "\u0412 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0440\u043e\u043b\u0438 {0}",
|
"RecommendationStarring": "\u0412 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0440\u043e\u043b\u0438 {0}",
|
||||||
"HeaderConfirmRecordingCancellation": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u0442\u043c\u0435\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0438",
|
"HeaderConfirmRecordingCancellation": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u0442\u043c\u0435\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0438",
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
"HeaderSelectChannelDownloadPathHelp": "\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u0435\u0448\u0430 \u043a\u0430\u043d\u0430\u043b\u043e\u0432. \u041f\u0430\u043f\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.",
|
"HeaderSelectChannelDownloadPathHelp": "\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u0435\u0448\u0430 \u043a\u0430\u043d\u0430\u043b\u043e\u0432. \u041f\u0430\u043f\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438.",
|
||||||
"OptionNewCollection": "\u041d\u043e\u0432\u0430\u044f...",
|
"OptionNewCollection": "\u041d\u043e\u0432\u0430\u044f...",
|
||||||
"ButtonAdd": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c",
|
"ButtonAdd": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c",
|
||||||
"ButtonRemove": "\u0423\u0431\u0440\u0430\u0442\u044c",
|
"ButtonRemove": "\u0418\u0437\u044a\u044f\u0442\u044c",
|
||||||
"LabelChapterDownloaders": "\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441\u0446\u0435\u043d:",
|
"LabelChapterDownloaders": "\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441\u0446\u0435\u043d:",
|
||||||
"LabelChapterDownloadersHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0438 \u0440\u0430\u043d\u0436\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441\u0446\u0435\u043d \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439.",
|
"LabelChapterDownloadersHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0438 \u0440\u0430\u043d\u0436\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0441\u0446\u0435\u043d \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439.",
|
||||||
"HeaderFavoriteAlbums": "\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u044c\u0431\u043e\u043c\u044b",
|
"HeaderFavoriteAlbums": "\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u044c\u0431\u043e\u043c\u044b",
|
||||||
|
@ -284,7 +284,7 @@
|
||||||
"LabelPremiereProgram": "\u041f\u0420\u0415\u041c\u042c\u0415\u0420\u0410",
|
"LabelPremiereProgram": "\u041f\u0420\u0415\u041c\u042c\u0415\u0420\u0410",
|
||||||
"LabelHDProgram": "HD",
|
"LabelHDProgram": "HD",
|
||||||
"HeaderChangeFolderType": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043f\u0430\u043f\u043a\u0438",
|
"HeaderChangeFolderType": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043f\u0430\u043f\u043a\u0438",
|
||||||
"HeaderChangeFolderTypeHelp": "\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0438\u043f \u043f\u0430\u043f\u043a\u0438, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0441 \u043d\u043e\u0432\u044b\u043c \u0442\u0438\u043f\u043e\u043c.",
|
"HeaderChangeFolderTypeHelp": "\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u043f\u0430\u043f\u043a\u0438, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0435\u0451 \u0441 \u043d\u043e\u0432\u044b\u043c \u0442\u0438\u043f\u043e\u043c.",
|
||||||
"HeaderAlert": "\u041e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435",
|
"HeaderAlert": "\u041e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435",
|
||||||
"MessagePleaseRestart": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.",
|
"MessagePleaseRestart": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.",
|
||||||
"ButtonRestart": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c",
|
"ButtonRestart": "\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c",
|
||||||
|
@ -330,25 +330,25 @@
|
||||||
"MessageAddedToPlaylistSuccess": "\u041e\u041a",
|
"MessageAddedToPlaylistSuccess": "\u041e\u041a",
|
||||||
"ButtonViewSeriesRecording": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0430",
|
"ButtonViewSeriesRecording": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0430",
|
||||||
"ValueOriginalAirDate": "\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u0444\u0438\u0440: {0}",
|
"ValueOriginalAirDate": "\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u0444\u0438\u0440: {0}",
|
||||||
"ButtonRemoveFromPlaylist": "\u0423\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u043e\u0441\u043f\u0440-\u0438\u044f",
|
"ButtonRemoveFromPlaylist": "\u0418\u0437\u044a\u044f\u0442\u044c \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u043e\u0441\u043f\u0440-\u0438\u044f",
|
||||||
"HeaderSpecials": "Specials",
|
"HeaderSpecials": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435",
|
||||||
"HeaderTrailers": "Trailers",
|
"HeaderTrailers": "\u0422\u0440\u0435\u0439\u043b\u0435\u0440\u044b",
|
||||||
"HeaderAudio": "Audio",
|
"HeaderAudio": "\u0410\u0443\u0434\u0438\u043e",
|
||||||
"HeaderResolution": "Resolution",
|
"HeaderResolution": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435",
|
||||||
"HeaderVideo": "Video",
|
"HeaderVideo": "\u0412\u0438\u0434\u0435\u043e",
|
||||||
"HeaderRuntime": "Runtime",
|
"HeaderRuntime": "\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c",
|
||||||
"HeaderCommunityRating": "Community rating",
|
"HeaderCommunityRating": "\u041e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430",
|
||||||
"HeaderParentalRating": "Parental rating",
|
"HeaderParentalRating": "\u0412\u043e\u0437\u0440\u0430\u0441\u0442\u043d\u0430\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f",
|
||||||
"HeaderReleaseDate": "Release date",
|
"HeaderReleaseDate": "\u0414\u0430\u0442\u0430 \u0432\u044b\u043f\u0443\u0441\u043a\u0430",
|
||||||
"HeaderDateAdded": "Date added",
|
"HeaderDateAdded": "\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f",
|
||||||
"HeaderSeries": "Series",
|
"HeaderSeries": "\u0421\u0435\u0440\u0438\u0430\u043b",
|
||||||
"HeaderSeason": "Season",
|
"HeaderSeason": "\u0421\u0435\u0437\u043e\u043d",
|
||||||
"HeaderSeasonNumber": "Season number",
|
"HeaderSeasonNumber": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0435\u0437\u043e\u043d\u0430",
|
||||||
"HeaderNetwork": "Network",
|
"HeaderNetwork": "\u0422\u0435\u043b\u0435\u0441\u0435\u0442\u044c",
|
||||||
"HeaderYear": "Year",
|
"HeaderYear": "\u0413\u043e\u0434",
|
||||||
"HeaderGameSystem": "Game system",
|
"HeaderGameSystem": "\u0418\u0433\u0440\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430",
|
||||||
"HeaderPlayers": "Players",
|
"HeaderPlayers": "\u0418\u0433\u0440\u043e\u043a\u0438",
|
||||||
"HeaderEmbeddedImage": "Embedded image",
|
"HeaderEmbeddedImage": "\u0412\u043d\u0435\u0434\u0440\u0451\u043d\u043d\u044b\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a",
|
||||||
"HeaderTrack": "Track",
|
"HeaderTrack": "\u0414\u043e\u0440\u043e\u0436\u043a\u0430",
|
||||||
"HeaderDisc": "Disc"
|
"HeaderDisc": "\u0414\u0438\u0441\u043a"
|
||||||
}
|
}
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "Play",
|
"ButtonPlay": "Play",
|
||||||
"ButtonEdit": "Edit",
|
"ButtonEdit": "Edit",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -58,14 +58,14 @@
|
||||||
"ButtonMute": "Mute",
|
"ButtonMute": "Mute",
|
||||||
"ButtonUnmute": "Unmute",
|
"ButtonUnmute": "Unmute",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonNextTrack": "Next Track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"ButtonPlay": "\u64ad\u653e",
|
"ButtonPlay": "\u64ad\u653e",
|
||||||
"ButtonEdit": "\u7de8\u8f2f",
|
"ButtonEdit": "\u7de8\u8f2f",
|
||||||
"ButtonQueue": "Queue",
|
"ButtonQueue": "Queue",
|
||||||
"ButtonPlayTrailer": "Play trailer",
|
"ButtonPlayTrailer": "Play trailer",
|
||||||
"ButtonPlaylist": "Playlist",
|
"ButtonPlaylist": "Playlist",
|
||||||
"ButtonPreviousTrack": "Previous Track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"LabelEnabled": "Enabled",
|
"LabelEnabled": "Enabled",
|
||||||
"LabelDisabled": "Disabled",
|
"LabelDisabled": "Disabled",
|
||||||
"ButtonMoreInformation": "More Information",
|
"ButtonMoreInformation": "More Information",
|
||||||
|
|
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferences",
|
"HeaderPreferences": "Preferences",
|
||||||
"MessageLoadingChannels": "Loading channel content...",
|
"MessageLoadingChannels": "Loading channel content...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Mark Read",
|
"ButtonMarkRead": "Mark Read",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Most Watched",
|
"OptionCommunityMostWatchedSort": "Most Watched",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferences",
|
"HeaderPreferences": "Preferences",
|
||||||
"MessageLoadingChannels": "Loading channel content...",
|
"MessageLoadingChannels": "Loading channel content...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Mark Read",
|
"ButtonMarkRead": "Mark Read",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Most Watched",
|
"OptionCommunityMostWatchedSort": "Most Watched",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -480,7 +480,7 @@
|
||||||
"HeaderProgram": "Program",
|
"HeaderProgram": "Program",
|
||||||
"HeaderClients": "Klienti",
|
"HeaderClients": "Klienti",
|
||||||
"LabelCompleted": "Hotovo",
|
"LabelCompleted": "Hotovo",
|
||||||
"LabelFailed": "Failed",
|
"LabelFailed": "Chyba",
|
||||||
"LabelSkipped": "P\u0159esko\u010deno",
|
"LabelSkipped": "P\u0159esko\u010deno",
|
||||||
"HeaderEpisodeOrganization": "Organizace epizod",
|
"HeaderEpisodeOrganization": "Organizace epizod",
|
||||||
"LabelSeries": "Series:",
|
"LabelSeries": "Series:",
|
||||||
|
@ -630,8 +630,8 @@
|
||||||
"ButtonFullscreen": "Toggle fullscreen",
|
"ButtonFullscreen": "Toggle fullscreen",
|
||||||
"ButtonScenes": "Sc\u00e9ny",
|
"ButtonScenes": "Sc\u00e9ny",
|
||||||
"ButtonSubtitles": "Titulky",
|
"ButtonSubtitles": "Titulky",
|
||||||
"ButtonAudioTracks": "Audio tracks",
|
"ButtonAudioTracks": "Audio stopy",
|
||||||
"ButtonPreviousTrack": "Previous track",
|
"ButtonPreviousTrack": "P\u0159edchod\u00ed stopa",
|
||||||
"ButtonNextTrack": "Next track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Spr\u00e1vce metadat",
|
"HeaderMetadataManager": "Spr\u00e1vce metadat",
|
||||||
"HeaderPreferences": "Preferences",
|
"HeaderPreferences": "Preferences",
|
||||||
"MessageLoadingChannels": "Loading channel content...",
|
"MessageLoadingChannels": "Loading channel content...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Ozna\u010dit jako p\u0159e\u010dten\u00e9",
|
"ButtonMarkRead": "Ozna\u010dit jako p\u0159e\u010dten\u00e9",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Nejsledovan\u011bj\u0161\u00ed",
|
"OptionCommunityMostWatchedSort": "Nejsledovan\u011bj\u0161\u00ed",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -627,10 +627,10 @@
|
||||||
"TabNowPlaying": "Spiler nu",
|
"TabNowPlaying": "Spiler nu",
|
||||||
"TabNavigation": "Navigation",
|
"TabNavigation": "Navigation",
|
||||||
"TabControls": "Controls",
|
"TabControls": "Controls",
|
||||||
"ButtonFullscreen": "Toggle fullscreen",
|
"ButtonFullscreen": "Skift til fuldsk\u00e6rm",
|
||||||
"ButtonScenes": "Scener",
|
"ButtonScenes": "Scener",
|
||||||
"ButtonSubtitles": "Undertekster",
|
"ButtonSubtitles": "Undertekster",
|
||||||
"ButtonAudioTracks": "Audio tracks",
|
"ButtonAudioTracks": "Lyd filer",
|
||||||
"ButtonPreviousTrack": "Previous track",
|
"ButtonPreviousTrack": "Previous track",
|
||||||
"ButtonNextTrack": "Next track",
|
"ButtonNextTrack": "Next track",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferences",
|
"HeaderPreferences": "Preferences",
|
||||||
"MessageLoadingChannels": "Loading channel content...",
|
"MessageLoadingChannels": "Loading channel content...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Mark Read",
|
"ButtonMarkRead": "Mark Read",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Most Watched",
|
"OptionCommunityMostWatchedSort": "Most Watched",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -480,10 +480,10 @@
|
||||||
"HeaderProgram": "Programm",
|
"HeaderProgram": "Programm",
|
||||||
"HeaderClients": "Clients",
|
"HeaderClients": "Clients",
|
||||||
"LabelCompleted": "Fertiggestellt",
|
"LabelCompleted": "Fertiggestellt",
|
||||||
"LabelFailed": "Failed",
|
"LabelFailed": "Gescheitert",
|
||||||
"LabelSkipped": "\u00dcbersprungen",
|
"LabelSkipped": "\u00dcbersprungen",
|
||||||
"HeaderEpisodeOrganization": "Episodensortierung",
|
"HeaderEpisodeOrganization": "Episodensortierung",
|
||||||
"LabelSeries": "Series:",
|
"LabelSeries": "Serien:",
|
||||||
"LabelSeasonNumber": "Staffelnummer",
|
"LabelSeasonNumber": "Staffelnummer",
|
||||||
"LabelEpisodeNumber": "Episodennummer",
|
"LabelEpisodeNumber": "Episodennummer",
|
||||||
"LabelEndingEpisodeNumber": "Ending episode number",
|
"LabelEndingEpisodeNumber": "Ending episode number",
|
||||||
|
@ -627,12 +627,12 @@
|
||||||
"TabNowPlaying": "Aktuelle Wiedergabe",
|
"TabNowPlaying": "Aktuelle Wiedergabe",
|
||||||
"TabNavigation": "Navigation",
|
"TabNavigation": "Navigation",
|
||||||
"TabControls": "Controls",
|
"TabControls": "Controls",
|
||||||
"ButtonFullscreen": "Toggle fullscreen",
|
"ButtonFullscreen": "Schalte Vollbild um",
|
||||||
"ButtonScenes": "Szenen",
|
"ButtonScenes": "Szenen",
|
||||||
"ButtonSubtitles": "Untertitel",
|
"ButtonSubtitles": "Untertitel",
|
||||||
"ButtonAudioTracks": "Audio tracks",
|
"ButtonAudioTracks": "Audiospuren",
|
||||||
"ButtonPreviousTrack": "Previous track",
|
"ButtonPreviousTrack": "Vorheriger Track",
|
||||||
"ButtonNextTrack": "Next track",
|
"ButtonNextTrack": "N\u00e4chster Track",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"LabelGroupMoviesIntoCollections": "Gruppiere Filme in Collections",
|
"LabelGroupMoviesIntoCollections": "Gruppiere Filme in Collections",
|
||||||
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadaten-Manager",
|
"HeaderMetadataManager": "Metadaten-Manager",
|
||||||
"HeaderPreferences": "Einstellungen",
|
"HeaderPreferences": "Einstellungen",
|
||||||
"MessageLoadingChannels": "Lade Channel Inhalt...",
|
"MessageLoadingChannels": "Lade Channel Inhalt...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Als gelesen markieren",
|
"ButtonMarkRead": "Als gelesen markieren",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Meistgesehen",
|
"OptionCommunityMostWatchedSort": "Meistgesehen",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferences",
|
"HeaderPreferences": "Preferences",
|
||||||
"MessageLoadingChannels": "Loading channel content...",
|
"MessageLoadingChannels": "Loading channel content...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Mark Read",
|
"ButtonMarkRead": "Mark Read",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Most Watched",
|
"OptionCommunityMostWatchedSort": "Most Watched",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferences",
|
"HeaderPreferences": "Preferences",
|
||||||
"MessageLoadingChannels": "Loading channel content...",
|
"MessageLoadingChannels": "Loading channel content...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Mark Read",
|
"ButtonMarkRead": "Mark Read",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Most Watched",
|
"OptionCommunityMostWatchedSort": "Most Watched",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferences",
|
"HeaderPreferences": "Preferences",
|
||||||
"MessageLoadingChannels": "Loading channel content...",
|
"MessageLoadingChannels": "Loading channel content...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Mark Read",
|
"ButtonMarkRead": "Mark Read",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Most Watched",
|
"OptionCommunityMostWatchedSort": "Most Watched",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -480,10 +480,10 @@
|
||||||
"HeaderProgram": "Programa",
|
"HeaderProgram": "Programa",
|
||||||
"HeaderClients": "Clientes",
|
"HeaderClients": "Clientes",
|
||||||
"LabelCompleted": "Completado",
|
"LabelCompleted": "Completado",
|
||||||
"LabelFailed": "Error",
|
"LabelFailed": "Err\u00f3neo",
|
||||||
"LabelSkipped": "Omitido",
|
"LabelSkipped": "Omitido",
|
||||||
"HeaderEpisodeOrganization": "Organizaci\u00f3n de episodios",
|
"HeaderEpisodeOrganization": "Organizaci\u00f3n de episodios",
|
||||||
"LabelSeries": "Series:",
|
"LabelSeries": "Serie:",
|
||||||
"LabelSeasonNumber": "Temporada n\u00famero:",
|
"LabelSeasonNumber": "Temporada n\u00famero:",
|
||||||
"LabelEpisodeNumber": "Episodio n\u00famero:",
|
"LabelEpisodeNumber": "Episodio n\u00famero:",
|
||||||
"LabelEndingEpisodeNumber": "N\u00famero episodio final:",
|
"LabelEndingEpisodeNumber": "N\u00famero episodio final:",
|
||||||
|
@ -627,10 +627,10 @@
|
||||||
"TabNowPlaying": "Reproduciendo ahora",
|
"TabNowPlaying": "Reproduciendo ahora",
|
||||||
"TabNavigation": "Navegaci\u00f3n",
|
"TabNavigation": "Navegaci\u00f3n",
|
||||||
"TabControls": "Controles",
|
"TabControls": "Controles",
|
||||||
"ButtonFullscreen": "Toggle fullscreen",
|
"ButtonFullscreen": "Pantalla completa",
|
||||||
"ButtonScenes": "Escenas",
|
"ButtonScenes": "Escenas",
|
||||||
"ButtonSubtitles": "Subt\u00edtulos",
|
"ButtonSubtitles": "Subt\u00edtulos",
|
||||||
"ButtonAudioTracks": "Audio tracks",
|
"ButtonAudioTracks": "Pistas de audio",
|
||||||
"ButtonPreviousTrack": "Pista anterior",
|
"ButtonPreviousTrack": "Pista anterior",
|
||||||
"ButtonNextTrack": "Pista siguiente",
|
"ButtonNextTrack": "Pista siguiente",
|
||||||
"ButtonStop": "Detener",
|
"ButtonStop": "Detener",
|
||||||
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferencias",
|
"HeaderPreferences": "Preferencias",
|
||||||
"MessageLoadingChannels": "Cargando contenidos del canal...",
|
"MessageLoadingChannels": "Cargando contenidos del canal...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Marcar como le\u00eddo",
|
"ButtonMarkRead": "Marcar como le\u00eddo",
|
||||||
"OptionDefaultSort": "Por defecto",
|
"OptionDefaultSort": "Por defecto",
|
||||||
"OptionCommunityMostWatchedSort": "M\u00e1s visto",
|
"OptionCommunityMostWatchedSort": "M\u00e1s visto",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -627,12 +627,12 @@
|
||||||
"TabNowPlaying": "Reproduci\u00e9ndo Ahora",
|
"TabNowPlaying": "Reproduci\u00e9ndo Ahora",
|
||||||
"TabNavigation": "Navegaci\u00f3n",
|
"TabNavigation": "Navegaci\u00f3n",
|
||||||
"TabControls": "Controles",
|
"TabControls": "Controles",
|
||||||
"ButtonFullscreen": "Cambiar a pantalla completa",
|
"ButtonFullscreen": "Alternar pantalla completa",
|
||||||
"ButtonScenes": "Escenas",
|
"ButtonScenes": "Escenas",
|
||||||
"ButtonSubtitles": "Subt\u00edtulos",
|
"ButtonSubtitles": "Subt\u00edtulos",
|
||||||
"ButtonAudioTracks": "Pistas de audio",
|
"ButtonAudioTracks": "Pistas de audio",
|
||||||
"ButtonPreviousTrack": "Pista anterior",
|
"ButtonPreviousTrack": "Pista Anterior",
|
||||||
"ButtonNextTrack": "Pista siguiente",
|
"ButtonNextTrack": "Pista Siguiente",
|
||||||
"ButtonStop": "Detener",
|
"ButtonStop": "Detener",
|
||||||
"ButtonPause": "Pausar",
|
"ButtonPause": "Pausar",
|
||||||
"LabelGroupMoviesIntoCollections": "Agrupar pel\u00edculas en colecciones",
|
"LabelGroupMoviesIntoCollections": "Agrupar pel\u00edculas en colecciones",
|
||||||
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Administrador de Metadatos",
|
"HeaderMetadataManager": "Administrador de Metadatos",
|
||||||
"HeaderPreferences": "Preferencias",
|
"HeaderPreferences": "Preferencias",
|
||||||
"MessageLoadingChannels": "Cargando contenidos del canal...",
|
"MessageLoadingChannels": "Cargando contenidos del canal...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Marcar como Le\u00eddo",
|
"ButtonMarkRead": "Marcar como Le\u00eddo",
|
||||||
"OptionDefaultSort": "Por defecto",
|
"OptionDefaultSort": "Por defecto",
|
||||||
"OptionCommunityMostWatchedSort": "M\u00e1s Visto",
|
"OptionCommunityMostWatchedSort": "M\u00e1s Visto",
|
||||||
|
@ -948,36 +949,38 @@
|
||||||
"OptionReportAlbums": "\u00c1lbums",
|
"OptionReportAlbums": "\u00c1lbums",
|
||||||
"OptionReportAdultVideos": "Videos para Adultos",
|
"OptionReportAdultVideos": "Videos para Adultos",
|
||||||
"ButtonMore": "M\u00e1s",
|
"ButtonMore": "M\u00e1s",
|
||||||
"HeaderActivity": "Activity",
|
"HeaderActivity": "Actividad",
|
||||||
"ScheduledTaskStartedWithName": "{0} started",
|
"ScheduledTaskStartedWithName": "{0} Iniciado",
|
||||||
"ScheduledTaskCancelledWithName": "{0} was cancelled",
|
"ScheduledTaskCancelledWithName": "{0} fue cancelado",
|
||||||
"ScheduledTaskCompletedWithName": "{0} completed",
|
"ScheduledTaskCompletedWithName": "{0} completado",
|
||||||
"ScheduledTaskFailed": "Scheduled task completed",
|
"ScheduledTaskFailed": "Tarea programada completada",
|
||||||
"PluginInstalledWithName": "{0} was installed",
|
"PluginInstalledWithName": "{0} fue instalado",
|
||||||
"PluginUpdatedWithName": "{0} was updated",
|
"PluginUpdatedWithName": "{0} fue actualizado",
|
||||||
"PluginUninstalledWithName": "{0} was uninstalled",
|
"PluginUninstalledWithName": "{0} fue desinstalado",
|
||||||
"ScheduledTaskFailedWithName": "{0} failed",
|
"ScheduledTaskFailedWithName": "{0} fall\u00f3",
|
||||||
"ItemAddedWithName": "{0} was added to the library",
|
"ItemAddedWithName": "{0} fue agregado a la biblioteca",
|
||||||
"ItemRemovedWithName": "{0} was removed from the library",
|
"ItemRemovedWithName": "{0} fue removido de la biblioteca",
|
||||||
"DeviceOnlineWithName": "{0} is connected",
|
"DeviceOnlineWithName": "{0} est\u00e1 conectado",
|
||||||
"UserOnlineFromDevice": "{0} is online from {1}",
|
"UserOnlineFromDevice": "{0} est\u00e1 en l\u00ednea desde {1}",
|
||||||
"DeviceOfflineWithName": "{0} has disconnected",
|
"DeviceOfflineWithName": "{0} se ha desconectado",
|
||||||
"UserOfflineFromDevice": "{0} has disconnected from {1}",
|
"UserOfflineFromDevice": "{0} se ha desconecatdo desde {1}",
|
||||||
"SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
|
"SubtitlesDownloadedForItem": "Subt\u00edtulos descargados para {0}",
|
||||||
"SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
|
"SubtitleDownloadFailureForItem": "Fall\u00f3 la descarga de subt\u00edtulos para {0}",
|
||||||
"LabelRunningTimeValue": "Running time: {0}",
|
"LabelRunningTimeValue": "Duraci\u00f3n: {0}",
|
||||||
"LabelIpAddressValue": "Ip address: {0}",
|
"LabelIpAddressValue": "Direcci\u00f3n IP: {0}",
|
||||||
"UserConfigurationUpdatedWithName": "User configuration has been updated for {0}",
|
"UserConfigurationUpdatedWithName": "Se ha actualizado la configuraci\u00f3n del usuario {0}",
|
||||||
"UserCreatedWithName": "User {0} has been created",
|
"UserCreatedWithName": "Se ha creado el usuario {0}",
|
||||||
"UserPasswordChangedWithName": "Password has been changed for user {0}",
|
"UserPasswordChangedWithName": "Se ha cambiado la contrase\u00f1a para el usuario {0}",
|
||||||
"UserDeletedWithName": "User {0} has been deleted",
|
"UserDeletedWithName": "Se ha eliminado al usuario {0}",
|
||||||
"MessageServerConfigurationUpdated": "Server configuration has been updated",
|
"MessageServerConfigurationUpdated": "Se ha actualizado la configuraci\u00f3n del servidor",
|
||||||
"MessageNamedServerConfigurationUpdatedWithValue": "Server configuration section {0} has been updated",
|
"MessageNamedServerConfigurationUpdatedWithValue": "Se ha actualizado la secci\u00f3n {0} de la configuraci\u00f3n del servidor",
|
||||||
"MessageApplicationUpdated": "Media Browser Server has been updated",
|
"MessageApplicationUpdated": "Se ha actualizado el Servidor de Media Browser",
|
||||||
"AuthenticationSucceededWithUserName": "{0} successfully authenticated",
|
"AuthenticationSucceededWithUserName": "{0} autenticado con \u00e9xito",
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Intento fallido de inicio de sesi\u00f3n de {0}",
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} ha iniciado la reproducci\u00f3n de {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} ha detenido la reproducci\u00f3n de {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Dispositivo: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Proveedor: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -397,7 +397,7 @@
|
||||||
"HeaderCastCrew": "\u00c9quipe de tournage",
|
"HeaderCastCrew": "\u00c9quipe de tournage",
|
||||||
"HeaderAdditionalParts": "Parties Additionelles",
|
"HeaderAdditionalParts": "Parties Additionelles",
|
||||||
"ButtonSplitVersionsApart": "S\u00e9parer les versions",
|
"ButtonSplitVersionsApart": "S\u00e9parer les versions",
|
||||||
"ButtonPlayTrailer": "Trailer",
|
"ButtonPlayTrailer": "Bande-annonce",
|
||||||
"LabelMissing": "Manquant(s)",
|
"LabelMissing": "Manquant(s)",
|
||||||
"LabelOffline": "Hors ligne",
|
"LabelOffline": "Hors ligne",
|
||||||
"PathSubstitutionHelp": "Les substitutions de chemins d'acc\u00e8s sont utilis\u00e9es pour faire correspondre un chemin d'acc\u00e8s du serveur \u00e0 un chemin d'acc\u00e8s accessible par les clients. En autorisant un acc\u00e8s direct aux m\u00e9dias du serveur, les clients pourront les lire directement du r\u00e9seau et \u00e9viter l'utilisation inutiles des ressources du serveur en demandant du transcodage.",
|
"PathSubstitutionHelp": "Les substitutions de chemins d'acc\u00e8s sont utilis\u00e9es pour faire correspondre un chemin d'acc\u00e8s du serveur \u00e0 un chemin d'acc\u00e8s accessible par les clients. En autorisant un acc\u00e8s direct aux m\u00e9dias du serveur, les clients pourront les lire directement du r\u00e9seau et \u00e9viter l'utilisation inutiles des ressources du serveur en demandant du transcodage.",
|
||||||
|
@ -480,10 +480,10 @@
|
||||||
"HeaderProgram": "Programme",
|
"HeaderProgram": "Programme",
|
||||||
"HeaderClients": "Clients",
|
"HeaderClients": "Clients",
|
||||||
"LabelCompleted": "Compl\u00e9t\u00e9",
|
"LabelCompleted": "Compl\u00e9t\u00e9",
|
||||||
"LabelFailed": "Failed",
|
"LabelFailed": "\u00c9chec",
|
||||||
"LabelSkipped": "Saut\u00e9",
|
"LabelSkipped": "Saut\u00e9",
|
||||||
"HeaderEpisodeOrganization": "Organisation d'\u00e9pisodes",
|
"HeaderEpisodeOrganization": "Organisation d'\u00e9pisodes",
|
||||||
"LabelSeries": "Series:",
|
"LabelSeries": "S\u00e9ries:",
|
||||||
"LabelSeasonNumber": "Num\u00e9ro de saison",
|
"LabelSeasonNumber": "Num\u00e9ro de saison",
|
||||||
"LabelEpisodeNumber": "Num\u00e9ro d'\u00e9pisode",
|
"LabelEpisodeNumber": "Num\u00e9ro d'\u00e9pisode",
|
||||||
"LabelEndingEpisodeNumber": "Num\u00e9ro d'\u00e9pisode se terminant",
|
"LabelEndingEpisodeNumber": "Num\u00e9ro d'\u00e9pisode se terminant",
|
||||||
|
@ -627,12 +627,12 @@
|
||||||
"TabNowPlaying": "En cours de lecture",
|
"TabNowPlaying": "En cours de lecture",
|
||||||
"TabNavigation": "Navigation",
|
"TabNavigation": "Navigation",
|
||||||
"TabControls": "Contr\u00f4les",
|
"TabControls": "Contr\u00f4les",
|
||||||
"ButtonFullscreen": "Basculer en plein \u00e9cran",
|
"ButtonFullscreen": "Plein \u00e9cran",
|
||||||
"ButtonScenes": "Sc\u00e8nes",
|
"ButtonScenes": "Sc\u00e8nes",
|
||||||
"ButtonSubtitles": "Sous-titres",
|
"ButtonSubtitles": "Sous-titres",
|
||||||
"ButtonAudioTracks": "Pistes audio",
|
"ButtonAudioTracks": "Piste audio",
|
||||||
"ButtonPreviousTrack": "Previous track",
|
"ButtonPreviousTrack": "Piste pr\u00e9c\u00e9dante",
|
||||||
"ButtonNextTrack": "Next track",
|
"ButtonNextTrack": "Piste suivante",
|
||||||
"ButtonStop": "Arr\u00eat",
|
"ButtonStop": "Arr\u00eat",
|
||||||
"ButtonPause": "Pause",
|
"ButtonPause": "Pause",
|
||||||
"LabelGroupMoviesIntoCollections": "Grouper les films en collections",
|
"LabelGroupMoviesIntoCollections": "Grouper les films en collections",
|
||||||
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Gestionnaire de m\u00e9tadonn\u00e9es",
|
"HeaderMetadataManager": "Gestionnaire de m\u00e9tadonn\u00e9es",
|
||||||
"HeaderPreferences": "Pr\u00e9f\u00e9rences",
|
"HeaderPreferences": "Pr\u00e9f\u00e9rences",
|
||||||
"MessageLoadingChannels": "Chargement du contenu de la cha\u00eene...",
|
"MessageLoadingChannels": "Chargement du contenu de la cha\u00eene...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Marquer lu",
|
"ButtonMarkRead": "Marquer lu",
|
||||||
"OptionDefaultSort": "Par d\u00e9faut",
|
"OptionDefaultSort": "Par d\u00e9faut",
|
||||||
"OptionCommunityMostWatchedSort": "Les plus \u00e9cout\u00e9s",
|
"OptionCommunityMostWatchedSort": "Les plus \u00e9cout\u00e9s",
|
||||||
|
@ -795,7 +796,7 @@
|
||||||
"MessageNoMovieSuggestionsAvailable": "Aucune suggestion de film n'est actuellement disponible. Commencez \u00e0 regarder et noter vos films pour avoir des suggestions.",
|
"MessageNoMovieSuggestionsAvailable": "Aucune suggestion de film n'est actuellement disponible. Commencez \u00e0 regarder et noter vos films pour avoir des suggestions.",
|
||||||
"MessageNoCollectionsAvailable": "Les Collections permettent le groupement de films, S\u00e9ries, Albums, Livres et Jeux. Cliquer sur \"Nouveau\" pour commencer la cr\u00e9ation des Collections.",
|
"MessageNoCollectionsAvailable": "Les Collections permettent le groupement de films, S\u00e9ries, Albums, Livres et Jeux. Cliquer sur \"Nouveau\" pour commencer la cr\u00e9ation des Collections.",
|
||||||
"MessageNoPlaylistsAvailable": "Playlists allow you to create lists of content to play consecutively at a time. To add items to playlists, right click or tap and hold, then select Add to Playlist.",
|
"MessageNoPlaylistsAvailable": "Playlists allow you to create lists of content to play consecutively at a time. To add items to playlists, right click or tap and hold, then select Add to Playlist.",
|
||||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
"MessageNoPlaylistItemsAvailable": "Cette liste de lecture est pr\u00e9sentement vide.",
|
||||||
"HeaderWelcomeToMediaBrowserWebClient": "Bienvenue au client Web Media Browser",
|
"HeaderWelcomeToMediaBrowserWebClient": "Bienvenue au client Web Media Browser",
|
||||||
"ButtonDismiss": "Annuler",
|
"ButtonDismiss": "Annuler",
|
||||||
"MessageLearnHowToCustomize": "Apprenez comment personnaliser cette page selon vos propres go\u00fbts. S\u00e9lectionnez votre ic\u00f4ne d'utilisateur dans le coin en haut, \u00e0 droite de l'\u00e9cran pour visionner et mettre \u00e0 jour vos pr\u00e9f\u00e9rences. ",
|
"MessageLearnHowToCustomize": "Apprenez comment personnaliser cette page selon vos propres go\u00fbts. S\u00e9lectionnez votre ic\u00f4ne d'utilisateur dans le coin en haut, \u00e0 droite de l'\u00e9cran pour visionner et mettre \u00e0 jour vos pr\u00e9f\u00e9rences. ",
|
||||||
|
@ -896,43 +897,43 @@
|
||||||
"HeaderChapters": "Chapitres",
|
"HeaderChapters": "Chapitres",
|
||||||
"HeaderResumeSettings": "Reprendre les param\u00e8tres",
|
"HeaderResumeSettings": "Reprendre les param\u00e8tres",
|
||||||
"TabSync": "Sync",
|
"TabSync": "Sync",
|
||||||
"TitleUsers": "Users",
|
"TitleUsers": "Utilisateurs",
|
||||||
"LabelProtocol": "Protocol:",
|
"LabelProtocol": "Protocol:",
|
||||||
"OptionProtocolHttp": "Http",
|
"OptionProtocolHttp": "Http",
|
||||||
"OptionProtocolHls": "Http Live Streaming",
|
"OptionProtocolHls": "Http Live Streaming",
|
||||||
"LabelContext": "Context:",
|
"LabelContext": "Contexte:",
|
||||||
"OptionContextStreaming": "Streaming",
|
"OptionContextStreaming": "Diffusion",
|
||||||
"OptionContextStatic": "Sync",
|
"OptionContextStatic": "Sync",
|
||||||
"ButtonAddToPlaylist": "Add to playlist",
|
"ButtonAddToPlaylist": "Ajouter \u00e0 la liste de lecture",
|
||||||
"TabPlaylists": "Playlists",
|
"TabPlaylists": "Listes de lecture",
|
||||||
"ButtonClose": "Fermer",
|
"ButtonClose": "Fermer",
|
||||||
"LabelAllLanguages": "All languages",
|
"LabelAllLanguages": "Toutes les langues",
|
||||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
"HeaderBrowseOnlineImages": "Parcourir les images en ligne",
|
||||||
"LabelSource": "Source:",
|
"LabelSource": "Source:",
|
||||||
"OptionAll": "All",
|
"OptionAll": "Tous",
|
||||||
"LabelImage": "Image:",
|
"LabelImage": "Image:",
|
||||||
"ButtonBrowseImages": "Browse Images",
|
"ButtonBrowseImages": "Parcourir les images:",
|
||||||
"HeaderImages": "Images",
|
"HeaderImages": "Images",
|
||||||
"HeaderBackdrops": "Backdrops",
|
"HeaderBackdrops": "Arri\u00e8re-plans",
|
||||||
"HeaderScreenshots": "Screenshots",
|
"HeaderScreenshots": "Screenshots",
|
||||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
"HeaderAddUpdateImage": "Ajouter\/mettre \u00e0 jour image",
|
||||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
"LabelJpgPngOnly": "JPG\/PNG seulement",
|
||||||
"LabelImageType": "Image type:",
|
"LabelImageType": "Type d'image:",
|
||||||
"OptionPrimary": "Primary",
|
"OptionPrimary": "Principal",
|
||||||
"OptionArt": "Art",
|
"OptionArt": "Art",
|
||||||
"OptionBox": "Box",
|
"OptionBox": "Bo\u00eetier",
|
||||||
"OptionBoxRear": "Box rear",
|
"OptionBoxRear": "Dos de bo\u00eetier",
|
||||||
"OptionDisc": "Disc",
|
"OptionDisc": "Disque",
|
||||||
"OptionLogo": "Logo",
|
"OptionLogo": "Logo",
|
||||||
"OptionMenu": "Menu",
|
"OptionMenu": "Menu",
|
||||||
"OptionScreenshot": "Screenshot",
|
"OptionScreenshot": "Screenshot",
|
||||||
"OptionLocked": "Locked",
|
"OptionLocked": "Verrouill\u00e9",
|
||||||
"OptionUnidentified": "Unidentified",
|
"OptionUnidentified": "Non identifi\u00e9",
|
||||||
"OptionMissingParentalRating": "Missing parental rating",
|
"OptionMissingParentalRating": "Note de contr\u00f4le parental manquante",
|
||||||
"OptionStub": "Stub",
|
"OptionStub": "Stub",
|
||||||
"HeaderEpisodes": "Episodes:",
|
"HeaderEpisodes": "\u00c9pisodes:",
|
||||||
"OptionSeason0": "Season 0",
|
"OptionSeason0": "Saison 0",
|
||||||
"LabelReport": "Report:",
|
"LabelReport": "Rapport:",
|
||||||
"OptionReportSongs": "Songs",
|
"OptionReportSongs": "Songs",
|
||||||
"OptionReportSeries": "Series",
|
"OptionReportSeries": "Series",
|
||||||
"OptionReportSeasons": "Seasons",
|
"OptionReportSeasons": "Seasons",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -397,7 +397,7 @@
|
||||||
"HeaderCastCrew": "\u05e9\u05d7\u05e7\u05e0\u05d9\u05dd \u05d5\u05e6\u05d5\u05d5\u05ea",
|
"HeaderCastCrew": "\u05e9\u05d7\u05e7\u05e0\u05d9\u05dd \u05d5\u05e6\u05d5\u05d5\u05ea",
|
||||||
"HeaderAdditionalParts": "\u05d7\u05dc\u05e7\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd",
|
"HeaderAdditionalParts": "\u05d7\u05dc\u05e7\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd",
|
||||||
"ButtonSplitVersionsApart": "\u05e4\u05e6\u05dc \u05d2\u05e8\u05e1\u05d0\u05d5\u05ea \u05d1\u05e0\u05e4\u05e8\u05d3",
|
"ButtonSplitVersionsApart": "\u05e4\u05e6\u05dc \u05d2\u05e8\u05e1\u05d0\u05d5\u05ea \u05d1\u05e0\u05e4\u05e8\u05d3",
|
||||||
"ButtonPlayTrailer": "Trailer",
|
"ButtonPlayTrailer": "\u05d8\u05e8\u05d9\u05d9\u05dc\u05e8\u05d9\u05dd",
|
||||||
"LabelMissing": "\u05d7\u05e1\u05e8",
|
"LabelMissing": "\u05d7\u05e1\u05e8",
|
||||||
"LabelOffline": "\u05dc\u05d0 \u05de\u05e7\u05d5\u05d5\u05df",
|
"LabelOffline": "\u05dc\u05d0 \u05de\u05e7\u05d5\u05d5\u05df",
|
||||||
"PathSubstitutionHelp": "\u05e0\u05ea\u05d9\u05d1\u05d9\u05dd \u05d7\u05dc\u05d5\u05e4\u05d9\u05d9\u05dd \u05d4\u05dd \u05dc\u05e6\u05d5\u05e8\u05da \u05de\u05d9\u05e4\u05d5\u05d9 \u05e0\u05ea\u05d9\u05d1\u05d9\u05dd \u05d1\u05e9\u05e8\u05ea \u05dc\u05e0\u05ea\u05d9\u05d1\u05d9\u05dd \u05e9\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05d2\u05e9\u05ea \u05d0\u05dc\u05d9\u05d4\u05dd. \u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05e8\u05e9\u05d0\u05d4 \u05dc\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d2\u05d9\u05e9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 \u05dc\u05de\u05d3\u05d9\u05d4 \u05d1\u05e9\u05e8\u05ea \u05d0\u05dd \u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05e0\u05d2\u05df \u05d0\u05ea \u05d4\u05e7\u05d1\u05e6\u05d9\u05dd \u05d9\u05e9\u05d9\u05e8\u05d5\u05ea \u05e2\u05dc \u05d2\u05d1\u05d9 \u05d4\u05e8\u05e9\u05ea \u05d5\u05dc\u05d4\u05d9\u05de\u05e0\u05e2 \u05de\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05de\u05e9\u05d0\u05d1\u05d9 \u05d4\u05e9\u05e8\u05ea \u05dc\u05e6\u05d5\u05e8\u05da \u05e7\u05d9\u05d3\u05d5\u05d3 \u05d5\u05e9\u05d9\u05d3\u05d5\u05e8.",
|
"PathSubstitutionHelp": "\u05e0\u05ea\u05d9\u05d1\u05d9\u05dd \u05d7\u05dc\u05d5\u05e4\u05d9\u05d9\u05dd \u05d4\u05dd \u05dc\u05e6\u05d5\u05e8\u05da \u05de\u05d9\u05e4\u05d5\u05d9 \u05e0\u05ea\u05d9\u05d1\u05d9\u05dd \u05d1\u05e9\u05e8\u05ea \u05dc\u05e0\u05ea\u05d9\u05d1\u05d9\u05dd \u05e9\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05d2\u05e9\u05ea \u05d0\u05dc\u05d9\u05d4\u05dd. \u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05e8\u05e9\u05d0\u05d4 \u05dc\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d2\u05d9\u05e9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 \u05dc\u05de\u05d3\u05d9\u05d4 \u05d1\u05e9\u05e8\u05ea \u05d0\u05dd \u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05e0\u05d2\u05df \u05d0\u05ea \u05d4\u05e7\u05d1\u05e6\u05d9\u05dd \u05d9\u05e9\u05d9\u05e8\u05d5\u05ea \u05e2\u05dc \u05d2\u05d1\u05d9 \u05d4\u05e8\u05e9\u05ea \u05d5\u05dc\u05d4\u05d9\u05de\u05e0\u05e2 \u05de\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05de\u05e9\u05d0\u05d1\u05d9 \u05d4\u05e9\u05e8\u05ea \u05dc\u05e6\u05d5\u05e8\u05da \u05e7\u05d9\u05d3\u05d5\u05d3 \u05d5\u05e9\u05d9\u05d3\u05d5\u05e8.",
|
||||||
|
@ -480,10 +480,10 @@
|
||||||
"HeaderProgram": "\u05ea\u05d5\u05db\u05e0\u05d4",
|
"HeaderProgram": "\u05ea\u05d5\u05db\u05e0\u05d4",
|
||||||
"HeaderClients": "\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd",
|
"HeaderClients": "\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd",
|
||||||
"LabelCompleted": "\u05d4\u05d5\u05e9\u05dc\u05dd",
|
"LabelCompleted": "\u05d4\u05d5\u05e9\u05dc\u05dd",
|
||||||
"LabelFailed": "Failed",
|
"LabelFailed": "\u05e0\u05db\u05e9\u05dc",
|
||||||
"LabelSkipped": "\u05d3\u05d5\u05dc\u05d2",
|
"LabelSkipped": "\u05d3\u05d5\u05dc\u05d2",
|
||||||
"HeaderEpisodeOrganization": "\u05d0\u05d9\u05e8\u05d2\u05d5\u05df \u05e4\u05e8\u05e7\u05d9\u05dd",
|
"HeaderEpisodeOrganization": "\u05d0\u05d9\u05e8\u05d2\u05d5\u05df \u05e4\u05e8\u05e7\u05d9\u05dd",
|
||||||
"LabelSeries": "Series:",
|
"LabelSeries": "\u05e1\u05d3\u05e8\u05d4:",
|
||||||
"LabelSeasonNumber": "\u05de\u05e1\u05e4\u05e8 \u05e2\u05d5\u05e0\u05d4:",
|
"LabelSeasonNumber": "\u05de\u05e1\u05e4\u05e8 \u05e2\u05d5\u05e0\u05d4:",
|
||||||
"LabelEpisodeNumber": "\u05de\u05e1\u05e4\u05e8 \u05e4\u05e8\u05e7:",
|
"LabelEpisodeNumber": "\u05de\u05e1\u05e4\u05e8 \u05e4\u05e8\u05e7:",
|
||||||
"LabelEndingEpisodeNumber": "\u05de\u05e1\u05e4\u05e8 \u05e1\u05d9\u05d5\u05dd \u05e4\u05e8\u05e7:",
|
"LabelEndingEpisodeNumber": "\u05de\u05e1\u05e4\u05e8 \u05e1\u05d9\u05d5\u05dd \u05e4\u05e8\u05e7:",
|
||||||
|
@ -788,6 +788,7 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferences",
|
"HeaderPreferences": "Preferences",
|
||||||
"MessageLoadingChannels": "Loading channel content...",
|
"MessageLoadingChannels": "Loading channel content...",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Mark Read",
|
"ButtonMarkRead": "Mark Read",
|
||||||
"OptionDefaultSort": "Default",
|
"OptionDefaultSort": "Default",
|
||||||
"OptionCommunityMostWatchedSort": "Most Watched",
|
"OptionCommunityMostWatchedSort": "Most Watched",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
|
@ -480,10 +480,10 @@
|
||||||
"HeaderProgram": "Programma",
|
"HeaderProgram": "Programma",
|
||||||
"HeaderClients": "Dispositivi",
|
"HeaderClients": "Dispositivi",
|
||||||
"LabelCompleted": "Completato",
|
"LabelCompleted": "Completato",
|
||||||
"LabelFailed": "Failed",
|
"LabelFailed": "Fallito",
|
||||||
"LabelSkipped": "Saltato",
|
"LabelSkipped": "Saltato",
|
||||||
"HeaderEpisodeOrganization": "Organizzazione Episodi",
|
"HeaderEpisodeOrganization": "Organizzazione Episodi",
|
||||||
"LabelSeries": "Series:",
|
"LabelSeries": "Serie:",
|
||||||
"LabelSeasonNumber": "Numero Stagione",
|
"LabelSeasonNumber": "Numero Stagione",
|
||||||
"LabelEpisodeNumber": "Numero Episodio",
|
"LabelEpisodeNumber": "Numero Episodio",
|
||||||
"LabelEndingEpisodeNumber": "Ultimo Episodio Numero",
|
"LabelEndingEpisodeNumber": "Ultimo Episodio Numero",
|
||||||
|
@ -627,12 +627,12 @@
|
||||||
"TabNowPlaying": "In esecuzione",
|
"TabNowPlaying": "In esecuzione",
|
||||||
"TabNavigation": "Navigazione",
|
"TabNavigation": "Navigazione",
|
||||||
"TabControls": "Controlli",
|
"TabControls": "Controlli",
|
||||||
"ButtonFullscreen": "Tutto Schermo",
|
"ButtonFullscreen": "Schermo intero",
|
||||||
"ButtonScenes": "Scene",
|
"ButtonScenes": "Scene",
|
||||||
"ButtonSubtitles": "Sottotitoli",
|
"ButtonSubtitles": "Sottotitoli",
|
||||||
"ButtonAudioTracks": "Tracce audio",
|
"ButtonAudioTracks": "Traccia Audio",
|
||||||
"ButtonPreviousTrack": "Previous track",
|
"ButtonPreviousTrack": "Precedente traccia",
|
||||||
"ButtonNextTrack": "Next track",
|
"ButtonNextTrack": "traccia Prossima",
|
||||||
"ButtonStop": "Stop",
|
"ButtonStop": "Stop",
|
||||||
"ButtonPause": "Pausa",
|
"ButtonPause": "Pausa",
|
||||||
"LabelGroupMoviesIntoCollections": "Raggruppa i film nelle collection",
|
"LabelGroupMoviesIntoCollections": "Raggruppa i film nelle collection",
|
||||||
|
@ -788,14 +788,15 @@
|
||||||
"HeaderMetadataManager": "Metadata Manager",
|
"HeaderMetadataManager": "Metadata Manager",
|
||||||
"HeaderPreferences": "Preferenze",
|
"HeaderPreferences": "Preferenze",
|
||||||
"MessageLoadingChannels": "Sto caricando il contenuto del canale",
|
"MessageLoadingChannels": "Sto caricando il contenuto del canale",
|
||||||
|
"MessageLoadingContent": "Loading content...",
|
||||||
"ButtonMarkRead": "Segna come letto",
|
"ButtonMarkRead": "Segna come letto",
|
||||||
"OptionDefaultSort": "Predefinito",
|
"OptionDefaultSort": "Predefinito",
|
||||||
"OptionCommunityMostWatchedSort": "Pi\u00f9 visti",
|
"OptionCommunityMostWatchedSort": "Pi\u00f9 visti",
|
||||||
"TabNextUp": "Da vedere",
|
"TabNextUp": "Da vedere",
|
||||||
"MessageNoMovieSuggestionsAvailable": "Nessun suggerimento di film sono attualmente disponibili. Iniziare a guardare e valutare i vostri film, e poi tornare per visualizzare le tue segnalazioni.",
|
"MessageNoMovieSuggestionsAvailable": "Nessun suggerimento di film sono attualmente disponibili. Iniziare a guardare e valutare i vostri film, e poi tornare per visualizzare le tue segnalazioni.",
|
||||||
"MessageNoCollectionsAvailable": "Collezioni permettono di godere di raggruppamenti personalizzati di film, serie, album, libri e giochi. Fare clic sul pulsante Nuovo per avviare la creazione di collezioni.",
|
"MessageNoCollectionsAvailable": "Collezioni permettono di godere di raggruppamenti personalizzati di film, serie, album, libri e giochi. Fare clic sul pulsante Nuovo per avviare la creazione di collezioni.",
|
||||||
"MessageNoPlaylistsAvailable": "Playlists allow you to create lists of content to play consecutively at a time. To add items to playlists, right click or tap and hold, then select Add to Playlist.",
|
"MessageNoPlaylistsAvailable": "Playlist ti permettere di mettere in coda gli elementi da riprodurre.Usa il tasto destro o tap e tieni premuto quindi seleziona elemento da aggiungere",
|
||||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
"MessageNoPlaylistItemsAvailable": "Questa playlist al momento \u00e8 vuota",
|
||||||
"HeaderWelcomeToMediaBrowserWebClient": "Benvenuti nel Media Browser Web client",
|
"HeaderWelcomeToMediaBrowserWebClient": "Benvenuti nel Media Browser Web client",
|
||||||
"ButtonDismiss": "Dismetti",
|
"ButtonDismiss": "Dismetti",
|
||||||
"MessageLearnHowToCustomize": "Ulteriori informazioni su come personalizzare questa pagina ai tuoi gusti personali. Fare clic sull'icona utente in alto a destra dello schermo per visualizzare e aggiornare le vostre preferenze.",
|
"MessageLearnHowToCustomize": "Ulteriori informazioni su come personalizzare questa pagina ai tuoi gusti personali. Fare clic sull'icona utente in alto a destra dello schermo per visualizzare e aggiornare le vostre preferenze.",
|
||||||
|
@ -903,48 +904,48 @@
|
||||||
"LabelContext": "Contenuto:",
|
"LabelContext": "Contenuto:",
|
||||||
"OptionContextStreaming": "Streaming",
|
"OptionContextStreaming": "Streaming",
|
||||||
"OptionContextStatic": "Sinc",
|
"OptionContextStatic": "Sinc",
|
||||||
"ButtonAddToPlaylist": "Add to playlist",
|
"ButtonAddToPlaylist": "Aggiungi alla playlist",
|
||||||
"TabPlaylists": "Playlists",
|
"TabPlaylists": "Playlists",
|
||||||
"ButtonClose": "Chiudi",
|
"ButtonClose": "Chiudi",
|
||||||
"LabelAllLanguages": "All languages",
|
"LabelAllLanguages": "Tutte le lingue",
|
||||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
"HeaderBrowseOnlineImages": "Sfoglia le immagini sul web",
|
||||||
"LabelSource": "Source:",
|
"LabelSource": "Origine:",
|
||||||
"OptionAll": "All",
|
"OptionAll": "Tutto",
|
||||||
"LabelImage": "Image:",
|
"LabelImage": "Immagine:",
|
||||||
"ButtonBrowseImages": "Browse Images",
|
"ButtonBrowseImages": "Sfoglia immagini",
|
||||||
"HeaderImages": "Images",
|
"HeaderImages": "Immagini",
|
||||||
"HeaderBackdrops": "Backdrops",
|
"HeaderBackdrops": "Sfondi",
|
||||||
"HeaderScreenshots": "Screenshots",
|
"HeaderScreenshots": "Immagini",
|
||||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
"HeaderAddUpdateImage": "Aggiungi\/aggiorna immagine",
|
||||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
"LabelJpgPngOnly": "JPG\/PNG solamente",
|
||||||
"LabelImageType": "Image type:",
|
"LabelImageType": "Tipo immagine",
|
||||||
"OptionPrimary": "Primary",
|
"OptionPrimary": "Primaria",
|
||||||
"OptionArt": "Art",
|
"OptionArt": "Art",
|
||||||
"OptionBox": "Box",
|
"OptionBox": "Box",
|
||||||
"OptionBoxRear": "Box rear",
|
"OptionBoxRear": "Box rear",
|
||||||
"OptionDisc": "Disc",
|
"OptionDisc": "Disc",
|
||||||
"OptionLogo": "Logo",
|
"OptionLogo": "Logo",
|
||||||
"OptionMenu": "Menu",
|
"OptionMenu": "Menu",
|
||||||
"OptionScreenshot": "Screenshot",
|
"OptionScreenshot": "Immagine",
|
||||||
"OptionLocked": "Locked",
|
"OptionLocked": "Bloccato",
|
||||||
"OptionUnidentified": "Unidentified",
|
"OptionUnidentified": "Non identificata",
|
||||||
"OptionMissingParentalRating": "Missing parental rating",
|
"OptionMissingParentalRating": "Voto genitori mancante",
|
||||||
"OptionStub": "Stub",
|
"OptionStub": "Stub",
|
||||||
"HeaderEpisodes": "Episodes:",
|
"HeaderEpisodes": "Episodi:",
|
||||||
"OptionSeason0": "Season 0",
|
"OptionSeason0": "Stagione 0",
|
||||||
"LabelReport": "Report:",
|
"LabelReport": "Report:",
|
||||||
"OptionReportSongs": "Songs",
|
"OptionReportSongs": "Canzoni",
|
||||||
"OptionReportSeries": "Series",
|
"OptionReportSeries": "Series",
|
||||||
"OptionReportSeasons": "Seasons",
|
"OptionReportSeasons": "Stagioni",
|
||||||
"OptionReportTrailers": "Trailers",
|
"OptionReportTrailers": "Trailers",
|
||||||
"OptionReportMusicVideos": "Music videos",
|
"OptionReportMusicVideos": "Video musicali",
|
||||||
"OptionReportMovies": "Movies",
|
"OptionReportMovies": "Film",
|
||||||
"OptionReportHomeVideos": "Home videos",
|
"OptionReportHomeVideos": "Video personali",
|
||||||
"OptionReportGames": "Games",
|
"OptionReportGames": "Giochi",
|
||||||
"OptionReportEpisodes": "Episodes",
|
"OptionReportEpisodes": "Episodi",
|
||||||
"OptionReportCollections": "Collections",
|
"OptionReportCollections": "Collezioni",
|
||||||
"OptionReportBooks": "Books",
|
"OptionReportBooks": "Libri",
|
||||||
"OptionReportArtists": "Artists",
|
"OptionReportArtists": "Cantanti",
|
||||||
"OptionReportAlbums": "Albums",
|
"OptionReportAlbums": "Albums",
|
||||||
"OptionReportAdultVideos": "Adult videos",
|
"OptionReportAdultVideos": "Adult videos",
|
||||||
"ButtonMore": "Pi\u00f9 info...",
|
"ButtonMore": "Pi\u00f9 info...",
|
||||||
|
@ -979,5 +980,7 @@
|
||||||
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
"UserStartedPlayingItemWithValues": "{0} has started playing {1}",
|
||||||
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
"UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
|
||||||
"AppDeviceValues": "App: {0}, Device: {1}",
|
"AppDeviceValues": "App: {0}, Device: {1}",
|
||||||
"ProviderValue": "Provider: {0}"
|
"ProviderValue": "Provider: {0}",
|
||||||
|
"LabelChannelDownloadSizeLimit": "Download size limit (GB):",
|
||||||
|
"LabelChannelDownloadSizeLimitHelp": "Limit the size of the channel download folder"
|
||||||
}
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue