fixes #916 - Support reading playstate data from nfo's

This commit is contained in:
Luke Pulverenti 2014-09-26 22:28:13 -04:00
parent a260432fdf
commit eab030df7f
64 changed files with 709 additions and 519 deletions

View File

@ -108,6 +108,20 @@ namespace MediaBrowser.Api.Images
[Route("/Studios/{Name}/Images/{Type}/{Index}", "GET")] [Route("/Studios/{Name}/Images/{Type}/{Index}", "GET")]
[Route("/Years/{Year}/Images/{Type}", "GET")] [Route("/Years/{Year}/Images/{Type}", "GET")]
[Route("/Years/{Year}/Images/{Type}/{Index}", "GET")] [Route("/Years/{Year}/Images/{Type}/{Index}", "GET")]
[Route("/Artists/{Name}/Images/{Type}", "HEAD")]
[Route("/Artists/{Name}/Images/{Type}/{Index}", "HEAD")]
[Route("/Genres/{Name}/Images/{Type}", "HEAD")]
[Route("/Genres/{Name}/Images/{Type}/{Index}", "HEAD")]
[Route("/GameGenres/{Name}/Images/{Type}", "HEAD")]
[Route("/GameGenres/{Name}/Images/{Type}/{Index}", "HEAD")]
[Route("/MusicGenres/{Name}/Images/{Type}", "HEAD")]
[Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "HEAD")]
[Route("/Persons/{Name}/Images/{Type}", "HEAD")]
[Route("/Persons/{Name}/Images/{Type}/{Index}", "HEAD")]
[Route("/Studios/{Name}/Images/{Type}", "HEAD")]
[Route("/Studios/{Name}/Images/{Type}/{Index}", "HEAD")]
[Route("/Years/{Year}/Images/{Type}", "HEAD")]
[Route("/Years/{Year}/Images/{Type}/{Index}", "HEAD")]
[Api(Description = "Gets an item by name image")] [Api(Description = "Gets an item by name image")]
public class GetItemByNameImage : ImageRequest public class GetItemByNameImage : ImageRequest
{ {
@ -406,6 +420,16 @@ namespace MediaBrowser.Api.Images
return GetImage(request, item, false); return GetImage(request, item, false);
} }
public object Head(GetItemByNameImage request)
{
var pathInfo = PathInfo.Parse(Request.PathInfo);
var type = pathInfo.GetArgumentValue<string>(0);
var item = GetItemByName(request.Name, type, _libraryManager);
return GetImage(request, item, true);
}
/// <summary> /// <summary>
/// Posts the specified request. /// Posts the specified request.
/// </summary> /// </summary>

View File

@ -37,11 +37,13 @@ namespace MediaBrowser.Controller.Providers
public List<LocalImageInfo> Images { get; set; } public List<LocalImageInfo> Images { get; set; }
public List<ChapterInfo> Chapters { get; set; } public List<ChapterInfo> Chapters { get; set; }
public List<UserItemData> UserDataLIst { get; set; }
public LocalMetadataResult() public LocalMetadataResult()
{ {
Images = new List<LocalImageInfo>(); Images = new List<LocalImageInfo>();
Chapters = new List<ChapterInfo>(); Chapters = new List<ChapterInfo>();
UserDataLIst = new List<UserItemData>();
} }
} }
} }

View File

@ -109,6 +109,15 @@ namespace MediaBrowser.Controller.Providers
/// <returns>Task.</returns> /// <returns>Task.</returns>
Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType); Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType);
/// <summary>
/// Saves the metadata.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="updateType">Type of the update.</param>
/// <param name="savers">The savers.</param>
/// <returns>Task.</returns>
Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<string> savers);
/// <summary> /// <summary>
/// Gets the metadata options. /// Gets the metadata options.
/// </summary> /// </summary>
@ -139,10 +148,21 @@ namespace MediaBrowser.Controller.Providers
/// <returns>Task{HttpResponseInfo}.</returns> /// <returns>Task{HttpResponseInfo}.</returns>
Task<HttpResponseInfo> GetSearchImage(string providerName, string url, CancellationToken cancellationToken); Task<HttpResponseInfo> GetSearchImage(string providerName, string url, CancellationToken cancellationToken);
/// <summary>
/// Gets the item identity providers.
/// </summary>
/// <typeparam name="TLookupInfo">The type of the t lookup information.</typeparam>
/// <typeparam name="TIdentity">The type of the t identity.</typeparam>
/// <returns>IEnumerable&lt;IItemIdentityProvider&lt;TLookupInfo, TIdentity&gt;&gt;.</returns>
IEnumerable<IItemIdentityProvider<TLookupInfo, TIdentity>> GetItemIdentityProviders<TLookupInfo, TIdentity>() IEnumerable<IItemIdentityProvider<TLookupInfo, TIdentity>> GetItemIdentityProviders<TLookupInfo, TIdentity>()
where TLookupInfo : ItemLookupInfo where TLookupInfo : ItemLookupInfo
where TIdentity : IItemIdentity; where TIdentity : IItemIdentity;
/// <summary>
/// Gets the item identity converters.
/// </summary>
/// <typeparam name="TIdentity">The type of the t identity.</typeparam>
/// <returns>IEnumerable&lt;IItemIdentityConverter&lt;TIdentity&gt;&gt;.</returns>
IEnumerable<IItemIdentityConverter<TIdentity>> GetItemIdentityConverters<TIdentity>() IEnumerable<IItemIdentityConverter<TIdentity>> GetItemIdentityConverters<TIdentity>()
where TIdentity : IItemIdentity; where TIdentity : IItemIdentity;
} }

View File

@ -9,22 +9,26 @@ namespace MediaBrowser.Model.Entities
/// <summary> /// <summary>
/// The playback start /// The playback start
/// </summary> /// </summary>
PlaybackStart, PlaybackStart = 1,
/// <summary> /// <summary>
/// The playback progress /// The playback progress
/// </summary> /// </summary>
PlaybackProgress, PlaybackProgress = 2,
/// <summary> /// <summary>
/// The playback finished /// The playback finished
/// </summary> /// </summary>
PlaybackFinished, PlaybackFinished = 3,
/// <summary> /// <summary>
/// The toggle played /// The toggle played
/// </summary> /// </summary>
TogglePlayed, TogglePlayed = 4,
/// <summary> /// <summary>
/// The update user rating /// The update user rating
/// </summary> /// </summary>
UpdateUserRating UpdateUserRating = 5,
/// <summary>
/// The import
/// </summary>
Import = 6
} }
} }

View File

@ -7,19 +7,13 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager; using MediaBrowser.Providers.Manager;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Providers.AdultVideos namespace MediaBrowser.Providers.AdultVideos
{ {
class AdultVideoMetadataService : MetadataService<AdultVideo, ItemLookupInfo> class AdultVideoMetadataService : MetadataService<AdultVideo, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public AdultVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public AdultVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.Books
{ {
public class BookMetadataService : MetadataService<Book, BookInfo> public class BookMetadataService : MetadataService<Book, BookInfo>
{ {
private readonly ILibraryManager _libraryManager; public BookMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public BookMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -17,13 +17,10 @@ namespace MediaBrowser.Providers.BoxSets
{ {
public class BoxSetMetadataService : MetadataService<BoxSet, BoxSetInfo> public class BoxSetMetadataService : MetadataService<BoxSet, BoxSetInfo>
{ {
private readonly ILibraryManager _libraryManager;
private readonly ILocalizationManager _iLocalizationManager; private readonly ILocalizationManager _iLocalizationManager;
public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager, ILocalizationManager iLocalizationManager) public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILocalizationManager iLocalizationManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
_iLocalizationManager = iLocalizationManager; _iLocalizationManager = iLocalizationManager;
} }

View File

@ -2,6 +2,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Channels
{ {
public class AudioChannelItemMetadataService : MetadataService<ChannelAudioItem, ItemLookupInfo> public class AudioChannelItemMetadataService : MetadataService<ChannelAudioItem, ItemLookupInfo>
{ {
public AudioChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public AudioChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Channels
{ {
public class ChannelMetadataService : MetadataService<Channel, ItemLookupInfo> public class ChannelMetadataService : MetadataService<Channel, ItemLookupInfo>
{ {
public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Channels
{ {
public class VideoChannelItemMetadataService : MetadataService<ChannelVideoItem, ChannelItemLookupInfo> public class VideoChannelItemMetadataService : MetadataService<ChannelVideoItem, ChannelItemLookupInfo>
{ {
public VideoChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public VideoChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.Folders
{ {
public class FolderMetadataService : MetadataService<Folder, ItemLookupInfo> public class FolderMetadataService : MetadataService<Folder, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public FolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public FolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.GameGenres
{ {
public class GameGenreMetadataService : MetadataService<GameGenre, ItemLookupInfo> public class GameGenreMetadataService : MetadataService<GameGenre, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public GameGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public GameGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Games
{ {
public class GameMetadataService : MetadataService<Game, GameInfo> public class GameMetadataService : MetadataService<Game, GameInfo>
{ {
public GameMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public GameMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Games
{ {
public class GameSystemMetadataService : MetadataService<GameSystem, GameSystemInfo> public class GameSystemMetadataService : MetadataService<GameSystem, GameSystemInfo>
{ {
private readonly ILibraryManager _libraryManager; public GameSystemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public GameSystemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Genres
{ {
public class GenreMetadataService : MetadataService<Genre, ItemLookupInfo> public class GenreMetadataService : MetadataService<Genre, ItemLookupInfo>
{ {
public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.LiveTv
{ {
public class AudioRecordingService : MetadataService<LiveTvAudioRecording, ItemLookupInfo> public class AudioRecordingService : MetadataService<LiveTvAudioRecording, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public AudioRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public AudioRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.LiveTv
{ {
public class ChannelMetadataService : MetadataService<LiveTvChannel, ItemLookupInfo> public class ChannelMetadataService : MetadataService<LiveTvChannel, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.LiveTv
{ {
public class ProgramMetadataService : MetadataService<LiveTvProgram, ItemLookupInfo> public class ProgramMetadataService : MetadataService<LiveTvProgram, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public ProgramMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public ProgramMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.LiveTv
{ {
public class VideoRecordingService : MetadataService<LiveTvVideoRecording, ItemLookupInfo> public class VideoRecordingService : MetadataService<LiveTvVideoRecording, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public VideoRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public VideoRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -24,14 +24,16 @@ namespace MediaBrowser.Providers.Manager
protected readonly IProviderManager ProviderManager; protected readonly IProviderManager ProviderManager;
protected readonly IProviderRepository ProviderRepo; protected readonly IProviderRepository ProviderRepo;
protected readonly IFileSystem FileSystem; protected readonly IFileSystem FileSystem;
protected readonly IUserDataManager UserDataManager;
protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager)
{ {
ServerConfigurationManager = serverConfigurationManager; ServerConfigurationManager = serverConfigurationManager;
Logger = logger; Logger = logger;
ProviderManager = providerManager; ProviderManager = providerManager;
ProviderRepo = providerRepo; ProviderRepo = providerRepo;
FileSystem = fileSystem; FileSystem = fileSystem;
UserDataManager = userDataManager;
} }
/// <summary> /// <summary>
@ -304,7 +306,7 @@ namespace MediaBrowser.Providers.Manager
{ {
return HasChanged(item, hasFileChangeMonitor, status, options.DirectoryService); return HasChanged(item, hasFileChangeMonitor, status, options.DirectoryService);
} }
return false; return false;
}) })
.ToList(); .ToList();
@ -356,6 +358,7 @@ namespace MediaBrowser.Providers.Manager
} }
var hasLocalMetadata = false; var hasLocalMetadata = false;
var userDataList = new List<UserItemData>();
foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>()) foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>())
{ {
@ -375,6 +378,8 @@ namespace MediaBrowser.Providers.Manager
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.ImageUpdate; refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.ImageUpdate;
} }
userDataList = localItem.UserDataLIst;
MergeData(localItem.Item, temp, new List<MetadataFields>(), !options.ReplaceAllMetadata, true); MergeData(localItem.Item, temp, new List<MetadataFields>(), !options.ReplaceAllMetadata, true);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport; refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport;
@ -393,9 +398,9 @@ namespace MediaBrowser.Providers.Manager
catch (Exception ex) catch (Exception ex)
{ {
failedProviderCount++; failedProviderCount++;
Logger.ErrorException("Error in {0}", ex, provider.Name); Logger.ErrorException("Error in {0}", ex, provider.Name);
// If a local provider fails, consider that a failure // If a local provider fails, consider that a failure
refreshResult.Status = ProviderRefreshStatus.Failure; refreshResult.Status = ProviderRefreshStatus.Failure;
refreshResult.ErrorMessage = ex.Message; refreshResult.ErrorMessage = ex.Message;
@ -441,9 +446,25 @@ namespace MediaBrowser.Providers.Manager
await RunCustomProvider(provider, item, options, refreshResult, cancellationToken).ConfigureAwait(false); await RunCustomProvider(provider, item, options, refreshResult, cancellationToken).ConfigureAwait(false);
} }
await ImportUserData(item, userDataList, cancellationToken).ConfigureAwait(false);
return refreshResult; return refreshResult;
} }
private async Task ImportUserData(TItemType item, List<UserItemData> userDataList, CancellationToken cancellationToken)
{
var hasUserData = item as IHasUserData;
if (hasUserData != null)
{
foreach (var userData in userDataList)
{
await UserDataManager.SaveUserData(userData.UserId, hasUserData, userData, UserDataSaveReason.Import, cancellationToken)
.ConfigureAwait(false);
}
}
}
private async Task RunCustomProvider(ICustomMetadataProvider<TItemType> provider, TItemType item, MetadataRefreshOptions options, RefreshResult refreshResult, CancellationToken cancellationToken) private async Task RunCustomProvider(ICustomMetadataProvider<TItemType> provider, TItemType item, MetadataRefreshOptions options, RefreshResult refreshResult, CancellationToken cancellationToken)
{ {
Logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name); Logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name);
@ -539,13 +560,13 @@ namespace MediaBrowser.Providers.Manager
protected virtual void AfterRemoteRefresh(TItemType item) protected virtual void AfterRemoteRefresh(TItemType item)
{ {
} }
private async Task<TIdType> CreateInitialLookupInfo(TItemType item, CancellationToken cancellationToken) private async Task<TIdType> CreateInitialLookupInfo(TItemType item, CancellationToken cancellationToken)
{ {
var info = item.GetLookupInfo(); var info = item.GetLookupInfo();
var hasIdentity = info as IHasIdentities<IItemIdentity>; var hasIdentity = info as IHasIdentities<IItemIdentity>;
if (hasIdentity != null) if (hasIdentity != null)
{ {

View File

@ -570,9 +570,33 @@ namespace MediaBrowser.Providers.Manager
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
/// <param name="updateType">Type of the update.</param> /// <param name="updateType">Type of the update.</param>
/// <returns>Task.</returns> /// <returns>Task.</returns>
public async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType) public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType)
{ {
foreach (var saver in _savers.Where(i => IsSaverEnabledForItem(i, item, updateType, false))) return SaveMetadata(item, updateType, _savers);
}
/// <summary>
/// Saves the metadata.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="updateType">Type of the update.</param>
/// <param name="savers">The savers.</param>
/// <returns>Task.</returns>
public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<string> savers)
{
return SaveMetadata(item, updateType, _savers.Where(i => savers.Contains(i.Name, StringComparer.OrdinalIgnoreCase)));
}
/// <summary>
/// Saves the metadata.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="updateType">Type of the update.</param>
/// <param name="savers">The savers.</param>
/// <returns>Task.</returns>
private async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<IMetadataSaver> savers)
{
foreach (var saver in savers.Where(i => IsSaverEnabledForItem(i, item, updateType, false)))
{ {
_logger.Debug("Saving {0} to {1}.", item.Path ?? item.Name, saver.Name); _logger.Debug("Saving {0} to {1}.", item.Path ?? item.Name, saver.Name);
@ -625,6 +649,14 @@ namespace MediaBrowser.Providers.Manager
} }
} }
/// <summary>
/// Determines whether [is saver enabled for item] [the specified saver].
/// </summary>
/// <param name="saver">The saver.</param>
/// <param name="item">The item.</param>
/// <param name="updateType">Type of the update.</param>
/// <param name="includeDisabled">if set to <c>true</c> [include disabled].</param>
/// <returns><c>true</c> if [is saver enabled for item] [the specified saver]; otherwise, <c>false</c>.</returns>
private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType, bool includeDisabled) private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType, bool includeDisabled)
{ {
var options = GetMetadataOptions(item); var options = GetMetadataOptions(item);

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Movies
{ {
public class MovieMetadataService : MetadataService<Movie, MovieInfo> public class MovieMetadataService : MetadataService<Movie, MovieInfo>
{ {
private readonly ILibraryManager _libraryManager; public MovieMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public MovieMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Movies
{ {
public class TrailerMetadataService : MetadataService<Trailer, TrailerInfo> public class TrailerMetadataService : MetadataService<Trailer, TrailerInfo>
{ {
private readonly ILibraryManager _libraryManager; public TrailerMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public TrailerMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Music
{ {
public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo> public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo>
{ {
private readonly ILibraryManager _libraryManager; public AlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public AlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Music
{ {
public class ArtistMetadataService : MetadataService<MusicArtist, ArtistInfo> public class ArtistMetadataService : MetadataService<MusicArtist, ArtistInfo>
{ {
private readonly ILibraryManager _libraryManager; public ArtistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public ArtistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.Music
{ {
public class AudioMetadataService : MetadataService<Audio, SongInfo> public class AudioMetadataService : MetadataService<Audio, SongInfo>
{ {
private readonly ILibraryManager _libraryManager; public AudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public AudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -15,12 +15,8 @@ namespace MediaBrowser.Providers.Music
{ {
class MusicVideoMetadataService : MetadataService<MusicVideo, MusicVideoInfo> class MusicVideoMetadataService : MetadataService<MusicVideo, MusicVideoInfo>
{ {
private readonly ILibraryManager _libraryManager; public MusicVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public MusicVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -12,12 +12,8 @@ namespace MediaBrowser.Providers.MusicGenres
{ {
public class MusicGenreMetadataService : MetadataService<MusicGenre, ItemLookupInfo> public class MusicGenreMetadataService : MetadataService<MusicGenre, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public MusicGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public MusicGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.People
{ {
public class PersonMetadataService : MetadataService<Person, PersonLookupInfo> public class PersonMetadataService : MetadataService<Person, PersonLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public PersonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public PersonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.Photos
{ {
class PhotoMetadataService : MetadataService<Photo, ItemLookupInfo> class PhotoMetadataService : MetadataService<Photo, ItemLookupInfo>
{ {
public PhotoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public PhotoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -2,6 +2,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Playlists; using MediaBrowser.Controller.Playlists;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
@ -13,8 +14,7 @@ namespace MediaBrowser.Providers.Playlists
{ {
class PlaylistMetadataService : MetadataService<Playlist, ItemLookupInfo> class PlaylistMetadataService : MetadataService<Playlist, ItemLookupInfo>
{ {
public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Studios
{ {
public class StudioMetadataService : MetadataService<Studio, ItemLookupInfo> public class StudioMetadataService : MetadataService<Studio, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public StudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public StudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.TV
{ {
public class EpisodeMetadataService : MetadataService<Episode, EpisodeInfo> public class EpisodeMetadataService : MetadataService<Episode, EpisodeInfo>
{ {
public EpisodeMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public EpisodeMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
@ -11,8 +12,7 @@ namespace MediaBrowser.Providers.TV
{ {
public class SeasonMetadataService : MetadataService<Season, SeasonInfo> public class SeasonMetadataService : MetadataService<Season, SeasonInfo>
{ {
public SeasonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) public SeasonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
} }

View File

@ -13,12 +13,8 @@ namespace MediaBrowser.Providers.TV
{ {
public class SeriesMetadataService : MetadataService<Series, SeriesInfo> public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
{ {
private readonly ILibraryManager _libraryManager; public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Users
{ {
public class UserMetadataService : MetadataService<User, ItemLookupInfo> public class UserMetadataService : MetadataService<User, ItemLookupInfo>
{ {
private readonly IUserManager _userManager; public UserMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public UserMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserManager userManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_userManager = userManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Videos
{ {
public class VideoMetadataService : MetadataService<Video, ItemLookupInfo> public class VideoMetadataService : MetadataService<Video, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public VideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public VideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -14,12 +14,8 @@ namespace MediaBrowser.Providers.Years
{ {
public class YearMetadataService : MetadataService<Year, ItemLookupInfo> public class YearMetadataService : MetadataService<Year, ItemLookupInfo>
{ {
private readonly ILibraryManager _libraryManager; public YearMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
public YearMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{ {
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>

View File

@ -571,18 +571,18 @@
"LabelFullReview": "Rese\u00f1a completa:", "LabelFullReview": "Rese\u00f1a completa:",
"LabelShortRatingDescription": "Res\u00famen corto de clasificaci\u00f3n:", "LabelShortRatingDescription": "Res\u00famen corto de clasificaci\u00f3n:",
"OptionIRecommendThisItem": "Yo recomiendo este \u00edtem", "OptionIRecommendThisItem": "Yo recomiendo este \u00edtem",
"WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", "WebClientTourContent": "Vea sus medios recientemente a\u00f1adidos, siguientes ep\u00ecsodios y m\u00e1s. Los c\u00edrculos verdes indican cuantos medios sin reproducir tiene.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", "WebClientTourMovies": "Reproduzca pel\u00edculas, avances y m\u00e1s desde cualquier dispositivo con un navegador web.",
"WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", "WebClientTourMouseOver": "Mantgenga el rat\u00f3n sobre cualquier cartel para un acceso r\u00e1pido a informaci\u00f3n importante.",
"WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", "WebClientTourTapHold": "Presione y mantenga o haga click derecho en cualquier cartel para mostrar un men\u00fa contextual",
"WebClientTourMetadataManager": "Click edit to open the metadata manager", "WebClientTourMetadataManager": "Haga click en editar para abrir el administrador de metadatos",
"WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", "WebClientTourPlaylists": "Cree f\u00e1cilmente listas de reproducci\u00f3n y mezclas instant\u00e1neas, y reprod\u00fazcalas en cualquier dispositivo",
"WebClientTourCollections": "Create movie collections to group box sets together", "WebClientTourCollections": "Cree colecciones de pel\u00edculas para agruparlas en sets de pel\u00edculas",
"WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", "WebClientTourUserPreferences1": "Las preferencias de usuario le permiten personalizar la manera en que su biblioteca es presentada en todos sus apps de Media Browser",
"WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app", "WebClientTourUserPreferences2": "Configure las preferencias de lenguaje de audio y subt\u00edtulos una sola vez, para todas las app de Media Browser",
"WebClientTourUserPreferences3": "Design the web client home page to your liking", "WebClientTourUserPreferences3": "Dise\u00f1e a su gusto la p\u00e1gina principal del cliente web",
"WebClientTourUserPreferences4": "Configure backdrops, theme songs and external players", "WebClientTourUserPreferences4": "Configure im\u00e1genes de fondo, canciones de tema y reproductores externos",
"WebClientTourMobile1": "The web client works great on smartphones and tablets...", "WebClientTourMobile1": "El cliente web funciona de maravilla en tel\u00e9fonos inteligentes y tabletas...",
"WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "WebClientTourMobile2": "y controla f\u00e1cilmente otros dispositivos y apps de Media Browser",
"MessageEnjoyYourStay": "Enjoy your stay" "MessageEnjoyYourStay": "Disfrute su visita"
} }

View File

@ -571,18 +571,18 @@
"LabelFullReview": "\u041f\u0456\u043a\u0456\u0440 \u0442\u043e\u043b\u044b\u0493\u044b\u043c\u0435\u043d:", "LabelFullReview": "\u041f\u0456\u043a\u0456\u0440 \u0442\u043e\u043b\u044b\u0493\u044b\u043c\u0435\u043d:",
"LabelShortRatingDescription": "\u0411\u0430\u0493\u0430\u043b\u0430\u0443\u0434\u044b\u04a3 \u049b\u044b\u0441\u049b\u0430 \u0430\u049b\u043f\u0430\u0440\u044b:", "LabelShortRatingDescription": "\u0411\u0430\u0493\u0430\u043b\u0430\u0443\u0434\u044b\u04a3 \u049b\u044b\u0441\u049b\u0430 \u0430\u049b\u043f\u0430\u0440\u044b:",
"OptionIRecommendThisItem": "\u041e\u0441\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0456 \u04b1\u0441\u044b\u043d\u0430\u043c\u044b\u043d", "OptionIRecommendThisItem": "\u041e\u0441\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0456 \u04b1\u0441\u044b\u043d\u0430\u043c\u044b\u043d",
"WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", "WebClientTourContent": "\u0416\u0430\u049b\u044b\u043d\u0434\u0430 \u04af\u0441\u0442\u0435\u043b\u0433\u0435\u043d \u0442\u0430\u0441\u0443\u0448\u044b\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456, \u043a\u0435\u043b\u0435\u0441\u0456 \u044d\u043f\u0438\u0437\u043e\u0434\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 \u0442.\u0431. \u049b\u0430\u0440\u0430\u04a3\u044b\u0437. \u0416\u0430\u0441\u044b\u043b \u0448\u0435\u043d\u0431\u0435\u0440\u043b\u0435\u0440 \u0441\u0456\u0437\u0434\u0435 \u049b\u0430\u043d\u0448\u0430 \u043e\u0439\u043d\u0430\u0442\u044b\u043b\u043c\u0430\u0493\u0430\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0442\u0435\u0440 \u0431\u0430\u0440\u044b\u043d \u043a\u04e9\u0440\u0441\u0435\u0442\u0435\u0434\u0456.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", "WebClientTourMovies": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456 \u0431\u0430\u0440 \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430\u0440 \u0430\u0440\u049b\u044b\u043b\u044b \u0444\u0438\u043b\u044c\u043c\u0434\u0435\u0440\u0434\u0456, \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u043b\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0442.\u0431. \u043e\u0439\u043d\u0430\u0442\u044b\u04a3\u044b\u0437.",
"WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", "WebClientTourMouseOver": "\u041c\u0430\u04a3\u044b\u0437\u0434\u044b \u0430\u049b\u043f\u0430\u0440\u0430\u0442\u049b\u0430 \u0436\u044b\u043b\u0434\u0430\u043c \u049b\u0430\u0442\u044b\u043d\u0430\u0441\u0443 \u04af\u0448\u0456\u043d \u049b\u0430\u0439\u0441\u044b\u0431\u0456\u0440 \u043f\u043e\u0441\u0442\u0435\u0440\u0434\u0456\u04a3 \u04b1\u0441\u0442\u0456\u043d\u0434\u0435 \u0442\u0456\u043d\u0442\u0443\u0440\u0434\u0456\u04a3 \u043a\u04e9\u0440\u0441\u0435\u0442\u043a\u0456\u0448\u0456\u043d \u04b1\u0441\u0442\u0430\u043f \u0442\u04b1\u0440\u044b\u04a3\u044b\u0437",
"WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", "WebClientTourTapHold": "\u041c\u04d9\u0442\u0456\u043d\u043c\u04d9\u043d\u0434\u0456\u043a \u043c\u04d9\u0437\u0456\u0440 \u04af\u0448\u0456\u043d \u049b\u0430\u0439\u0441\u044b\u0431\u0456\u0440 \u043f\u043e\u0441\u0442\u0435\u0440\u0434\u0456 \u0442\u04af\u0440\u0442\u0456\u043f \u04b1\u0441\u0442\u0430\u043f \u0442\u04b1\u0440\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \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",
"WebClientTourMetadataManager": "Click edit to open the metadata manager", "WebClientTourMetadataManager": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u0431\u0430\u0441\u049b\u0430\u0440\u0443\u0448\u044b\u0441\u044b\u043d\u0438 \u0430\u0448\u0443 \u04af\u0448\u0456\u043d \u04e8\u04a3\u0434\u0435\u0443 \u0434\u0435\u0433\u0435\u043d\u0434\u0456 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437",
"WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", "WebClientTourPlaylists": "\u041e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c\u0434\u0435\u0440\u0456\u043d \u0436\u04d9\u043d\u0435 \u043b\u0435\u0437\u0434\u0456\u043a \u049b\u043e\u0441\u043f\u0430\u043b\u0430\u0440\u0434\u044b \u0436\u0435\u04a3\u0456\u043b \u0436\u0430\u0441\u0430\u04a3\u044b\u0437, \u0436\u04d9\u043d\u0435 \u043e\u043b\u0430\u0440\u0434\u044b \u04d9\u0440\u049b\u0430\u0439\u0441\u044b \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430 \u043e\u0439\u043d\u0430\u0442\u044b\u04a3\u044b\u0437",
"WebClientTourCollections": "Create movie collections to group box sets together", "WebClientTourCollections": "\u0424\u0438\u043b\u044c\u043c\u0434\u0435\u0440\u0434\u0456 \u0431\u0456\u0440\u0433\u0435 \u0442\u043e\u043f\u0442\u0430\u0443 \u04af\u0448\u0456\u043d \u0444\u0438\u043b\u044c\u043c \u0436\u0438\u044b\u043d\u0442\u044b\u049b\u0442\u0430\u0440\u044b\u043d \u0436\u0430\u0441\u0430\u04a3\u044b\u0437",
"WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", "WebClientTourUserPreferences1": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0456 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d\u0434\u0430 \u0442\u0430\u0441\u0443\u0448\u044b\u0445\u0430\u043d\u0430\u04a3\u044b\u0437\u0434\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0456\u043b\u0443 \u0436\u043e\u043b\u044b\u043d \u0442\u0435\u04a3\u0448\u0435\u0443\u0456\u043d\u0435 \u0441\u0456\u0437\u0433\u0435 \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0435\u0434\u0456",
"WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app", "WebClientTourUserPreferences2": "\u04d8\u0440\u0431\u0456\u0440 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u0441\u044b \u04af\u0448\u0456\u043d, \u0434\u044b\u0431\u044b\u0441 \u043f\u0435\u043d \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043b\u0435\u0440 \u0442\u0456\u043b\u0434\u0456\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440\u0456\u043d \u0431\u0456\u0440 \u0440\u0435\u0442 \u0442\u0435\u04a3\u0448\u0435\u04a3\u0456\u0437",
"WebClientTourUserPreferences3": "Design the web client home page to your liking", "WebClientTourUserPreferences3": "\u04b0\u043d\u0430\u0442\u0443\u044b\u04a3\u044b\u0437 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0493\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0456\u043d\u0456\u04a3 \u0431\u0430\u0441\u0442\u044b \u0431\u0435\u0442\u0456\u043d \u049b\u0430\u0439\u0442\u0430 \u0440\u0435\u0441\u0456\u043c\u0434\u0435\u04a3\u0456\u0437",
"WebClientTourUserPreferences4": "Configure backdrops, theme songs and external players", "WebClientTourUserPreferences4": "\u0410\u0440\u0442\u049b\u044b \u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456, \u0442\u0430\u049b\u044b\u0440\u044b\u043f\u0442\u044b\u049b \u04d9\u0443\u0435\u043d\u0434\u0435\u0440\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0441\u044b\u0440\u0442\u049b\u044b \u043e\u0439\u043d\u0430\u0442\u049b\u044b\u0448\u0442\u0430\u0440\u0434\u044b \u0442\u0435\u04a3\u0448\u0435\u04a3\u0456\u0437",
"WebClientTourMobile1": "The web client works great on smartphones and tablets...", "WebClientTourMobile1": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0456 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0434\u0430\u0440\u0434\u0430 \u0436\u04d9\u043d\u0435 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0442\u0435\u0440\u0434\u0435 \u0442\u0430\u043c\u0430\u0448\u0430 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456",
"WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "WebClientTourMobile2": "\u0441\u043e\u043d\u044b\u043c\u0435\u043d \u049b\u0430\u0442\u0430\u0440 \u0431\u0430\u0441\u049b\u0430 \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0430\u0434\u044b",
"MessageEnjoyYourStay": "Enjoy your stay" "MessageEnjoyYourStay": "\u0416\u0430\u0493\u044b\u043c\u0434\u044b \u0435\u0440\u043c\u0435\u043a \u0435\u0442\u0456\u04a3\u0456\u0437"
} }

View File

@ -198,7 +198,7 @@
"ButtonOpen": "\u00c5pne", "ButtonOpen": "\u00c5pne",
"ButtonOpenInNewTab": "\u00c5pne i ny fane", "ButtonOpenInNewTab": "\u00c5pne i ny fane",
"ButtonShuffle": "Shuffle", "ButtonShuffle": "Shuffle",
"ButtonInstantMix": "Instant mix", "ButtonInstantMix": "Direktemiks",
"ButtonResume": "Fortsett", "ButtonResume": "Fortsett",
"HeaderScenes": "Scener", "HeaderScenes": "Scener",
"HeaderAudioTracks": "Lydspor", "HeaderAudioTracks": "Lydspor",
@ -334,12 +334,12 @@
"ButtonRemoveFromPlaylist": "Fjern fra spilleliste", "ButtonRemoveFromPlaylist": "Fjern fra spilleliste",
"HeaderSpecials": "Spescials", "HeaderSpecials": "Spescials",
"HeaderTrailers": "Trailere", "HeaderTrailers": "Trailere",
"HeaderAudio": "Audio", "HeaderAudio": "Lyd",
"HeaderResolution": "Oppl\u00f8sning", "HeaderResolution": "Oppl\u00f8sning",
"HeaderVideo": "Video", "HeaderVideo": "Video",
"HeaderRuntime": "Spilletid", "HeaderRuntime": "Spilletid",
"HeaderCommunityRating": "Community rating", "HeaderCommunityRating": "Fellesskap anmeldelse",
"HeaderParentalRating": "Parental rating", "HeaderParentalRating": "Foreldresensur:",
"HeaderReleaseDate": "Utgivelsesdato", "HeaderReleaseDate": "Utgivelsesdato",
"HeaderDateAdded": "Dato lagt til", "HeaderDateAdded": "Dato lagt til",
"HeaderSeries": "Serier", "HeaderSeries": "Serier",
@ -347,9 +347,9 @@
"HeaderSeasonNumber": "Sesong nummer", "HeaderSeasonNumber": "Sesong nummer",
"HeaderNetwork": "Nettverk", "HeaderNetwork": "Nettverk",
"HeaderYear": "\u00c5r", "HeaderYear": "\u00c5r",
"HeaderGameSystem": "Game system", "HeaderGameSystem": "Spill system",
"HeaderPlayers": "Spillere", "HeaderPlayers": "Spillere",
"HeaderEmbeddedImage": "Embedded image", "HeaderEmbeddedImage": "innebygd bilde",
"HeaderTrack": "Spor", "HeaderTrack": "Spor",
"HeaderDisc": "Disk", "HeaderDisc": "Disk",
"OptionMovies": "Filmer", "OptionMovies": "Filmer",
@ -358,7 +358,7 @@
"OptionSeasons": "Sesonger", "OptionSeasons": "Sesonger",
"OptionEpisodes": "Episoder", "OptionEpisodes": "Episoder",
"OptionGames": "Spill", "OptionGames": "Spill",
"OptionGameSystems": "Game systems", "OptionGameSystems": "Spill systemer",
"OptionMusicArtists": "Musikk artist", "OptionMusicArtists": "Musikk artist",
"OptionMusicAlbums": "Musikk album", "OptionMusicAlbums": "Musikk album",
"OptionMusicVideos": "Musikk videoer", "OptionMusicVideos": "Musikk videoer",
@ -520,7 +520,7 @@
"MediaInfoShutterSpeed": "Shutter speed", "MediaInfoShutterSpeed": "Shutter speed",
"MediaInfoSoftware": "Programvare", "MediaInfoSoftware": "Programvare",
"HeaderIfYouLikeCheckTheseOut": "If you like {0}, check these out...", "HeaderIfYouLikeCheckTheseOut": "If you like {0}, check these out...",
"HeaderPlotKeywords": "Plot Keywords", "HeaderPlotKeywords": "Plott n\u00f8kkelord",
"HeaderMovies": "Movies", "HeaderMovies": "Movies",
"HeaderAlbums": "Albums", "HeaderAlbums": "Albums",
"HeaderGames": "Games", "HeaderGames": "Games",
@ -576,7 +576,7 @@
"WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", "WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information",
"WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", "WebClientTourTapHold": "Tap and hold or right click any poster for a context menu",
"WebClientTourMetadataManager": "Click edit to open the metadata manager", "WebClientTourMetadataManager": "Click edit to open the metadata manager",
"WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", "WebClientTourPlaylists": "Du kan enkelt lage spillelister og direktemikser, og spille dem p\u00e5 hvilken som helst enhet",
"WebClientTourCollections": "Create movie collections to group box sets together", "WebClientTourCollections": "Create movie collections to group box sets together",
"WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", "WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps",
"WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app", "WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app",

View File

@ -564,15 +564,15 @@
"MediaInfoRefFrames": "Ref frames", "MediaInfoRefFrames": "Ref frames",
"TabPlayback": "Afspelen", "TabPlayback": "Afspelen",
"HeaderSelectCustomIntrosPath": "Selecteer eigen pad naar intro's", "HeaderSelectCustomIntrosPath": "Selecteer eigen pad naar intro's",
"HeaderRateAndReview": "Rate and Review", "HeaderRateAndReview": "Beoordelen",
"HeaderThankYou": "Thank You", "HeaderThankYou": "Bedankt",
"MessageThankYouForYourReview": "Thank you for your review.", "MessageThankYouForYourReview": "Bedankt voor de beoordeling",
"LabelYourRating": "Your rating:", "LabelYourRating": "Jouw beoordeling:",
"LabelFullReview": "Full review:", "LabelFullReview": "Volledige beoordeling:",
"LabelShortRatingDescription": "Short rating summary:", "LabelShortRatingDescription": "Korte beoordeling overzicht:",
"OptionIRecommendThisItem": "I recommend this item", "OptionIRecommendThisItem": "Ik beveel dit item aan",
"WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", "WebClientTourContent": "Bekijk de recent toegevoegde media, volgende afleveringen en meer. De groene cirkels tonen hoeveel niet afgespeelde items er zijn.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", "WebClientTourMovies": "Bekijk films, trailers en meer op elk apparaat met een web browser.",
"WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", "WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information",
"WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", "WebClientTourTapHold": "Tap and hold or right click any poster for a context menu",
"WebClientTourMetadataManager": "Click edit to open the metadata manager", "WebClientTourMetadataManager": "Click edit to open the metadata manager",

View File

@ -571,11 +571,11 @@
"LabelFullReview": "Coment\u00e1rio completo:", "LabelFullReview": "Coment\u00e1rio completo:",
"LabelShortRatingDescription": "Resumo da avalia\u00e7\u00e3o:", "LabelShortRatingDescription": "Resumo da avalia\u00e7\u00e3o:",
"OptionIRecommendThisItem": "Eu recomendo este item", "OptionIRecommendThisItem": "Eu recomendo este item",
"WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", "WebClientTourContent": "Veja suas m\u00eddias adicionadas recentemente, pr\u00f3ximos epis\u00f3dios e mais. Os c\u00edrculos verdes indicam quantos itens n\u00e3o reproduzidos voc\u00ea tem.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", "WebClientTourMovies": "Reproduza filmes, trailers e mais em qualquer dispositivo com um browser web.",
"WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", "WebClientTourMouseOver": "Posicione o mouse sobre qualquer capa para acessar rapidamente informa\u00e7\u00f5es importantes",
"WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", "WebClientTourTapHold": "Toque e mantenha ou clique com o bot\u00e3o direito do mouse sobre a capa para um menu contextual",
"WebClientTourMetadataManager": "Click edit to open the metadata manager", "WebClientTourMetadataManager": "Clique em editar para abrir o gerenciador de metadados",
"WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", "WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device",
"WebClientTourCollections": "Create movie collections to group box sets together", "WebClientTourCollections": "Create movie collections to group box sets together",
"WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", "WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps",

View File

@ -196,7 +196,7 @@
"MessageDirectoryPickerInstruction": "\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0443\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432 \u0442\u043e\u043c \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 \u00ab\u0421\u0435\u0442\u044c\u00bb \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\u0435\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432 \u0442\u043e\u043c \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 \u00ab\u0421\u0435\u0442\u044c\u00bb \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", "HeaderMenu": "\u041c\u0435\u043d\u044e",
"ButtonOpen": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c", "ButtonOpen": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c",
"ButtonOpenInNewTab": "\u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435", "ButtonOpenInNewTab": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435",
"ButtonShuffle": "\u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c", "ButtonShuffle": "\u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c",
"ButtonInstantMix": "\u0410\u0432\u0442\u043e\u043c\u0438\u043a\u0441", "ButtonInstantMix": "\u0410\u0432\u0442\u043e\u043c\u0438\u043a\u0441",
"ButtonResume": "\u0412\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c", "ButtonResume": "\u0412\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c",
@ -571,11 +571,11 @@
"LabelFullReview": "\u041e\u0442\u0437\u044b\u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e:", "LabelFullReview": "\u041e\u0442\u0437\u044b\u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e:",
"LabelShortRatingDescription": "\u041a\u0440\u0430\u0442\u043a\u0430\u044f \u0441\u0432\u043e\u0434\u043a\u0430 \u043e\u0446\u0435\u043d\u043a\u0438:", "LabelShortRatingDescription": "\u041a\u0440\u0430\u0442\u043a\u0430\u044f \u0441\u0432\u043e\u0434\u043a\u0430 \u043e\u0446\u0435\u043d\u043a\u0438:",
"OptionIRecommendThisItem": "\u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u044d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442", "OptionIRecommendThisItem": "\u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u044d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",
"WebClientTourContent": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0432\u043e\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b, \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u0417\u0435\u043b\u0435\u043d\u044b\u0435 \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u0432\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.", "WebClientTourContent": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0432\u043e\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b \u0438 \u0442.\u043f. \u0417\u0435\u043b\u0435\u043d\u044b\u0435 \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u0432\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.",
"WebClientTourMovies": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0438\u0442\u0435 \u0444\u0438\u043b\u044c\u043c\u044b, \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c.", "WebClientTourMovies": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435 \u0444\u0438\u043b\u044c\u043c\u044b, \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u044b \u0438 \u0442.\u043f., \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c.",
"WebClientTourMouseOver": "\u0417\u0430\u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u043a\u0443\u0440\u0441\u043e\u0440 \u043c\u044b\u0448\u0438 \u043d\u0430\u0434 \u043b\u044e\u0431\u044b\u043c \u043f\u043e\u0441\u0442\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u0430\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438", "WebClientTourMouseOver": "\u0417\u0430\u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u043a\u0443\u0440\u0441\u043e\u0440 \u043c\u044b\u0448\u0438 \u043d\u0430\u0434 \u043b\u044e\u0431\u044b\u043c \u043f\u043e\u0441\u0442\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u0430\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438",
"WebClientTourTapHold": "\u041a\u043e\u0441\u043d\u0438\u0442\u0435\u0441\u044c \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u043b\u0438 \u0449\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0441\u0442\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e", "WebClientTourTapHold": "\u041a\u043e\u0441\u043d\u0438\u0442\u0435\u0441\u044c \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u043b\u0438 \u0449\u0435\u043b\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043f\u043e \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0435\u0440\u0443 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e",
"WebClientTourMetadataManager": "\u0429\u0451\u043b\u043a\u043d\u0438\u0442\u0435 \u043f\u043e \u043a\u043d\u043e\u043f\u043a\u0435 \u041f\u0440\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e \u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "WebClientTourMetadataManager": "\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u041f\u0440\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e \u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445",
"WebClientTourPlaylists": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u0430\u0432\u0442\u043e\u043c\u0438\u043a\u0441\u044b, \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435 \u0438\u0445 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435", "WebClientTourPlaylists": "\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u0430\u0432\u0442\u043e\u043c\u0438\u043a\u0441\u044b, \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435 \u0438\u0445 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435",
"WebClientTourCollections": "\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u043c\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435", "WebClientTourCollections": "\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u043c\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435",
"WebClientTourUserPreferences1": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431, \u0441 \u043a\u0430\u043a\u0438\u043c, \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 Media Browser", "WebClientTourUserPreferences1": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431, \u0441 \u043a\u0430\u043a\u0438\u043c, \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 Media Browser",
@ -584,5 +584,5 @@
"WebClientTourUserPreferences4": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0437\u0430\u0434\u043d\u0438\u043a\u0438, \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u0438", "WebClientTourUserPreferences4": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0437\u0430\u0434\u043d\u0438\u043a\u0438, \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u0438",
"WebClientTourMobile1": "\u0412\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445...", "WebClientTourMobile1": "\u0412\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445...",
"WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser", "WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser",
"MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f" "MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u044f\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f"
} }

View File

@ -341,7 +341,7 @@
"HeaderCommunityRating": "Anv\u00e4ndaromd\u00f6me", "HeaderCommunityRating": "Anv\u00e4ndaromd\u00f6me",
"HeaderParentalRating": "\u00c5ldersgr\u00e4ns", "HeaderParentalRating": "\u00c5ldersgr\u00e4ns",
"HeaderReleaseDate": "Premi\u00e4rdatum:", "HeaderReleaseDate": "Premi\u00e4rdatum:",
"HeaderDateAdded": "Date added", "HeaderDateAdded": "Inlagd den",
"HeaderSeries": "Serie", "HeaderSeries": "Serie",
"HeaderSeason": "S\u00e4song", "HeaderSeason": "S\u00e4song",
"HeaderSeasonNumber": "S\u00e4songsnummer:", "HeaderSeasonNumber": "S\u00e4songsnummer:",
@ -362,62 +362,62 @@
"OptionMusicArtists": "Musikartister", "OptionMusicArtists": "Musikartister",
"OptionMusicAlbums": "Album", "OptionMusicAlbums": "Album",
"OptionMusicVideos": "Musikvideor", "OptionMusicVideos": "Musikvideor",
"OptionSongs": "Songs", "OptionSongs": "L\u00e5tar",
"OptionHomeVideos": "Home videos", "OptionHomeVideos": "Hemvideor",
"OptionBooks": "Books", "OptionBooks": "B\u00f6cker",
"OptionAdultVideos": "Adult videos", "OptionAdultVideos": "Inneh\u00e5ll f\u00f6r vuxna",
"ButtonUp": "Up", "ButtonUp": "Upp",
"ButtonDown": "Down", "ButtonDown": "Ner",
"LabelMetadataReaders": "Metadata readers:", "LabelMetadataReaders": "Metadatal\u00e4sare:",
"LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataReadersHelp": "Rangordna dina lokala metadatak\u00e4llor i prioritetsordning. F\u00f6rst hittade fil l\u00e4ses in.",
"LabelMetadataDownloaders": "Metadata downloaders:", "LabelMetadataDownloaders": "H\u00e4mtare av metadata:",
"LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataDownloadersHelp": "Aktivera och rangordna dina h\u00e4mtare baserat p\u00e5 prioritet. L\u00e4gre prioriterade h\u00e4mtare anv\u00e4nds endast f\u00f6r att fylla i saknad information.",
"LabelMetadataSavers": "Metadata savers:", "LabelMetadataSavers": "Metadatasparare:",
"LabelMetadataSaversHelp": "Choose the file formats to save your metadata to.", "LabelMetadataSaversHelp": "V\u00e4lj de filformat du vill anv\u00e4nda f\u00f6r att spara dina metadata.",
"LabelImageFetchers": "Image fetchers:", "LabelImageFetchers": "H\u00e4mtare av bilder:",
"LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority.", "LabelImageFetchersHelp": "Aktivera och rangordna dina h\u00e4mtare baserat p\u00e5 prioritet.",
"ButtonQueueAllFromHere": "Queue all from here", "ButtonQueueAllFromHere": "K\u00f6a alla fr o m h\u00e4r",
"ButtonPlayAllFromHere": "Play all from here", "ButtonPlayAllFromHere": "Spela upp alla fr o m h\u00e4r",
"LabelDynamicExternalId": "{0} Id:", "LabelDynamicExternalId": "{0} ID:",
"HeaderIdentify": "Identify Item", "HeaderIdentify": "Identifiera objekt",
"PersonTypePerson": "Person", "PersonTypePerson": "Person",
"LabelTitleDisplayOrder": "Title display order:", "LabelTitleDisplayOrder": "Visningsordning f\u00f6r titlar",
"OptionSortName": "Sort name", "OptionSortName": "Sorteringstitel",
"OptionReleaseDate": "Release date", "OptionReleaseDate": "Premi\u00e4rdatum",
"LabelSeasonNumber": "S\u00e4songsnummer:", "LabelSeasonNumber": "S\u00e4songsnummer:",
"LabelDiscNumber": "Disc number", "LabelDiscNumber": "Skiva nr",
"LabelParentNumber": "Parent number", "LabelParentNumber": "F\u00f6r\u00e4lder nr",
"LabelEpisodeNumber": "Avsnittsnummer:", "LabelEpisodeNumber": "Avsnittsnummer:",
"LabelTrackNumber": "Track number:", "LabelTrackNumber": "Sp\u00e5r nr",
"LabelNumber": "Number:", "LabelNumber": "Nr:",
"LabelReleaseDate": "Release date:", "LabelReleaseDate": "Premi\u00e4rdatum:",
"LabelEndDate": "End date:", "LabelEndDate": "Slutdatum:",
"LabelYear": "Year:", "LabelYear": "\u00c5r:",
"LabelDateOfBirth": "Date of birth:", "LabelDateOfBirth": "F\u00f6delsedatum:",
"LabelBirthYear": "Birth year:", "LabelBirthYear": "F\u00f6delse\u00e5r:",
"LabelDeathDate": "Death date:", "LabelDeathDate": "D\u00f6d:",
"HeaderRemoveMediaLocation": "Remove Media Location", "HeaderRemoveMediaLocation": "Ta bort mediaplats",
"MessageConfirmRemoveMediaLocation": "Are you sure you wish to remove this location?", "MessageConfirmRemoveMediaLocation": "\u00c4r du s\u00e4ker p\u00e5 att du vill ta bort den h\u00e4r platsen?",
"HeaderRenameMediaFolder": "Rename Media Folder", "HeaderRenameMediaFolder": "Byt namn p\u00e5 mediamapp",
"LabelNewName": "New name:", "LabelNewName": "Nytt namn:",
"HeaderAddMediaFolder": "Add Media Folder", "HeaderAddMediaFolder": "Skapa mediamapp",
"HeaderAddMediaFolderHelp": "Name (Movies, Music, TV, etc):", "HeaderAddMediaFolderHelp": "Namn (Filmer, Musik, TV, etc)",
"HeaderRemoveMediaFolder": "Remove Media Folder", "HeaderRemoveMediaFolder": "Ta bort mediamapp",
"MessageTheFollowingLocationWillBeRemovedFromLibrary": "The following media locations will be removed from your library:", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "F\u00f6ljande platser kommer att tas bort fr\u00e5n biblioteket:",
"MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?", "MessageAreYouSureYouWishToRemoveMediaFolder": "\u00c4r du s\u00e4ker p\u00e5 att du vill ta bort den h\u00e4r mappen?",
"ButtonRename": "Rename", "ButtonRename": "\u00c4ndra namn",
"ButtonChangeType": "Change type", "ButtonChangeType": "\u00c4ndra typ",
"HeaderMediaLocations": "Media Locations", "HeaderMediaLocations": "Lagringsplatser f\u00f6r media",
"LabelFolderTypeValue": "Folder type: {0}", "LabelFolderTypeValue": "Typ av mapp: {0}",
"LabelPathSubstitutionHelp": "Optional: Path substitution can map server paths to network shares that clients can access for direct playback.", "LabelPathSubstitutionHelp": "Tillval: S\u00f6kv\u00e4gsutbyte betyder att en plats p\u00e5 servern kopplas till en lokal fils\u00f6kv\u00e4g p\u00e5 en klient. P\u00e5 s\u00e5 s\u00e4tt f\u00e5r klienten direkt tillg\u00e5ng till material p\u00e5 servern och kan spela upp det direkt via n\u00e4tverket.",
"FolderTypeMixed": "Mixed movies & tv", "FolderTypeMixed": "Blandat film & TV",
"FolderTypeMovies": "Filmer", "FolderTypeMovies": "Filmer",
"FolderTypeMusic": "Musik", "FolderTypeMusic": "Musik",
"FolderTypeAdultVideos": "Inneh\u00e5ll f\u00f6r vuxna", "FolderTypeAdultVideos": "Inneh\u00e5ll f\u00f6r vuxna",
"FolderTypePhotos": "Foton", "FolderTypePhotos": "Foton",
"FolderTypeMusicVideos": "Musikvideor", "FolderTypeMusicVideos": "Musikvideor",
"FolderTypeHomeVideos": "Hemvideor", "FolderTypeHomeVideos": "Hemvideor",
"FolderTypeGames": "Games", "FolderTypeGames": "Spel",
"FolderTypeBooks": "B\u00f6cker", "FolderTypeBooks": "B\u00f6cker",
"FolderTypeTvShows": "TV-serier", "FolderTypeTvShows": "TV-serier",
"TabMovies": "Filmer", "TabMovies": "Filmer",
@ -440,38 +440,38 @@
"MessageTrialWillExpireIn": "Provperioden f\u00f6r den h\u00e4r funktionen avslutas om {0} dag(ar)", "MessageTrialWillExpireIn": "Provperioden f\u00f6r den h\u00e4r funktionen avslutas om {0} dag(ar)",
"MessageInstallPluginFromApp": "Detta till\u00e4gg m\u00e5ste installeras inifr\u00e5n den app det skall anv\u00e4ndas i.", "MessageInstallPluginFromApp": "Detta till\u00e4gg m\u00e5ste installeras inifr\u00e5n den app det skall anv\u00e4ndas i.",
"ValuePriceUSD": "Pris: {0} (USD)", "ValuePriceUSD": "Pris: {0} (USD)",
"MessageFeatureIncludedWithSupporter": "You are registered for this feature, and will be able to continue using it with an active supporter membership.", "MessageFeatureIncludedWithSupporter": "Du har registrerat den h\u00e4r funktionen och kan forts\u00e4tta att anv\u00e4nda den om du \u00e4r aktiv supportermedlem.",
"MessageChangeRecurringPlanConfirm": "After completing this transaction you will need to cancel your previous recurring donation from within your PayPal account. Thank you for supporting Media Browser.", "MessageChangeRecurringPlanConfirm": "N\u00e4r du avslutat den h\u00e4r transaktionen beh\u00f6ver du avbryta din tidigare st\u00e5ende donation via ditt PayPal-konto.",
"MessageSupporterMembershipExpiredOn": "Your supporter membership expired on {0}.", "MessageSupporterMembershipExpiredOn": "Ditt supportermedlemskap upph\u00f6rde att g\u00e4lla {0}.",
"MessageYouHaveALifetimeMembership": "You have a lifetime supporter membership. You can provide additional donations on a one-time or recurring basis using the options below. Thank you for supporting Media Browser.", "MessageYouHaveALifetimeMembership": "Du har ett livstids supportermedlemskap. Du kan l\u00e4mna extra bidrag, antingen i eng\u00e5ngsform eller \u00e5terkommande med hj\u00e4lp av valm\u00f6jligheterna nedan. Tack f\u00f6r att Du st\u00f6djer Media Browser.",
"MessageYouHaveAnActiveRecurringMembership": "You have an active {0} membership. You can upgrade your plan using the options below.", "MessageYouHaveAnActiveRecurringMembership": "Du har ett aktivt {0} medlemskap. Du kan uppgradera med hj\u00e4lp av valm\u00f6jligheterna nedan.",
"ButtonDelete": "Ta bort", "ButtonDelete": "Ta bort",
"HeaderMediaBrowserAccountAdded": "Media Browser Account Added", "HeaderMediaBrowserAccountAdded": "Ett Media Browser-konto har skapats",
"MessageMediaBrowserAccountAdded": "The Media Browser account has been added to this user.", "MessageMediaBrowserAccountAdded": "Media Browser-kontot har lagts till den h\u00e4r anv\u00e4ndaren.",
"MessagePendingMediaBrowserAccountAdded": "The Media Browser account has been added to this user. An email will be sent to the owner of the account. The invitation will need to be confirmed by clicking a link within the email.", "MessagePendingMediaBrowserAccountAdded": "Media Browser-kontot har lagts till den h\u00e4r anv\u00e4ndaren. Ett e-postmeddelande skickas till kontots \u00e4gare. Inbjudan m\u00e5ste bekr\u00e4ftas genom att klicka p\u00e5 en l\u00e4nk angiven i meddelandet.",
"HeaderMediaBrowserAccountRemoved": "Media Browser Account Removed", "HeaderMediaBrowserAccountRemoved": "Media Browser-kontot har tagits bort.",
"MessageMediaBrowserAccontRemoved": "The Media Browser account has been removed from this user.", "MessageMediaBrowserAccontRemoved": "Media Browser-kontot har tagits bort fr\u00e5n den h\u00e4r anv\u00e4ndaren.",
"TooltipLinkedToMediaBrowserConnect": "Linked to Media Browser Connect", "TooltipLinkedToMediaBrowserConnect": "L\u00e4nkad till Media Browser Connect",
"HeaderUnrated": "Unrated", "HeaderUnrated": "Ej klassad",
"ValueDiscNumber": "Disc {0}", "ValueDiscNumber": "Skiva {0}",
"HeaderUnknownDate": "Unknown Date", "HeaderUnknownDate": "Ok\u00e4nt datum",
"HeaderUnknownYear": "Unknown Year", "HeaderUnknownYear": "Ok\u00e4nt \u00e5r",
"ValueMinutes": "{0} min", "ValueMinutes": "{0} min",
"ButtonPlayExternalPlayer": "Play with external player", "ButtonPlayExternalPlayer": "Spela upp med extern uppspelare",
"HeaderSelectExternalPlayer": "Select External Player", "HeaderSelectExternalPlayer": "V\u00e4lj extern uppspelare",
"HeaderExternalPlayerPlayback": "External Player Playback", "HeaderExternalPlayerPlayback": "Uppspelning med extern uppspelare",
"ButtonImDone": "I'm Done", "ButtonImDone": "Klart!",
"OptionWatched": "Watched", "OptionWatched": "Visad",
"OptionUnwatched": "Unwatched", "OptionUnwatched": "Ej visad",
"ExternalPlayerPlaystateOptionsHelp": "Specify how you would like to resume playing this video next time.", "ExternalPlayerPlaystateOptionsHelp": "Ange hur du vill \u00e5teruppta den h\u00e4r videon n\u00e4sta g\u00e5ng.",
"LabelMarkAs": "Mark as:", "LabelMarkAs": "Markera som:",
"OptionInProgress": "In-Progress", "OptionInProgress": "P\u00e5g\u00e5r",
"LabelResumePoint": "Resume point:", "LabelResumePoint": "\u00c5teruppta vid:",
"ValueOneMovie": "1 movie", "ValueOneMovie": "1 film",
"ValueMovieCount": "{0} movies", "ValueMovieCount": "{0} filmer",
"ValueOneTrailer": "1 trailer", "ValueOneTrailer": "1 trailer",
"ValueTrailerCount": "{0} trailers", "ValueTrailerCount": "{0} trailers",
"ValueOneSeries": "1 series", "ValueOneSeries": "1 serie",
"ValueSeriesCount": "{0} serier", "ValueSeriesCount": "{0} serier",
"ValueOneEpisode": "1 avsnitt", "ValueOneEpisode": "1 avsnitt",
"ValueEpisodeCount": "{0} avsnitt", "ValueEpisodeCount": "{0} avsnitt",
@ -506,7 +506,7 @@
"HeaderCastAndCrew": "Medverkande", "HeaderCastAndCrew": "Medverkande",
"ValueArtist": "Artist: {0}", "ValueArtist": "Artist: {0}",
"ValueArtists": "Artister: {0}", "ValueArtists": "Artister: {0}",
"HeaderTags": "Tags", "HeaderTags": "Etiketter",
"MediaInfoCameraMake": "Kamerafabrikat", "MediaInfoCameraMake": "Kamerafabrikat",
"MediaInfoCameraModel": "Kameramodell", "MediaInfoCameraModel": "Kameramodell",
"MediaInfoAltitude": "H\u00f6jd", "MediaInfoAltitude": "H\u00f6jd",
@ -520,69 +520,69 @@
"MediaInfoShutterSpeed": "Slutartid", "MediaInfoShutterSpeed": "Slutartid",
"MediaInfoSoftware": "Programvara", "MediaInfoSoftware": "Programvara",
"HeaderIfYouLikeCheckTheseOut": "Om du gillar {0}, ta en titt p\u00e5...", "HeaderIfYouLikeCheckTheseOut": "Om du gillar {0}, ta en titt p\u00e5...",
"HeaderPlotKeywords": "Plot Keywords", "HeaderPlotKeywords": "Nyckelord i handlingen",
"HeaderMovies": "Filmer", "HeaderMovies": "Filmer",
"HeaderAlbums": "Album", "HeaderAlbums": "Album",
"HeaderGames": "Spel", "HeaderGames": "Spel",
"HeaderBooks": "B\u00f6cker", "HeaderBooks": "B\u00f6cker",
"HeaderEpisodes": "Episodes", "HeaderEpisodes": "Avsnitt",
"HeaderSeasons": "Seasons", "HeaderSeasons": "S\u00e4songer",
"HeaderTracks": "Tracks", "HeaderTracks": "Sp\u00e5r",
"HeaderItems": "Items", "HeaderItems": "Objekt",
"HeaderOtherItems": "Other Items", "HeaderOtherItems": "\u00d6vriga objekt",
"ButtonFullReview": "Full review", "ButtonFullReview": "Fullst\u00e4ndig recension:",
"ValueAsRole": "as {0}", "ValueAsRole": "som {0}",
"ValueGuestStar": "Guest star", "ValueGuestStar": "G\u00e4startist",
"MediaInfoSize": "Size", "MediaInfoSize": "Storlek",
"MediaInfoPath": "Path", "MediaInfoPath": "S\u00f6kv\u00e4g",
"MediaInfoFormat": "Format", "MediaInfoFormat": "Format",
"MediaInfoContainer": "Container", "MediaInfoContainer": "Container",
"MediaInfoDefault": "Default", "MediaInfoDefault": "F\u00f6rval",
"MediaInfoForced": "Forced", "MediaInfoForced": "Tvingade",
"MediaInfoExternal": "External", "MediaInfoExternal": "Externa",
"MediaInfoTimestamp": "Timestamp", "MediaInfoTimestamp": "Tidsst\u00e4mpel",
"MediaInfoPixelFormat": "Pixel format", "MediaInfoPixelFormat": "Pixelformat",
"MediaInfoBitDepth": "Bit depth", "MediaInfoBitDepth": "F\u00e4rgdjup",
"MediaInfoSampleRate": "Sample rate", "MediaInfoSampleRate": "Samplingsfrekvens",
"MediaInfoBitrate": "Bitrate", "MediaInfoBitrate": "Bithastighet",
"MediaInfoChannels": "Channels", "MediaInfoChannels": "Kanaler",
"MediaInfoLayout": "Layout", "MediaInfoLayout": "Layout",
"MediaInfoLanguage": "Language", "MediaInfoLanguage": "Spr\u00e5k",
"MediaInfoCodec": "Codec", "MediaInfoCodec": "Codec",
"MediaInfoProfile": "Profile", "MediaInfoProfile": "Profil",
"MediaInfoLevel": "Level", "MediaInfoLevel": "Niv\u00e5",
"MediaInfoAspectRatio": "Aspect ratio", "MediaInfoAspectRatio": "Bildf\u00f6rh\u00e5llande:",
"MediaInfoResolution": "Resolution", "MediaInfoResolution": "Uppl\u00f6sning",
"MediaInfoAnamorphic": "Anamorphic", "MediaInfoAnamorphic": "Anamorfisk",
"MediaInfoInterlaced": "Interlaced", "MediaInfoInterlaced": "Sammanfl\u00e4tad",
"MediaInfoFramerate": "Framerate", "MediaInfoFramerate": "Bildfrekvens",
"MediaInfoStreamTypeAudio": "Audio", "MediaInfoStreamTypeAudio": "Ljud",
"MediaInfoStreamTypeData": "Data", "MediaInfoStreamTypeData": "Data",
"MediaInfoStreamTypeVideo": "Video", "MediaInfoStreamTypeVideo": "Video",
"MediaInfoStreamTypeSubtitle": "Subtitle", "MediaInfoStreamTypeSubtitle": "Undertext",
"MediaInfoStreamTypeEmbeddedImage": "Embedded Image", "MediaInfoStreamTypeEmbeddedImage": "Infogad bild",
"MediaInfoRefFrames": "Referensbildrutor", "MediaInfoRefFrames": "Referensbildrutor",
"TabPlayback": "Uppspelning", "TabPlayback": "Uppspelning",
"HeaderSelectCustomIntrosPath": "V\u00e4lj s\u00f6kv\u00e4g f\u00f6r egna vinjetter", "HeaderSelectCustomIntrosPath": "V\u00e4lj s\u00f6kv\u00e4g f\u00f6r egna vinjetter",
"HeaderRateAndReview": "Rate and Review", "HeaderRateAndReview": "Betygs\u00e4tt och rescensera",
"HeaderThankYou": "Thank You", "HeaderThankYou": "Tack",
"MessageThankYouForYourReview": "Thank you for your review.", "MessageThankYouForYourReview": "Tack f\u00f6r din rescension",
"LabelYourRating": "Your rating:", "LabelYourRating": "Ditt betyg:",
"LabelFullReview": "Full review:", "LabelFullReview": "Fullst\u00e4ndig recension:",
"LabelShortRatingDescription": "Short rating summary:", "LabelShortRatingDescription": "Kort summering av betyg:",
"OptionIRecommendThisItem": "I recommend this item", "OptionIRecommendThisItem": "Jag rekommenderar detta",
"WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.", "WebClientTourContent": "Se nytillkommet inneh\u00e5ll, kommande avsnitt m m. De gr\u00f6na ringarna anger hur m\u00e5nga ej visade objekt som finns.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser", "WebClientTourMovies": "Se filmer, trailers och mycket mera p\u00e5 vilken enhet som helst som har en webbl\u00e4sare",
"WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information", "WebClientTourMouseOver": "H\u00e5ll muspekaren \u00f6ver en affisch f\u00f6r att se den viktigaste informationen",
"WebClientTourTapHold": "Tap and hold or right click any poster for a context menu", "WebClientTourTapHold": "Tryck-och-h\u00e5ll eller h\u00f6gerklicka p\u00e5 en affisch f\u00f6r att f\u00e5 upp en inneh\u00e5llsmeny",
"WebClientTourMetadataManager": "Click edit to open the metadata manager", "WebClientTourMetadataManager": "Klicka p\u00e5 \"\u00e4ndra\" f\u00f6r att \u00f6ppna metadatahanteraren",
"WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device", "WebClientTourPlaylists": "Skapa enkelt spellistor och snabbmixar och spela upp dem p\u00e5 valfri enhet",
"WebClientTourCollections": "Create movie collections to group box sets together", "WebClientTourCollections": "Skapa dina egna samlingsboxar",
"WebClientTourUserPreferences1": "User preferences allow you to customize the way your library is presented in all of your Media Browser apps", "WebClientTourUserPreferences1": "Personliga inst\u00e4llningar l\u00e5ter dig anpassa hur ditt bibliotek visas i alla dina Media Browser-appar",
"WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app", "WebClientTourUserPreferences2": "V\u00e4lj ljudspr\u00e5k uch undertexter en g\u00e5ng f\u00f6r alla f\u00f6r alla Media Browser-appar",
"WebClientTourUserPreferences3": "Design the web client home page to your liking", "WebClientTourUserPreferences3": "Utforma webbklientens utseende enligt egna \u00f6nskem\u00e5l",
"WebClientTourUserPreferences4": "Configure backdrops, theme songs and external players", "WebClientTourUserPreferences4": "Anpassa fondbilder, ledmotiv och externa uppspelare",
"WebClientTourMobile1": "The web client works great on smartphones and tablets...", "WebClientTourMobile1": "Webbklienten fungerar perfekt p\u00e5 smarta telefoner och surfplattor...",
"WebClientTourMobile2": "and easily controls other devices and Media Browser apps", "WebClientTourMobile2": "och kan enkelt fj\u00e4rrstyra andra enheter och Media Browser-appar",
"MessageEnjoyYourStay": "Enjoy your stay" "MessageEnjoyYourStay": "Ha ett trevligt bes\u00f6k"
} }

View File

@ -258,7 +258,7 @@
"OptionUnplayed": "No reproducido", "OptionUnplayed": "No reproducido",
"LabelAirTime": "Duraci\u00f3n:", "LabelAirTime": "Duraci\u00f3n:",
"OptionAscending": "Ascendente", "OptionAscending": "Ascendente",
"HeaderMediaInfo": "Info del Medio:", "HeaderMediaInfo": "Info del Medio",
"OptionDescending": "Descendente", "OptionDescending": "Descendente",
"HeaderPhotoInfo": "Info de Fotograf\u00eda:", "HeaderPhotoInfo": "Info de Fotograf\u00eda:",
"OptionRuntime": "Duraci\u00f3n", "OptionRuntime": "Duraci\u00f3n",
@ -289,7 +289,7 @@
"HeaderXmlDocumentAttribute": "Atributo del Documento XML", "HeaderXmlDocumentAttribute": "Atributo del Documento XML",
"OptionRevenue": "Recaudaci\u00f3n", "OptionRevenue": "Recaudaci\u00f3n",
"XmlDocumentAttributeListHelp": "Estos atributos son aplicados al elemento ra\u00edz de cada respuesta XML.", "XmlDocumentAttributeListHelp": "Estos atributos son aplicados al elemento ra\u00edz de cada respuesta XML.",
"OptionPoster": "Poster", "OptionPoster": "Cartel",
"OptionSaveMetadataAsHidden": "Guardar metadatos e im\u00e1genes como archivos ocultos", "OptionSaveMetadataAsHidden": "Guardar metadatos e im\u00e1genes como archivos ocultos",
"OptionBackdrop": "Imagen de Fondo", "OptionBackdrop": "Imagen de Fondo",
"LabelExtractChaptersDuringLibraryScan": "Extraer im\u00e1genes de cap\u00edtulos durante el escaneo de la biblioteca", "LabelExtractChaptersDuringLibraryScan": "Extraer im\u00e1genes de cap\u00edtulos durante el escaneo de la biblioteca",
@ -1000,7 +1000,7 @@
"MessageNoPlaylistItemsAvailable": "Esta lista de reproducci\u00f3n se encuentra vac\u00eda.", "MessageNoPlaylistItemsAvailable": "Esta lista de reproducci\u00f3n se encuentra vac\u00eda.",
"HeaderWelcomeToMediaBrowserWebClient": "Bienvenido al Cliente Web de Media Browser", "HeaderWelcomeToMediaBrowserWebClient": "Bienvenido al Cliente Web de Media Browser",
"ButtonDismiss": "Descartar", "ButtonDismiss": "Descartar",
"ButtonTakeTheTour": "Take the tour", "ButtonTakeTheTour": "Haga el recorrido",
"ButtonEditOtherUserPreferences": "Edita las preferencias personales de este usuario.", "ButtonEditOtherUserPreferences": "Edita las preferencias personales de este usuario.",
"LabelChannelStreamQuality": "Calidad por defecto para transmisi\u00f3n por internet:", "LabelChannelStreamQuality": "Calidad por defecto para transmisi\u00f3n por internet:",
"LabelChannelStreamQualityHelp": "En un ambiente de ancho de banda limitado, limitar la calidad puede ayudar a asegurar una experiencia de transimisi\u00f3n en tiempo real fluida.", "LabelChannelStreamQualityHelp": "En un ambiente de ancho de banda limitado, limitar la calidad puede ayudar a asegurar una experiencia de transimisi\u00f3n en tiempo real fluida.",
@ -1013,7 +1013,7 @@
"LabelChannelDownloadAgeHelp": "El contenido descargado anterior a esto ser\u00e1 eliminado. Permanecer\u00e1 reproducible via transmisi\u00f3n en tiempo real por Internet.", "LabelChannelDownloadAgeHelp": "El contenido descargado anterior a esto ser\u00e1 eliminado. Permanecer\u00e1 reproducible via transmisi\u00f3n en tiempo real por Internet.",
"ChannelSettingsFormHelp": "Instale canales tales como Avances y Vimeo desde el cat\u00e1logo de complementos.", "ChannelSettingsFormHelp": "Instale canales tales como Avances y Vimeo desde el cat\u00e1logo de complementos.",
"LabelSelectCollection": "Elegir colecci\u00f3n:", "LabelSelectCollection": "Elegir colecci\u00f3n:",
"ButtonOptions": "Options", "ButtonOptions": "Opciones",
"ViewTypeMovies": "Pel\u00edculas", "ViewTypeMovies": "Pel\u00edculas",
"ViewTypeTvShows": "TV", "ViewTypeTvShows": "TV",
"ViewTypeGames": "Juegos", "ViewTypeGames": "Juegos",

View File

@ -1000,7 +1000,7 @@
"MessageNoPlaylistItemsAvailable": "\u041e\u0441\u044b \u043e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c \u0430\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0431\u043e\u0441.", "MessageNoPlaylistItemsAvailable": "\u041e\u0441\u044b \u043e\u0439\u043d\u0430\u0442\u0443 \u0442\u0456\u0437\u0456\u043c \u0430\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0431\u043e\u0441.",
"HeaderWelcomeToMediaBrowserWebClient": "Media Browser \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0430\u0493\u0434\u0430\u0440\u043b\u0430\u043c\u0430\u0441\u044b\u043d\u0430 \u0445\u043e\u0448 \u043a\u0435\u043b\u0434\u0456\u04a3\u0456\u0437!", "HeaderWelcomeToMediaBrowserWebClient": "Media Browser \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \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", "ButtonDismiss": "\u0416\u0430\u0441\u044b\u0440\u0443",
"ButtonTakeTheTour": "Take the tour", "ButtonTakeTheTour": "\u0410\u0440\u0430\u043b\u0430\u043f \u0448\u044b\u0493\u044b\u04a3\u044b\u0437",
"ButtonEditOtherUserPreferences": "\u041e\u0441\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0456\u043d \u04e9\u04a3\u0434\u0435\u0443.", "ButtonEditOtherUserPreferences": "\u041e\u0441\u044b \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0434\u0435\u0440\u0456\u043d \u04e9\u04a3\u0434\u0435\u0443.",
"LabelChannelStreamQuality": "\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0430\u0440\u049b\u044b\u043b\u044b \u0430\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443 \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0456:", "LabelChannelStreamQuality": "\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0430\u0440\u049b\u044b\u043b\u044b \u0430\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443 \u0442\u0435\u04a3\u0448\u0435\u043b\u0456\u043c\u0456:",
"LabelChannelStreamQualityHelp": "\u04e8\u0442\u043a\u0456\u0437\u0443 \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u0433\u0456 \u0442\u04e9\u043c\u0435\u043d \u043e\u0440\u0442\u0430\u0434\u0430, \u0441\u0430\u043f\u0430\u0441\u044b\u043d \u0448\u0435\u043a\u0442\u0435\u0443\u0456 \u0436\u0430\u0442\u044b\u049b\u0442\u0430\u0443 \u0430\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443 \u04d9\u0441\u0435\u0440\u0456\u043d \u049b\u0430\u043c\u0442\u0430\u043c\u0430\u0441\u044b\u0437 \u0435\u0442\u0443\u0456\u043d\u0435 \u043a\u04e9\u043c\u0435\u043a\u0442\u0435\u0441\u0443\u0456 \u043c\u04af\u043c\u043a\u0456\u043d.", "LabelChannelStreamQualityHelp": "\u04e8\u0442\u043a\u0456\u0437\u0443 \u043c\u04af\u043c\u043a\u0456\u043d\u0434\u0456\u0433\u0456 \u0442\u04e9\u043c\u0435\u043d \u043e\u0440\u0442\u0430\u0434\u0430, \u0441\u0430\u043f\u0430\u0441\u044b\u043d \u0448\u0435\u043a\u0442\u0435\u0443\u0456 \u0436\u0430\u0442\u044b\u049b\u0442\u0430\u0443 \u0430\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443 \u04d9\u0441\u0435\u0440\u0456\u043d \u049b\u0430\u043c\u0442\u0430\u043c\u0430\u0441\u044b\u0437 \u0435\u0442\u0443\u0456\u043d\u0435 \u043a\u04e9\u043c\u0435\u043a\u0442\u0435\u0441\u0443\u0456 \u043c\u04af\u043c\u043a\u0456\u043d.",

View File

@ -130,17 +130,17 @@
"OptionDefaultSubtitles": "Standard", "OptionDefaultSubtitles": "Standard",
"LabelAlbum": "Album:", "LabelAlbum": "Album:",
"OptionOnlyForcedSubtitles": "Kun tvunget undertekster", "OptionOnlyForcedSubtitles": "Kun tvunget undertekster",
"LabelCommunityRating": "Community rating:", "LabelCommunityRating": "Fellesskap anmeldelse:",
"OptionAlwaysPlaySubtitles": "Alltid spill undertekster", "OptionAlwaysPlaySubtitles": "Alltid spill undertekster",
"LabelVoteCount": "Vote count:", "LabelVoteCount": "Stemme tall:",
"OptionNoSubtitles": "Ingen Undertekster", "OptionNoSubtitles": "Ingen Undertekster",
"LabelMetascore": "Metascore:", "LabelMetascore": "Metascore:",
"OptionDefaultSubtitlesHelp": "Undertekster som matcher spr\u00e5kpreferansene vil bli lastet n\u00e5r lyd er i utenlandsk spr\u00e5k.", "OptionDefaultSubtitlesHelp": "Undertekster som matcher spr\u00e5kpreferansene vil bli lastet n\u00e5r lyd er i utenlandsk spr\u00e5k.",
"LabelCriticRating": "Critic rating:", "LabelCriticRating": "Kritiker anmeldelse:",
"OptionOnlyForcedSubtitlesHelp": "Kun undertekster marker som tvunget vil bli lastet.", "OptionOnlyForcedSubtitlesHelp": "Kun undertekster marker som tvunget vil bli lastet.",
"LabelCriticRatingSummary": "Critic rating summary:", "LabelCriticRatingSummary": "Kritiker anmeldelse sammendrag:",
"OptionAlwaysPlaySubtitlesHelp": "Undertekster som matcher spr\u00e5kets innstillinger vil bli lastet uavhengig lydens spr\u00e5k.", "OptionAlwaysPlaySubtitlesHelp": "Undertekster som matcher spr\u00e5kets innstillinger vil bli lastet uavhengig lydens spr\u00e5k.",
"LabelAwardSummary": "Award summary:", "LabelAwardSummary": "Pris sammendrag:",
"OptionNoSubtitlesHelp": "Undertekster vil ikke bli lastet som standard.", "OptionNoSubtitlesHelp": "Undertekster vil ikke bli lastet som standard.",
"LabelWebsite": "Nettsted:", "LabelWebsite": "Nettsted:",
"TabProfiles": "Profiler", "TabProfiles": "Profiler",
@ -158,15 +158,15 @@
"ButtonResetPassword": "Resett passord", "ButtonResetPassword": "Resett passord",
"LabelEndDate": "Slutt dato:", "LabelEndDate": "Slutt dato:",
"LabelNewPassword": "Nytt passord", "LabelNewPassword": "Nytt passord",
"LabelAirDate": "Air days:", "LabelAirDate": "Sendings dager:",
"LabelNewPasswordConfirm": "Bekreft nytt passord", "LabelNewPasswordConfirm": "Bekreft nytt passord",
"LabelAirTime:": "Air time:", "LabelAirTime:": "Sendings tid:",
"HeaderCreatePassword": "Lag nytt passord", "HeaderCreatePassword": "Lag nytt passord",
"LabelRuntimeMinutes": "Spilletid (minutter):", "LabelRuntimeMinutes": "Spilletid (minutter):",
"LabelCurrentPassword": "N\u00e5v\u00e6rende passord", "LabelCurrentPassword": "N\u00e5v\u00e6rende passord",
"LabelParentalRating": "Foreldresensur:", "LabelParentalRating": "Foreldresensur:",
"LabelMaxParentalRating": "Maks tillatt sensur.", "LabelMaxParentalRating": "Maks tillatt sensur.",
"LabelCustomRating": "Custom rating:", "LabelCustomRating": "Kunde anmeldelse:",
"MaxParentalRatingHelp": "Innhold med h\u00f8yere aldersgrense vil bli skjult for brukeren", "MaxParentalRatingHelp": "Innhold med h\u00f8yere aldersgrense vil bli skjult for brukeren",
"LabelBudget": "Budsjett", "LabelBudget": "Budsjett",
"LibraryAccessHelp": "Velg media mappe som skal deles med denne brukren. Administrator vil ha mulighet for \u00e5 endre alle mapper ved \u00e5 bruke metadata behandler.", "LibraryAccessHelp": "Velg media mappe som skal deles med denne brukren. Administrator vil ha mulighet for \u00e5 endre alle mapper ved \u00e5 bruke metadata behandler.",
@ -200,13 +200,13 @@
"TabEpisodes": "Episoder", "TabEpisodes": "Episoder",
"LabelDisplayOrder": "Visnings rekkef\u00f8lge:", "LabelDisplayOrder": "Visnings rekkef\u00f8lge:",
"TabGenres": "Sjanger", "TabGenres": "Sjanger",
"LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in", "LabelDisplaySpecialsWithinSeasons": "Vis speialiteter innfor sensongen de ble sendt i",
"TabPeople": "Folk", "TabPeople": "Folk",
"HeaderCountries": "Land", "HeaderCountries": "Land",
"TabNetworks": "Nettverk", "TabNetworks": "Nettverk",
"HeaderGenres": "Sjanger", "HeaderGenres": "Sjanger",
"HeaderUsers": "Bruker", "HeaderUsers": "Bruker",
"HeaderPlotKeywords": "Plot Keywords", "HeaderPlotKeywords": "Plott n\u00f8kkelord",
"HeaderFilters": "Filtre", "HeaderFilters": "Filtre",
"HeaderStudios": "Studioer", "HeaderStudios": "Studioer",
"ButtonFilter": "Filter", "ButtonFilter": "Filter",
@ -222,7 +222,7 @@
"OptionGuestStars": "Gjeste-opptredelser", "OptionGuestStars": "Gjeste-opptredelser",
"HeaderDonationType": "Donasjon type:", "HeaderDonationType": "Donasjon type:",
"OptionDirectors": "Regis\u00f8r", "OptionDirectors": "Regis\u00f8r",
"OptionMakeOneTimeDonation": "Make a separate donation", "OptionMakeOneTimeDonation": "Gi en egen donasjon",
"OptionWriters": "Manus", "OptionWriters": "Manus",
"OptionOneTimeDescription": "Dette er en ekstra donasjon til teamet for \u00e5 vise din st\u00f8tte. Det har ikke noen ekstra fordeler, og vil ikke produsere en supporter tasten.", "OptionOneTimeDescription": "Dette er en ekstra donasjon til teamet for \u00e5 vise din st\u00f8tte. Det har ikke noen ekstra fordeler, og vil ikke produsere en supporter tasten.",
"OptionProducers": "Produsent", "OptionProducers": "Produsent",
@ -238,9 +238,9 @@
"HeaderPersonTypes": "Person Typer:", "HeaderPersonTypes": "Person Typer:",
"OptionNoThemeSong": "Ingen temasang", "OptionNoThemeSong": "Ingen temasang",
"TabSongs": "Sanger", "TabSongs": "Sanger",
"OptionNoThemeVideo": "No Theme Video", "OptionNoThemeVideo": "Ingen tema video",
"TabAlbums": "Album", "TabAlbums": "Album",
"LabelOneTimeDonationAmount": "Donation amount:", "LabelOneTimeDonationAmount": "Donasjons bel\u00f8p:",
"TabArtists": "Artister", "TabArtists": "Artister",
"OptionActor": "Skuespiller", "OptionActor": "Skuespiller",
"TabAlbumArtists": "Album Artister", "TabAlbumArtists": "Album Artister",
@ -248,15 +248,15 @@
"TabMusicVideos": "Musikk-videoer", "TabMusicVideos": "Musikk-videoer",
"OptionDirector": "Regiss\u00f8r", "OptionDirector": "Regiss\u00f8r",
"ButtonSort": "Sorter", "ButtonSort": "Sorter",
"OptionGuestStar": "Guest star", "OptionGuestStar": "Stjerne gjest",
"HeaderSortBy": "Sorter etter", "HeaderSortBy": "Sorter etter",
"OptionProducer": "Produsent", "OptionProducer": "Produsent",
"HeaderSortOrder": "Sorter Etter:", "HeaderSortOrder": "Sorter Etter:",
"OptionWriter": "Manus", "OptionWriter": "Manus",
"OptionPlayed": "Sett", "OptionPlayed": "Sett",
"LabelAirDays": "Air days:", "LabelAirDays": "Sendings dager:",
"OptionUnplayed": "Ikke sett", "OptionUnplayed": "Ikke sett",
"LabelAirTime": "Air time:", "LabelAirTime": "Sendings tid:",
"OptionAscending": "Oppover", "OptionAscending": "Oppover",
"HeaderMediaInfo": "Media informasjon", "HeaderMediaInfo": "Media informasjon",
"OptionDescending": "Nedover", "OptionDescending": "Nedover",
@ -491,11 +491,11 @@
"TabFavorites": "Favoritter", "TabFavorites": "Favoritter",
"TabMyLibrary": "Mitt Bibliotek", "TabMyLibrary": "Mitt Bibliotek",
"ButtonCancelRecording": "Avbryt Opptak", "ButtonCancelRecording": "Avbryt Opptak",
"HeaderPrePostPadding": "Pre\/Post Padding", "HeaderPrePostPadding": "Margin f\u00f8r\/etter",
"LabelPrePaddingMinutes": "Pre-padding minutter:", "LabelPrePaddingMinutes": "Margin f\u00f8r programstart i minutter:",
"OptionPrePaddingRequired": "Pre-padding beh\u00f8ves for \u00e5 kunne gj\u00f8re opptak", "OptionPrePaddingRequired": "Margin f\u00f8r programstart kreves for \u00e5 kunne gj\u00f8re opptak",
"LabelPostPaddingMinutes": "post-padding minutter:", "LabelPostPaddingMinutes": "Margin etter programslutt i minutter:",
"OptionPostPaddingRequired": "Post-padding beh\u00f8ves for \u00e5 kunne gj\u00f8re opptak.", "OptionPostPaddingRequired": "Margin etter programslutt kreves for \u00e5 kunne gj\u00f8re opptak",
"HeaderWhatsOnTV": "Hva er p\u00e5", "HeaderWhatsOnTV": "Hva er p\u00e5",
"HeaderUpcomingTV": "Kommende TV", "HeaderUpcomingTV": "Kommende TV",
"TabStatus": "Status", "TabStatus": "Status",
@ -819,7 +819,7 @@
"ButtonFullscreen": "Veksle fullskjerm", "ButtonFullscreen": "Veksle fullskjerm",
"ButtonScenes": "Scener", "ButtonScenes": "Scener",
"ButtonSubtitles": "Undertekster", "ButtonSubtitles": "Undertekster",
"ButtonAudioTracks": "Lyd spor", "ButtonAudioTracks": "Lydspor",
"ButtonPreviousTrack": "Forrige Spor", "ButtonPreviousTrack": "Forrige Spor",
"ButtonNextTrack": "Neste Spor", "ButtonNextTrack": "Neste Spor",
"ButtonStop": "Stopp", "ButtonStop": "Stopp",

View File

@ -81,7 +81,7 @@
"LabelDisplayFoldersView": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0430\u0441\u043f\u0435\u043a\u0442 \u041f\u0430\u043f\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043a\u0438", "LabelDisplayFoldersView": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0430\u0441\u043f\u0435\u043a\u0442 \u041f\u0430\u043f\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043a\u0438",
"MediaFolderHelpPluginRequired": "* \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d, \u043d\u043f\u0440., GameBrowser \u0438\u043b\u0438 MB Bookshelf.", "MediaFolderHelpPluginRequired": "* \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d, \u043d\u043f\u0440., GameBrowser \u0438\u043b\u0438 MB Bookshelf.",
"ViewTypeLiveTvRecordingGroups": "\u0417\u0430\u043f\u0438\u0441\u0438", "ViewTypeLiveTvRecordingGroups": "\u0417\u0430\u043f\u0438\u0441\u0438",
"ReferToMediaLibraryWiki": "\u041d\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0432\u0438\u043a\u0438 \u043f\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435.", "ReferToMediaLibraryWiki": "\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0432\u0438\u043a\u0438 \u043f\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435.",
"ViewTypeLiveTvChannels": "\u041a\u0430\u043d\u0430\u043b\u044b", "ViewTypeLiveTvChannels": "\u041a\u0430\u043d\u0430\u043b\u044b",
"LabelCountry": "\u0421\u0442\u0440\u0430\u043d\u0430:", "LabelCountry": "\u0421\u0442\u0440\u0430\u043d\u0430:",
"LabelAllowLocalAccessWithoutPassword": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f", "LabelAllowLocalAccessWithoutPassword": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f",
@ -938,7 +938,7 @@
"LabelSubtitlePlaybackMode": "\u0420\u0435\u0436\u0438\u043c \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432:", "LabelSubtitlePlaybackMode": "\u0420\u0435\u0436\u0438\u043c \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432:",
"LabelDownloadLanguages": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u044f\u0437\u044b\u043a\u0438:", "LabelDownloadLanguages": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u044f\u0437\u044b\u043a\u0438:",
"ButtonRegister": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f", "ButtonRegister": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f",
"LabelSkipIfAudioTrackPresent": "\u041e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0430\u0443\u0434\u0438\u043e\u0434\u043e\u0440\u043e\u0436\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443", "LabelSkipIfAudioTrackPresent": "\u041e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0430\u0443\u0434\u0438\u043e\u0434\u043e\u0440\u043e\u0436\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443",
"LabelSkipIfAudioTrackPresentHelp": "\u0421\u043d\u044f\u0442\u044c \u0444\u043b\u0430\u0436\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u043c\u0443 \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u0430\u0443\u0434\u0438\u043e.", "LabelSkipIfAudioTrackPresentHelp": "\u0421\u043d\u044f\u0442\u044c \u0444\u043b\u0430\u0436\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u043c\u0443 \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u0430\u0443\u0434\u0438\u043e.",
"HeaderSendMessage": "\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f", "HeaderSendMessage": "\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f",
"ButtonSend": "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c", "ButtonSend": "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c",
@ -991,7 +991,7 @@
"MessageLoadingChannels": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043a\u0430\u043d\u0430\u043b\u0430...", "MessageLoadingChannels": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043a\u0430\u043d\u0430\u043b\u0430...",
"MessageLoadingContent": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435...", "MessageLoadingContent": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435...",
"ButtonMarkRead": "\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u0447\u0442\u0451\u043d\u043d\u043e\u0435", "ButtonMarkRead": "\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u0447\u0442\u0451\u043d\u043d\u043e\u0435",
"OptionDefaultSort": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f", "OptionDefaultSort": "\u0423\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435",
"OptionCommunityMostWatchedSort": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435", "OptionCommunityMostWatchedSort": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435",
"TabNextUp": "\u041e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435", "TabNextUp": "\u041e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435",
"MessageNoMovieSuggestionsAvailable": "\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b. \u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0444\u0438\u043b\u044c\u043c\u044b, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u043d\u0430\u0437\u0430\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.", "MessageNoMovieSuggestionsAvailable": "\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b. \u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0444\u0438\u043b\u044c\u043c\u044b, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0432\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u043d\u0430\u0437\u0430\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.",

View File

@ -92,9 +92,9 @@
"LabelSaveLocalMetadata": "Spara grafik och metadata i mediamapparna", "LabelSaveLocalMetadata": "Spara grafik och metadata i mediamapparna",
"HeaderLocalAccess": "Lokal \u00e5tkomst", "HeaderLocalAccess": "Lokal \u00e5tkomst",
"LabelSaveLocalMetadataHelp": "Om grafik och metadata sparas tillsammans med media \u00e4r de enkelt \u00e5tkomliga f\u00f6r redigering.", "LabelSaveLocalMetadataHelp": "Om grafik och metadata sparas tillsammans med media \u00e4r de enkelt \u00e5tkomliga f\u00f6r redigering.",
"HeaderViewOrder": "View Order", "HeaderViewOrder": "Visningsordning",
"LabelDownloadInternetMetadata": "H\u00e4mta grafik och metadata fr\u00e5n Internet", "LabelDownloadInternetMetadata": "H\u00e4mta grafik och metadata fr\u00e5n Internet",
"LabelSelectUserViewOrder": "Choose the order your views will be displayed in within Media Browser apps", "LabelSelectUserViewOrder": "V\u00e4lj i vilken ordning dina vyer skall visas i Media Browser-appar",
"LabelDownloadInternetMetadataHelp": "Media Browser kan h\u00e4mta informatiom om dina media fr\u00e5n Internet f\u00f6r att ge en visuellt full\u00e4ndad presentation.", "LabelDownloadInternetMetadataHelp": "Media Browser kan h\u00e4mta informatiom om dina media fr\u00e5n Internet f\u00f6r att ge en visuellt full\u00e4ndad presentation.",
"LabelMetadataRefreshMode": "Metod f\u00f6r uppdatering av metadata:", "LabelMetadataRefreshMode": "Metod f\u00f6r uppdatering av metadata:",
"TabPreferences": "Inst\u00e4llningar", "TabPreferences": "Inst\u00e4llningar",
@ -149,82 +149,82 @@
"LabelOverview": "Synopsis:", "LabelOverview": "Synopsis:",
"ButtonAddUser": "Ny anv\u00e4ndare", "ButtonAddUser": "Ny anv\u00e4ndare",
"LabelShortOverview": "Kort synopsis:", "LabelShortOverview": "Kort synopsis:",
"LabelReleaseDate": "Release date:", "LabelReleaseDate": "Premi\u00e4rdatum:",
"ButtonAddLocalUser": "Add Local User", "ButtonAddLocalUser": "Skapa lokal anv\u00e4ndare",
"LabelYear": "Year:", "LabelYear": "\u00c5r:",
"ButtonInviteMediaBrowserUser": "Invite Media Browser User", "ButtonInviteMediaBrowserUser": "Bjud in Media Browser-anv\u00e4ndare",
"ButtonSave": "Spara", "ButtonSave": "Spara",
"LabelPlaceOfBirth": "F\u00f6delseort:", "LabelPlaceOfBirth": "F\u00f6delseort:",
"ButtonResetPassword": "\u00c5terst\u00e4ll l\u00f6senord", "ButtonResetPassword": "\u00c5terst\u00e4ll l\u00f6senord",
"LabelEndDate": "End date:", "LabelEndDate": "Slutdatum:",
"LabelNewPassword": "Nytt l\u00f6senord:", "LabelNewPassword": "Nytt l\u00f6senord:",
"LabelAirDate": "S\u00e4ndningsdagar:", "LabelAirDate": "S\u00e4ndningsdagar:",
"LabelNewPasswordConfirm": "Bekr\u00e4fta nytt l\u00f6senord:", "LabelNewPasswordConfirm": "Bekr\u00e4fta nytt l\u00f6senord:",
"LabelAirTime:": "S\u00e4ndningstid:", "LabelAirTime:": "S\u00e4ndningstid:",
"HeaderCreatePassword": "Skapa l\u00f6senord", "HeaderCreatePassword": "Skapa l\u00f6senord",
"LabelRuntimeMinutes": "Run time (minutes):", "LabelRuntimeMinutes": "Speltid (min):",
"LabelCurrentPassword": "Nuvarande l\u00f6senord:", "LabelCurrentPassword": "Nuvarande l\u00f6senord:",
"LabelParentalRating": "Parental rating:", "LabelParentalRating": "\u00c5ldersgr\u00e4ns:",
"LabelMaxParentalRating": "H\u00f6gsta till\u00e5tna \u00e5ldersgr\u00e4ns", "LabelMaxParentalRating": "H\u00f6gsta till\u00e5tna \u00e5ldersgr\u00e4ns",
"LabelCustomRating": "Custom rating:", "LabelCustomRating": "Anpassad \u00e5ldersgr\u00e4ns:",
"MaxParentalRatingHelp": "Inneh\u00e5ll med h\u00f6gre gr\u00e4ns visas ej f\u00f6r den h\u00e4r anv\u00e4ndaren.", "MaxParentalRatingHelp": "Inneh\u00e5ll med h\u00f6gre gr\u00e4ns visas ej f\u00f6r den h\u00e4r anv\u00e4ndaren.",
"LabelBudget": "Budget", "LabelBudget": "Budget",
"LibraryAccessHelp": "Ange vilka mediamappar den h\u00e4r anv\u00e4ndaren ska ha tillg\u00e5ng till. Administrat\u00f6rer har r\u00e4ttighet att redigera alla mappar i metadatahanteraren.", "LibraryAccessHelp": "Ange vilka mediamappar den h\u00e4r anv\u00e4ndaren ska ha tillg\u00e5ng till. Administrat\u00f6rer har r\u00e4ttighet att redigera alla mappar i metadatahanteraren.",
"LabelRevenue": "Revenue ($):", "LabelRevenue": "Int\u00e4kter ($):",
"ChannelAccessHelp": "V\u00e4lj kanaler att dela med denna anv\u00e4ndare. Administrat\u00f6rer kan redigera alla kanaler med hj\u00e4lp av metadatahanteraren.", "ChannelAccessHelp": "V\u00e4lj kanaler att dela med denna anv\u00e4ndare. Administrat\u00f6rer kan redigera alla kanaler med hj\u00e4lp av metadatahanteraren.",
"LabelOriginalAspectRatio": "Original aspect ratio:", "LabelOriginalAspectRatio": "Ursprungligt bildf\u00f6rh\u00e5llande:",
"ButtonDeleteImage": "Ta bort bild", "ButtonDeleteImage": "Ta bort bild",
"LabelPlayers": "Players:", "LabelPlayers": "Spelare:",
"LabelSelectUsers": "V\u00e4lj anv\u00e4ndare:", "LabelSelectUsers": "V\u00e4lj anv\u00e4ndare:",
"Label3DFormat": "3D format:", "Label3DFormat": "3D-format:",
"ButtonUpload": "Ladda upp", "ButtonUpload": "Ladda upp",
"HeaderAlternateEpisodeNumbers": "Alternate Episode Numbers", "HeaderAlternateEpisodeNumbers": "Alternativ avsnittsnumrering",
"HeaderUploadNewImage": "Ladda upp ny bild", "HeaderUploadNewImage": "Ladda upp ny bild",
"HeaderSpecialEpisodeInfo": "Special Episode Info", "HeaderSpecialEpisodeInfo": "Info om specialavsnitt",
"LabelDropImageHere": "Dra-och-sl\u00e4pp bild h\u00e4r", "LabelDropImageHere": "Dra-och-sl\u00e4pp bild h\u00e4r",
"HeaderExternalIds": "External Id's:", "HeaderExternalIds": "Externa ID:n",
"ImageUploadAspectRatioHelp": "Bildf\u00f6rh\u00e5llande 1:1 rekommenderas. Endast JPG\/PNG.", "ImageUploadAspectRatioHelp": "Bildf\u00f6rh\u00e5llande 1:1 rekommenderas. Endast JPG\/PNG.",
"LabelDvdSeasonNumber": "Dvd season number:", "LabelDvdSeasonNumber": "S\u00e4songsnummer p\u00e5 DVD:",
"MessageNothingHere": "Ingenting h\u00e4r.", "MessageNothingHere": "Ingenting h\u00e4r.",
"LabelDvdEpisodeNumber": "Dvd episode number:", "LabelDvdEpisodeNumber": "Avsnittsnummer p\u00e5 DVD:",
"MessagePleaseEnsureInternetMetadata": "Var god se till att h\u00e4mtning av metadata via Internet \u00e4r aktiverad.", "MessagePleaseEnsureInternetMetadata": "Var god se till att h\u00e4mtning av metadata via Internet \u00e4r aktiverad.",
"LabelAbsoluteEpisodeNumber": "Absolute episode number:", "LabelAbsoluteEpisodeNumber": "Avsnittsnummer fr\u00e5n start:",
"TabSuggested": "Rekommenderas", "TabSuggested": "Rekommenderas",
"LabelAirsBeforeSeason": "Airs before season:", "LabelAirsBeforeSeason": "S\u00e4nds f\u00f6re s\u00e4song:",
"TabLatest": "Nytillkommet", "TabLatest": "Nytillkommet",
"LabelAirsAfterSeason": "Airs after season:", "LabelAirsAfterSeason": "S\u00e4nds efter s\u00e4song:",
"TabUpcoming": "Kommande", "TabUpcoming": "Kommande",
"LabelAirsBeforeEpisode": "Airs before episode:", "LabelAirsBeforeEpisode": "S\u00e4nds f\u00f6re avsnitt:",
"TabShows": "Serier", "TabShows": "Serier",
"LabelTreatImageAs": "Treat image as:", "LabelTreatImageAs": "Behandla bild som:",
"TabEpisodes": "Avsnitt", "TabEpisodes": "Avsnitt",
"LabelDisplayOrder": "Display order:", "LabelDisplayOrder": "Visningsordning:",
"TabGenres": "Genrer", "TabGenres": "Genrer",
"LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in", "LabelDisplaySpecialsWithinSeasons": "Visa specialer i de s\u00e4songer de s\u00e4ndes i",
"TabPeople": "Personer", "TabPeople": "Personer",
"HeaderCountries": "Countries", "HeaderCountries": "L\u00e4nder",
"TabNetworks": "TV-bolag", "TabNetworks": "TV-bolag",
"HeaderGenres": "Genres", "HeaderGenres": "Genrer",
"HeaderUsers": "Anv\u00e4ndare", "HeaderUsers": "Anv\u00e4ndare",
"HeaderPlotKeywords": "Plot Keywords", "HeaderPlotKeywords": "Nyckelord i handlingen",
"HeaderFilters": "Filter:", "HeaderFilters": "Filter:",
"HeaderStudios": "Studios", "HeaderStudios": "Studior",
"ButtonFilter": "Filtrera", "ButtonFilter": "Filtrera",
"HeaderTags": "Tags", "HeaderTags": "Etiketter",
"OptionFavorite": "Favoriter", "OptionFavorite": "Favoriter",
"HeaderMetadataSettings": "Metadata Settings", "HeaderMetadataSettings": "Metadatainst\u00e4llningar",
"OptionLikes": "Gillar", "OptionLikes": "Gillar",
"LabelLockItemToPreventChanges": "Lock this item to prevent future changes", "LabelLockItemToPreventChanges": "L\u00e5s det h\u00e4r objektet f\u00f6r att f\u00f6rhindra \u00e4ndringar",
"OptionDislikes": "Ogillar", "OptionDislikes": "Ogillar",
"MessageLeaveEmptyToInherit": "Leave empty to inherit settings from a parent item, or the global default value.", "MessageLeaveEmptyToInherit": "L\u00e4mna tomt f\u00f6r att \u00e4rva inst\u00e4llningarna fr\u00e5n \u00f6verordnat objekt, eller anv\u00e4nda globalt f\u00f6rval.",
"OptionActors": "Sk\u00e5despelare", "OptionActors": "Sk\u00e5despelare",
"TabDonate": "L\u00e4mna bidrag", "TabDonate": "L\u00e4mna bidrag",
"OptionGuestStars": "G\u00e4startister", "OptionGuestStars": "G\u00e4startister",
"HeaderDonationType": "Donation type:", "HeaderDonationType": "Donationstyp:",
"OptionDirectors": "Regiss\u00f6rer", "OptionDirectors": "Regiss\u00f6rer",
"OptionMakeOneTimeDonation": "Make a separate donation", "OptionMakeOneTimeDonation": "Ge ett extra bidrag",
"OptionWriters": "Manusf\u00f6rfattare", "OptionWriters": "Manusf\u00f6rfattare",
"OptionOneTimeDescription": "This is an additional donation to the team to show your support. It does not have any additional benefits and will not produce a supporter key.", "OptionOneTimeDescription": "Detta \u00e4r ett extra bidrag f\u00f6r att visa ditt st\u00f6d f\u00f6r teamet. Det ger inga ytterligare f\u00f6rm\u00e5ner och ingen supporterkod.",
"OptionProducers": "Producenter", "OptionProducers": "Producenter",
"OptionLifeTimeSupporterMembership": "Livstids supportermedlemskap", "OptionLifeTimeSupporterMembership": "Livstids supportermedlemskap",
"HeaderResume": "\u00c5teruppta", "HeaderResume": "\u00c5teruppta",
@ -232,31 +232,31 @@
"HeaderNextUp": "N\u00e4stkommande", "HeaderNextUp": "N\u00e4stkommande",
"OptionMonthlySupporterMembership": "M\u00e5natligt supportermedlemskap", "OptionMonthlySupporterMembership": "M\u00e5natligt supportermedlemskap",
"NoNextUpItemsMessage": "Hittade inget. S\u00e4tt ig\u00e5ng och titta!", "NoNextUpItemsMessage": "Hittade inget. S\u00e4tt ig\u00e5ng och titta!",
"HeaderSupporterBenefit": "A supporter membership provides additional benefits such as access to premium plugins, internet channel content, and more.", "HeaderSupporterBenefit": "Ett supportermedlemskap ger extra f\u00f6rdelar, t ex tillg\u00e5ng till premiumtill\u00e4gg, internetkanaler och mycket mer.",
"HeaderLatestEpisodes": "Senaste avsnitten", "HeaderLatestEpisodes": "Senaste avsnitten",
"OptionNoTrailer": "No Trailer", "OptionNoTrailer": "Trailer saknas",
"HeaderPersonTypes": "Personkategorier:", "HeaderPersonTypes": "Personkategorier:",
"OptionNoThemeSong": "No Theme Song", "OptionNoThemeSong": "Ledmotiv saknas",
"TabSongs": "L\u00e5tar", "TabSongs": "L\u00e5tar",
"OptionNoThemeVideo": "No Theme Video", "OptionNoThemeVideo": "Temavideo saknas",
"TabAlbums": "Album", "TabAlbums": "Album",
"LabelOneTimeDonationAmount": "Donation amount:", "LabelOneTimeDonationAmount": "Bidragsbelopp:",
"TabArtists": "Artister", "TabArtists": "Artister",
"OptionActor": "Actor", "OptionActor": "Sk\u00e5despelare",
"TabAlbumArtists": "Albumartister", "TabAlbumArtists": "Albumartister",
"OptionComposer": "Composer", "OptionComposer": "Komposit\u00f6r",
"TabMusicVideos": "Musikvideor", "TabMusicVideos": "Musikvideor",
"OptionDirector": "Director", "OptionDirector": "Regiss\u00f6r",
"ButtonSort": "Sortera", "ButtonSort": "Sortera",
"OptionGuestStar": "Guest star", "OptionGuestStar": "G\u00e4startist",
"HeaderSortBy": "Sortera efter:", "HeaderSortBy": "Sortera efter:",
"OptionProducer": "Producer", "OptionProducer": "Producent",
"HeaderSortOrder": "Sorteringsordning:", "HeaderSortOrder": "Sorteringsordning:",
"OptionWriter": "Writer", "OptionWriter": "Manusf\u00f6rfattare",
"OptionPlayed": "Visad", "OptionPlayed": "Visad",
"LabelAirDays": "Air days:", "LabelAirDays": "S\u00e4ndningsdagar:",
"OptionUnplayed": "Ej visad", "OptionUnplayed": "Ej visad",
"LabelAirTime": "Air time:", "LabelAirTime": "S\u00e4ndningstid:",
"OptionAscending": "Stigande", "OptionAscending": "Stigande",
"HeaderMediaInfo": "Mediainformation", "HeaderMediaInfo": "Mediainformation",
"OptionDescending": "Sjunkande", "OptionDescending": "Sjunkande",
@ -288,49 +288,49 @@
"OptionBudget": "Budget", "OptionBudget": "Budget",
"HeaderXmlDocumentAttribute": "XML-dokumentattribut", "HeaderXmlDocumentAttribute": "XML-dokumentattribut",
"OptionRevenue": "Int\u00e4kter", "OptionRevenue": "Int\u00e4kter",
"XmlDocumentAttributeListHelp": "These attributes are applied to the root element of every xml response.", "XmlDocumentAttributeListHelp": "Dessa attribut till\u00e4mpas p\u00e5 rotelementet i alla xml-svar.",
"OptionPoster": "Affisch", "OptionPoster": "Affisch",
"OptionSaveMetadataAsHidden": "Save metadata and images as hidden files", "OptionSaveMetadataAsHidden": "Spara metadata och bilder som dolda filer",
"OptionBackdrop": "Fondbild", "OptionBackdrop": "Fondbild",
"LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan", "LabelExtractChaptersDuringLibraryScan": "Extrahera kapitelbildrutor vid genoms\u00f6kning av biblioteket",
"OptionTimeline": "Tidslinje", "OptionTimeline": "Tidslinje",
"LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted when videos are imported during the library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.", "LabelExtractChaptersDuringLibraryScanHelp": "Om aktiverat extraheras kapitelbildrutor n\u00e4r videor importeras vid genoms\u00f6kning av biblioteket. Om avaktiverat kommer extrahering att ske vid schemalagd kapitelbildrutebehandling, f\u00f6r att snabba upp den regelbundna genoms\u00f6kningen av biblioteket.",
"OptionThumb": "Miniatyr", "OptionThumb": "Miniatyr",
"LabelConnectUserName": "Media Browser username\/email:", "LabelConnectUserName": "Media Browser-anv\u00e4ndarnamn\/email:",
"OptionBanner": "Banderoll", "OptionBanner": "Banderoll",
"LabelConnectUserNameHelp": "Connect this user to a Media Browser account to enable easy sign-in access from any app without having to know the server ip address.", "LabelConnectUserNameHelp": "Anslut den h\u00e4r anv\u00e4ndaren till ett Media Browser-konto f\u00f6r att erbjuda enkel inloggning fr\u00e5n alla appar utan att beh\u00f6va k\u00e4nna till serverns IP-adress.",
"OptionCriticRating": "Kritikerbetyg", "OptionCriticRating": "Kritikerbetyg",
"ButtonLearnMoreAboutMediaBrowserConnect": "Learn more about Media Browser Connect", "ButtonLearnMoreAboutMediaBrowserConnect": "L\u00e4s mer om Media Browser Connect",
"OptionVideoBitrate": "Bithastighet f\u00f6r video", "OptionVideoBitrate": "Bithastighet f\u00f6r video",
"LabelExternalPlayers": "External players:", "LabelExternalPlayers": "Externa uppspelare:",
"OptionResumable": "Kan \u00e5terupptas", "OptionResumable": "Kan \u00e5terupptas",
"LabelExternalPlayersHelp": "Display buttons to play content in external players. This is only available on devices that support url schemes, generally Android and iOS. With external players there is generally no support for remote control or resuming.", "LabelExternalPlayersHelp": "Visa knappar f\u00f6r att spela upp inneh\u00e5ll i externa uppspelare. Detta ar enbart tillg\u00e4ngligt p\u00e5 enheter som st\u00f6djer url-scheman, i allm\u00e4nhet Android och iOS. Externa uppspelare har normalt ej st\u00f6d f\u00f6r fj\u00e4rrkontroll eller \u00e5terupptagande.",
"HeaderSubtitleProfile": "Subtitle Profile", "HeaderSubtitleProfile": "Undertextprofil",
"ScheduledTasksHelp": "Klicka p\u00e5 en aktivitet f\u00f6r att \u00e4ndra k\u00f6rtider.", "ScheduledTasksHelp": "Klicka p\u00e5 en aktivitet f\u00f6r att \u00e4ndra k\u00f6rtider.",
"ScheduledTasksTitle": "Schemalagda aktiviteter", "ScheduledTasksTitle": "Schemalagda aktiviteter",
"HeaderSubtitleProfiles": "Subtitle Profiles", "HeaderSubtitleProfiles": "Undertextprofiler",
"HeaderSubtitleProfilesHelp": "Subtitle profiles describe the subtitle formats supported by the device.", "HeaderSubtitleProfilesHelp": "Undertextprofiler beskriver de undertextformat som st\u00f6ds av enheten.",
"TabMyPlugins": "Mina till\u00e4gg", "TabMyPlugins": "Mina till\u00e4gg",
"LabelFormat": "Format:", "LabelFormat": "Format:",
"TabCatalog": "Katalog", "TabCatalog": "Katalog",
"LabelMethod": "Method:", "LabelMethod": "Metod:",
"PluginsTitle": "Till\u00e4gg", "PluginsTitle": "Till\u00e4gg",
"LabelDidlMode": "Didl mode:", "LabelDidlMode": "Didl-l\u00e4ge:",
"HeaderAutomaticUpdates": "Automatiska uppdateringar", "HeaderAutomaticUpdates": "Automatiska uppdateringar",
"OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)",
"HeaderNowPlaying": "Nu spelas", "HeaderNowPlaying": "Nu spelas",
"OptionResElement": "res element", "OptionResElement": "res element",
"HeaderLatestAlbums": "Nytillkomna album", "HeaderLatestAlbums": "Nytillkomna album",
"OptionEmbedSubtitles": "Embed within container", "OptionEmbedSubtitles": "Infoga i container",
"HeaderLatestSongs": "Nytillkomna l\u00e5tar", "HeaderLatestSongs": "Nytillkomna l\u00e5tar",
"OptionExternallyDownloaded": "External download", "OptionExternallyDownloaded": "Extern nerladdning",
"HeaderRecentlyPlayed": "Nyligen spelade", "HeaderRecentlyPlayed": "Nyligen spelade",
"OptionHlsSegmentedSubtitles": "Hls segmented subtitles", "OptionHlsSegmentedSubtitles": "HLS-segmenterade undertexter",
"HeaderFrequentlyPlayed": "Ofta spelade", "HeaderFrequentlyPlayed": "Ofta spelade",
"DevBuildWarning": "Utvecklingsversioner \u00e4r \"bleeding edge\". Dessa kommer ut ofta och \u00e4r otestade. Appen kanske kraschar och vissa delar kanske inte alls fungerar.", "DevBuildWarning": "Utvecklingsversioner \u00e4r \"bleeding edge\". Dessa kommer ut ofta och \u00e4r otestade. Appen kanske kraschar och vissa delar kanske inte alls fungerar.",
"LabelSubtitleFormatHelp": "Example: srt", "LabelSubtitleFormatHelp": "Exempel:srt",
"LabelVideoType": "Videoformat:", "LabelVideoType": "Videoformat:",
"ButtonLearnMore": "Learn more", "ButtonLearnMore": "L\u00e4s mer",
"OptionBluray": "Blu-ray", "OptionBluray": "Blu-ray",
"TabPlayback": "Uppspelning", "TabPlayback": "Uppspelning",
"OptionDvd": "DVD", "OptionDvd": "DVD",
@ -364,7 +364,7 @@
"TabTrailers": "Trailers", "TabTrailers": "Trailers",
"LabelCustomIntrosPath": "S\u00f6kv\u00e4g f\u00f6r egna vinjetter:", "LabelCustomIntrosPath": "S\u00f6kv\u00e4g f\u00f6r egna vinjetter:",
"LabelArtists": "Artister:", "LabelArtists": "Artister:",
"LabelCustomIntrosPathHelp": "A folder containing video files. A video will be randomly selected and played after trailers.", "LabelCustomIntrosPathHelp": "En mapp inneh\u00e5llande videofiler. En video kommer att v\u00e4ljas slumpm\u00e4ssigt och spelas upp efter trailers.",
"LabelArtistsHelp": "Separera med ; vid flera", "LabelArtistsHelp": "Separera med ; vid flera",
"ValueSpecialEpisodeName": "Special - {0}", "ValueSpecialEpisodeName": "Special - {0}",
"HeaderLatestMovies": "Nytillkomna filmer", "HeaderLatestMovies": "Nytillkomna filmer",
@ -824,8 +824,8 @@
"ButtonNextTrack": "N\u00e4sta sp\u00e5r:", "ButtonNextTrack": "N\u00e4sta sp\u00e5r:",
"ButtonStop": "Stopp", "ButtonStop": "Stopp",
"ButtonPause": "Paus", "ButtonPause": "Paus",
"ButtonNext": "Next", "ButtonNext": "N\u00e4sta",
"ButtonPrevious": "Previous", "ButtonPrevious": "F\u00f6reg\u00e5ende",
"LabelGroupMoviesIntoCollections": "Gruppera filmer i samlingsboxar", "LabelGroupMoviesIntoCollections": "Gruppera filmer i samlingsboxar",
"LabelGroupMoviesIntoCollectionsHelp": "I filmlistor visas filmer som ing\u00e5r i en samlingsbox som ett enda objekt.", "LabelGroupMoviesIntoCollectionsHelp": "I filmlistor visas filmer som ing\u00e5r i en samlingsbox som ett enda objekt.",
"NotificationOptionPluginError": "Fel uppstod med till\u00e4gget", "NotificationOptionPluginError": "Fel uppstod med till\u00e4gget",
@ -863,7 +863,7 @@
"OptionPlainVideoItemsHelp": "Om aktiverad representeras alla videor i DIDL som \"object.item.videoItem\" i st\u00e4llet f\u00f6r en mera specifik typ, t ex \"object.item.videoItem.movie\".", "OptionPlainVideoItemsHelp": "Om aktiverad representeras alla videor i DIDL som \"object.item.videoItem\" i st\u00e4llet f\u00f6r en mera specifik typ, t ex \"object.item.videoItem.movie\".",
"LabelSupportedMediaTypes": "Mediaformat som st\u00f6ds:", "LabelSupportedMediaTypes": "Mediaformat som st\u00f6ds:",
"TabIdentification": "Identifiering", "TabIdentification": "Identifiering",
"HeaderIdentification": "Identification", "HeaderIdentification": "Identifiering",
"TabDirectPlay": "Direktuppspelning", "TabDirectPlay": "Direktuppspelning",
"TabContainers": "Beh\u00e5llare", "TabContainers": "Beh\u00e5llare",
"TabCodecs": "Kodningsformat", "TabCodecs": "Kodningsformat",
@ -947,15 +947,15 @@
"LabelDisplayPluginsFor": "Visa till\u00e4gg f\u00f6r:", "LabelDisplayPluginsFor": "Visa till\u00e4gg f\u00f6r:",
"PluginTabMediaBrowserClassic": "MB Classic", "PluginTabMediaBrowserClassic": "MB Classic",
"PluginTabMediaBrowserTheater": "MB Theater", "PluginTabMediaBrowserTheater": "MB Theater",
"LabelEpisodeNamePlain": "Episode name", "LabelEpisodeNamePlain": "Avsnittsnamn",
"LabelSeriesNamePlain": "Series name", "LabelSeriesNamePlain": "Seriens namn",
"ValueSeriesNamePeriod": "Series.name", "ValueSeriesNamePeriod": "Series.name",
"ValueSeriesNameUnderscore": "Series_name", "ValueSeriesNameUnderscore": "Series_name",
"ValueEpisodeNamePeriod": "Episode.name", "ValueEpisodeNamePeriod": "Episode.name",
"ValueEpisodeNameUnderscore": "Episode_name", "ValueEpisodeNameUnderscore": "Episode_name",
"LabelSeasonNumberPlain": "Season number", "LabelSeasonNumberPlain": "S\u00e4songsnummer",
"LabelEpisodeNumberPlain": "Episode number", "LabelEpisodeNumberPlain": "Avsnittsnummer",
"LabelEndingEpisodeNumberPlain": "Ending episode number", "LabelEndingEpisodeNumberPlain": "Avslutande avsnittsnummer",
"HeaderTypeText": "Ange text", "HeaderTypeText": "Ange text",
"LabelTypeText": "Text", "LabelTypeText": "Text",
"HeaderSearchForSubtitles": "S\u00f6k efter undertexter", "HeaderSearchForSubtitles": "S\u00f6k efter undertexter",
@ -1000,7 +1000,7 @@
"MessageNoPlaylistItemsAvailable": "Den h\u00e4r spellistan \u00e4r tom.", "MessageNoPlaylistItemsAvailable": "Den h\u00e4r spellistan \u00e4r tom.",
"HeaderWelcomeToMediaBrowserWebClient": "V\u00e4lkommen till Media Browsers webbklient", "HeaderWelcomeToMediaBrowserWebClient": "V\u00e4lkommen till Media Browsers webbklient",
"ButtonDismiss": "Avvisa", "ButtonDismiss": "Avvisa",
"ButtonTakeTheTour": "Take the tour", "ButtonTakeTheTour": "Ta en rundtur",
"ButtonEditOtherUserPreferences": "Redigera den h\u00e4r anv\u00e4ndarens personliga inst\u00e4llningar.", "ButtonEditOtherUserPreferences": "Redigera den h\u00e4r anv\u00e4ndarens personliga inst\u00e4llningar.",
"LabelChannelStreamQuality": "\u00d6nskad kvalitet vid str\u00f6mning via Internet:", "LabelChannelStreamQuality": "\u00d6nskad kvalitet vid str\u00f6mning via Internet:",
"LabelChannelStreamQualityHelp": "N\u00e4r bandbredden \u00e4r begr\u00e4nsad kan en l\u00e4gre kvalitet ge en mera st\u00f6rningsfri upplevelse.", "LabelChannelStreamQualityHelp": "N\u00e4r bandbredden \u00e4r begr\u00e4nsad kan en l\u00e4gre kvalitet ge en mera st\u00f6rningsfri upplevelse.",
@ -1013,7 +1013,7 @@
"LabelChannelDownloadAgeHelp": "Nedladdat inneh\u00e5ll \u00e4ldre \u00e4n s\u00e5 raderas. Det \u00e4r fortfarande tillg\u00e4ngligt via str\u00f6mning fr\u00e5n Internet.", "LabelChannelDownloadAgeHelp": "Nedladdat inneh\u00e5ll \u00e4ldre \u00e4n s\u00e5 raderas. Det \u00e4r fortfarande tillg\u00e4ngligt via str\u00f6mning fr\u00e5n Internet.",
"ChannelSettingsFormHelp": "Installera kanaler, t ex Trailers och Vimeo, via till\u00e4ggskatalogen.", "ChannelSettingsFormHelp": "Installera kanaler, t ex Trailers och Vimeo, via till\u00e4ggskatalogen.",
"LabelSelectCollection": "V\u00e4lj samling:", "LabelSelectCollection": "V\u00e4lj samling:",
"ButtonOptions": "Options", "ButtonOptions": "Alternativ",
"ViewTypeMovies": "Filmer", "ViewTypeMovies": "Filmer",
"ViewTypeTvShows": "TV", "ViewTypeTvShows": "TV",
"ViewTypeGames": "Spel", "ViewTypeGames": "Spel",
@ -1044,11 +1044,11 @@
"ViewTypeMusicAlbums": "Album", "ViewTypeMusicAlbums": "Album",
"ViewTypeMusicAlbumArtists": "Albumartister", "ViewTypeMusicAlbumArtists": "Albumartister",
"HeaderOtherDisplaySettings": "Visningsinst\u00e4llningar", "HeaderOtherDisplaySettings": "Visningsinst\u00e4llningar",
"ViewTypeMusicSongs": "Songs", "ViewTypeMusicSongs": "L\u00e5tar",
"ViewTypeMusicFavorites": "Favorites", "ViewTypeMusicFavorites": "Favoriter",
"ViewTypeMusicFavoriteAlbums": "Favorite Albums", "ViewTypeMusicFavoriteAlbums": "Favoritalbum",
"ViewTypeMusicFavoriteArtists": "Favorite Artists", "ViewTypeMusicFavoriteArtists": "Favoritartister",
"ViewTypeMusicFavoriteSongs": "Favorite Songs", "ViewTypeMusicFavoriteSongs": "Favoritl\u00e5tar",
"HeaderMyViews": "Mina vyer", "HeaderMyViews": "Mina vyer",
"LabelSelectFolderGroups": "Gruppera automatiskt f\u00f6ljande mappar till vyer s\u00e5som filmer, musik och TV:", "LabelSelectFolderGroups": "Gruppera automatiskt f\u00f6ljande mappar till vyer s\u00e5som filmer, musik och TV:",
"LabelSelectFolderGroupsHelp": "Mappar som ej \u00e4r markerade visas enskilda i sin egen avdelning.", "LabelSelectFolderGroupsHelp": "Mappar som ej \u00e4r markerade visas enskilda i sin egen avdelning.",
@ -1163,7 +1163,7 @@
"OptionUnidentified": "Oidentifierad", "OptionUnidentified": "Oidentifierad",
"OptionMissingParentalRating": "\u00c5ldersgr\u00e4ns saknas", "OptionMissingParentalRating": "\u00c5ldersgr\u00e4ns saknas",
"OptionStub": "Stump", "OptionStub": "Stump",
"HeaderEpisodes": "Episodes:", "HeaderEpisodes": "Avsnitt:",
"OptionSeason0": "S\u00e4song 0", "OptionSeason0": "S\u00e4song 0",
"LabelReport": "Rapport:", "LabelReport": "Rapport:",
"OptionReportSongs": "L\u00e5tar", "OptionReportSongs": "L\u00e5tar",

View File

@ -6,6 +6,7 @@ using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.XbmcMetadata.Configuration; using MediaBrowser.XbmcMetadata.Configuration;
using MediaBrowser.XbmcMetadata.Savers;
using System; using System;
using System.Linq; using System.Linq;
@ -36,20 +37,19 @@ namespace MediaBrowser.XbmcMetadata
void _libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e) void _libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e)
{ {
// TODO: Need a more accurate check here to see if xbmc metadata saving is enabled.
// This is probably good enough, but no guarantee
var userId = _config.GetNfoConfiguration().UserId;
if (string.IsNullOrWhiteSpace(userId))
{
return;
}
if (e.UpdateReason == ItemUpdateType.ImageUpdate) if (e.UpdateReason == ItemUpdateType.ImageUpdate)
{ {
var person = e.Item as Person; var person = e.Item as Person;
if (person != null) if (person != null)
{ {
var config = _config.GetNfoConfiguration();
if (!config.SaveImagePathsInNfo)
{
return;
}
var items = _libraryManager.RootFolder.RecursiveChildren; var items = _libraryManager.RootFolder.RecursiveChildren;
items = person.GetTaggedItems(items).ToList(); items = person.GetTaggedItems(items).ToList();
@ -63,22 +63,13 @@ namespace MediaBrowser.XbmcMetadata
void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e) void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e)
{ {
var userId = _config.GetNfoConfiguration().UserId; if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed || e.SaveReason == UserDataSaveReason.UpdateUserRating)
if (string.IsNullOrWhiteSpace(userId))
{
return;
}
if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed)
{ {
var item = e.Item as BaseItem; var item = e.Item as BaseItem;
if (item != null) if (!string.IsNullOrWhiteSpace(_config.GetNfoConfiguration().UserId))
{ {
if (item is Video) SaveMetadataForItem(item, ItemUpdateType.MetadataEdit);
{
SaveMetadataForItem(item, ItemUpdateType.MetadataEdit);
}
} }
} }
} }
@ -99,7 +90,7 @@ namespace MediaBrowser.XbmcMetadata
try try
{ {
await _providerManager.SaveMetadata(item, updateReason).ConfigureAwait(false); await _providerManager.SaveMetadata(item, updateReason, new[] { BaseNfoSaver.SaverName }).ConfigureAwait(false);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -3,15 +3,13 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.XbmcMetadata.Configuration; using MediaBrowser.XbmcMetadata.Configuration;
using MediaBrowser.XbmcMetadata.Savers;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.IO;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading; using System.Threading;
using System.Xml; using System.Xml;
using MediaBrowser.XbmcMetadata.Savers;
namespace MediaBrowser.XbmcMetadata.Parsers namespace MediaBrowser.XbmcMetadata.Parsers
{ {
@ -41,10 +39,12 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// Fetches metadata for an item from one xml file /// Fetches metadata for an item from one xml file
/// </summary> /// </summary>
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
/// <param name="userDataList">The user data list.</param>
/// <param name="metadataFile">The metadata file.</param> /// <param name="metadataFile">The metadata file.</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
/// <exception cref="System.ArgumentNullException"></exception> /// <exception cref="System.ArgumentNullException">
public void Fetch(T item, string metadataFile, CancellationToken cancellationToken) /// </exception>
public void Fetch(T item, List<UserItemData> userDataList, string metadataFile, CancellationToken cancellationToken)
{ {
if (item == null) if (item == null)
{ {
@ -64,17 +64,18 @@ namespace MediaBrowser.XbmcMetadata.Parsers
ValidationType = ValidationType.None ValidationType = ValidationType.None
}; };
Fetch(item, metadataFile, settings, cancellationToken); Fetch(item, userDataList, metadataFile, settings, cancellationToken);
} }
/// <summary> /// <summary>
/// Fetches the specified item. /// Fetches the specified item.
/// </summary> /// </summary>
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
/// <param name="userDataList">The user data list.</param>
/// <param name="metadataFile">The metadata file.</param> /// <param name="metadataFile">The metadata file.</param>
/// <param name="settings">The settings.</param> /// <param name="settings">The settings.</param>
/// <param name="cancellationToken">The cancellation token.</param> /// <param name="cancellationToken">The cancellation token.</param>
private void Fetch(T item, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken) private void Fetch(T item, List<UserItemData> userDataList, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken)
{ {
using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile)) using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile))
{ {
@ -90,15 +91,17 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (reader.NodeType == XmlNodeType.Element) if (reader.NodeType == XmlNodeType.Element)
{ {
FetchDataFromXmlNode(reader, item); FetchDataFromXmlNode(reader, item, userDataList);
} }
} }
} }
} }
} }
protected virtual void FetchDataFromXmlNode(XmlReader reader, T item) protected virtual void FetchDataFromXmlNode(XmlReader reader, T item, List<UserItemData> userDataList)
{ {
var userDataUserId = _config.GetNfoConfiguration().UserId;
switch (reader.Name) switch (reader.Name)
{ {
// DateCreated // DateCreated
@ -571,7 +574,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
case "releasedate": case "releasedate":
{ {
var formatString = _config.GetNfoConfiguration().ReleaseDateFormat; var formatString = _config.GetNfoConfiguration().ReleaseDateFormat;
var val = reader.ReadElementContentAsString(); var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val)) if (!string.IsNullOrWhiteSpace(val))
@ -798,12 +801,176 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break; break;
} }
case "watched":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
bool parsedValue;
if (bool.TryParse(val, out parsedValue))
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
var userData = GetOrAdd(userDataList, userDataUserId);
userData.Played = parsedValue;
}
}
}
break;
}
case "playcount":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
int parsedValue;
if (int.TryParse(val, NumberStyles.Integer, _usCulture, out parsedValue))
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
var userData = GetOrAdd(userDataList, userDataUserId);
userData.PlayCount = parsedValue;
}
}
}
break;
}
case "lastplayed":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
DateTime parsedValue;
if (DateTime.TryParseExact(val, "yyyy-MM-dd HH:mm:ss", _usCulture, DateTimeStyles.None, out parsedValue))
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
var userData = GetOrAdd(userDataList, userDataUserId);
userData.LastPlayedDate = parsedValue;
}
}
}
break;
}
case "resume":
{
using (var subtree = reader.ReadSubtree())
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
var userData = GetOrAdd(userDataList, userDataUserId);
FetchFromResumeNode(subtree, item, userData);
}
}
break;
}
case "isuserfavorite":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
bool parsedValue;
if (bool.TryParse(val, out parsedValue))
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
var userData = GetOrAdd(userDataList, userDataUserId);
userData.IsFavorite = parsedValue;
}
}
}
break;
}
case "userrating":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
double parsedValue;
if (double.TryParse(val, NumberStyles.Any, _usCulture, out parsedValue))
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
var userData = GetOrAdd(userDataList, userDataUserId);
userData.Rating = parsedValue;
}
}
}
break;
}
default: default:
reader.Skip(); reader.Skip();
break; break;
} }
} }
private UserItemData GetOrAdd(List<UserItemData> userDataList, string userId)
{
var userData = userDataList.FirstOrDefault(i => string.Equals(userId, i.UserId.ToString("N"), StringComparison.OrdinalIgnoreCase));
if (userData == null)
{
userData = new UserItemData()
{
UserId = new Guid(userId)
};
userDataList.Add(userData);
}
return userData;
}
private void FetchFromResumeNode(XmlReader reader, T item, UserItemData userData)
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
switch (reader.Name)
{
case "position":
{
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
double parsedValue;
if (double.TryParse(val, NumberStyles.Any, _usCulture, out parsedValue))
{
userData.PlaybackPositionTicks = TimeSpan.FromSeconds(parsedValue).Ticks;
}
}
break;
}
default:
reader.Skip();
break;
}
}
}
}
private void FetchFromFileInfoNode(XmlReader reader, T item) private void FetchFromFileInfoNode(XmlReader reader, T item)
{ {
reader.MoveToContent(); reader.MoveToContent();

View File

@ -1,4 +1,5 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
@ -21,7 +22,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{ {
} }
public void Fetch(Episode item, public void Fetch(Episode item,
List<UserItemData> userDataList,
List<LocalImageInfo> images, List<LocalImageInfo> images,
List<ChapterInfo> chapters, List<ChapterInfo> chapters,
string metadataFile, string metadataFile,
@ -31,7 +33,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
_chaptersFound = chapters; _chaptersFound = chapters;
_xmlPath = metadataFile; _xmlPath = metadataFile;
Fetch(item, metadataFile, cancellationToken); Fetch(item, userDataList, metadataFile, cancellationToken);
} }
private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
@ -41,7 +43,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// </summary> /// </summary>
/// <param name="reader">The reader.</param> /// <param name="reader">The reader.</param>
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
protected override void FetchDataFromXmlNode(XmlReader reader, Episode item) /// <param name="userDataList">The user data list.</param>
protected override void FetchDataFromXmlNode(XmlReader reader, Episode item, List<UserItemData> userDataList)
{ {
switch (reader.Name) switch (reader.Name)
{ {
@ -203,7 +206,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
default: default:
base.FetchDataFromXmlNode(reader, item); base.FetchDataFromXmlNode(reader, item, userDataList);
break; break;
} }
} }

View File

@ -17,14 +17,15 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{ {
} }
public void Fetch(Video item, public void Fetch(Video item,
List<UserItemData> userDataList,
List<ChapterInfo> chapters, List<ChapterInfo> chapters,
string metadataFile, string metadataFile,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
_chaptersFound = chapters; _chaptersFound = chapters;
Fetch(item, metadataFile, cancellationToken); Fetch(item, userDataList, metadataFile, cancellationToken);
} }
/// <summary> /// <summary>
@ -32,7 +33,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// </summary> /// </summary>
/// <param name="reader">The reader.</param> /// <param name="reader">The reader.</param>
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
protected override void FetchDataFromXmlNode(XmlReader reader, Video item) /// <param name="userDataList">The user data list.</param>
protected override void FetchDataFromXmlNode(XmlReader reader, Video item, List<UserItemData> userDataList)
{ {
switch (reader.Name) switch (reader.Name)
{ {
@ -89,7 +91,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
// break; // break;
default: default:
base.FetchDataFromXmlNode(reader, item); base.FetchDataFromXmlNode(reader, item, userDataList);
break; break;
} }
} }

View File

@ -1,6 +1,8 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using System.Collections.Generic;
using System.Xml; using System.Xml;
namespace MediaBrowser.XbmcMetadata.Parsers namespace MediaBrowser.XbmcMetadata.Parsers
@ -16,7 +18,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// </summary> /// </summary>
/// <param name="reader">The reader.</param> /// <param name="reader">The reader.</param>
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
protected override void FetchDataFromXmlNode(XmlReader reader, Season item) /// <param name="userDataList">The user data list.</param>
protected override void FetchDataFromXmlNode(XmlReader reader, Season item, List<UserItemData> userDataList)
{ {
switch (reader.Name) switch (reader.Name)
{ {
@ -37,7 +40,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
} }
default: default:
base.FetchDataFromXmlNode(reader, item); base.FetchDataFromXmlNode(reader, item, userDataList);
break; break;
} }
} }

View File

@ -1,9 +1,11 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic;
using System.Xml; using System.Xml;
namespace MediaBrowser.XbmcMetadata.Parsers namespace MediaBrowser.XbmcMetadata.Parsers
@ -19,7 +21,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// </summary> /// </summary>
/// <param name="reader">The reader.</param> /// <param name="reader">The reader.</param>
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
protected override void FetchDataFromXmlNode(XmlReader reader, Series item) /// <param name="userDataList">The user data list.</param>
protected override void FetchDataFromXmlNode(XmlReader reader, Series item, List<UserItemData> userDataList)
{ {
switch (reader.Name) switch (reader.Name)
{ {
@ -85,7 +88,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
} }
default: default:
base.FetchDataFromXmlNode(reader, item); base.FetchDataFromXmlNode(reader, item, userDataList);
break; break;
} }
} }

View File

@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<MusicAlbum> result, string path, CancellationToken cancellationToken) protected override void Fetch(LocalMetadataResult<MusicAlbum> result, string path, CancellationToken cancellationToken)
{ {
new BaseNfoParser<MusicAlbum>(_logger, _config).Fetch(result.Item, path, cancellationToken); new BaseNfoParser<MusicAlbum>(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken);
} }
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)

View File

@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<MusicArtist> result, string path, CancellationToken cancellationToken) protected override void Fetch(LocalMetadataResult<MusicArtist> result, string path, CancellationToken cancellationToken)
{ {
new BaseNfoParser<MusicArtist>(_logger, _config).Fetch(result.Item, path, cancellationToken); new BaseNfoParser<MusicArtist>(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken);
} }
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)

View File

@ -2,6 +2,7 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.XbmcMetadata.Savers;
using System; using System;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
@ -27,8 +28,6 @@ namespace MediaBrowser.XbmcMetadata.Providers
var path = file.FullName; var path = file.FullName;
//await XmlProviderUtils.XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
try try
{ {
result.Item = new T(); result.Item = new T();
@ -44,10 +43,6 @@ namespace MediaBrowser.XbmcMetadata.Providers
{ {
result.HasMetadata = false; result.HasMetadata = false;
} }
//finally
//{
// XmlProviderUtils.XmlParsingResourcePool.Release();
//}
return result; return result;
} }
@ -77,7 +72,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
{ {
get get
{ {
return "Xbmc Nfo"; return BaseNfoSaver.SaverName;
} }
} }
} }

View File

@ -28,7 +28,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
{ {
var chapters = new List<ChapterInfo>(); var chapters = new List<ChapterInfo>();
new MovieNfoParser(_logger, _config).Fetch(result.Item, chapters, path, cancellationToken); new MovieNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, chapters, path, cancellationToken);
result.Chapters = chapters; result.Chapters = chapters;
} }

View File

@ -28,7 +28,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
var images = new List<LocalImageInfo>(); var images = new List<LocalImageInfo>();
var chapters = new List<ChapterInfo>(); var chapters = new List<ChapterInfo>();
new EpisodeNfoParser(_logger, _config).Fetch(result.Item, images, chapters, path, cancellationToken); new EpisodeNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, images, chapters, path, cancellationToken);
result.Images = images; result.Images = images;
result.Chapters = chapters; result.Chapters = chapters;

View File

@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<Season> result, string path, CancellationToken cancellationToken) protected override void Fetch(LocalMetadataResult<Season> result, string path, CancellationToken cancellationToken)
{ {
new SeasonNfoParser(_logger, _config).Fetch(result.Item, path, cancellationToken); new SeasonNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken);
} }
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)

View File

@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<Series> result, string path, CancellationToken cancellationToken) protected override void Fetch(LocalMetadataResult<Series> result, string path, CancellationToken cancellationToken)
{ {
new SeriesNfoParser(_logger, _config).Fetch(result.Item, path, cancellationToken); new SeriesNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken);
} }
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)

View File

@ -95,7 +95,10 @@ namespace MediaBrowser.XbmcMetadata.Savers
"musicbrainzalbumid", "musicbrainzalbumid",
"musicbrainzreleasegroupid", "musicbrainzreleasegroupid",
"tvdbid", "tvdbid",
"collectionitem" "collectionitem",
"isuserfavorite",
"userrating"
}.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); }.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
@ -117,6 +120,14 @@ namespace MediaBrowser.XbmcMetadata.Savers
protected ILogger Logger { get; private set; } protected ILogger Logger { get; private set; }
public string Name public string Name
{
get
{
return SaverName;
}
}
public static string SaverName
{ {
get get
{ {
@ -852,11 +863,6 @@ namespace MediaBrowser.XbmcMetadata.Savers
private static void AddUserData(BaseItem item, XmlWriter writer, IUserManager userManager, IUserDataManager userDataRepo, XbmcMetadataOptions options) private static void AddUserData(BaseItem item, XmlWriter writer, IUserManager userManager, IUserDataManager userDataRepo, XbmcMetadataOptions options)
{ {
if (!(item is Video))
{
return;
}
var userId = options.UserId; var userId = options.UserId;
if (string.IsNullOrWhiteSpace(userId)) if (string.IsNullOrWhiteSpace(userId))
{ {
@ -877,20 +883,30 @@ namespace MediaBrowser.XbmcMetadata.Savers
var userdata = userDataRepo.GetUserData(user.Id, item.GetUserDataKey()); var userdata = userDataRepo.GetUserData(user.Id, item.GetUserDataKey());
writer.WriteElementString("playcount", userdata.PlayCount.ToString(UsCulture)); writer.WriteElementString("isuserfavorite", userdata.IsFavorite.ToString().ToLower());
writer.WriteElementString("watched", userdata.Played.ToString().ToLower());
if (userdata.LastPlayedDate.HasValue) if (userdata.Rating.HasValue)
{ {
writer.WriteElementString("lastplayed", userdata.LastPlayedDate.Value.ToString("yyyy-MM-dd HH:mm:ss").ToLower()); writer.WriteElementString("userrating", userdata.Rating.Value.ToString(CultureInfo.InvariantCulture).ToLower());
} }
writer.WriteStartElement("resume"); if (!item.IsFolder)
{
writer.WriteElementString("playcount", userdata.PlayCount.ToString(UsCulture));
writer.WriteElementString("watched", userdata.Played.ToString().ToLower());
var runTimeTicks = item.RunTimeTicks ?? 0; if (userdata.LastPlayedDate.HasValue)
{
writer.WriteElementString("lastplayed", userdata.LastPlayedDate.Value.ToString("yyyy-MM-dd HH:mm:ss").ToLower());
}
writer.WriteElementString("position", TimeSpan.FromTicks(userdata.PlaybackPositionTicks).TotalSeconds.ToString(UsCulture)); writer.WriteStartElement("resume");
writer.WriteElementString("total", TimeSpan.FromTicks(runTimeTicks).TotalSeconds.ToString(UsCulture));
var runTimeTicks = item.RunTimeTicks ?? 0;
writer.WriteElementString("position", TimeSpan.FromTicks(userdata.PlaybackPositionTicks).TotalSeconds.ToString(UsCulture));
writer.WriteElementString("total", TimeSpan.FromTicks(runTimeTicks).TotalSeconds.ToString(UsCulture));
}
writer.WriteEndElement(); writer.WriteEndElement();
} }