Merge remote-tracking branch 'official/master'
This commit is contained in:
commit
7994f0dcd9
|
@ -1,673 +0,0 @@
|
|||
using MediaBrowser.Controller.Drawing;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Net;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Querying;
|
||||
using ServiceStack;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace MediaBrowser.Api.DefaultTheme
|
||||
{
|
||||
[Route("/MBT/DefaultTheme/Games", "GET")]
|
||||
public class GetGamesView : IReturn<GamesView>
|
||||
{
|
||||
[ApiMember(Name = "UserId", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
[ApiMember(Name = "RecentlyPlayedGamesLimit", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||
public int RecentlyPlayedGamesLimit { get; set; }
|
||||
|
||||
public string ParentId { get; set; }
|
||||
}
|
||||
|
||||
[Route("/MBT/DefaultTheme/TV", "GET")]
|
||||
public class GetTvView : IReturn<TvView>
|
||||
{
|
||||
[ApiMember(Name = "UserId", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
[ApiMember(Name = "ComedyGenre", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
|
||||
public string ComedyGenre { get; set; }
|
||||
|
||||
[ApiMember(Name = "RomanceGenre", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
|
||||
public string RomanceGenre { get; set; }
|
||||
|
||||
[ApiMember(Name = "TopCommunityRating", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||
public double TopCommunityRating { get; set; }
|
||||
|
||||
[ApiMember(Name = "NextUpEpisodeLimit", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||
public int NextUpEpisodeLimit { get; set; }
|
||||
|
||||
[ApiMember(Name = "ResumableEpisodeLimit", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||
public int ResumableEpisodeLimit { get; set; }
|
||||
|
||||
[ApiMember(Name = "LatestEpisodeLimit", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||
public int LatestEpisodeLimit { get; set; }
|
||||
|
||||
public string ParentId { get; set; }
|
||||
}
|
||||
|
||||
[Route("/MBT/DefaultTheme/Movies", "GET")]
|
||||
public class GetMovieView : IReturn<MoviesView>
|
||||
{
|
||||
[ApiMember(Name = "UserId", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
[ApiMember(Name = "FamilyGenre", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
|
||||
public string FamilyGenre { get; set; }
|
||||
|
||||
[ApiMember(Name = "ComedyGenre", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
|
||||
public string ComedyGenre { get; set; }
|
||||
|
||||
[ApiMember(Name = "RomanceGenre", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
|
||||
public string RomanceGenre { get; set; }
|
||||
|
||||
[ApiMember(Name = "LatestMoviesLimit", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||
public int LatestMoviesLimit { get; set; }
|
||||
|
||||
[ApiMember(Name = "LatestTrailersLimit", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||
public int LatestTrailersLimit { get; set; }
|
||||
|
||||
public string ParentId { get; set; }
|
||||
}
|
||||
|
||||
[Route("/MBT/DefaultTheme/Favorites", "GET")]
|
||||
public class GetFavoritesView : IReturn<FavoritesView>
|
||||
{
|
||||
[ApiMember(Name = "UserId", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
|
||||
public Guid UserId { get; set; }
|
||||
}
|
||||
|
||||
[Authenticated]
|
||||
public class DefaultThemeService : BaseApiService
|
||||
{
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IDtoService _dtoService;
|
||||
private readonly ILogger _logger;
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly IUserDataManager _userDataManager;
|
||||
|
||||
private readonly IImageProcessor _imageProcessor;
|
||||
private readonly IItemRepository _itemRepo;
|
||||
|
||||
public DefaultThemeService(IUserManager userManager, IDtoService dtoService, ILogger logger, ILibraryManager libraryManager, IImageProcessor imageProcessor, IUserDataManager userDataManager, IItemRepository itemRepo)
|
||||
{
|
||||
_userManager = userManager;
|
||||
_dtoService = dtoService;
|
||||
_logger = logger;
|
||||
_libraryManager = libraryManager;
|
||||
_imageProcessor = imageProcessor;
|
||||
_userDataManager = userDataManager;
|
||||
_itemRepo = itemRepo;
|
||||
}
|
||||
|
||||
public object Get(GetFavoritesView request)
|
||||
{
|
||||
var user = _userManager.GetUserById(request.UserId);
|
||||
|
||||
var allItems = user.RootFolder.GetRecursiveChildren(user)
|
||||
.ToList();
|
||||
|
||||
var allFavoriteItems = allItems.Where(i => _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite)
|
||||
.ToList();
|
||||
|
||||
var itemsWithImages = allFavoriteItems.Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath))
|
||||
.ToList();
|
||||
|
||||
var itemsWithBackdrops = allFavoriteItems.Where(i => i.GetImages(ImageType.Backdrop).Any())
|
||||
.ToList();
|
||||
|
||||
var view = new FavoritesView();
|
||||
|
||||
var fields = new List<ItemFields>();
|
||||
|
||||
view.BackdropItems = FilterItemsForBackdropDisplay(itemsWithBackdrops)
|
||||
.Randomize("backdrop")
|
||||
.Take(10)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
var spotlightItems = itemsWithBackdrops.Randomize("spotlight")
|
||||
.Take(10)
|
||||
.ToList();
|
||||
|
||||
view.SpotlightItems = spotlightItems
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
fields.Add(ItemFields.PrimaryImageAspectRatio);
|
||||
|
||||
view.Albums = itemsWithImages
|
||||
.OfType<MusicAlbum>()
|
||||
.Randomize()
|
||||
.Take(4)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.Books = itemsWithImages
|
||||
.OfType<Book>()
|
||||
.Randomize()
|
||||
.Take(6)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.Episodes = itemsWithImages
|
||||
.OfType<Episode>()
|
||||
.Randomize()
|
||||
.Take(6)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.Games = itemsWithImages
|
||||
.OfType<Game>()
|
||||
.Randomize()
|
||||
.Take(6)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.Movies = itemsWithImages
|
||||
.OfType<Movie>()
|
||||
.Randomize()
|
||||
.Take(6)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.Series = itemsWithImages
|
||||
.OfType<Series>()
|
||||
.Randomize()
|
||||
.Take(6)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.Songs = itemsWithImages
|
||||
.OfType<Audio>()
|
||||
.Randomize()
|
||||
.Take(4)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.MiniSpotlights = itemsWithBackdrops
|
||||
.Except(spotlightItems)
|
||||
.Randomize()
|
||||
.Take(5)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
var artists = allItems.OfType<Audio>()
|
||||
.SelectMany(i => i.AllArtists)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.Randomize()
|
||||
.Select(i =>
|
||||
{
|
||||
try
|
||||
{
|
||||
return _libraryManager.GetArtist(i);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.Where(i => i != null && _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite)
|
||||
.Take(4)
|
||||
.ToList();
|
||||
|
||||
view.Artists = artists
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
return ToOptimizedSerializedResultUsingCache(view);
|
||||
}
|
||||
|
||||
public object Get(GetGamesView request)
|
||||
{
|
||||
var user = _userManager.GetUserById(request.UserId);
|
||||
|
||||
var items = GetAllLibraryItems(user.Id, _userManager, _libraryManager, request.ParentId).Where(i => i is Game || i is GameSystem)
|
||||
.ToList();
|
||||
|
||||
var gamesWithImages = items.OfType<Game>().Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath)).ToList();
|
||||
|
||||
var itemsWithBackdrops = FilterItemsForBackdropDisplay(items.Where(i => i.GetImages(ImageType.Backdrop).Any())).ToList();
|
||||
|
||||
var gamesWithBackdrops = itemsWithBackdrops.OfType<Game>().ToList();
|
||||
|
||||
var view = new GamesView();
|
||||
|
||||
var fields = new List<ItemFields>();
|
||||
|
||||
view.GameSystems = items
|
||||
.OfType<GameSystem>()
|
||||
.OrderBy(i => i.SortName)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
var currentUserId = user.Id;
|
||||
view.RecentlyPlayedGames = gamesWithImages
|
||||
.OrderByDescending(i => _userDataManager.GetUserData(currentUserId, i.GetUserDataKey()).LastPlayedDate ?? DateTime.MinValue)
|
||||
.Take(request.RecentlyPlayedGamesLimit)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.BackdropItems = gamesWithBackdrops
|
||||
.OrderBy(i => Guid.NewGuid())
|
||||
.Take(10)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.SpotlightItems = gamesWithBackdrops
|
||||
.OrderBy(i => Guid.NewGuid())
|
||||
.Take(10)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.MultiPlayerItems = gamesWithImages
|
||||
.Where(i => i.PlayersSupported.HasValue && i.PlayersSupported.Value > 1)
|
||||
.Randomize()
|
||||
.Select(i => GetItemStub(i, ImageType.Primary))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
return ToOptimizedSerializedResultUsingCache(view);
|
||||
}
|
||||
|
||||
public object Get(GetTvView request)
|
||||
{
|
||||
var romanceGenres = request.RomanceGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||
var comedyGenres = request.ComedyGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
var user = _userManager.GetUserById(request.UserId);
|
||||
|
||||
var series = GetAllLibraryItems(user.Id, _userManager, _libraryManager, request.ParentId)
|
||||
.OfType<Series>()
|
||||
.ToList();
|
||||
|
||||
var seriesWithBackdrops = series.Where(i => i.GetImages(ImageType.Backdrop).Any()).ToList();
|
||||
|
||||
var view = new TvView();
|
||||
|
||||
var fields = new List<ItemFields>();
|
||||
|
||||
var seriesWithBestBackdrops = FilterItemsForBackdropDisplay(seriesWithBackdrops).ToList();
|
||||
|
||||
view.BackdropItems = seriesWithBestBackdrops
|
||||
.OrderBy(i => Guid.NewGuid())
|
||||
.Take(10)
|
||||
.AsParallel()
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.ShowsItems = series
|
||||
.Where(i => i.GetImages(ImageType.Backdrop).Any())
|
||||
.Randomize("all")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
view.RomanceItems = seriesWithBackdrops
|
||||
.Where(i => i.Genres.Any(romanceGenres.ContainsKey))
|
||||
.Randomize("romance")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
view.ComedyItems = seriesWithBackdrops
|
||||
.Where(i => i.Genres.Any(comedyGenres.ContainsKey))
|
||||
.Randomize("comedy")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
var spotlightSeries = seriesWithBestBackdrops
|
||||
.Where(i => i.CommunityRating.HasValue && i.CommunityRating >= 8.5)
|
||||
.ToList();
|
||||
|
||||
if (spotlightSeries.Count < 20)
|
||||
{
|
||||
spotlightSeries = seriesWithBestBackdrops;
|
||||
}
|
||||
|
||||
spotlightSeries = spotlightSeries
|
||||
.OrderBy(i => Guid.NewGuid())
|
||||
.Take(10)
|
||||
.ToList();
|
||||
|
||||
view.SpotlightItems = spotlightSeries
|
||||
.AsParallel()
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
var miniSpotlightItems = seriesWithBackdrops
|
||||
.Except(spotlightSeries.OfType<Series>())
|
||||
.Where(i => i.CommunityRating.HasValue && i.CommunityRating >= 8)
|
||||
.ToList();
|
||||
|
||||
if (miniSpotlightItems.Count < 15)
|
||||
{
|
||||
miniSpotlightItems = seriesWithBackdrops;
|
||||
}
|
||||
|
||||
view.MiniSpotlights = miniSpotlightItems
|
||||
.Randomize("minispotlight")
|
||||
.Take(5)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
var nextUpEpisodes = new TvShowsService(_userManager, _userDataManager, _libraryManager, _itemRepo, _dtoService)
|
||||
.GetNextUpEpisodes(new GetNextUpEpisodes { UserId = user.Id }, series)
|
||||
.ToList();
|
||||
|
||||
fields.Add(ItemFields.PrimaryImageAspectRatio);
|
||||
|
||||
view.NextUpEpisodes = nextUpEpisodes
|
||||
.Take(request.NextUpEpisodeLimit)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.SeriesIdsInProgress = nextUpEpisodes.Select(i => i.Series.Id.ToString("N")).ToList();
|
||||
|
||||
// Avoid implicitly captured closure
|
||||
var currentUser1 = user;
|
||||
|
||||
var ownedEpisodes = series
|
||||
.SelectMany(i => i.GetRecursiveChildren(currentUser1).Where(j => j.LocationType != LocationType.Virtual))
|
||||
.OfType<Episode>()
|
||||
.ToList();
|
||||
|
||||
// Avoid implicitly captured closure
|
||||
var currentUser = user;
|
||||
|
||||
view.LatestEpisodes = ownedEpisodes
|
||||
.OrderByDescending(i => i.DateCreated)
|
||||
.Where(i => !_userDataManager.GetUserData(currentUser.Id, i.GetUserDataKey()).Played)
|
||||
.Take(request.LatestEpisodeLimit)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.ResumableEpisodes = ownedEpisodes
|
||||
.Where(i => _userDataManager.GetUserData(currentUser.Id, i.GetUserDataKey()).PlaybackPositionTicks > 0)
|
||||
.OrderByDescending(i => _userDataManager.GetUserData(currentUser.Id, i.GetUserDataKey()).LastPlayedDate ?? DateTime.MinValue)
|
||||
.Take(request.ResumableEpisodeLimit)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
return ToOptimizedSerializedResultUsingCache(view);
|
||||
}
|
||||
|
||||
public object Get(GetMovieView request)
|
||||
{
|
||||
var user = _userManager.GetUserById(request.UserId);
|
||||
|
||||
var items = GetAllLibraryItems(user.Id, _userManager, _libraryManager, request.ParentId)
|
||||
.Where(i => i is Movie || i is Trailer || i is BoxSet)
|
||||
.ToList();
|
||||
|
||||
var view = new MoviesView();
|
||||
|
||||
var movies = items.OfType<Movie>()
|
||||
.ToList();
|
||||
|
||||
var trailers = items.OfType<Trailer>()
|
||||
.ToList();
|
||||
|
||||
var hdMovies = movies.Where(i => i.IsHD).ToList();
|
||||
|
||||
var familyGenres = request.FamilyGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
var familyMovies = movies.Where(i => i.Genres.Any(familyGenres.ContainsKey)).ToList();
|
||||
|
||||
view.HDMoviePercentage = 100 * hdMovies.Count;
|
||||
view.HDMoviePercentage /= movies.Count;
|
||||
|
||||
view.FamilyMoviePercentage = 100 * familyMovies.Count;
|
||||
view.FamilyMoviePercentage /= movies.Count;
|
||||
|
||||
var moviesWithBackdrops = movies
|
||||
.Where(i => i.GetImages(ImageType.Backdrop).Any())
|
||||
.ToList();
|
||||
|
||||
var fields = new List<ItemFields>();
|
||||
|
||||
var itemsWithTopBackdrops = FilterItemsForBackdropDisplay(moviesWithBackdrops).ToList();
|
||||
|
||||
view.BackdropItems = itemsWithTopBackdrops
|
||||
.OrderBy(i => Guid.NewGuid())
|
||||
.Take(10)
|
||||
.AsParallel()
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.MovieItems = moviesWithBackdrops
|
||||
.Randomize("all")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
view.TrailerItems = trailers
|
||||
.Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath))
|
||||
.Randomize()
|
||||
.Select(i => GetItemStub(i, ImageType.Primary))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
view.BoxSetItems = items
|
||||
.OfType<BoxSet>()
|
||||
.Where(i => i.GetImages(ImageType.Backdrop).Any())
|
||||
.Randomize()
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
view.ThreeDItems = moviesWithBackdrops
|
||||
.Where(i => i.Is3D)
|
||||
.Randomize("3d")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
var romanceGenres = request.RomanceGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||
var comedyGenres = request.ComedyGenre.Split(',').ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
view.RomanceItems = moviesWithBackdrops
|
||||
.Where(i => i.Genres.Any(romanceGenres.ContainsKey))
|
||||
.Randomize("romance")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
view.ComedyItems = moviesWithBackdrops
|
||||
.Where(i => i.Genres.Any(comedyGenres.ContainsKey))
|
||||
.Randomize("comedy")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
view.HDItems = hdMovies
|
||||
.Where(i => i.GetImages(ImageType.Backdrop).Any())
|
||||
.Randomize("hd")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
view.FamilyMovies = familyMovies
|
||||
.Where(i => i.GetImages(ImageType.Backdrop).Any())
|
||||
.Randomize("family")
|
||||
.Select(i => GetItemStub(i, ImageType.Backdrop))
|
||||
.Where(i => i != null)
|
||||
.Take(1)
|
||||
.ToList();
|
||||
|
||||
var currentUserId = user.Id;
|
||||
var spotlightItems = itemsWithTopBackdrops
|
||||
.Where(i => i.CommunityRating.HasValue && i.CommunityRating >= 8)
|
||||
.Where(i => !_userDataManager.GetUserData(currentUserId, i.GetUserDataKey()).Played)
|
||||
.ToList();
|
||||
|
||||
if (spotlightItems.Count < 20)
|
||||
{
|
||||
spotlightItems = itemsWithTopBackdrops;
|
||||
}
|
||||
|
||||
spotlightItems = spotlightItems
|
||||
.OrderBy(i => Guid.NewGuid())
|
||||
.Take(10)
|
||||
.ToList();
|
||||
|
||||
view.SpotlightItems = spotlightItems
|
||||
.AsParallel()
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
var miniSpotlightItems = moviesWithBackdrops
|
||||
.Except(spotlightItems)
|
||||
.Where(i => i.CommunityRating.HasValue && i.CommunityRating >= 7.5)
|
||||
.ToList();
|
||||
|
||||
if (miniSpotlightItems.Count < 15)
|
||||
{
|
||||
miniSpotlightItems = itemsWithTopBackdrops;
|
||||
}
|
||||
|
||||
miniSpotlightItems = miniSpotlightItems
|
||||
.Randomize("minispotlight")
|
||||
.ToList();
|
||||
|
||||
// Avoid implicitly captured closure
|
||||
miniSpotlightItems.InsertRange(0, moviesWithBackdrops
|
||||
.Where(i => _userDataManager.GetUserData(currentUserId, i.GetUserDataKey()).PlaybackPositionTicks > 0)
|
||||
.OrderByDescending(i => _userDataManager.GetUserData(currentUserId, i.GetUserDataKey()).LastPlayedDate ?? DateTime.MaxValue)
|
||||
.Take(3));
|
||||
|
||||
view.MiniSpotlights = miniSpotlightItems
|
||||
.Take(3)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
// Avoid implicitly captured closure
|
||||
var currentUserId1 = user.Id;
|
||||
|
||||
view.LatestMovies = movies
|
||||
.OrderByDescending(i => i.DateCreated)
|
||||
.Where(i => !_userDataManager.GetUserData(currentUserId1, i.GetUserDataKey()).Played)
|
||||
.Take(request.LatestMoviesLimit)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
view.LatestTrailers = trailers
|
||||
.OrderByDescending(i => i.DateCreated)
|
||||
.Where(i => !_userDataManager.GetUserData(currentUserId1, i.GetUserDataKey()).Played)
|
||||
.Take(request.LatestTrailersLimit)
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
|
||||
.ToList();
|
||||
|
||||
return ToOptimizedSerializedResultUsingCache(view);
|
||||
}
|
||||
|
||||
private IEnumerable<BaseItem> FilterItemsForBackdropDisplay(IEnumerable<BaseItem> items)
|
||||
{
|
||||
var tuples = items
|
||||
.Select(i => new Tuple<BaseItem, double>(i, GetResolution(i, ImageType.Backdrop, 0)))
|
||||
.Where(i => i.Item2 > 0)
|
||||
.ToList();
|
||||
|
||||
var topItems = tuples
|
||||
.Where(i => i.Item2 >= 1920)
|
||||
.ToList();
|
||||
|
||||
if (topItems.Count >= 10)
|
||||
{
|
||||
return topItems.Select(i => i.Item1);
|
||||
}
|
||||
|
||||
return tuples.Select(i => i.Item1);
|
||||
}
|
||||
|
||||
private double GetResolution(BaseItem item, ImageType type, int index)
|
||||
{
|
||||
try
|
||||
{
|
||||
var info = item.GetImageInfo(type, index);
|
||||
|
||||
var size = _imageProcessor.GetImageSize(info.Path, info.DateModified);
|
||||
|
||||
return size.Width;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private ItemStub GetItemStub(BaseItem item, ImageType imageType)
|
||||
{
|
||||
var stub = new ItemStub
|
||||
{
|
||||
Id = _dtoService.GetDtoId(item),
|
||||
Name = item.Name,
|
||||
ImageType = imageType
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
var tag = _imageProcessor.GetImageCacheTag(item, imageType);
|
||||
|
||||
if (tag != null)
|
||||
{
|
||||
stub.ImageTag = tag;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("Error getting image tag for {0}", ex, item.Path);
|
||||
return null;
|
||||
}
|
||||
|
||||
return stub;
|
||||
}
|
||||
}
|
||||
|
||||
static class RandomExtension
|
||||
{
|
||||
public static IEnumerable<T> Randomize<T>(this IEnumerable<T> sequence, string type = "none")
|
||||
where T : BaseItem
|
||||
{
|
||||
var hour = DateTime.Now.Hour + DateTime.Now.Day + 2;
|
||||
|
||||
var typeCode = type.GetHashCode();
|
||||
|
||||
return sequence.OrderBy(i =>
|
||||
{
|
||||
var val = i.Id.GetHashCode() + i.Genres.Count + i.People.Count + (i.ProductionYear ?? 0) + i.DateCreated.Minute + i.DateModified.Minute + typeCode;
|
||||
|
||||
return val % hour;
|
||||
});
|
||||
}
|
||||
|
||||
public static IEnumerable<string> Randomize(this IEnumerable<string> sequence)
|
||||
{
|
||||
var hour = DateTime.Now.Hour + 2;
|
||||
|
||||
return sequence.OrderBy(i => i.GetHashCode() % hour);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Api.DefaultTheme
|
||||
{
|
||||
public class ItemStub
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Id { get; set; }
|
||||
public string ImageTag { get; set; }
|
||||
public ImageType ImageType { get; set; }
|
||||
}
|
||||
|
||||
public class MoviesView : BaseView
|
||||
{
|
||||
public List<ItemStub> MovieItems { get; set; }
|
||||
|
||||
public List<ItemStub> BoxSetItems { get; set; }
|
||||
public List<ItemStub> TrailerItems { get; set; }
|
||||
public List<ItemStub> HDItems { get; set; }
|
||||
public List<ItemStub> ThreeDItems { get; set; }
|
||||
|
||||
public List<ItemStub> FamilyMovies { get; set; }
|
||||
|
||||
public List<ItemStub> RomanceItems { get; set; }
|
||||
public List<ItemStub> ComedyItems { get; set; }
|
||||
|
||||
public double FamilyMoviePercentage { get; set; }
|
||||
|
||||
public double HDMoviePercentage { get; set; }
|
||||
|
||||
public List<BaseItemDto> LatestTrailers { get; set; }
|
||||
public List<BaseItemDto> LatestMovies { get; set; }
|
||||
}
|
||||
|
||||
public class TvView : BaseView
|
||||
{
|
||||
public List<ItemStub> ShowsItems { get; set; }
|
||||
|
||||
public List<ItemStub> RomanceItems { get; set; }
|
||||
public List<ItemStub> ComedyItems { get; set; }
|
||||
|
||||
public List<string> SeriesIdsInProgress { get; set; }
|
||||
|
||||
public List<BaseItemDto> LatestEpisodes { get; set; }
|
||||
public List<BaseItemDto> NextUpEpisodes { get; set; }
|
||||
public List<BaseItemDto> ResumableEpisodes { get; set; }
|
||||
}
|
||||
|
||||
public class ItemByNameInfo
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public int ItemCount { get; set; }
|
||||
}
|
||||
|
||||
public class GamesView : BaseView
|
||||
{
|
||||
public List<ItemStub> MultiPlayerItems { get; set; }
|
||||
public List<BaseItemDto> GameSystems { get; set; }
|
||||
public List<BaseItemDto> RecentlyPlayedGames { get; set; }
|
||||
}
|
||||
|
||||
public class BaseView
|
||||
{
|
||||
public List<BaseItemDto> BackdropItems { get; set; }
|
||||
public List<BaseItemDto> SpotlightItems { get; set; }
|
||||
public List<BaseItemDto> MiniSpotlights { get; set; }
|
||||
}
|
||||
|
||||
public class FavoritesView : BaseView
|
||||
{
|
||||
public List<BaseItemDto> Movies { get; set; }
|
||||
public List<BaseItemDto> Series { get; set; }
|
||||
public List<BaseItemDto> Episodes { get; set; }
|
||||
public List<BaseItemDto> Games { get; set; }
|
||||
public List<BaseItemDto> Books { get; set; }
|
||||
public List<BaseItemDto> Albums { get; set; }
|
||||
public List<BaseItemDto> Songs { get; set; }
|
||||
public List<BaseItemDto> Artists { get; set; }
|
||||
}
|
||||
}
|
|
@ -284,6 +284,11 @@ namespace MediaBrowser.Api.Library
|
|||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
||||
public void Post(PostUpdatedSeries request)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public object Get(GetFile request)
|
||||
{
|
||||
var item = _libraryManager.GetItemById(request.Id);
|
||||
|
|
|
@ -70,14 +70,13 @@
|
|||
<Compile Include="Dlna\DlnaServerService.cs" />
|
||||
<Compile Include="Dlna\DlnaService.cs" />
|
||||
<Compile Include="Library\ChapterService.cs" />
|
||||
<Compile Include="PlaylistService.cs" />
|
||||
<Compile Include="Subtitles\SubtitleService.cs" />
|
||||
<Compile Include="Movies\CollectionService.cs" />
|
||||
<Compile Include="Music\AlbumsService.cs" />
|
||||
<Compile Include="AppThemeService.cs" />
|
||||
<Compile Include="BaseApiService.cs" />
|
||||
<Compile Include="ConfigurationService.cs" />
|
||||
<Compile Include="DefaultTheme\DefaultThemeService.cs" />
|
||||
<Compile Include="DefaultTheme\Models.cs" />
|
||||
<Compile Include="DisplayPreferencesService.cs" />
|
||||
<Compile Include="EnvironmentService.cs" />
|
||||
<Compile Include="GamesService.cs" />
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using MediaBrowser.Controller.Collections;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Net;
|
||||
using MediaBrowser.Model.Collections;
|
||||
using MediaBrowser.Model.Querying;
|
||||
using ServiceStack;
|
||||
using System;
|
||||
|
@ -92,9 +93,4 @@ namespace MediaBrowser.Api.Movies
|
|||
Task.WaitAll(task);
|
||||
}
|
||||
}
|
||||
|
||||
public class CollectionCreationResult
|
||||
{
|
||||
public string Id { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
161
MediaBrowser.Api/PlaylistService.cs
Normal file
161
MediaBrowser.Api/PlaylistService.cs
Normal file
|
@ -0,0 +1,161 @@
|
|||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Net;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Playlists;
|
||||
using MediaBrowser.Model.Querying;
|
||||
using ServiceStack;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Api
|
||||
{
|
||||
[Route("/Playlists", "POST", Summary = "Creates a new playlist")]
|
||||
public class CreatePlaylist : IReturn<PlaylistCreationResult>
|
||||
{
|
||||
[ApiMember(Name = "Name", Description = "The name of the new playlist.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[ApiMember(Name = "Ids", Description = "Item Ids to add to the playlist", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST", AllowMultiple = true)]
|
||||
public string Ids { get; set; }
|
||||
|
||||
[ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
|
||||
public string UserId { get; set; }
|
||||
}
|
||||
|
||||
[Route("/Playlists/{Id}/Items", "POST", Summary = "Adds items to a playlist")]
|
||||
public class AddToPlaylist : IReturnVoid
|
||||
{
|
||||
[ApiMember(Name = "Ids", Description = "Item id, comma delimited", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
|
||||
public string Ids { get; set; }
|
||||
|
||||
[ApiMember(Name = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||
public string Id { get; set; }
|
||||
}
|
||||
|
||||
[Route("/Playlists/{Id}/Items", "DELETE", Summary = "Removes items from a playlist")]
|
||||
public class RemoveFromPlaylist : IReturnVoid
|
||||
{
|
||||
[ApiMember(Name = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")]
|
||||
public string Id { get; set; }
|
||||
}
|
||||
|
||||
[Route("/Playlists/{Id}/Items", "GET", Summary = "Gets the original items of a playlist")]
|
||||
public class GetPlaylistItems : IReturn<QueryResult<BaseItemDto>>, IHasItemFields
|
||||
{
|
||||
[ApiMember(Name = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")]
|
||||
public string Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the user id.
|
||||
/// </summary>
|
||||
/// <value>The user id.</value>
|
||||
[ApiMember(Name = "UserId", Description = "User Id", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")]
|
||||
public Guid? UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Skips over a given number of items within the results. Use for paging.
|
||||
/// </summary>
|
||||
/// <value>The start index.</value>
|
||||
[ApiMember(Name = "StartIndex", Description = "Optional. The record index to start at. All items with a lower index will be dropped from the results.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||
public int? StartIndex { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The maximum number of items to return
|
||||
/// </summary>
|
||||
/// <value>The limit.</value>
|
||||
[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; }
|
||||
|
||||
/// <summary>
|
||||
/// Fields to return within the items, in addition to basic information
|
||||
/// </summary>
|
||||
/// <value>The fields.</value>
|
||||
[ApiMember(Name = "Fields", Description = "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimeted. Options: Budget, Chapters, CriticRatingSummary, DateCreated, Genres, HomePageUrl, IndexOptions, MediaStreams, Overview, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, Revenue, SortName, Studios, Taglines", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
|
||||
public string Fields { get; set; }
|
||||
}
|
||||
|
||||
[Authenticated]
|
||||
public class PlaylistService : BaseApiService
|
||||
{
|
||||
private readonly IPlaylistManager _playlistManager;
|
||||
private readonly IDtoService _dtoService;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
|
||||
public PlaylistService(IDtoService dtoService, IPlaylistManager playlistManager, IUserManager userManager, ILibraryManager libraryManager)
|
||||
{
|
||||
_dtoService = dtoService;
|
||||
_playlistManager = playlistManager;
|
||||
_userManager = userManager;
|
||||
_libraryManager = libraryManager;
|
||||
}
|
||||
|
||||
public object Post(CreatePlaylist request)
|
||||
{
|
||||
var task = _playlistManager.CreatePlaylist(new PlaylistCreationOptions
|
||||
{
|
||||
Name = request.Name,
|
||||
ItemIdList = (request.Ids ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToList(),
|
||||
UserId = request.UserId
|
||||
});
|
||||
|
||||
var item = task.Result;
|
||||
|
||||
var dto = _dtoService.GetBaseItemDto(item, new List<ItemFields>());
|
||||
|
||||
return ToOptimizedResult(new PlaylistCreationResult
|
||||
{
|
||||
Id = dto.Id
|
||||
});
|
||||
}
|
||||
|
||||
public void Post(AddToPlaylist request)
|
||||
{
|
||||
var task = _playlistManager.AddToPlaylist(request.Id, request.Ids.Split(','));
|
||||
|
||||
Task.WaitAll(task);
|
||||
}
|
||||
|
||||
public void Delete(RemoveFromPlaylist request)
|
||||
{
|
||||
//var task = _playlistManager.RemoveFromPlaylist(request.Id, request.Ids.Split(',').Select(i => new Guid(i)));
|
||||
|
||||
//Task.WaitAll(task);
|
||||
}
|
||||
|
||||
public object Get(GetPlaylistItems request)
|
||||
{
|
||||
var playlist = (Playlist)_libraryManager.GetItemById(request.Id);
|
||||
var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null;
|
||||
var items = playlist.GetManageableItems().ToArray();
|
||||
|
||||
var count = items.Length;
|
||||
|
||||
if (request.StartIndex.HasValue)
|
||||
{
|
||||
items = items.Skip(request.StartIndex.Value).ToArray();
|
||||
}
|
||||
|
||||
if (request.Limit.HasValue)
|
||||
{
|
||||
items = items.Take(request.Limit.Value).ToArray();
|
||||
}
|
||||
|
||||
var dtos = items
|
||||
.Select(i => _dtoService.GetBaseItemDto(i, request.GetItemFields().ToList(), user))
|
||||
.ToArray();
|
||||
|
||||
var result = new ItemsResult
|
||||
{
|
||||
Items = dtos,
|
||||
TotalRecordCount = count
|
||||
};
|
||||
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Querying;
|
||||
using ServiceStack;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace MediaBrowser.Api.UserLibrary
|
||||
{
|
||||
|
|
|
@ -210,25 +210,5 @@ namespace MediaBrowser.Common.Implementations.Serialization
|
|||
|
||||
return ServiceStack.Text.JsonSerializer.SerializeToString(obj, obj.GetType());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializes to bytes.
|
||||
/// </summary>
|
||||
/// <param name="obj">The obj.</param>
|
||||
/// <returns>System.Byte[][].</returns>
|
||||
/// <exception cref="System.ArgumentNullException">obj</exception>
|
||||
public byte[] SerializeToBytes(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
throw new ArgumentNullException("obj");
|
||||
}
|
||||
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
SerializeToStream(obj, stream);
|
||||
return stream.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,20 +91,5 @@ namespace MediaBrowser.Common.Implementations.Serialization
|
|||
return DeserializeFromStream(type, stream);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializes to bytes.
|
||||
/// </summary>
|
||||
/// <param name="obj">The obj.</param>
|
||||
/// <returns>System.Byte[][].</returns>
|
||||
public byte[] SerializeToBytes(object obj)
|
||||
{
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
SerializeToStream(obj, stream);
|
||||
|
||||
return stream.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,22 +36,26 @@ namespace MediaBrowser.Common.Configuration
|
|||
configuration = Activator.CreateInstance(type);
|
||||
}
|
||||
|
||||
// Take the object we just got and serialize it back to bytes
|
||||
var newBytes = xmlSerializer.SerializeToBytes(configuration);
|
||||
|
||||
// If the file didn't exist before, or if something has changed, re-save
|
||||
if (buffer == null || !buffer.SequenceEqual(newBytes))
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||
xmlSerializer.SerializeToStream(configuration, stream);
|
||||
|
||||
// Save it after load in case we got new items
|
||||
File.WriteAllBytes(path, newBytes);
|
||||
// Take the object we just got and serialize it back to bytes
|
||||
var newBytes = stream.ToArray();
|
||||
|
||||
// If the file didn't exist before, or if something has changed, re-save
|
||||
if (buffer == null || !buffer.SequenceEqual(newBytes))
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||
|
||||
// Save it after load in case we got new items
|
||||
File.WriteAllBytes(path, newBytes);
|
||||
}
|
||||
|
||||
return configuration;
|
||||
}
|
||||
|
||||
return configuration;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Reads an xml configuration file from the file system
|
||||
/// It will immediately save the configuration after loading it, just
|
||||
|
|
|
@ -1006,6 +1006,18 @@ namespace MediaBrowser.Controller.Entities
|
|||
|
||||
private BaseItem FindLinkedChild(LinkedChild info)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(info.ItemName))
|
||||
{
|
||||
if (string.Equals(info.ItemType, "musicgenre", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return LibraryManager.GetMusicGenre(info.ItemName);
|
||||
}
|
||||
if (string.Equals(info.ItemType, "musicartist", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return LibraryManager.GetArtist(info.ItemName);
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(info.Path))
|
||||
{
|
||||
var itemByPath = LibraryManager.RootFolder.FindByPath(info.Path);
|
||||
|
@ -1028,7 +1040,10 @@ namespace MediaBrowser.Controller.Entities
|
|||
{
|
||||
if (info.ItemYear.HasValue)
|
||||
{
|
||||
return info.ItemYear.Value == (i.ProductionYear ?? -1);
|
||||
if (info.ItemYear.Value != (i.ProductionYear ?? -1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -7,11 +7,6 @@ namespace MediaBrowser.Controller.Entities
|
|||
/// </summary>
|
||||
public abstract class BasePluginFolder : Folder, ICollectionFolder, IByReferenceItem
|
||||
{
|
||||
protected BasePluginFolder()
|
||||
{
|
||||
DisplayMediaType = "CollectionFolder";
|
||||
}
|
||||
|
||||
public virtual string CollectionType
|
||||
{
|
||||
get { return null; }
|
||||
|
|
|
@ -38,6 +38,12 @@ namespace MediaBrowser.Controller.Entities
|
|||
Tags = new List<string>();
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public virtual bool IsPreSorted
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether this instance is folder.
|
||||
/// </summary>
|
||||
|
@ -855,7 +861,7 @@ namespace MediaBrowser.Controller.Entities
|
|||
/// <param name="includeLinkedChildren">if set to <c>true</c> [include linked children].</param>
|
||||
/// <returns>IEnumerable{BaseItem}.</returns>
|
||||
/// <exception cref="System.ArgumentNullException"></exception>
|
||||
public IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true)
|
||||
public virtual IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true)
|
||||
{
|
||||
if (user == null)
|
||||
{
|
||||
|
|
|
@ -18,6 +18,15 @@ namespace MediaBrowser.Controller.Entities
|
|||
/// </summary>
|
||||
[IgnoreDataMember]
|
||||
public Guid? ItemId { get; set; }
|
||||
|
||||
public static LinkedChild Create(BaseItem item)
|
||||
{
|
||||
return new LinkedChild
|
||||
{
|
||||
Path = item.Path,
|
||||
Type = LinkedChildType.Manual
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public enum LinkedChildType
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using MediaBrowser.Common.Progress;
|
||||
using System.Runtime.Serialization;
|
||||
using MediaBrowser.Common.Progress;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Configuration;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
@ -58,6 +59,15 @@ namespace MediaBrowser.Controller.Entities.Movies
|
|||
return config.BlockUnratedItems.Contains(UnratedItem.Movie);
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public override bool IsPreSorted
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
||||
{
|
||||
var children = base.GetChildren(user, includeLinkedChildren);
|
||||
|
|
|
@ -29,6 +29,15 @@ namespace MediaBrowser.Controller.Entities.TV
|
|||
}
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public override bool IsPreSorted
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// We want to group into our Series
|
||||
/// </summary>
|
||||
|
|
|
@ -39,6 +39,15 @@ namespace MediaBrowser.Controller.Entities.TV
|
|||
DisplaySpecialsWithSeasons = true;
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public override bool IsPreSorted
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool DisplaySpecialsWithSeasons { get; set; }
|
||||
|
||||
public List<Guid> LocalTrailerIds { get; set; }
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MoreLinq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
|
@ -303,8 +303,6 @@ namespace MediaBrowser.Controller.Library
|
|||
}
|
||||
else
|
||||
{
|
||||
logger.Debug("Evaluating series file: {0}", child.FullName);
|
||||
|
||||
var fullName = child.FullName;
|
||||
|
||||
if (EntityResolutionHelper.IsVideoFile(fullName) || EntityResolutionHelper.IsVideoPlaceHolder(fullName))
|
||||
|
|
|
@ -217,6 +217,9 @@
|
|||
<Compile Include="Notifications\UserNotification.cs" />
|
||||
<Compile Include="Persistence\IFileOrganizationRepository.cs" />
|
||||
<Compile Include="Persistence\MediaStreamQuery.cs" />
|
||||
<Compile Include="Playlists\IPlaylistManager.cs" />
|
||||
<Compile Include="Playlists\Playlist.cs" />
|
||||
<Compile Include="Playlists\PlaylistCreationOptions.cs" />
|
||||
<Compile Include="Providers\DirectoryService.cs" />
|
||||
<Compile Include="Providers\ICustomMetadataProvider.cs" />
|
||||
<Compile Include="Providers\IExternalId.cs" />
|
||||
|
|
47
MediaBrowser.Controller/Playlists/IPlaylistManager.cs
Normal file
47
MediaBrowser.Controller/Playlists/IPlaylistManager.cs
Normal file
|
@ -0,0 +1,47 @@
|
|||
using MediaBrowser.Controller.Entities;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Controller.Playlists
|
||||
{
|
||||
public interface IPlaylistManager
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the playlists.
|
||||
/// </summary>
|
||||
/// <param name="userId">The user identifier.</param>
|
||||
/// <returns>IEnumerable<Playlist>.</returns>
|
||||
IEnumerable<Playlist> GetPlaylists(string userId);
|
||||
|
||||
/// <summary>
|
||||
/// Creates the playlist.
|
||||
/// </summary>
|
||||
/// <param name="options">The options.</param>
|
||||
/// <returns>Task<Playlist>.</returns>
|
||||
Task<Playlist> CreatePlaylist(PlaylistCreationOptions options);
|
||||
|
||||
/// <summary>
|
||||
/// Adds to playlist.
|
||||
/// </summary>
|
||||
/// <param name="playlistId">The playlist identifier.</param>
|
||||
/// <param name="itemIds">The item ids.</param>
|
||||
/// <returns>Task.</returns>
|
||||
Task AddToPlaylist(string playlistId, IEnumerable<string> itemIds);
|
||||
|
||||
/// <summary>
|
||||
/// Removes from playlist.
|
||||
/// </summary>
|
||||
/// <param name="playlistId">The playlist identifier.</param>
|
||||
/// <param name="indeces">The indeces.</param>
|
||||
/// <returns>Task.</returns>
|
||||
Task RemoveFromPlaylist(string playlistId, IEnumerable<int> indeces);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the playlists folder.
|
||||
/// </summary>
|
||||
/// <param name="userId">The user identifier.</param>
|
||||
/// <returns>Folder.</returns>
|
||||
Folder GetPlaylistsFolder(string userId);
|
||||
|
||||
}
|
||||
}
|
87
MediaBrowser.Controller/Playlists/Playlist.cs
Normal file
87
MediaBrowser.Controller/Playlists/Playlist.cs
Normal file
|
@ -0,0 +1,87 @@
|
|||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Querying;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace MediaBrowser.Controller.Playlists
|
||||
{
|
||||
public class Playlist : Folder
|
||||
{
|
||||
public string OwnerUserId { get; set; }
|
||||
|
||||
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
||||
{
|
||||
return GetPlayableItems(user);
|
||||
}
|
||||
|
||||
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true)
|
||||
{
|
||||
return GetPlayableItems(user);
|
||||
}
|
||||
|
||||
public IEnumerable<BaseItem> GetManageableItems()
|
||||
{
|
||||
return GetLinkedChildren();
|
||||
}
|
||||
|
||||
private IEnumerable<BaseItem> GetPlayableItems(User user)
|
||||
{
|
||||
return GetPlaylistItems(MediaType, base.GetChildren(user, true), user);
|
||||
}
|
||||
|
||||
public static IEnumerable<BaseItem> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user)
|
||||
{
|
||||
return inputItems.SelectMany(i =>
|
||||
{
|
||||
var folder = i as Folder;
|
||||
|
||||
if (folder != null)
|
||||
{
|
||||
var items = folder.GetRecursiveChildren(user, true)
|
||||
.Where(m => !m.IsFolder && string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (!folder.IsPreSorted)
|
||||
{
|
||||
items = LibraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
return new[] { i };
|
||||
});
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public override bool IsPreSorted
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public string PlaylistMediaType { get; set; }
|
||||
|
||||
public override string MediaType
|
||||
{
|
||||
get
|
||||
{
|
||||
return PlaylistMediaType;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetMediaType(string value)
|
||||
{
|
||||
PlaylistMediaType = value;
|
||||
}
|
||||
|
||||
public override bool IsVisible(User user)
|
||||
{
|
||||
return base.IsVisible(user) && string.Equals(user.Id.ToString("N"), OwnerUserId);
|
||||
}
|
||||
}
|
||||
}
|
20
MediaBrowser.Controller/Playlists/PlaylistCreationOptions.cs
Normal file
20
MediaBrowser.Controller/Playlists/PlaylistCreationOptions.cs
Normal file
|
@ -0,0 +1,20 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace MediaBrowser.Controller.Playlists
|
||||
{
|
||||
public class PlaylistCreationOptions
|
||||
{
|
||||
public string Name { get; set; }
|
||||
|
||||
public List<string> ItemIdList { get; set; }
|
||||
|
||||
public string MediaType { get; set; }
|
||||
|
||||
public string UserId { get; set; }
|
||||
|
||||
public PlaylistCreationOptions()
|
||||
{
|
||||
ItemIdList = new List<string>();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1283,6 +1283,67 @@ namespace MediaBrowser.Controller.Providers
|
|||
return new[] { personInfo };
|
||||
}
|
||||
|
||||
protected LinkedChild GetLinkedChild(XmlReader reader)
|
||||
{
|
||||
reader.MoveToContent();
|
||||
|
||||
var linkedItem = new LinkedChild
|
||||
{
|
||||
Type = LinkedChildType.Manual
|
||||
};
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.NodeType == XmlNodeType.Element)
|
||||
{
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "Name":
|
||||
{
|
||||
linkedItem.ItemName = reader.ReadElementContentAsString();
|
||||
break;
|
||||
}
|
||||
|
||||
case "Path":
|
||||
{
|
||||
linkedItem.Path = reader.ReadElementContentAsString();
|
||||
break;
|
||||
}
|
||||
|
||||
case "Type":
|
||||
{
|
||||
linkedItem.ItemType = reader.ReadElementContentAsString();
|
||||
break;
|
||||
}
|
||||
|
||||
case "Year":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
int rval;
|
||||
|
||||
if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
|
||||
{
|
||||
linkedItem.ItemYear = rval;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
reader.Skip();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return string.IsNullOrWhiteSpace(linkedItem.ItemName) || string.IsNullOrWhiteSpace(linkedItem.ItemType) ? null : linkedItem;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Used to split names of comma or pipe delimeted genres and people
|
||||
/// </summary>
|
||||
|
|
|
@ -462,7 +462,7 @@ namespace MediaBrowser.Dlna.ContentDirectory
|
|||
|
||||
items = FilterUnsupportedContent(items);
|
||||
|
||||
if (folder is Series || folder is Season || folder is BoxSet)
|
||||
if (folder.IsPreSorted)
|
||||
{
|
||||
return items;
|
||||
}
|
||||
|
|
|
@ -592,7 +592,7 @@ namespace MediaBrowser.Dlna.Didl
|
|||
icon.InnerText = iconUrlInfo.Url;
|
||||
element.AppendChild(icon);
|
||||
|
||||
if (!_profile.EnableAlbumArtInDidl)
|
||||
if (!_profile.EnableAlbumArtInDidl && !(item is Photo))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
<Compile Include="Parsers\GameXmlParser.cs" />
|
||||
<Compile Include="Parsers\MovieXmlParser.cs" />
|
||||
<Compile Include="Parsers\MusicVideoXmlParser.cs" />
|
||||
<Compile Include="Parsers\PlaylistXmlParser.cs" />
|
||||
<Compile Include="Parsers\SeasonXmlParser.cs" />
|
||||
<Compile Include="Parsers\SeriesXmlParser.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
|
@ -69,6 +70,7 @@
|
|||
<Compile Include="Providers\MovieXmlProvider.cs" />
|
||||
<Compile Include="Providers\MusicVideoXmlProvider.cs" />
|
||||
<Compile Include="Providers\PersonXmlProvider.cs" />
|
||||
<Compile Include="Providers\PlaylistXmlProvider.cs" />
|
||||
<Compile Include="Providers\SeasonXmlProvider.cs" />
|
||||
<Compile Include="Providers\SeriesXmlProvider.cs" />
|
||||
<Compile Include="Providers\TrailerXmlProvider.cs" />
|
||||
|
@ -83,6 +85,7 @@
|
|||
<Compile Include="Savers\GameXmlSaver.cs" />
|
||||
<Compile Include="Savers\MovieXmlSaver.cs" />
|
||||
<Compile Include="Savers\PersonXmlSaver.cs" />
|
||||
<Compile Include="Savers\PlaylistXmlSaver.cs" />
|
||||
<Compile Include="Savers\SeasonXmlSaver.cs" />
|
||||
<Compile Include="Savers\SeriesXmlSaver.cs" />
|
||||
<Compile Include="Savers\XmlSaverHelpers.cs" />
|
||||
|
|
|
@ -1,17 +1,14 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Xml;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System.Collections.Generic;
|
||||
using System.Xml;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Parsers
|
||||
{
|
||||
public class BoxSetXmlParser : BaseItemXmlParser<BoxSet>
|
||||
{
|
||||
private readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
public BoxSetXmlParser(ILogger logger)
|
||||
: base(logger)
|
||||
{
|
||||
|
@ -71,59 +68,5 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
|||
|
||||
item.LinkedChildren = list;
|
||||
}
|
||||
|
||||
private LinkedChild GetLinkedChild(XmlReader reader)
|
||||
{
|
||||
reader.MoveToContent();
|
||||
|
||||
var linkedItem = new LinkedChild
|
||||
{
|
||||
Type = LinkedChildType.Manual
|
||||
};
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.NodeType == XmlNodeType.Element)
|
||||
{
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "Name":
|
||||
{
|
||||
linkedItem.ItemName = reader.ReadElementContentAsString();
|
||||
break;
|
||||
}
|
||||
|
||||
case "Type":
|
||||
{
|
||||
linkedItem.ItemType = reader.ReadElementContentAsString();
|
||||
break;
|
||||
}
|
||||
|
||||
case "Year":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
int rval;
|
||||
|
||||
if (int.TryParse(val, NumberStyles.Integer, UsCulture, out rval))
|
||||
{
|
||||
linkedItem.ItemYear = rval;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
reader.Skip();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return string.IsNullOrWhiteSpace(linkedItem.ItemName) || string.IsNullOrWhiteSpace(linkedItem.ItemType) ? null : linkedItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
72
MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs
Normal file
72
MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs
Normal file
|
@ -0,0 +1,72 @@
|
|||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System.Collections.Generic;
|
||||
using System.Xml;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Parsers
|
||||
{
|
||||
public class PlaylistXmlParser : BaseItemXmlParser<Playlist>
|
||||
{
|
||||
public PlaylistXmlParser(ILogger logger)
|
||||
: base(logger)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void FetchDataFromXmlNode(XmlReader reader, Playlist item)
|
||||
{
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "PlaylistItems":
|
||||
|
||||
using (var subReader = reader.ReadSubtree())
|
||||
{
|
||||
FetchFromCollectionItemsNode(subReader, item);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
base.FetchDataFromXmlNode(reader, item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void FetchFromCollectionItemsNode(XmlReader reader, Playlist item)
|
||||
{
|
||||
reader.MoveToContent();
|
||||
|
||||
var list = new List<LinkedChild>();
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.NodeType == XmlNodeType.Element)
|
||||
{
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "PlaylistItem":
|
||||
{
|
||||
using (var subReader = reader.ReadSubtree())
|
||||
{
|
||||
var child = GetLinkedChild(subReader);
|
||||
|
||||
if (child != null)
|
||||
{
|
||||
list.Add(child);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
reader.Skip();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
item.LinkedChildren = list;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
using System.IO;
|
||||
using System.Threading;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.LocalMetadata.Parsers;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Providers
|
||||
{
|
||||
|
|
31
MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs
Normal file
31
MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs
Normal file
|
@ -0,0 +1,31 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.LocalMetadata.Parsers;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Providers
|
||||
{
|
||||
class PlaylistXmlProvider : BaseXmlProvider<Playlist>
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public PlaylistXmlProvider(IFileSystem fileSystem, ILogger logger)
|
||||
: base(fileSystem)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
protected override void Fetch(LocalMetadataResult<Playlist> result, string path, CancellationToken cancellationToken)
|
||||
{
|
||||
new PlaylistXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
|
||||
}
|
||||
|
||||
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
|
||||
{
|
||||
return directoryService.GetFile(Path.Combine(info.Path, "playlist.xml"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.LocalMetadata.Parsers;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Providers
|
||||
{
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Savers
|
||||
{
|
||||
|
@ -37,7 +38,8 @@ namespace MediaBrowser.LocalMetadata.Savers
|
|||
{
|
||||
if (!(item is Series) && !(item is BoxSet) && !(item is MusicArtist) && !(item is MusicAlbum) &&
|
||||
!(item is Season) &&
|
||||
!(item is GameSystem))
|
||||
!(item is GameSystem) &&
|
||||
!(item is Playlist))
|
||||
{
|
||||
return updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
|
68
MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs
Normal file
68
MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs
Normal file
|
@ -0,0 +1,68 @@
|
|||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Savers
|
||||
{
|
||||
public class PlaylistXmlSaver : IMetadataFileSaver
|
||||
{
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return "Media Browser Xml";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether [is enabled for] [the specified item].
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="updateType">Type of the update.</param>
|
||||
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
|
||||
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is Playlist && updateType >= ItemUpdateType.MetadataImport;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves the specified item.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task.</returns>
|
||||
public void Save(IHasMetadata item, CancellationToken cancellationToken)
|
||||
{
|
||||
var builder = new StringBuilder();
|
||||
|
||||
builder.Append("<Item>");
|
||||
|
||||
XmlSaverHelpers.AddCommonNodes((Playlist)item, builder);
|
||||
|
||||
builder.Append("</Item>");
|
||||
|
||||
var xmlFilePath = GetSavePath(item);
|
||||
|
||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string> { });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the save path.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <returns>System.String.</returns>
|
||||
public string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "playlist.xml");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -10,6 +10,7 @@ using MediaBrowser.Controller.Entities;
|
|||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.LocalMetadata.Savers
|
||||
|
@ -109,7 +110,8 @@ namespace MediaBrowser.LocalMetadata.Savers
|
|||
"VoteCount",
|
||||
"Website",
|
||||
"Zap2ItId",
|
||||
"CollectionItems"
|
||||
"CollectionItems",
|
||||
"PlaylistItems"
|
||||
|
||||
}.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
|
@ -631,10 +633,16 @@ namespace MediaBrowser.LocalMetadata.Savers
|
|||
builder.Append("</Persons>");
|
||||
}
|
||||
|
||||
var folder = item as BoxSet;
|
||||
if (folder != null)
|
||||
var boxset = item as BoxSet;
|
||||
if (boxset != null)
|
||||
{
|
||||
AddCollectionItems(folder, builder);
|
||||
AddLinkedChildren(boxset, builder, "CollectionItems", "CollectionItem");
|
||||
}
|
||||
|
||||
var playlist = item as Playlist;
|
||||
if (playlist != null)
|
||||
{
|
||||
AddLinkedChildren(playlist, builder, "PlaylistItems", "PlaylistItem");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -693,7 +701,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
|||
}
|
||||
}
|
||||
|
||||
public static void AddCollectionItems(Folder item, StringBuilder builder)
|
||||
public static void AddLinkedChildren(Folder item, StringBuilder builder, string pluralNodeName, string singularNodeName)
|
||||
{
|
||||
var items = item.LinkedChildren
|
||||
.Where(i => i.Type == LinkedChildType.Manual && !string.IsNullOrWhiteSpace(i.ItemName))
|
||||
|
@ -704,12 +712,11 @@ namespace MediaBrowser.LocalMetadata.Savers
|
|||
return;
|
||||
}
|
||||
|
||||
builder.Append("<CollectionItems>");
|
||||
builder.Append("<" + pluralNodeName + ">");
|
||||
foreach (var link in items)
|
||||
{
|
||||
builder.Append("<CollectionItem>");
|
||||
builder.Append("<" + singularNodeName + ">");
|
||||
|
||||
builder.Append("<Name>" + SecurityElement.Escape(link.ItemName) + "</Name>");
|
||||
builder.Append("<Type>" + SecurityElement.Escape(link.ItemType) + "</Type>");
|
||||
|
||||
if (link.ItemYear.HasValue)
|
||||
|
@ -717,9 +724,11 @@ namespace MediaBrowser.LocalMetadata.Savers
|
|||
builder.Append("<Year>" + SecurityElement.Escape(link.ItemYear.Value.ToString(UsCulture)) + "</Year>");
|
||||
}
|
||||
|
||||
builder.Append("</CollectionItem>");
|
||||
builder.Append("<Path>" + SecurityElement.Escape((link.Path ?? string.Empty)) + "</Path>");
|
||||
|
||||
builder.Append("</" + singularNodeName + ">");
|
||||
}
|
||||
builder.Append("</CollectionItems>");
|
||||
builder.Append("</" + pluralNodeName + ">");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -131,6 +131,9 @@
|
|||
<Compile Include="..\MediaBrowser.Model\Chapters\RemoteChapterResult.cs">
|
||||
<Link>Chapters\RemoteChapterResult.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\MediaBrowser.Model\Collections\CollectionCreationResult.cs">
|
||||
<Link>Collections\CollectionCreationResult.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\MediaBrowser.Model\Configuration\BaseApplicationConfiguration.cs">
|
||||
<Link>Configuration\BaseApplicationConfiguration.cs</Link>
|
||||
</Compile>
|
||||
|
@ -692,6 +695,9 @@
|
|||
<Compile Include="..\MediaBrowser.Model\Notifications\SendToUserType.cs">
|
||||
<Link>Notifications\SendToUserType.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\MediaBrowser.Model\Playlists\PlaylistCreationResult.cs">
|
||||
<Link>Playlists\PlaylistCreationResult.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\MediaBrowser.Model\Plugins\BasePluginConfiguration.cs">
|
||||
<Link>Plugins\BasePluginConfiguration.cs</Link>
|
||||
</Compile>
|
||||
|
|
|
@ -94,6 +94,9 @@
|
|||
<Compile Include="..\MediaBrowser.Model\Chapters\RemoteChapterResult.cs">
|
||||
<Link>Chapters\RemoteChapterResult.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\MediaBrowser.Model\Collections\CollectionCreationResult.cs">
|
||||
<Link>Collections\CollectionCreationResult.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\MediaBrowser.Model\Configuration\BaseApplicationConfiguration.cs">
|
||||
<Link>Configuration\BaseApplicationConfiguration.cs</Link>
|
||||
</Compile>
|
||||
|
@ -649,6 +652,9 @@
|
|||
<Compile Include="..\MediaBrowser.Model\Notifications\SendToUserType.cs">
|
||||
<Link>Notifications\SendToUserType.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\MediaBrowser.Model\Playlists\PlaylistCreationResult.cs">
|
||||
<Link>Playlists\PlaylistCreationResult.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\MediaBrowser.Model\Plugins\BasePluginConfiguration.cs">
|
||||
<Link>Plugins\BasePluginConfiguration.cs</Link>
|
||||
</Compile>
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
namespace MediaBrowser.Model.Collections
|
||||
{
|
||||
public class CollectionCreationResult
|
||||
{
|
||||
public string Id { get; set; }
|
||||
}
|
||||
}
|
|
@ -595,6 +595,18 @@ namespace MediaBrowser.Model.Dto
|
|||
/// <value>The parent thumb image tag.</value>
|
||||
public string ParentThumbImageTag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the parent primary image item identifier.
|
||||
/// </summary>
|
||||
/// <value>The parent primary image item identifier.</value>
|
||||
public string ParentPrimaryImageItemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the parent primary image tag.
|
||||
/// </summary>
|
||||
/// <value>The parent primary image tag.</value>
|
||||
public string ParentPrimaryImageTag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the chapters.
|
||||
/// </summary>
|
||||
|
|
|
@ -23,5 +23,6 @@
|
|||
public const string Games = "games";
|
||||
public const string Channels = "channels";
|
||||
public const string LiveTv = "livetv";
|
||||
public const string Playlists = "playlists";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,6 +75,7 @@
|
|||
<Compile Include="Channels\ChannelQuery.cs" />
|
||||
<Compile Include="Chapters\RemoteChapterInfo.cs" />
|
||||
<Compile Include="Chapters\RemoteChapterResult.cs" />
|
||||
<Compile Include="Collections\CollectionCreationResult.cs" />
|
||||
<Compile Include="Configuration\ChannelOptions.cs" />
|
||||
<Compile Include="Configuration\ChapterOptions.cs" />
|
||||
<Compile Include="Configuration\XbmcMetadataOptions.cs" />
|
||||
|
@ -204,6 +205,7 @@
|
|||
<Compile Include="Notifications\NotificationRequest.cs" />
|
||||
<Compile Include="Notifications\NotificationServiceInfo.cs" />
|
||||
<Compile Include="Notifications\NotificationTypeInfo.cs" />
|
||||
<Compile Include="Playlists\PlaylistCreationResult.cs" />
|
||||
<Compile Include="Providers\ExternalIdInfo.cs" />
|
||||
<Compile Include="Providers\ExternalUrl.cs" />
|
||||
<Compile Include="Providers\ImageProviderInfo.cs" />
|
||||
|
|
8
MediaBrowser.Model/Playlists/PlaylistCreationResult.cs
Normal file
8
MediaBrowser.Model/Playlists/PlaylistCreationResult.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
|
||||
namespace MediaBrowser.Model.Playlists
|
||||
{
|
||||
public class PlaylistCreationResult
|
||||
{
|
||||
public string Id { get; set; }
|
||||
}
|
||||
}
|
|
@ -83,13 +83,5 @@ namespace MediaBrowser.Model.Serialization
|
|||
/// <returns>System.String.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">obj</exception>
|
||||
string SerializeToString(object obj);
|
||||
|
||||
/// <summary>
|
||||
/// Serializes to bytes.
|
||||
/// </summary>
|
||||
/// <param name="obj">The obj.</param>
|
||||
/// <returns>System.Byte[][].</returns>
|
||||
/// <exception cref="System.ArgumentNullException">obj</exception>
|
||||
byte[] SerializeToBytes(object obj);
|
||||
}
|
||||
}
|
|
@ -42,12 +42,5 @@ namespace MediaBrowser.Model.Serialization
|
|||
/// <param name="buffer">The buffer.</param>
|
||||
/// <returns>System.Object.</returns>
|
||||
object DeserializeFromBytes(Type type, byte[] buffer);
|
||||
|
||||
/// <summary>
|
||||
/// Serializes to bytes.
|
||||
/// </summary>
|
||||
/// <param name="obj">The obj.</param>
|
||||
/// <returns>System.Byte[][].</returns>
|
||||
byte[] SerializeToBytes(object obj);
|
||||
}
|
||||
}
|
|
@ -140,7 +140,6 @@
|
|||
<Compile Include="Music\FanArtAlbumProvider.cs" />
|
||||
<Compile Include="Music\FanArtArtistProvider.cs" />
|
||||
<Compile Include="Music\MusicBrainzAlbumProvider.cs" />
|
||||
<Compile Include="Music\SoundtrackPostScanTask.cs" />
|
||||
<Compile Include="People\PersonMetadataService.cs" />
|
||||
<Compile Include="People\MovieDbPersonProvider.cs" />
|
||||
<Compile Include="Photos\ExifReader.cs" />
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
using MediaBrowser.Controller.Library;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Providers.Music
|
||||
{
|
||||
public class SoundtrackPostScanTask : ILibraryPostScanTask
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
|
||||
public SoundtrackPostScanTask(ILibraryManager libraryManager)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
}
|
||||
|
||||
private readonly Task _cachedTask = Task.FromResult(true);
|
||||
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
|
||||
{
|
||||
RunInternal(progress, cancellationToken);
|
||||
|
||||
return _cachedTask;
|
||||
}
|
||||
|
||||
private void RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
|
||||
{
|
||||
// Reimplement this when more kinds of associations are supported.
|
||||
|
||||
progress.Report(100);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -239,7 +239,7 @@ namespace MediaBrowser.Server.Implementations.Channels
|
|||
throw new ApplicationException("Unexpected response type encountered: " + response.ContentType);
|
||||
}
|
||||
|
||||
File.Move(response.TempFilePath, destination);
|
||||
File.Copy(response.TempFilePath, destination, true);
|
||||
|
||||
await RefreshMediaSourceItem(destination, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace MediaBrowser.Server.Implementations.Collections
|
|||
|
||||
public Folder GetCollectionsFolder(string userId)
|
||||
{
|
||||
return _libraryManager.RootFolder.Children.Concat(_libraryManager.RootFolder).OfType<ManualCollectionsFolder>()
|
||||
return _libraryManager.RootFolder.Children.OfType<ManualCollectionsFolder>()
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
|
@ -162,13 +162,7 @@ namespace MediaBrowser.Server.Implementations.Collections
|
|||
throw new ArgumentException("Item already exists in collection");
|
||||
}
|
||||
|
||||
list.Add(new LinkedChild
|
||||
{
|
||||
ItemName = item.Name,
|
||||
ItemYear = item.ProductionYear,
|
||||
ItemType = item.GetType().Name,
|
||||
Type = LinkedChildType.Manual
|
||||
});
|
||||
list.Add(LinkedChild.Create(item));
|
||||
|
||||
var supportsGrouping = item as ISupportsBoxSetGrouping;
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ namespace MediaBrowser.Server.Implementations.Collections
|
|||
public ManualCollectionsFolder()
|
||||
{
|
||||
Name = "Collections";
|
||||
DisplayMediaType = "CollectionFolder";
|
||||
}
|
||||
|
||||
public override bool IsVisible(User user)
|
||||
|
|
|
@ -11,6 +11,7 @@ using MediaBrowser.Controller.Entities.TV;
|
|||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.LiveTv;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Controller.Sync;
|
||||
using MediaBrowser.Model.Drawing;
|
||||
|
@ -179,6 +180,11 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|||
}
|
||||
}
|
||||
|
||||
if (item is Playlist)
|
||||
{
|
||||
AttachLinkedChildImages(dto, (Folder)item, user);
|
||||
}
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
|
@ -819,7 +825,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|||
dto.DisplayOrder = hasDisplayOrder.DisplayOrder;
|
||||
}
|
||||
|
||||
var collectionFolder = item as CollectionFolder;
|
||||
var collectionFolder = item as ICollectionFolder;
|
||||
if (collectionFolder != null)
|
||||
{
|
||||
dto.CollectionType = collectionFolder.CollectionType;
|
||||
|
@ -1211,6 +1217,45 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|||
}
|
||||
}
|
||||
|
||||
private void AttachLinkedChildImages(BaseItemDto dto, Folder folder, User user)
|
||||
{
|
||||
List<BaseItem> linkedChildren = null;
|
||||
|
||||
if (dto.BackdropImageTags.Count == 0)
|
||||
{
|
||||
if (linkedChildren == null)
|
||||
{
|
||||
linkedChildren = user == null
|
||||
? folder.GetRecursiveChildren().ToList()
|
||||
: folder.GetRecursiveChildren(user, true).ToList();
|
||||
}
|
||||
var parentWithBackdrop = linkedChildren.FirstOrDefault(i => i.GetImages(ImageType.Backdrop).Any());
|
||||
|
||||
if (parentWithBackdrop != null)
|
||||
{
|
||||
dto.ParentBackdropItemId = GetDtoId(parentWithBackdrop);
|
||||
dto.ParentBackdropImageTags = GetBackdropImageTags(parentWithBackdrop);
|
||||
}
|
||||
}
|
||||
|
||||
if (!dto.ImageTags.ContainsKey(ImageType.Primary))
|
||||
{
|
||||
if (linkedChildren == null)
|
||||
{
|
||||
linkedChildren = user == null
|
||||
? folder.GetRecursiveChildren().ToList()
|
||||
: folder.GetRecursiveChildren(user, true).ToList();
|
||||
}
|
||||
var parentWithImage = linkedChildren.FirstOrDefault(i => i.GetImages(ImageType.Primary).Any());
|
||||
|
||||
if (parentWithImage != null)
|
||||
{
|
||||
dto.ParentPrimaryImageItemId = GetDtoId(parentWithImage);
|
||||
dto.ParentPrimaryImageTag = GetImageCacheTag(parentWithImage, ImageType.Primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string GetMappedPath(IHasMetadata item)
|
||||
{
|
||||
var path = item.Path;
|
||||
|
|
|
@ -75,7 +75,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
|
|||
|
||||
public bool IsEnabled
|
||||
{
|
||||
get { return !GetTvOptions().IsEnabled; }
|
||||
get { return GetTvOptions().IsEnabled; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -152,7 +152,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
|
||||
|
||||
_listener = NativeWebSocket.IsSupported
|
||||
? _listener = new HttpListenerServer(_logger)
|
||||
? _listener = new WebSocketSharpListener(_logger)
|
||||
: _listener = new WebSocketSharpListener(_logger);
|
||||
|
||||
_listener.WebSocketHandler = WebSocketHandler;
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace MediaBrowser.Server.Implementations.Library.Resolvers
|
||||
{
|
||||
public class PlaylistResolver : FolderResolver<Playlist>
|
||||
{
|
||||
/// <summary>
|
||||
/// Resolves the specified args.
|
||||
/// </summary>
|
||||
/// <param name="args">The args.</param>
|
||||
/// <returns>BoxSet.</returns>
|
||||
protected override Playlist Resolve(ItemResolveArgs args)
|
||||
{
|
||||
// It's a boxset if all of the following conditions are met:
|
||||
// Is a Directory
|
||||
// Contains [playlist] in the path
|
||||
if (args.IsDirectory)
|
||||
{
|
||||
var filename = Path.GetFileName(args.Path);
|
||||
|
||||
if (string.IsNullOrEmpty(filename))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (filename.IndexOf("[playlist]", StringComparison.OrdinalIgnoreCase) != -1)
|
||||
{
|
||||
return new Playlist { Path = args.Path };
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
using System.IO;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Channels;
|
||||
|
@ -10,16 +9,17 @@ using MediaBrowser.Controller.Entities.TV;
|
|||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.LiveTv;
|
||||
using MediaBrowser.Controller.Localization;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using MediaBrowser.Model.Channels;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Library;
|
||||
using MediaBrowser.Model.Querying;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Server.Implementations.Configuration;
|
||||
|
||||
namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
|
@ -33,8 +33,9 @@ namespace MediaBrowser.Server.Implementations.Library
|
|||
private readonly IChannelManager _channelManager;
|
||||
private readonly ILiveTvManager _liveTvManager;
|
||||
private readonly IServerApplicationPaths _appPaths;
|
||||
private readonly IPlaylistManager _playlists;
|
||||
|
||||
public UserViewManager(ILibraryManager libraryManager, ILocalizationManager localizationManager, IFileSystem fileSystem, IUserManager userManager, IChannelManager channelManager, ILiveTvManager liveTvManager, IServerApplicationPaths appPaths)
|
||||
public UserViewManager(ILibraryManager libraryManager, ILocalizationManager localizationManager, IFileSystem fileSystem, IUserManager userManager, IChannelManager channelManager, ILiveTvManager liveTvManager, IServerApplicationPaths appPaths, IPlaylistManager playlists)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_localizationManager = localizationManager;
|
||||
|
@ -43,6 +44,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
|||
_channelManager = channelManager;
|
||||
_liveTvManager = liveTvManager;
|
||||
_appPaths = appPaths;
|
||||
_playlists = playlists;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<Folder>> GetUserViews(UserViewQuery query, CancellationToken cancellationToken)
|
||||
|
@ -94,6 +96,11 @@ namespace MediaBrowser.Server.Implementations.Library
|
|||
list.Add(await GetUserView(CollectionType.BoxSets, user, CollectionType.BoxSets, cancellationToken).ConfigureAwait(false));
|
||||
}
|
||||
|
||||
if (recursiveChildren.OfType<Playlist>().Any())
|
||||
{
|
||||
list.Add(_playlists.GetPlaylistsFolder(user.Id.ToString("N")));
|
||||
}
|
||||
|
||||
if (query.IncludeExternalContent)
|
||||
{
|
||||
var channelResult = await _channelManager.GetChannels(new ChannelQuery
|
||||
|
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "St\u00e1hnout",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Vybrat",
|
||||
"ButtonNew": "Nov\u00e9",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Jm\u00e9no:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "V\u00e6lg",
|
||||
"ButtonNew": "Ny",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Navn:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Ausw\u00e4hlen",
|
||||
"ButtonNew": "Neu",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Acceso remoto: {0}",
|
||||
"LabelRunningOnPort": "Ejecut\u00e1ndose en el puerto {0}.",
|
||||
"LabelRunningOnPorts": "Ejecut\u00e1ndose en los puertos {0} y {1}.",
|
||||
"HeaderLatestFromChannel": "Lo \u00faltimo de {0}",
|
||||
"ButtonDownload": "Descargar",
|
||||
"LabelUnknownLanaguage": "Idioma desconocido",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Seleccionar",
|
||||
"ButtonNew": "Nuevo",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Nombre:",
|
||||
"ButtonSubmit": "Enviar",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Acceso remoto: {0}",
|
||||
"LabelRunningOnPort": "Ejecutando en el puerto: {0}.",
|
||||
"LabelRunningOnPorts": "Ejecutando en los puertos {0} y {1}.",
|
||||
"HeaderLatestFromChannel": "M\u00e1s Recientes de {0}",
|
||||
"ButtonDownload": "Descargar",
|
||||
"LabelUnknownLanaguage": "Idioma desconocido",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "EN VIVO",
|
||||
"LabelNewProgram": "NUEVO",
|
||||
"LabelPremiereProgram": "ESTRENO",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Cambiar tipo de carpeta",
|
||||
"HeaderChangeFolderTypeHelp": "Para cambiar el tipo de carpeta, por favor elimine y reconstruya la colecci\u00f3n con el nuevo tipo.",
|
||||
"HeaderAlert": "Alerta",
|
||||
|
@ -319,5 +319,14 @@
|
|||
"ButtonSelect": "Seleccionar",
|
||||
"ButtonNew": "Nuevo",
|
||||
"MessageInternetExplorerWebm": "Para mejores resultados con Internet Explorer por favor instale el complemento WebM para IE.",
|
||||
"HeaderVideoError": "Error de Video"
|
||||
"HeaderVideoError": "Error de Video",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Nombre:",
|
||||
"ButtonSubmit": "Enviar",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Vid\u00e9o: {0}",
|
||||
"LabelRemoteAccessUrl": "Acc\u00e8s distant: {0}",
|
||||
"LabelRunningOnPort": "En ex\u00e9cution sur le port: {0}.",
|
||||
"LabelRunningOnPorts": "En ex\u00e9cution sur le port: {0} et {1}.",
|
||||
"HeaderLatestFromChannel": "Les plus r\u00e9cents de {0}",
|
||||
"ButtonDownload": "T\u00e9l\u00e9chargement",
|
||||
"LabelUnknownLanaguage": "Langue inconnue",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "DIRECT",
|
||||
"LabelNewProgram": "NOUVEAUTE",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Modifier le type de dossier",
|
||||
"HeaderChangeFolderTypeHelp": "Pour modifier le type de dossier, merci de supprimer et reconstruire la collection avec le nouveau type.",
|
||||
"HeaderAlert": "Alerte",
|
||||
|
@ -319,5 +319,14 @@
|
|||
"ButtonSelect": "S\u00e9lectionner",
|
||||
"ButtonNew": "Nouveau",
|
||||
"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",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Nom:",
|
||||
"ButtonSubmit": "Soumettre",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "\u05d1\u05d7\u05e8",
|
||||
"ButtonNew": "\u05d7\u05d3\u05e9",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "\u05e9\u05dd:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Accesso remoto: {0}",
|
||||
"LabelRunningOnPort": "Avviato su porta {0}",
|
||||
"LabelRunningOnPorts": "Avviato su porte {0} e {1}.",
|
||||
"HeaderLatestFromChannel": "Ultime da {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "lingua sconosciuta",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "Nuovo",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Cambia il tipo di cartella",
|
||||
"HeaderChangeFolderTypeHelp": "Per cambiare il tipo di cartella, rimuovere e ricostruire la collezione con il nuovo tipo.",
|
||||
"HeaderAlert": "Avviso",
|
||||
|
@ -319,5 +319,14 @@
|
|||
"ButtonSelect": "Seleziona",
|
||||
"ButtonNew": "Nuovo",
|
||||
"MessageInternetExplorerWebm": "Se utilizzi internet explorer installa WebM plugin",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Nome:",
|
||||
"ButtonSubmit": "Invia",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -284,6 +284,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -323,6 +324,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
||||
|
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "\u0411\u0435\u0439\u043d\u0435: {0}",
|
||||
"LabelRemoteAccessUrl": "\u049a\u0430\u0448\u044b\u049b\u0442\u0430\u043d \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443: {0}",
|
||||
"LabelRunningOnPort": "{0} \u043f\u043e\u0440\u0442\u044b\u043d\u0434\u0430 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456.",
|
||||
"LabelRunningOnPorts": "{0} \u0436\u04d9\u043d\u0435 {1} \u043f\u043e\u0440\u0442\u0442\u0430\u0440\u044b\u043d\u0434\u0430 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456.",
|
||||
"HeaderLatestFromChannel": "\u0415\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 {0}",
|
||||
"ButtonDownload": "\u0416\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443",
|
||||
"LabelUnknownLanaguage": "\u0411\u0435\u043b\u0433\u0456\u0441\u0456\u0437 \u0442\u0456\u043b",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "\u0422\u0406\u041a\u0415\u041b\u0415\u0419 \u042d\u0424\u0418\u0420",
|
||||
"LabelNewProgram": "\u0416\u0410\u04a2\u0410",
|
||||
"LabelPremiereProgram": "\u0422\u04b0\u0421\u0410\u0423\u041a\u0415\u0421\u0415\u0420\u0406",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "\u049a\u0430\u043b\u0442\u0430 \u0442\u04af\u0440\u0456\u043d \u04e9\u0437\u0433\u0435\u0440\u0442\u0443",
|
||||
"HeaderChangeFolderTypeHelp": "\u049a\u0430\u043b\u0442\u0430 \u0442\u04af\u0440\u0456\u043d \u04e9\u0437\u0433\u0435\u0440\u0442\u0443 \u04af\u0448\u0456\u043d, \u0430\u043b\u0430\u0441\u0442\u0430\u04a3\u044b\u0437 \u0436\u04d9\u043d\u0435 \u0436\u0438\u043d\u0430\u049b\u0442\u044b \u0436\u0430\u04a3\u0430 \u0442\u04af\u0440\u0456\u043c\u0435\u043d \u049b\u0430\u0439\u0442\u0430 \u049b\u04b1\u0440\u044b\u04a3\u044b\u0437.",
|
||||
"HeaderAlert": "\u0415\u0441\u043a\u0435\u0440\u0442\u0443",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "\u041e\u0439\u043d\u0430\u0442\u049b\u044b\u0448\u0442\u044b \u0442\u0430\u04a3\u0434\u0430\u0443:",
|
||||
"ButtonSelect": "\u0411\u04e9\u043b\u0435\u043a\u0442\u0435\u0443",
|
||||
"ButtonNew": "\u0416\u0430\u0441\u0430\u0443",
|
||||
"MessageInternetExplorerWebm": "Internet Explorer \u0430\u0440\u049b\u044b\u043b\u044b \u0435\u04a3 \u0436\u0430\u049b\u0441\u044b \u043d\u04d9\u0442\u0438\u0436\u0435\u043b\u0435\u0440 \u04af\u0448\u0456\u043d IE \u0448\u043e\u043b\u0493\u044b\u0448\u044b\u043d\u0430 \u0430\u0440\u043d\u0430\u043b\u0493\u0430\u043d WebM \u043f\u043b\u0430\u0433\u0438\u043d\u0456\u043d \u043e\u0440\u043d\u0430\u0442\u044b\u04a3\u044b\u0437.",
|
||||
"HeaderVideoError": "\u0411\u0435\u0439\u043d\u0435 \u049b\u0430\u0442\u0435\u0441\u0456"
|
||||
"MessageInternetExplorerWebm": "Internet Explorer \u0430\u0440\u049b\u044b\u043b\u044b \u0435\u04a3 \u0436\u0430\u049b\u0441\u044b \u043d\u04d9\u0442\u0438\u0436\u0435\u043b\u0435\u0440\u0433\u0435 \u0438\u0435 \u0431\u043e\u043b\u0443 \u04af\u0448\u0456\u043d WebM \u043e\u0439\u043d\u0430\u0442\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0456\u043d \u043e\u0440\u043d\u0430\u0442\u044b\u04a3\u044b\u0437.",
|
||||
"HeaderVideoError": "\u0411\u0435\u0439\u043d\u0435 \u049b\u0430\u0442\u0435\u0441\u0456",
|
||||
"ButtonAddToPlaylist": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d\u0435 \u04af\u0441\u0442\u0435\u0443",
|
||||
"HeaderAddToPlaylist": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d\u0435 \u04af\u0441\u0442\u0435\u0443",
|
||||
"LabelName": "\u0410\u0442\u044b:",
|
||||
"ButtonSubmit": "\u0416\u0456\u0431\u0435\u0440\u0443",
|
||||
"LabelSelectPlaylist": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456:",
|
||||
"OptionNewPlaylist": "\u0416\u0430\u04a3\u0430 \u043e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456...",
|
||||
"MessageAddedToPlaylistSuccess": "\u0416\u0430\u0440\u0430\u0439\u0434\u044b",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Navn",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Toegang op afstand: {0}",
|
||||
"LabelRunningOnPort": "Draait op poort {0}.",
|
||||
"LabelRunningOnPorts": "Draait op poort {0} en {1}.",
|
||||
"HeaderLatestFromChannel": "Laatste van {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Onbekende taal",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NIEUW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Verander Maptype",
|
||||
"HeaderChangeFolderTypeHelp": "Als u het type map wilt wijzigen, verwijder het dan en maak dan een nieuwe collectie met het nieuwe type.",
|
||||
"HeaderAlert": "Waarschuwing",
|
||||
|
@ -319,5 +319,14 @@
|
|||
"ButtonSelect": "Selecteer",
|
||||
"ButtonNew": "Nieuw",
|
||||
"MessageInternetExplorerWebm": "Voor het beste resultaat met Internet Explorer installeert u de WebM plugin voor IE.",
|
||||
"HeaderVideoError": "Video Fout"
|
||||
"HeaderVideoError": "Video Fout",
|
||||
"ButtonAddToPlaylist": "Toevoegen aan afspeellijst",
|
||||
"HeaderAddToPlaylist": "Toevoegen aan afspeellijst",
|
||||
"LabelName": "Naam:",
|
||||
"ButtonSubmit": "Uitvoeren",
|
||||
"LabelSelectPlaylist": "Afspeellijst:",
|
||||
"OptionNewPlaylist": "Nieuwe afspeellijst...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Select",
|
||||
"ButtonNew": "New",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Name:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "V\u00eddeo: {0}",
|
||||
"LabelRemoteAccessUrl": "Acesso Remoto: {0}",
|
||||
"LabelRunningOnPort": "Executando na porta {0}.",
|
||||
"LabelRunningOnPorts": "Dispon\u00edvel nas portas {0} e {1}.",
|
||||
"HeaderLatestFromChannel": "Mais recentes de {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Idioma desconhecido",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "AO VIVO",
|
||||
"LabelNewProgram": "NOVO",
|
||||
"LabelPremiereProgram": "ESTR\u00c9IA",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Alterar Tipo de Pasta",
|
||||
"HeaderChangeFolderTypeHelp": "Para alterar o tipo de pasta, por favor remova e reconstrua a cole\u00e7\u00e3o com o novo tipo.",
|
||||
"HeaderAlert": "Alerta",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Selecione onde reproduzir:",
|
||||
"ButtonSelect": "Selecionar",
|
||||
"ButtonNew": "Nova",
|
||||
"MessageInternetExplorerWebm": "Para melhores resultados com o Internet Explorer, por favor instale o plugin WebM para IE.",
|
||||
"HeaderVideoError": "Erro de V\u00eddeo"
|
||||
"MessageInternetExplorerWebm": "Para melhores resultados com o Internet Explorer, por favor instale o plugin de reprodu\u00e7\u00e3o WebM.",
|
||||
"HeaderVideoError": "Erro de V\u00eddeo",
|
||||
"ButtonAddToPlaylist": "Adicionar \u00e0 lista de reprodu\u00e7\u00e3o",
|
||||
"HeaderAddToPlaylist": "Adicionar \u00e0 Lista de Reprodu\u00e7\u00e3o",
|
||||
"LabelName": "Nome:",
|
||||
"ButtonSubmit": "Enviar",
|
||||
"LabelSelectPlaylist": "Lista de Reprodu\u00e7\u00e3o:",
|
||||
"OptionNewPlaylist": "Nova lista de reprodu\u00e7\u00e3o...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Selecionar",
|
||||
"ButtonNew": "Novo",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Nome:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "\u0412\u0438\u0434\u0435\u043e: {0}",
|
||||
"LabelRemoteAccessUrl": "\u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430: {0}",
|
||||
"LabelRunningOnPort": "\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 {0}.",
|
||||
"LabelRunningOnPorts": "\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u0445 {0} \u0438 {1}.",
|
||||
"HeaderLatestFromChannel": "\u041d\u043e\u0432\u0438\u043d\u043a\u0438 \u0438\u0437 {0}",
|
||||
"ButtonDownload": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c",
|
||||
"LabelUnknownLanaguage": "\u041d\u0435\u043e\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a",
|
||||
|
@ -193,7 +192,7 @@
|
|||
"LabelCurrentPath": "\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0443\u0442\u044c:",
|
||||
"HeaderSelectMediaPath": "\u0412\u044b\u0431\u043e\u0440 \u043f\u0443\u0442\u0438 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f",
|
||||
"ButtonNetwork": "\u0421\u0435\u0442\u044c",
|
||||
"MessageDirectoryPickerInstruction": "\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0443\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0421\u0435\u0442\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0431\u043e\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {0} \u0438\u043b\u0438 {1}.",
|
||||
"MessageDirectoryPickerInstruction": "\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0443\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0421\u0435\u0442\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0431\u043e\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: {0} \u0438\u043b\u0438 {1}.",
|
||||
"HeaderMenu": "\u041c\u0435\u043d\u044e",
|
||||
"ButtonOpen": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c",
|
||||
"ButtonOpenInNewTab": "\u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435",
|
||||
|
@ -246,7 +245,7 @@
|
|||
"ButtonPreviousPage": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430",
|
||||
"ButtonMoveLeft": "\u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0432\u043b\u0435\u0432\u043e",
|
||||
"ButtonMoveRight": "\u0414\u0432\u0438\u0433\u0430\u0442\u044c \u0432\u043f\u0440\u0430\u0432\u043e",
|
||||
"ButtonBrowseOnlineImages": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0440\u0438\u0441\u0443\u043d\u043a\u0438",
|
||||
"ButtonBrowseOnlineImages": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0432 \u0441\u0435\u0442\u0438",
|
||||
"HeaderDeleteItem": "\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430",
|
||||
"ConfirmDeleteItem": "\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438?",
|
||||
"MessagePleaseEnterNameOrId": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 ID.",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "\u041f\u0420\u042f\u041c\u041e\u0419 \u042d\u0424\u0418\u0420",
|
||||
"LabelNewProgram": "\u041d\u041e\u0412\u041e\u0415",
|
||||
"LabelPremiereProgram": "\u041f\u0420\u0415\u041c\u042c\u0415\u0420\u0410",
|
||||
"LabelHDProgram": "HD",
|
||||
"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.",
|
||||
"HeaderAlert": "\u041e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "\u0412\u044b\u0431\u043e\u0440 \u043f\u043b\u0435\u0439\u0435\u0440\u0430:",
|
||||
"ButtonSelect": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c",
|
||||
"ButtonNew": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c",
|
||||
"MessageInternetExplorerWebm": "\u0414\u043b\u044f \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c Internet Explorer, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d WebM \u0434\u043b\u044f IE.",
|
||||
"HeaderVideoError": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0438\u0434\u0435\u043e"
|
||||
"MessageInternetExplorerWebm": "\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 Internet Explorer, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f WebM.",
|
||||
"HeaderVideoError": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0438\u0434\u0435\u043e",
|
||||
"ButtonAddToPlaylist": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f",
|
||||
"HeaderAddToPlaylist": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f",
|
||||
"LabelName": "\u0418\u043c\u044f:",
|
||||
"ButtonSubmit": "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c",
|
||||
"LabelSelectPlaylist": "\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f:",
|
||||
"OptionNewPlaylist": "\u041d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f...",
|
||||
"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",
|
||||
"ValueOriginalAirDate": "\u0414\u0430\u0442\u0430 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u044d\u0444\u0438\u0440\u0430: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Fj\u00e4rranslutning: {0}",
|
||||
"LabelRunningOnPort": "Anv\u00e4nder port {0}.",
|
||||
"LabelRunningOnPorts": "Anv\u00e4nder port {0} och {1}.",
|
||||
"HeaderLatestFromChannel": "Senaste fr\u00e5n {0}",
|
||||
"ButtonDownload": "Ladda ned",
|
||||
"LabelUnknownLanaguage": "Ok\u00e4nt spr\u00e5k",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NY",
|
||||
"LabelPremiereProgram": "PREMI\u00c4R",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "\u00c4ndra mapptyp",
|
||||
"HeaderChangeFolderTypeHelp": "F\u00f6r att \u00e4ndra mapptyp, ta bort den existerande och skapa en ny av den \u00f6nskade typen.",
|
||||
"HeaderAlert": "Varning",
|
||||
|
@ -319,5 +319,14 @@
|
|||
"ButtonSelect": "V\u00e4lj",
|
||||
"ButtonNew": "Nytillkommet",
|
||||
"MessageInternetExplorerWebm": "F\u00f6r b\u00e4sta resultat med Internet Explorer, installera WebM-till\u00e4gget f\u00f6r IE.",
|
||||
"HeaderVideoError": "Videofel"
|
||||
"HeaderVideoError": "Videofel",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "Namn:",
|
||||
"ButtonSubmit": "Bekr\u00e4fta",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -253,7 +252,7 @@
|
|||
"MessageValueNotCorrect": "The value entered is not correct. Please try again.",
|
||||
"MessageItemSaved": "Item saved.",
|
||||
"OptionEnded": "Bitmi\u015f",
|
||||
"OptionContinuing": "Continuing",
|
||||
"OptionContinuing": "Topluluk",
|
||||
"OptionOff": "Off",
|
||||
"OptionOn": "On",
|
||||
"HeaderFields": "Fields",
|
||||
|
@ -268,7 +267,7 @@
|
|||
"OptionBackdrops": "Backdrops",
|
||||
"OptionImages": "Images",
|
||||
"OptionKeywords": "Keywords",
|
||||
"OptionTags": "Tags",
|
||||
"OptionTags": "Etiketler",
|
||||
"OptionStudios": "Studios",
|
||||
"OptionName": "Name",
|
||||
"OptionOverview": "Overview",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "Se\u00e7im",
|
||||
"ButtonNew": "Yeni",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "\u0130sim",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "L\u1ef1a ch\u1ecdn",
|
||||
"ButtonNew": "M\u1edbi",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "T\u00ean:",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -178,7 +178,6 @@
|
|||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Remote access: {0}",
|
||||
"LabelRunningOnPort": "Running on port {0}.",
|
||||
"LabelRunningOnPorts": "Running on ports {0} and {1}.",
|
||||
"HeaderLatestFromChannel": "Latest from {0}",
|
||||
"ButtonDownload": "Download",
|
||||
"LabelUnknownLanaguage": "Unknown language",
|
||||
|
@ -282,6 +281,7 @@
|
|||
"LabelLiveProgram": "LIVE",
|
||||
"LabelNewProgram": "NEW",
|
||||
"LabelPremiereProgram": "PREMIERE",
|
||||
"LabelHDProgram": "HD",
|
||||
"HeaderChangeFolderType": "Change Folder Type",
|
||||
"HeaderChangeFolderTypeHelp": "To change the folder type, please remove and rebuild the collection with the new type.",
|
||||
"HeaderAlert": "Alert",
|
||||
|
@ -318,6 +318,15 @@
|
|||
"HeaderSelectPlayer": "Select Player:",
|
||||
"ButtonSelect": "\u9078\u64c7",
|
||||
"ButtonNew": "\u5275\u5efa",
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM plugin for IE.",
|
||||
"HeaderVideoError": "Video Error"
|
||||
"MessageInternetExplorerWebm": "For best results with Internet Explorer please install the WebM playback plugin.",
|
||||
"HeaderVideoError": "Video Error",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"HeaderAddToPlaylist": "Add to Playlist",
|
||||
"LabelName": "\u540d\u5b57\uff1a",
|
||||
"ButtonSubmit": "Submit",
|
||||
"LabelSelectPlaylist": "Playlist:",
|
||||
"OptionNewPlaylist": "New playlist...",
|
||||
"MessageAddedToPlaylistSuccess": "Ok",
|
||||
"ButtonViewSeriesRecording": "View series recording",
|
||||
"ValueOriginalAirDate": "Original air date: {0}"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -88,7 +88,7 @@
|
|||
"LabelSelectUsers": "Select users:",
|
||||
"ButtonUpload": "Upload",
|
||||
"HeaderUploadNewImage": "Upload New Image",
|
||||
"LabelDropImageHere": "Drop Image Here",
|
||||
"LabelDropImageHere": "Drop image here",
|
||||
"ImageUploadAspectRatioHelp": "1:1 Aspect Ratio Recommended. JPG\/PNG only.",
|
||||
"MessageNothingHere": "Nothing here.",
|
||||
"MessagePleaseEnsureInternetMetadata": "Please ensure downloading of internet metadata is enabled.",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Zam\u00edtnout",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Zav\u0159\u00edt",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Als N\u00e4chstes",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Willkommen zum Media Browser Web Client",
|
||||
"ButtonDismiss": "Verwerfen",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -88,7 +88,7 @@
|
|||
"LabelSelectUsers": "Select users:",
|
||||
"ButtonUpload": "Upload",
|
||||
"HeaderUploadNewImage": "Upload New Image",
|
||||
"LabelDropImageHere": "Drop Image Here",
|
||||
"LabelDropImageHere": "Drop image here",
|
||||
"ImageUploadAspectRatioHelp": "1:1 Aspect Ratio Recommended. JPG\/PNG only.",
|
||||
"MessageNothingHere": "Nothing here.",
|
||||
"MessagePleaseEnsureInternetMetadata": "Please ensure downloading of internet metadata is enabled.",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -88,7 +88,7 @@
|
|||
"LabelSelectUsers": "Select users:",
|
||||
"ButtonUpload": "Upload",
|
||||
"HeaderUploadNewImage": "Upload New Image",
|
||||
"LabelDropImageHere": "Drop Image Here",
|
||||
"LabelDropImageHere": "Drop image here",
|
||||
"ImageUploadAspectRatioHelp": "1:1 Aspect Ratio Recommended. JPG\/PNG only.",
|
||||
"MessageNothingHere": "Nothing here.",
|
||||
"MessagePleaseEnsureInternetMetadata": "Please ensure downloading of internet metadata is enabled.",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Siguiendo",
|
||||
"MessageNoMovieSuggestionsAvailable": "No hay sugerencias de pel\u00edculas disponibles. Comience ver y calificar sus pel\u00edculas y vuelva para ver las recomendaciones.",
|
||||
"MessageNoCollectionsAvailable": "Colecciones le permitir\u00e1 disfrutar de grupos personalizados de Pel\u00edculas, Series, Discos, Libros y Juegos. Haga click en el bot\u00f3n nuevo para empezar a crear Colecciones.",
|
||||
"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.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Vienvenido al Cliente Web de Media Browser",
|
||||
"ButtonDismiss": "Descartar",
|
||||
"MessageLearnHowToCustomize": "Aprenda c\u00f3mo personalizar esta p\u00e1gina a sus propios gustos personales. Haga clic en su icono de usuario en la esquina superior derecha de la pantalla para ver y actualizar sus preferencias.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Cerrar",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "A Continuaci\u00f3n",
|
||||
"MessageNoMovieSuggestionsAvailable": "No hay sugerencias de pel\u00edculas disponibles en este momento. Comienza a ver y a calificar tus pel\u00edculas, y regresa para ver tus recomendaciones.",
|
||||
"MessageNoCollectionsAvailable": "Las Colecciones te permiten disfrutar de grupos personalizados de Pel\u00edculas, Series, \u00c1lbumes, Libros y Juegos. Da clic en el bot\u00f3n \"Nuevo\" para empezar a crear colecciones.",
|
||||
"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.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Bienvenido al Cliente Web de Media Browser",
|
||||
"ButtonDismiss": "Descartar",
|
||||
"MessageLearnHowToCustomize": "Aprenda c\u00f3mo personalizar esta p\u00e1gina a sus gustos personales. Haga clic en su icono de usuario en la esquina superior derecha de la pantalla para ver y actualizar sus preferencias.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Transmisi\u00f3n en vivo por Http",
|
||||
"LabelContext": "Contexto:",
|
||||
"OptionContextStreaming": "Transmisi\u00f3n",
|
||||
"OptionContextStatic": "Sinc."
|
||||
"OptionContextStatic": "Sinc.",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Cerrar",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Prochains \u00e0 voir",
|
||||
"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.",
|
||||
"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.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Bienvenue au client Web Media Browser",
|
||||
"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. ",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Fermer",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -339,7 +339,7 @@
|
|||
"LiveTvPluginRequiredHelp": "Installa un servizio disponibile, come Next Pvr or ServerWMC.",
|
||||
"LabelCustomizeOptionsPerMediaType": "Personalizza per il tipo di supporto:",
|
||||
"OptionDownloadThumbImage": "Foto",
|
||||
"OptionDownloadMenuImage": "Menu",
|
||||
"OptionDownloadMenuImage": "Men\u00f9",
|
||||
"OptionDownloadLogoImage": "Logo",
|
||||
"OptionDownloadBoxImage": "Box",
|
||||
"OptionDownloadDiscImage": "Disco",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"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.",
|
||||
"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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Benvenuti nel Media Browser Web client",
|
||||
"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.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Contenuto:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sinc"
|
||||
"OptionContextStatic": "Sinc",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Chiudi",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -589,7 +589,7 @@
|
|||
"NotificationOptionTaskFailed": "\u0416\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u0430\u043d \u0442\u0430\u043f\u0441\u044b\u0440\u043c\u0430 \u0441\u04d9\u0442\u0441\u0456\u0437\u0434\u0456\u0433\u0456",
|
||||
"NotificationOptionInstallationFailed": "\u041e\u0440\u043d\u0430\u0442\u0443 \u0441\u04d9\u0442\u0441\u0456\u0437\u0434\u0456\u0433\u0456",
|
||||
"NotificationOptionNewLibraryContent": "\u0416\u0430\u04a3\u0430 \u043c\u0430\u0437\u043c\u04b1\u043d \u04af\u0441\u0442\u0435\u043b\u0433\u0435\u043d",
|
||||
"NotificationOptionNewLibraryContentMultiple": "\u0416\u0430\u04a3\u0430 \u043c\u0430\u0437\u043c\u04b1\u043d \u049b\u043e\u0441\u044b\u043b\u0434\u044b (\u0431\u0456\u0440\u043d\u0435\u0448\u0435)",
|
||||
"NotificationOptionNewLibraryContentMultiple": "\u0416\u0430\u04a3\u0430 \u043c\u0430\u0437\u043c\u04b1\u043d \u049b\u043e\u0441\u044b\u043b\u0434\u044b (\u043a\u04e9\u043f\u0442\u0435\u0433\u0435\u043d)",
|
||||
"SendNotificationHelp": "\u0425\u0430\u0431\u0430\u0440\u043b\u0430\u043d\u0434\u044b\u0440\u0443\u043b\u0430\u0440 \u0431\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d\u0434\u0430\u0493\u044b \u04d9\u0434\u0435\u043f\u043a\u0456 \u043a\u0456\u0440\u0456\u0441 \u0436\u04d9\u0448\u0456\u0433\u0456\u043d\u0435 \u0436\u0435\u0442\u043a\u0456\u0437\u0456\u043b\u0435\u0434\u0456. \u049a\u043e\u0441\u044b\u043c\u0448\u0430 \u0445\u0430\u0431\u0430\u0440\u043b\u0430\u043d\u0434\u044b\u0440\u0443 \u049b\u04b1\u0440\u0430\u043b\u0434\u0430\u0440\u044b\u043d \u043e\u0440\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043f\u043b\u0430\u0433\u0438\u043d\u0434\u0435\u0440 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0456\u043d \u0448\u0430\u0440\u043b\u0430\u04a3\u044b\u0437.",
|
||||
"NotificationOptionServerRestartRequired": "\u0421\u0435\u0440\u0432\u0435\u0440\u0434\u0456 \u049b\u0430\u0439\u0442\u0430 \u0456\u0441\u043a\u0435 \u049b\u043e\u0441\u0443 \u049b\u0430\u0436\u0435\u0442",
|
||||
"LabelNotificationEnabled": "\u0411\u04b1\u043b \u0445\u0430\u0431\u0430\u0440\u043b\u0430\u043d\u0434\u044b\u0440\u043c\u0430\u043d\u044b \u049b\u043e\u0441\u0443",
|
||||
|
@ -777,7 +777,7 @@
|
|||
"LabelHomePageSection4": "\u0411\u0430\u0441\u0442\u044b \u0431\u0435\u0442 4-\u0431\u04e9\u043b\u0456\u043c:",
|
||||
"OptionMyViewsButtons": "\u041c\u0435\u043d\u0456\u04a3 \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0456\u043c (\u0442\u04af\u0439\u043c\u0435\u0448\u0456\u043a\u0442\u0435\u0440)",
|
||||
"OptionMyViews": "\u041c\u0435\u043d\u0456\u04a3 \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0456\u043c",
|
||||
"OptionMyViewsSmall": "\u041c\u0435\u043d\u0456\u04a3 \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0456\u043c (\u043a\u0456\u0448\u0456)",
|
||||
"OptionMyViewsSmall": "\u041c\u0435\u043d\u0456\u04a3 \u043a\u04e9\u0440\u0456\u043d\u0456\u0441\u0442\u0435\u0440\u0456\u043c (\u044b\u049b\u0448\u0430\u043c)",
|
||||
"OptionResumablemedia": "\u0416\u0430\u043b\u0493\u0430\u0441\u0442\u044b\u0440\u0443",
|
||||
"OptionLatestMedia": "\u0415\u04a3 \u0441\u043e\u04a3\u0493\u044b \u0442\u0430\u0441\u0443\u0448\u044b\u043b\u0430\u0440",
|
||||
"OptionLatestChannelMedia": "\u0410\u0440\u043d\u0430\u043b\u0430\u0440\u0434\u044b\u04a3 \u0435\u04a3 \u043a\u0435\u0439\u0456\u043d\u0433\u0456 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0456",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "\u0410\u043b\u0434\u0430\u0493\u044b",
|
||||
"MessageNoMovieSuggestionsAvailable": "\u0415\u0448\u049b\u0430\u043d\u0434\u0430\u0439 \u0444\u0438\u043b\u044c\u043c \u04b1\u0441\u044b\u043d\u044b\u0441\u0442\u0430\u0440\u044b \u0430\u0493\u044b\u043c\u0434\u0430 \u049b\u043e\u043b \u0436\u0435\u0442\u0456\u043c\u0434\u0456 \u0435\u043c\u0435\u0441. \u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440\u0434\u0456 \u049b\u0430\u0440\u0430\u0443\u0434\u044b \u0436\u04d9\u043d\u0435 \u0431\u0430\u0493\u0430\u043b\u0430\u0443\u0434\u044b \u0431\u0430\u0441\u0442\u0430\u04a3\u044b\u0437, \u0441\u043e\u043d\u0434\u0430 \u0430\u0440\u043d\u0430\u043b\u0493\u0430\u043d \u04b1\u0441\u044b\u043d\u044b\u0442\u0430\u0440\u044b\u04a3\u044b\u0437\u0434\u044b \u043a\u04e9\u0440\u0443 \u04af\u0448\u0456\u043d \u049b\u0430\u0439\u0442\u0430 \u043a\u0435\u043b\u0456\u04a3\u0456\u0437.",
|
||||
"MessageNoCollectionsAvailable": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440\u0434\u0456, \u0441\u0435\u0440\u0438\u0430\u043b\u0434\u0430\u0440\u0434\u044b, \u0430\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440\u0434\u044b, \u043a\u0456\u0442\u0430\u043f\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 \u043e\u0439\u044b\u043d\u0434\u0430\u0440\u0434\u044b \u0436\u0435\u043a\u0435\u043b\u0435\u043d\u0433\u0435\u043d \u0442\u043e\u043f\u0442\u0430\u0441\u0442\u044b\u0440\u0443 \u04af\u0448\u0456\u043d \u0442\u043e\u043f\u0442\u0430\u043c\u0430\u043b\u0430\u0440 \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u043a \u0431\u0435\u0440\u0435\u0434\u0456. \u0422\u043e\u043f\u0442\u0430\u043c\u0430\u043b\u0430\u0440\u0434\u044b \u0436\u0430\u0441\u0430\u0439 \u0431\u0430\u0441\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \"\u0416\u0430\u0441\u0430\u0443\" \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u0433\u0456\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.",
|
||||
"MessageNoPlaylistsAvailable": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0456 \u0431\u0456\u0440 \u043a\u0435\u0437\u0434\u0435 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043c\u0430\u0437\u043c\u04b1\u043d \u0442\u0456\u0437\u0456\u043c\u0456\u043d \u0436\u0430\u0441\u0430\u0443\u0493\u0430 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456. \u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0433\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440\u0434\u0456 \u04af\u0441\u0442\u0435\u0443 \u04af\u0448\u0456\u043d, \u0442\u0456\u043d\u0442\u0443\u0456\u0440\u0434\u0456\u04a3 \u043e\u04a3 \u0436\u0430\u049b \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u0433\u0456\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0442\u04af\u0440\u0442\u0456\u043f \u0436\u04d9\u043d\u0435 \u04b1\u0441\u0442\u0430\u043f \u0442\u04b1\u0440\u044b\u04a3\u044b\u0437, \u0441\u043e\u043d\u0434\u0430 \u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d\u0435 \u04af\u0441\u0442\u0435\u0443 \u0434\u0435\u0433\u0435\u043d\u0434\u0456 \u0442\u0430\u04a3\u0434\u0430\u04a3\u044b\u0437.",
|
||||
"MessageNoPlaylistItemsAvailable": "\u041e\u0441\u044b \u043e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c \u0430\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0431\u043e\u0441.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Media Browser \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0430\u0493\u0434\u0430\u0440\u043b\u0430\u043c\u0430\u0441\u044b\u043d\u0430 \u0445\u043e\u0448 \u043a\u0435\u043b\u0434\u0456\u04a3\u0456\u0437!",
|
||||
"ButtonDismiss": "\u0416\u0430\u0441\u044b\u0440\u0443",
|
||||
"MessageLearnHowToCustomize": "\u041e\u0441\u044b \u0431\u0435\u0442\u0442\u0456 \u0436\u0435\u043a\u0435 \u043a\u04e9\u04a3\u0456\u043b\u0433\u0435 \u04b1\u043d\u0430\u0442\u0443 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u049b\u0430\u043b\u0430\u0439 \u0442\u0435\u04a3\u0448\u0435\u0443\u0456\u043d \u04af\u0439\u0440\u0435\u043d\u0456\u04a3\u0456\u0437. \u0422\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0456\u04a3\u0456\u0437\u0434\u0456 \u049b\u0430\u0440\u0430\u0443 \u0436\u04d9\u043d\u0435 \u0436\u0430\u04a3\u0430\u0440\u0442\u0443 \u04af\u0448\u0456\u043d \u044d\u043a\u0440\u0430\u043d\u0434\u0430\u0493\u044b \u0436\u043e\u0493\u0430\u0440\u0493\u044b \u043e\u04a3 \u0431\u04b1\u0440\u044b\u0448\u044b\u043d\u0434\u0430\u0493\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u044b\u049b \u0431\u0435\u043b\u0433\u0456\u0448\u0435\u04a3\u0456\u0437\u0434\u0456 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http \u0422\u0456\u043a\u0435\u043b\u0435\u0439 \u0410\u0493\u044b\u043d (HLS)",
|
||||
"LabelContext": "\u041c\u04d9\u0442\u0456\u043d\u043c\u04d9\u043d:",
|
||||
"OptionContextStreaming": "\u0410\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443",
|
||||
"OptionContextStatic": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443"
|
||||
"OptionContextStatic": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0434\u0430\u0443",
|
||||
"ButtonAddToPlaylist": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0456\u043d\u0435 \u04af\u0441\u0442\u0435\u0443",
|
||||
"TabPlaylists": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0456",
|
||||
"ButtonClose": "\u0416\u0430\u0431\u0443",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -88,7 +88,7 @@
|
|||
"LabelSelectUsers": "Select users:",
|
||||
"ButtonUpload": "Upload",
|
||||
"HeaderUploadNewImage": "Upload New Image",
|
||||
"LabelDropImageHere": "Drop Image Here",
|
||||
"LabelDropImageHere": "Drop image here",
|
||||
"ImageUploadAspectRatioHelp": "1:1 Aspect Ratio Recommended. JPG\/PNG only.",
|
||||
"MessageNothingHere": "Nothing here.",
|
||||
"MessagePleaseEnsureInternetMetadata": "Please ensure downloading of internet metadata is enabled.",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -88,7 +88,7 @@
|
|||
"LabelSelectUsers": "Select users:",
|
||||
"ButtonUpload": "Upload",
|
||||
"HeaderUploadNewImage": "Upload New Image",
|
||||
"LabelDropImageHere": "Drop Image Here",
|
||||
"LabelDropImageHere": "Drop image here",
|
||||
"ImageUploadAspectRatioHelp": "1:1 Aspect Ratio Recommended. JPG\/PNG only.",
|
||||
"MessageNothingHere": "Nothing here.",
|
||||
"MessagePleaseEnsureInternetMetadata": "Please ensure downloading of internet metadata is enabled.",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -263,7 +263,7 @@
|
|||
"LabelMetadataPath": "metagegevens pad:",
|
||||
"LabelMetadataPathHelp": "Deze locatie bevat gedownloade afbeeldingen en metagegevens die niet zijn geconfigureerd om te worden opgeslagen in mediamappen .",
|
||||
"LabelTranscodingTempPath": "Tijdelijk Transcodeer pad:",
|
||||
"LabelTranscodingTempPathHelp": "Deze map bevat werkbestanden die worden gebruikt door de transcoder.",
|
||||
"LabelTranscodingTempPathHelp": "Deze map bevat werkbestanden die worden gebruikt door de transcoder. Geef een eigen locatie op of laat leeg om de standaardlocatie te gebruiken.",
|
||||
"TabBasics": "Basis",
|
||||
"TabTV": "TV",
|
||||
"TabGames": "Games",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Eerstvolgende",
|
||||
"MessageNoMovieSuggestionsAvailable": "Er zijn momenteel geen film suggesties beschikbaar. Begin met het bekijken en waardeer uw films, kom daarna terug om uw aanbevelingen te bekijken.",
|
||||
"MessageNoCollectionsAvailable": "Met Verzamelingen kunt u genieten van gepersonaliseerde groeperingen van films, series, Albums, Boeken en games. Klik op de knop Nieuw om te beginnen met het maken van verzamelingen.",
|
||||
"MessageNoPlaylistsAvailable": "Met afspeellijsten kan je een lijst maken waarvan de items achter elkaar afgespeeld worden. Om een item toe te voegen klik je met rechts of tik en hou je het vast om het te selecteren, klik vervolgens op Toevoegen aan afspeellijst.",
|
||||
"MessageNoPlaylistItemsAvailable": "De afspeellijst is momenteel leeg.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welkom op de Media Browser Web Client",
|
||||
"ButtonDismiss": "Afwijzen",
|
||||
"MessageLearnHowToCustomize": "Leer hoe u deze pagina aan kunt passen aan uw persoonlijke smaak. Klik op uw gebruikersnaam pictogram in de rechterbovenhoek van het scherm om uw voorkeuren te bekijken en bij te werken.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Toevoegen aan afspeellijst",
|
||||
"TabPlaylists": "Afspeellijst",
|
||||
"ButtonClose": "Sluiten",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Next Up",
|
||||
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating 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.",
|
||||
"MessageNoPlaylistItemsAvailable": "This playlist is currently empty.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Welcome to the Media Browser Web Client",
|
||||
"ButtonDismiss": "Dismiss",
|
||||
"MessageLearnHowToCustomize": "Learn how to customize this page to your own personal tastes. Click your user icon in the top right corner of the screen to view and update your preferences.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Context:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sync"
|
||||
"OptionContextStatic": "Sync",
|
||||
"ButtonAddToPlaylist": "Add to playlist",
|
||||
"TabPlaylists": "Playlists",
|
||||
"ButtonClose": "Close",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
|
@ -11,7 +11,7 @@
|
|||
"LabelRestartServer": "Reiniciar Servidor",
|
||||
"LabelShowLogWindow": "Exibir Janela de Log",
|
||||
"LabelPrevious": "Anterior",
|
||||
"LabelFinish": "Terminar",
|
||||
"LabelFinish": "Finalizar",
|
||||
"LabelNext": "Pr\u00f3ximo",
|
||||
"LabelYoureDone": "Pronto!",
|
||||
"WelcomeToMediaBrowser": "Bem Vindo ao Media Browser!",
|
||||
|
@ -794,6 +794,8 @@
|
|||
"TabNextUp": "Pr\u00f3ximos",
|
||||
"MessageNoMovieSuggestionsAvailable": "N\u00e3o existem sugest\u00f5es de filmes dispon\u00edveis atualmente. Comece por assistir e classificar seus filmes e, ent\u00e3o, volte para verificar suas recomenda\u00e7\u00f5es.",
|
||||
"MessageNoCollectionsAvailable": "Cole\u00e7\u00f5es permitem que voc\u00ea agrupe os Filmes, S\u00e9ries, Livros e Jogos de forma personalizada. Clique no bot\u00e3o Nova para iniciar a cria\u00e7\u00e3o de Cole\u00e7\u00f5es.",
|
||||
"MessageNoPlaylistsAvailable": "Listas de reprodu\u00e7\u00e3o permitem criar listas com conte\u00fado para reproduzir consecutivamente, de uma s\u00f3 vez. Para adicionar itens \u00e0s listas de reprodu\u00e7\u00e3o, clique com o bot\u00e3o direito ou toque a tela por alguns segundos, depois selecione Adicionar \u00e0 Lista de Reprodu\u00e7\u00e3o.",
|
||||
"MessageNoPlaylistItemsAvailable": "Esta lista de reprodu\u00e7\u00e3o est\u00e1 vazia.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Bem-vindo ao Cliente Web do Media Browser",
|
||||
"ButtonDismiss": "Descartar",
|
||||
"MessageLearnHowToCustomize": "Aprenda como personalizar esta p\u00e1gina com seu estilo pessoal. Clique no \u00edcone do usu\u00e1rio no canto superior direito da tela para ver e atualizar suas prefer\u00eancias.",
|
||||
|
@ -900,5 +902,49 @@
|
|||
"OptionProtocolHls": "Http Live Streaming",
|
||||
"LabelContext": "Contexto:",
|
||||
"OptionContextStreaming": "Streaming",
|
||||
"OptionContextStatic": "Sinc"
|
||||
"OptionContextStatic": "Sinc",
|
||||
"ButtonAddToPlaylist": "Adicionar \u00e0 lista de reprodu\u00e7\u00e3o",
|
||||
"TabPlaylists": "Listas de Reprodu\u00e7\u00e3o",
|
||||
"ButtonClose": "Fechar",
|
||||
"LabelAllLanguages": "All languages",
|
||||
"HeaderBrowseOnlineImages": "Browse Online Images",
|
||||
"LabelSource": "Source:",
|
||||
"OptionAll": "All",
|
||||
"LabelImage": "Image:",
|
||||
"ButtonBrowseImages": "Browse Images",
|
||||
"HeaderImages": "Images",
|
||||
"HeaderBackdrops": "Backdrops",
|
||||
"HeaderScreenshots": "Screenshots",
|
||||
"HeaderAddUpdateImage": "Add\/Update Image",
|
||||
"LabelJpgPngOnly": "JPG\/PNG only",
|
||||
"LabelImageType": "Image type:",
|
||||
"OptionPrimary": "Primary",
|
||||
"OptionArt": "Art",
|
||||
"OptionBox": "Box",
|
||||
"OptionBoxRear": "Box rear",
|
||||
"OptionDisc": "Disc",
|
||||
"OptionLogo": "Logo",
|
||||
"OptionMenu": "Menu",
|
||||
"OptionScreenshot": "Screenshot",
|
||||
"OptionLocked": "Locked",
|
||||
"OptionUnidentified": "Unidentified",
|
||||
"OptionMissingParentalRating": "Missing parental rating",
|
||||
"OptionStub": "Stub",
|
||||
"HeaderEpisodes": "Episodes:",
|
||||
"OptionSeason0": "Season 0",
|
||||
"LabelReport": "Report:",
|
||||
"OptionReportSongs": "Songs",
|
||||
"OptionReportSeries": "Series",
|
||||
"OptionReportSeasons": "Seasons",
|
||||
"OptionReportTrailers": "Trailers",
|
||||
"OptionReportMusicVideos": "Music videos",
|
||||
"OptionReportMovies": "Movies",
|
||||
"OptionReportHomeVideos": "Home videos",
|
||||
"OptionReportGames": "Games",
|
||||
"OptionReportEpisodes": "Episodes",
|
||||
"OptionReportCollections": "Collections",
|
||||
"OptionReportBooks": "Books",
|
||||
"OptionReportArtists": "Artists",
|
||||
"OptionReportAlbums": "Albums",
|
||||
"OptionReportAdultVideos": "Adult videos"
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user