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

pull/702/head
Luke Pulverenti 10 years ago
parent a260432fdf
commit eab030df7f

@ -108,6 +108,20 @@ namespace MediaBrowser.Api.Images
[Route("/Studios/{Name}/Images/{Type}/{Index}", "GET")]
[Route("/Years/{Year}/Images/{Type}", "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")]
public class GetItemByNameImage : ImageRequest
{
@ -406,6 +420,16 @@ namespace MediaBrowser.Api.Images
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>
/// Posts the specified request.
/// </summary>

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

@ -109,6 +109,15 @@ namespace MediaBrowser.Controller.Providers
/// <returns>Task.</returns>
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>
/// Gets the metadata options.
/// </summary>
@ -139,10 +148,21 @@ namespace MediaBrowser.Controller.Providers
/// <returns>Task{HttpResponseInfo}.</returns>
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>()
where TLookupInfo : ItemLookupInfo
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>()
where TIdentity : IItemIdentity;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -24,14 +24,16 @@ namespace MediaBrowser.Providers.Manager
protected readonly IProviderManager ProviderManager;
protected readonly IProviderRepository ProviderRepo;
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;
Logger = logger;
ProviderManager = providerManager;
ProviderRepo = providerRepo;
FileSystem = fileSystem;
UserDataManager = userDataManager;
}
/// <summary>
@ -304,7 +306,7 @@ namespace MediaBrowser.Providers.Manager
{
return HasChanged(item, hasFileChangeMonitor, status, options.DirectoryService);
}
return false;
})
.ToList();
@ -356,6 +358,7 @@ namespace MediaBrowser.Providers.Manager
}
var hasLocalMetadata = false;
var userDataList = new List<UserItemData>();
foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>())
{
@ -375,6 +378,8 @@ namespace MediaBrowser.Providers.Manager
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.ImageUpdate;
}
userDataList = localItem.UserDataLIst;
MergeData(localItem.Item, temp, new List<MetadataFields>(), !options.ReplaceAllMetadata, true);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport;
@ -393,9 +398,9 @@ namespace MediaBrowser.Providers.Manager
catch (Exception ex)
{
failedProviderCount++;
Logger.ErrorException("Error in {0}", ex, provider.Name);
// If a local provider fails, consider that a failure
refreshResult.Status = ProviderRefreshStatus.Failure;
refreshResult.ErrorMessage = ex.Message;
@ -441,9 +446,25 @@ namespace MediaBrowser.Providers.Manager
await RunCustomProvider(provider, item, options, refreshResult, cancellationToken).ConfigureAwait(false);
}
await ImportUserData(item, userDataList, cancellationToken).ConfigureAwait(false);
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)
{
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)
{
}
private async Task<TIdType> CreateInitialLookupInfo(TItemType item, CancellationToken cancellationToken)
{
var info = item.GetLookupInfo();
var hasIdentity = info as IHasIdentities<IItemIdentity>;
if (hasIdentity != null)
{

@ -570,9 +570,33 @@ namespace MediaBrowser.Providers.Manager
/// <param name="item">The item.</param>
/// <param name="updateType">Type of the update.</param>
/// <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);
@ -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)
{
var options = GetMetadataOptions(item);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -571,18 +571,18 @@
"LabelFullReview": "Rese\u00f1a completa:",
"LabelShortRatingDescription": "Res\u00famen corto de clasificaci\u00f3n:",
"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.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser",
"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",
"WebClientTourMetadataManager": "Click edit to open the metadata manager",
"WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device",
"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",
"WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app",
"WebClientTourUserPreferences3": "Design the web client home page to your liking",
"WebClientTourUserPreferences4": "Configure backdrops, theme songs and external players",
"WebClientTourMobile1": "The web client works great on smartphones and tablets...",
"WebClientTourMobile2": "and easily controls other devices and Media Browser apps",
"MessageEnjoyYourStay": "Enjoy your stay"
"WebClientTourContent": "Vea sus medios recientemente a\u00f1adidos, siguientes ep\u00ecsodios y m\u00e1s. Los c\u00edrculos verdes indican cuantos medios sin reproducir tiene.",
"WebClientTourMovies": "Reproduzca pel\u00edculas, avances y m\u00e1s desde cualquier dispositivo con un navegador web.",
"WebClientTourMouseOver": "Mantgenga el rat\u00f3n sobre cualquier cartel para un acceso r\u00e1pido a informaci\u00f3n importante.",
"WebClientTourTapHold": "Presione y mantenga o haga click derecho en cualquier cartel para mostrar un men\u00fa contextual",
"WebClientTourMetadataManager": "Haga click en editar para abrir el administrador de metadatos",
"WebClientTourPlaylists": "Cree f\u00e1cilmente listas de reproducci\u00f3n y mezclas instant\u00e1neas, y reprod\u00fazcalas en cualquier dispositivo",
"WebClientTourCollections": "Cree colecciones de pel\u00edculas para agruparlas en sets de pel\u00edculas",
"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 las preferencias de lenguaje de audio y subt\u00edtulos una sola vez, para todas las app de Media Browser",
"WebClientTourUserPreferences3": "Dise\u00f1e a su gusto la p\u00e1gina principal del cliente web",
"WebClientTourUserPreferences4": "Configure im\u00e1genes de fondo, canciones de tema y reproductores externos",
"WebClientTourMobile1": "El cliente web funciona de maravilla en tel\u00e9fonos inteligentes y tabletas...",
"WebClientTourMobile2": "y controla f\u00e1cilmente otros dispositivos y apps de Media Browser",
"MessageEnjoyYourStay": "Disfrute su visita"
}

@ -571,18 +571,18 @@
"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:",
"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.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser",
"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",
"WebClientTourMetadataManager": "Click edit to open the metadata manager",
"WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device",
"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",
"WebClientTourUserPreferences2": "Configure your audio and subtitle language settings once, for every Media Browser app",
"WebClientTourUserPreferences3": "Design the web client home page to your liking",
"WebClientTourUserPreferences4": "Configure backdrops, theme songs and external players",
"WebClientTourMobile1": "The web client works great on smartphones and tablets...",
"WebClientTourMobile2": "and easily controls other devices and Media Browser apps",
"MessageEnjoyYourStay": "Enjoy your stay"
"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": "\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": "\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": "\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": "\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": "\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": "\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": "\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": "\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": "\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": "\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": "\u0492\u0430\u043b\u0430\u043c\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0456 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0434\u0430\u0440\u0434\u0430 \u0436\u04d9\u043d\u0435 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0442\u0435\u0440\u0434\u0435 \u0442\u0430\u043c\u0430\u0448\u0430 \u0436\u04b1\u043c\u044b\u0441 \u0456\u0441\u0442\u0435\u0439\u0434\u0456",
"WebClientTourMobile2": "\u0441\u043e\u043d\u044b\u043c\u0435\u043d \u049b\u0430\u0442\u0430\u0440 \u0431\u0430\u0441\u049b\u0430 \u0436\u0430\u0431\u0434\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0436\u04d9\u043d\u0435 Media Browser \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u043b\u0430\u0440\u044b\u043d \u0431\u0430\u0441\u049b\u0430\u0440\u0430\u0434\u044b",
"MessageEnjoyYourStay": "\u0416\u0430\u0493\u044b\u043c\u0434\u044b \u0435\u0440\u043c\u0435\u043a \u0435\u0442\u0456\u04a3\u0456\u0437"
}

@ -198,7 +198,7 @@
"ButtonOpen": "\u00c5pne",
"ButtonOpenInNewTab": "\u00c5pne i ny fane",
"ButtonShuffle": "Shuffle",
"ButtonInstantMix": "Instant mix",
"ButtonInstantMix": "Direktemiks",
"ButtonResume": "Fortsett",
"HeaderScenes": "Scener",
"HeaderAudioTracks": "Lydspor",
@ -334,12 +334,12 @@
"ButtonRemoveFromPlaylist": "Fjern fra spilleliste",
"HeaderSpecials": "Spescials",
"HeaderTrailers": "Trailere",
"HeaderAudio": "Audio",
"HeaderAudio": "Lyd",
"HeaderResolution": "Oppl\u00f8sning",
"HeaderVideo": "Video",
"HeaderRuntime": "Spilletid",
"HeaderCommunityRating": "Community rating",
"HeaderParentalRating": "Parental rating",
"HeaderCommunityRating": "Fellesskap anmeldelse",
"HeaderParentalRating": "Foreldresensur:",
"HeaderReleaseDate": "Utgivelsesdato",
"HeaderDateAdded": "Dato lagt til",
"HeaderSeries": "Serier",
@ -347,9 +347,9 @@
"HeaderSeasonNumber": "Sesong nummer",
"HeaderNetwork": "Nettverk",
"HeaderYear": "\u00c5r",
"HeaderGameSystem": "Game system",
"HeaderGameSystem": "Spill system",
"HeaderPlayers": "Spillere",
"HeaderEmbeddedImage": "Embedded image",
"HeaderEmbeddedImage": "innebygd bilde",
"HeaderTrack": "Spor",
"HeaderDisc": "Disk",
"OptionMovies": "Filmer",
@ -358,7 +358,7 @@
"OptionSeasons": "Sesonger",
"OptionEpisodes": "Episoder",
"OptionGames": "Spill",
"OptionGameSystems": "Game systems",
"OptionGameSystems": "Spill systemer",
"OptionMusicArtists": "Musikk artist",
"OptionMusicAlbums": "Musikk album",
"OptionMusicVideos": "Musikk videoer",
@ -520,7 +520,7 @@
"MediaInfoShutterSpeed": "Shutter speed",
"MediaInfoSoftware": "Programvare",
"HeaderIfYouLikeCheckTheseOut": "If you like {0}, check these out...",
"HeaderPlotKeywords": "Plot Keywords",
"HeaderPlotKeywords": "Plott n\u00f8kkelord",
"HeaderMovies": "Movies",
"HeaderAlbums": "Albums",
"HeaderGames": "Games",
@ -576,7 +576,7 @@
"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",
"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",
"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",

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

@ -571,11 +571,11 @@
"LabelFullReview": "Coment\u00e1rio completo:",
"LabelShortRatingDescription": "Resumo da avalia\u00e7\u00e3o:",
"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.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser",
"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",
"WebClientTourMetadataManager": "Click edit to open the metadata manager",
"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": "Reproduza filmes, trailers e mais em qualquer dispositivo com um browser web.",
"WebClientTourMouseOver": "Posicione o mouse sobre qualquer capa para acessar rapidamente informa\u00e7\u00f5es importantes",
"WebClientTourTapHold": "Toque e mantenha ou clique com o bot\u00e3o direito do mouse sobre a capa para um menu contextual",
"WebClientTourMetadataManager": "Clique em editar para abrir o gerenciador de metadados",
"WebClientTourPlaylists": "Easily create playlists and instant mixes, and play them on any device",
"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",

@ -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}.",
"HeaderMenu": "\u041c\u0435\u043d\u044e",
"ButtonOpen": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c",
"ButtonOpenInNewTab": "\u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435",
"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",
"ButtonInstantMix": "\u0410\u0432\u0442\u043e\u043c\u0438\u043a\u0441",
"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:",
"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",
"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.",
"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.",
"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\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",
"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",
"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",
"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": "\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",
"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",
@ -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",
"WebClientTourMobile1": "\u0412\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445 \u0438 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430\u0445...",
"WebClientTourMobile2": "\u0438 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Media Browser",
"MessageEnjoyYourStay": "\u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\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"
}

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

@ -258,7 +258,7 @@
"OptionUnplayed": "No reproducido",
"LabelAirTime": "Duraci\u00f3n:",
"OptionAscending": "Ascendente",
"HeaderMediaInfo": "Info del Medio:",
"HeaderMediaInfo": "Info del Medio",
"OptionDescending": "Descendente",
"HeaderPhotoInfo": "Info de Fotograf\u00eda:",
"OptionRuntime": "Duraci\u00f3n",
@ -289,7 +289,7 @@
"HeaderXmlDocumentAttribute": "Atributo del Documento XML",
"OptionRevenue": "Recaudaci\u00f3n",
"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",
"OptionBackdrop": "Imagen de Fondo",
"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.",
"HeaderWelcomeToMediaBrowserWebClient": "Bienvenido al Cliente Web de Media Browser",
"ButtonDismiss": "Descartar",
"ButtonTakeTheTour": "Take the tour",
"ButtonTakeTheTour": "Haga el recorrido",
"ButtonEditOtherUserPreferences": "Edita las preferencias personales de este usuario.",
"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.",
@ -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.",
"ChannelSettingsFormHelp": "Instale canales tales como Avances y Vimeo desde el cat\u00e1logo de complementos.",
"LabelSelectCollection": "Elegir colecci\u00f3n:",
"ButtonOptions": "Options",
"ButtonOptions": "Opciones",
"ViewTypeMovies": "Pel\u00edculas",
"ViewTypeTvShows": "TV",
"ViewTypeGames": "Juegos",

@ -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.",
"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",
"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.",
"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.",

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

@ -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",
"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",
"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",
"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",
@ -938,7 +938,7 @@
"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:",
"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.",
"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",
@ -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...",
"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",
"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",
"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.",

@ -92,9 +92,9 @@
"LabelSaveLocalMetadata": "Spara grafik och metadata i mediamapparna",
"HeaderLocalAccess": "Lokal \u00e5tkomst",
"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",
"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.",
"LabelMetadataRefreshMode": "Metod f\u00f6r uppdatering av metadata:",
"TabPreferences": "Inst\u00e4llningar",
@ -149,82 +149,82 @@
"LabelOverview": "Synopsis:",
"ButtonAddUser": "Ny anv\u00e4ndare",
"LabelShortOverview": "Kort synopsis:",
"LabelReleaseDate": "Release date:",
"ButtonAddLocalUser": "Add Local User",
"LabelYear": "Year:",
"ButtonInviteMediaBrowserUser": "Invite Media Browser User",
"LabelReleaseDate": "Premi\u00e4rdatum:",
"ButtonAddLocalUser": "Skapa lokal anv\u00e4ndare",
"LabelYear": "\u00c5r:",
"ButtonInviteMediaBrowserUser": "Bjud in Media Browser-anv\u00e4ndare",
"ButtonSave": "Spara",
"LabelPlaceOfBirth": "F\u00f6delseort:",
"ButtonResetPassword": "\u00c5terst\u00e4ll l\u00f6senord",
"LabelEndDate": "End date:",
"LabelEndDate": "Slutdatum:",
"LabelNewPassword": "Nytt l\u00f6senord:",
"LabelAirDate": "S\u00e4ndningsdagar:",
"LabelNewPasswordConfirm": "Bekr\u00e4fta nytt l\u00f6senord:",
"LabelAirTime:": "S\u00e4ndningstid:",
"HeaderCreatePassword": "Skapa l\u00f6senord",
"LabelRuntimeMinutes": "Run time (minutes):",
"LabelRuntimeMinutes": "Speltid (min):",
"LabelCurrentPassword": "Nuvarande l\u00f6senord:",
"LabelParentalRating": "Parental rating:",
"LabelParentalRating": "\u00c5ldersgr\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.",
"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.",
"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.",
"LabelOriginalAspectRatio": "Original aspect ratio:",
"LabelOriginalAspectRatio": "Ursprungligt bildf\u00f6rh\u00e5llande:",
"ButtonDeleteImage": "Ta bort bild",
"LabelPlayers": "Players:",
"LabelPlayers": "Spelare:",
"LabelSelectUsers": "V\u00e4lj anv\u00e4ndare:",
"Label3DFormat": "3D format:",
"Label3DFormat": "3D-format:",
"ButtonUpload": "Ladda upp",
"HeaderAlternateEpisodeNumbers": "Alternate Episode Numbers",
"HeaderAlternateEpisodeNumbers": "Alternativ avsnittsnumrering",
"HeaderUploadNewImage": "Ladda upp ny bild",
"HeaderSpecialEpisodeInfo": "Special Episode Info",
"HeaderSpecialEpisodeInfo": "Info om specialavsnitt",
"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.",
"LabelDvdSeasonNumber": "Dvd season number:",
"LabelDvdSeasonNumber": "S\u00e4songsnummer p\u00e5 DVD:",
"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.",
"LabelAbsoluteEpisodeNumber": "Absolute episode number:",
"LabelAbsoluteEpisodeNumber": "Avsnittsnummer fr\u00e5n start:",
"TabSuggested": "Rekommenderas",
"LabelAirsBeforeSeason": "Airs before season:",
"LabelAirsBeforeSeason": "S\u00e4nds f\u00f6re s\u00e4song:",
"TabLatest": "Nytillkommet",
"LabelAirsAfterSeason": "Airs after season:",
"LabelAirsAfterSeason": "S\u00e4nds efter s\u00e4song:",
"TabUpcoming": "Kommande",
"LabelAirsBeforeEpisode": "Airs before episode:",
"LabelAirsBeforeEpisode": "S\u00e4nds f\u00f6re avsnitt:",
"TabShows": "Serier",
"LabelTreatImageAs": "Treat image as:",
"LabelTreatImageAs": "Behandla bild som:",
"TabEpisodes": "Avsnitt",
"LabelDisplayOrder": "Display order:",
"LabelDisplayOrder": "Visningsordning:",
"TabGenres": "Genrer",
"LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in",
"LabelDisplaySpecialsWithinSeasons": "Visa specialer i de s\u00e4songer de s\u00e4ndes i",
"TabPeople": "Personer",
"HeaderCountries": "Countries",
"HeaderCountries": "L\u00e4nder",
"TabNetworks": "TV-bolag",
"HeaderGenres": "Genres",
"HeaderGenres": "Genrer",
"HeaderUsers": "Anv\u00e4ndare",
"HeaderPlotKeywords": "Plot Keywords",
"HeaderPlotKeywords": "Nyckelord i handlingen",
"HeaderFilters": "Filter:",
"HeaderStudios": "Studios",
"HeaderStudios": "Studior",
"ButtonFilter": "Filtrera",
"HeaderTags": "Tags",
"HeaderTags": "Etiketter",
"OptionFavorite": "Favoriter",
"HeaderMetadataSettings": "Metadata Settings",
"HeaderMetadataSettings": "Metadatainst\u00e4llningar",
"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",
"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",
"TabDonate": "L\u00e4mna bidrag",
"OptionGuestStars": "G\u00e4startister",
"HeaderDonationType": "Donation type:",
"HeaderDonationType": "Donationstyp:",
"OptionDirectors": "Regiss\u00f6rer",
"OptionMakeOneTimeDonation": "Make a separate donation",
"OptionMakeOneTimeDonation": "Ge ett extra bidrag",
"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",
"OptionLifeTimeSupporterMembership": "Livstids supportermedlemskap",
"HeaderResume": "\u00c5teruppta",
@ -232,31 +232,31 @@
"HeaderNextUp": "N\u00e4stkommande",
"OptionMonthlySupporterMembership": "M\u00e5natligt supportermedlemskap",
"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",
"OptionNoTrailer": "No Trailer",
"OptionNoTrailer": "Trailer saknas",
"HeaderPersonTypes": "Personkategorier:",
"OptionNoThemeSong": "No Theme Song",
"OptionNoThemeSong": "Ledmotiv saknas",
"TabSongs": "L\u00e5tar",
"OptionNoThemeVideo": "No Theme Video",
"OptionNoThemeVideo": "Temavideo saknas",
"TabAlbums": "Album",
"LabelOneTimeDonationAmount": "Donation amount:",
"LabelOneTimeDonationAmount": "Bidragsbelopp:",
"TabArtists": "Artister",
"OptionActor": "Actor",
"OptionActor": "Sk\u00e5despelare",
"TabAlbumArtists": "Albumartister",
"OptionComposer": "Composer",
"OptionComposer": "Komposit\u00f6r",
"TabMusicVideos": "Musikvideor",
"OptionDirector": "Director",
"OptionDirector": "Regiss\u00f6r",
"ButtonSort": "Sortera",
"OptionGuestStar": "Guest star",
"OptionGuestStar": "G\u00e4startist",
"HeaderSortBy": "Sortera efter:",
"OptionProducer": "Producer",
"OptionProducer": "Producent",
"HeaderSortOrder": "Sorteringsordning:",
"OptionWriter": "Writer",
"OptionWriter": "Manusf\u00f6rfattare",
"OptionPlayed": "Visad",
"LabelAirDays": "Air days:",
"LabelAirDays": "S\u00e4ndningsdagar:",
"OptionUnplayed": "Ej visad",
"LabelAirTime": "Air time:",
"LabelAirTime": "S\u00e4ndningstid:",
"OptionAscending": "Stigande",
"HeaderMediaInfo": "Mediainformation",
"OptionDescending": "Sjunkande",
@ -288,49 +288,49 @@
"OptionBudget": "Budget",
"HeaderXmlDocumentAttribute": "XML-dokumentattribut",
"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",
"OptionSaveMetadataAsHidden": "Save metadata and images as hidden files",
"OptionSaveMetadataAsHidden": "Spara metadata och bilder som dolda filer",
"OptionBackdrop": "Fondbild",
"LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan",
"LabelExtractChaptersDuringLibraryScan": "Extrahera kapitelbildrutor vid genoms\u00f6kning av biblioteket",
"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",
"LabelConnectUserName": "Media Browser username\/email:",
"LabelConnectUserName": "Media Browser-anv\u00e4ndarnamn\/email:",
"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",
"ButtonLearnMoreAboutMediaBrowserConnect": "Learn more about Media Browser Connect",
"ButtonLearnMoreAboutMediaBrowserConnect": "L\u00e4s mer om Media Browser Connect",
"OptionVideoBitrate": "Bithastighet f\u00f6r video",
"LabelExternalPlayers": "External players:",
"LabelExternalPlayers": "Externa uppspelare:",
"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.",
"HeaderSubtitleProfile": "Subtitle Profile",
"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": "Undertextprofil",
"ScheduledTasksHelp": "Klicka p\u00e5 en aktivitet f\u00f6r att \u00e4ndra k\u00f6rtider.",
"ScheduledTasksTitle": "Schemalagda aktiviteter",
"HeaderSubtitleProfiles": "Subtitle Profiles",
"HeaderSubtitleProfilesHelp": "Subtitle profiles describe the subtitle formats supported by the device.",
"HeaderSubtitleProfiles": "Undertextprofiler",
"HeaderSubtitleProfilesHelp": "Undertextprofiler beskriver de undertextformat som st\u00f6ds av enheten.",
"TabMyPlugins": "Mina till\u00e4gg",
"LabelFormat": "Format:",
"TabCatalog": "Katalog",
"LabelMethod": "Method:",
"LabelMethod": "Metod:",
"PluginsTitle": "Till\u00e4gg",
"LabelDidlMode": "Didl mode:",
"LabelDidlMode": "Didl-l\u00e4ge:",
"HeaderAutomaticUpdates": "Automatiska uppdateringar",
"OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)",
"HeaderNowPlaying": "Nu spelas",
"OptionResElement": "res element",
"HeaderLatestAlbums": "Nytillkomna album",
"OptionEmbedSubtitles": "Embed within container",
"OptionEmbedSubtitles": "Infoga i container",
"HeaderLatestSongs": "Nytillkomna l\u00e5tar",
"OptionExternallyDownloaded": "External download",
"OptionExternallyDownloaded": "Extern nerladdning",
"HeaderRecentlyPlayed": "Nyligen spelade",
"OptionHlsSegmentedSubtitles": "Hls segmented subtitles",
"OptionHlsSegmentedSubtitles": "HLS-segmenterade undertexter",
"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.",
"LabelSubtitleFormatHelp": "Example: srt",
"LabelSubtitleFormatHelp": "Exempel:srt",
"LabelVideoType": "Videoformat:",
"ButtonLearnMore": "Learn more",
"ButtonLearnMore": "L\u00e4s mer",
"OptionBluray": "Blu-ray",
"TabPlayback": "Uppspelning",
"OptionDvd": "DVD",
@ -364,7 +364,7 @@
"TabTrailers": "Trailers",
"LabelCustomIntrosPath": "S\u00f6kv\u00e4g f\u00f6r egna vinjetter:",
"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",
"ValueSpecialEpisodeName": "Special - {0}",
"HeaderLatestMovies": "Nytillkomna filmer",
@ -824,8 +824,8 @@
"ButtonNextTrack": "N\u00e4sta sp\u00e5r:",
"ButtonStop": "Stopp",
"ButtonPause": "Paus",
"ButtonNext": "Next",
"ButtonPrevious": "Previous",
"ButtonNext": "N\u00e4sta",
"ButtonPrevious": "F\u00f6reg\u00e5ende",
"LabelGroupMoviesIntoCollections": "Gruppera filmer i samlingsboxar",
"LabelGroupMoviesIntoCollectionsHelp": "I filmlistor visas filmer som ing\u00e5r i en samlingsbox som ett enda objekt.",
"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\".",
"LabelSupportedMediaTypes": "Mediaformat som st\u00f6ds:",
"TabIdentification": "Identifiering",
"HeaderIdentification": "Identification",
"HeaderIdentification": "Identifiering",
"TabDirectPlay": "Direktuppspelning",
"TabContainers": "Beh\u00e5llare",
"TabCodecs": "Kodningsformat",
@ -947,15 +947,15 @@
"LabelDisplayPluginsFor": "Visa till\u00e4gg f\u00f6r:",
"PluginTabMediaBrowserClassic": "MB Classic",
"PluginTabMediaBrowserTheater": "MB Theater",
"LabelEpisodeNamePlain": "Episode name",
"LabelSeriesNamePlain": "Series name",
"LabelEpisodeNamePlain": "Avsnittsnamn",
"LabelSeriesNamePlain": "Seriens namn",
"ValueSeriesNamePeriod": "Series.name",
"ValueSeriesNameUnderscore": "Series_name",
"ValueEpisodeNamePeriod": "Episode.name",
"ValueEpisodeNameUnderscore": "Episode_name",
"LabelSeasonNumberPlain": "Season number",
"LabelEpisodeNumberPlain": "Episode number",
"LabelEndingEpisodeNumberPlain": "Ending episode number",
"LabelSeasonNumberPlain": "S\u00e4songsnummer",
"LabelEpisodeNumberPlain": "Avsnittsnummer",
"LabelEndingEpisodeNumberPlain": "Avslutande avsnittsnummer",
"HeaderTypeText": "Ange text",
"LabelTypeText": "Text",
"HeaderSearchForSubtitles": "S\u00f6k efter undertexter",
@ -1000,7 +1000,7 @@
"MessageNoPlaylistItemsAvailable": "Den h\u00e4r spellistan \u00e4r tom.",
"HeaderWelcomeToMediaBrowserWebClient": "V\u00e4lkommen till Media Browsers webbklient",
"ButtonDismiss": "Avvisa",
"ButtonTakeTheTour": "Take the tour",
"ButtonTakeTheTour": "Ta en rundtur",
"ButtonEditOtherUserPreferences": "Redigera den h\u00e4r anv\u00e4ndarens personliga inst\u00e4llningar.",
"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.",
@ -1013,7 +1013,7 @@
"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.",
"LabelSelectCollection": "V\u00e4lj samling:",
"ButtonOptions": "Options",
"ButtonOptions": "Alternativ",
"ViewTypeMovies": "Filmer",
"ViewTypeTvShows": "TV",
"ViewTypeGames": "Spel",
@ -1044,11 +1044,11 @@
"ViewTypeMusicAlbums": "Album",
"ViewTypeMusicAlbumArtists": "Albumartister",
"HeaderOtherDisplaySettings": "Visningsinst\u00e4llningar",
"ViewTypeMusicSongs": "Songs",
"ViewTypeMusicFavorites": "Favorites",
"ViewTypeMusicFavoriteAlbums": "Favorite Albums",
"ViewTypeMusicFavoriteArtists": "Favorite Artists",
"ViewTypeMusicFavoriteSongs": "Favorite Songs",
"ViewTypeMusicSongs": "L\u00e5tar",
"ViewTypeMusicFavorites": "Favoriter",
"ViewTypeMusicFavoriteAlbums": "Favoritalbum",
"ViewTypeMusicFavoriteArtists": "Favoritartister",
"ViewTypeMusicFavoriteSongs": "Favoritl\u00e5tar",
"HeaderMyViews": "Mina vyer",
"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.",
@ -1163,7 +1163,7 @@
"OptionUnidentified": "Oidentifierad",
"OptionMissingParentalRating": "\u00c5ldersgr\u00e4ns saknas",
"OptionStub": "Stump",
"HeaderEpisodes": "Episodes:",
"HeaderEpisodes": "Avsnitt:",
"OptionSeason0": "S\u00e4song 0",
"LabelReport": "Rapport:",
"OptionReportSongs": "L\u00e5tar",

@ -6,6 +6,7 @@ using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.XbmcMetadata.Configuration;
using MediaBrowser.XbmcMetadata.Savers;
using System;
using System.Linq;
@ -36,20 +37,19 @@ namespace MediaBrowser.XbmcMetadata
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)
{
var person = e.Item as Person;
if (person != null)
{
var config = _config.GetNfoConfiguration();
if (!config.SaveImagePathsInNfo)
{
return;
}
var items = _libraryManager.RootFolder.RecursiveChildren;
items = person.GetTaggedItems(items).ToList();
@ -63,22 +63,13 @@ namespace MediaBrowser.XbmcMetadata
void _userDataManager_UserDataSaved(object sender, UserDataSaveEventArgs e)
{
var userId = _config.GetNfoConfiguration().UserId;
if (string.IsNullOrWhiteSpace(userId))
{
return;
}
if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed)
if (e.SaveReason == UserDataSaveReason.PlaybackFinished || e.SaveReason == UserDataSaveReason.TogglePlayed || e.SaveReason == UserDataSaveReason.UpdateUserRating)
{
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
{
await _providerManager.SaveMetadata(item, updateReason).ConfigureAwait(false);
await _providerManager.SaveMetadata(item, updateReason, new[] { BaseNfoSaver.SaverName }).ConfigureAwait(false);
}
catch (Exception ex)
{

@ -3,15 +3,13 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.XbmcMetadata.Configuration;
using MediaBrowser.XbmcMetadata.Savers;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Xml;
using MediaBrowser.XbmcMetadata.Savers;
namespace MediaBrowser.XbmcMetadata.Parsers
{
@ -41,10 +39,12 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// Fetches metadata for an item from one xml file
/// </summary>
/// <param name="item">The item.</param>
/// <param name="userDataList">The user data list.</param>
/// <param name="metadataFile">The metadata file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <exception cref="System.ArgumentNullException"></exception>
public void Fetch(T item, string metadataFile, CancellationToken cancellationToken)
/// <exception cref="System.ArgumentNullException">
/// </exception>
public void Fetch(T item, List<UserItemData> userDataList, string metadataFile, CancellationToken cancellationToken)
{
if (item == null)
{
@ -64,17 +64,18 @@ namespace MediaBrowser.XbmcMetadata.Parsers
ValidationType = ValidationType.None
};
Fetch(item, metadataFile, settings, cancellationToken);
Fetch(item, userDataList, metadataFile, settings, cancellationToken);
}
/// <summary>
/// Fetches the specified item.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="userDataList">The user data list.</param>
/// <param name="metadataFile">The metadata file.</param>
/// <param name="settings">The settings.</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))
{
@ -90,15 +91,17 @@ namespace MediaBrowser.XbmcMetadata.Parsers
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)
{
// DateCreated
@ -571,7 +574,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
case "releasedate":
{
var formatString = _config.GetNfoConfiguration().ReleaseDateFormat;
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
@ -798,12 +801,176 @@ namespace MediaBrowser.XbmcMetadata.Parsers
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:
reader.Skip();
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)
{
reader.MoveToContent();

@ -1,4 +1,5 @@
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
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<ChapterInfo> chapters,
string metadataFile,
@ -31,7 +33,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
_chaptersFound = chapters;
_xmlPath = metadataFile;
Fetch(item, metadataFile, cancellationToken);
Fetch(item, userDataList, metadataFile, cancellationToken);
}
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
@ -41,7 +43,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// </summary>
/// <param name="reader">The reader.</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)
{
@ -203,7 +206,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
default:
base.FetchDataFromXmlNode(reader, item);
base.FetchDataFromXmlNode(reader, item, userDataList);
break;
}
}

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

@ -1,6 +1,8 @@
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Model.Logging;
using System.Collections.Generic;
using System.Xml;
namespace MediaBrowser.XbmcMetadata.Parsers
@ -16,7 +18,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// </summary>
/// <param name="reader">The reader.</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)
{
@ -37,7 +40,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
}
default:
base.FetchDataFromXmlNode(reader, item);
base.FetchDataFromXmlNode(reader, item, userDataList);
break;
}
}

@ -1,9 +1,11 @@
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
using System.Xml;
namespace MediaBrowser.XbmcMetadata.Parsers
@ -19,7 +21,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// </summary>
/// <param name="reader">The reader.</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)
{
@ -85,7 +88,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
}
default:
base.FetchDataFromXmlNode(reader, item);
base.FetchDataFromXmlNode(reader, item, userDataList);
break;
}
}

@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
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)

@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
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)

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

@ -28,7 +28,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
{
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;
}

@ -28,7 +28,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
var images = new List<LocalImageInfo>();
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.Chapters = chapters;

@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
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)

@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
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)

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

Loading…
Cancel
Save