mirror of https://github.com/jellyfin/jellyfin.git
Remove support for games as a media type
This commit is contained in:
parent
b5e8cce4cf
commit
8985fb8d58
|
@ -454,7 +454,7 @@ namespace Emby.Dlna.ContentDirectory
|
||||||
User = user,
|
User = user,
|
||||||
Recursive = true,
|
Recursive = true,
|
||||||
IsMissing = false,
|
IsMissing = false,
|
||||||
ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name },
|
ExcludeItemTypes = new[] { typeof(Book).Name },
|
||||||
IsFolder = isFolder,
|
IsFolder = isFolder,
|
||||||
MediaTypes = mediaTypes.ToArray(),
|
MediaTypes = mediaTypes.ToArray(),
|
||||||
DtoOptions = GetDtoOptions()
|
DtoOptions = GetDtoOptions()
|
||||||
|
@ -523,7 +523,7 @@ namespace Emby.Dlna.ContentDirectory
|
||||||
Limit = limit,
|
Limit = limit,
|
||||||
StartIndex = startIndex,
|
StartIndex = startIndex,
|
||||||
IsVirtualItem = false,
|
IsVirtualItem = false,
|
||||||
ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name },
|
ExcludeItemTypes = new[] { typeof(Book).Name },
|
||||||
IsPlaceHolder = false,
|
IsPlaceHolder = false,
|
||||||
DtoOptions = GetDtoOptions()
|
DtoOptions = GetDtoOptions()
|
||||||
};
|
};
|
||||||
|
|
|
@ -808,7 +808,7 @@ namespace Emby.Dlna.Didl
|
||||||
{
|
{
|
||||||
writer.WriteString(_profile.RequiresPlainFolders ? "object.container.storageFolder" : "object.container.genre.musicGenre");
|
writer.WriteString(_profile.RequiresPlainFolders ? "object.container.storageFolder" : "object.container.genre.musicGenre");
|
||||||
}
|
}
|
||||||
else if (item is Genre || item is GameGenre)
|
else if (item is Genre)
|
||||||
{
|
{
|
||||||
writer.WriteString(_profile.RequiresPlainFolders ? "object.container.storageFolder" : "object.container.genre");
|
writer.WriteString(_profile.RequiresPlainFolders ? "object.container.storageFolder" : "object.container.genre");
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,11 +73,6 @@ namespace Emby.Notifications
|
||||||
Type = NotificationType.AudioPlayback.ToString()
|
Type = NotificationType.AudioPlayback.ToString()
|
||||||
},
|
},
|
||||||
|
|
||||||
new NotificationTypeInfo
|
|
||||||
{
|
|
||||||
Type = NotificationType.GamePlayback.ToString()
|
|
||||||
},
|
|
||||||
|
|
||||||
new NotificationTypeInfo
|
new NotificationTypeInfo
|
||||||
{
|
{
|
||||||
Type = NotificationType.VideoPlayback.ToString()
|
Type = NotificationType.VideoPlayback.ToString()
|
||||||
|
@ -88,11 +83,6 @@ namespace Emby.Notifications
|
||||||
Type = NotificationType.AudioPlaybackStopped.ToString()
|
Type = NotificationType.AudioPlaybackStopped.ToString()
|
||||||
},
|
},
|
||||||
|
|
||||||
new NotificationTypeInfo
|
|
||||||
{
|
|
||||||
Type = NotificationType.GamePlaybackStopped.ToString()
|
|
||||||
},
|
|
||||||
|
|
||||||
new NotificationTypeInfo
|
new NotificationTypeInfo
|
||||||
{
|
{
|
||||||
Type = NotificationType.VideoPlaybackStopped.ToString()
|
Type = NotificationType.VideoPlaybackStopped.ToString()
|
||||||
|
|
|
@ -207,10 +207,6 @@ namespace Emby.Server.Implementations.Activity
|
||||||
{
|
{
|
||||||
return NotificationType.AudioPlayback.ToString();
|
return NotificationType.AudioPlayback.ToString();
|
||||||
}
|
}
|
||||||
if (string.Equals(mediaType, MediaType.Game, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return NotificationType.GamePlayback.ToString();
|
|
||||||
}
|
|
||||||
if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return NotificationType.VideoPlayback.ToString();
|
return NotificationType.VideoPlayback.ToString();
|
||||||
|
@ -225,10 +221,6 @@ namespace Emby.Server.Implementations.Activity
|
||||||
{
|
{
|
||||||
return NotificationType.AudioPlaybackStopped.ToString();
|
return NotificationType.AudioPlaybackStopped.ToString();
|
||||||
}
|
}
|
||||||
if (string.Equals(mediaType, MediaType.Game, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return NotificationType.GamePlaybackStopped.ToString();
|
|
||||||
}
|
|
||||||
if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return NotificationType.VideoPlaybackStopped.ToString();
|
return NotificationType.VideoPlaybackStopped.ToString();
|
||||||
|
|
|
@ -1671,7 +1671,6 @@ namespace Emby.Server.Implementations
|
||||||
|
|
||||||
var minRequiredVersions = new Dictionary<string, Version>(StringComparer.OrdinalIgnoreCase)
|
var minRequiredVersions = new Dictionary<string, Version>(StringComparer.OrdinalIgnoreCase)
|
||||||
{
|
{
|
||||||
{ "GameBrowser.dll", new Version(3, 1) },
|
|
||||||
{ "moviethemesongs.dll", new Version(1, 6) },
|
{ "moviethemesongs.dll", new Version(1, 6) },
|
||||||
{ "themesongs.dll", new Version(1, 2) }
|
{ "themesongs.dll", new Version(1, 2) }
|
||||||
};
|
};
|
||||||
|
|
|
@ -1239,10 +1239,6 @@ namespace Emby.Server.Implementations.Data
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (type == typeof(GameGenre))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if (type == typeof(Genre))
|
else if (type == typeof(Genre))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -4789,10 +4785,6 @@ namespace Emby.Server.Implementations.Data
|
||||||
{
|
{
|
||||||
list.Add(typeof(MusicGenre).Name);
|
list.Add(typeof(MusicGenre).Name);
|
||||||
}
|
}
|
||||||
if (IsTypeInQuery(typeof(GameGenre).Name, query))
|
|
||||||
{
|
|
||||||
list.Add(typeof(GameGenre).Name);
|
|
||||||
}
|
|
||||||
if (IsTypeInQuery(typeof(MusicArtist).Name, query))
|
if (IsTypeInQuery(typeof(MusicArtist).Name, query))
|
||||||
{
|
{
|
||||||
list.Add(typeof(MusicArtist).Name);
|
list.Add(typeof(MusicArtist).Name);
|
||||||
|
@ -4891,9 +4883,6 @@ namespace Emby.Server.Implementations.Data
|
||||||
typeof(Book),
|
typeof(Book),
|
||||||
typeof(CollectionFolder),
|
typeof(CollectionFolder),
|
||||||
typeof(Folder),
|
typeof(Folder),
|
||||||
typeof(Game),
|
|
||||||
typeof(GameGenre),
|
|
||||||
typeof(GameSystem),
|
|
||||||
typeof(Genre),
|
typeof(Genre),
|
||||||
typeof(Person),
|
typeof(Person),
|
||||||
typeof(Photo),
|
typeof(Photo),
|
||||||
|
@ -5251,11 +5240,6 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
||||||
return GetItemValues(query, new[] { 2 }, typeof(Genre).FullName);
|
return GetItemValues(query, new[] { 2 }, typeof(Genre).FullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryResult<Tuple<BaseItem, ItemCounts>> GetGameGenres(InternalItemsQuery query)
|
|
||||||
{
|
|
||||||
return GetItemValues(query, new[] { 2 }, typeof(GameGenre).FullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query)
|
public QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
return GetItemValues(query, new[] { 2 }, typeof(MusicGenre).FullName);
|
return GetItemValues(query, new[] { 2 }, typeof(MusicGenre).FullName);
|
||||||
|
@ -5276,14 +5260,9 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
||||||
return GetItemValueNames(new[] { 2 }, new List<string> { "Audio", "MusicVideo", "MusicAlbum", "MusicArtist" }, new List<string>());
|
return GetItemValueNames(new[] { 2 }, new List<string> { "Audio", "MusicVideo", "MusicAlbum", "MusicArtist" }, new List<string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<string> GetGameGenreNames()
|
|
||||||
{
|
|
||||||
return GetItemValueNames(new[] { 2 }, new List<string> { "Game" }, new List<string>());
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<string> GetGenreNames()
|
public List<string> GetGenreNames()
|
||||||
{
|
{
|
||||||
return GetItemValueNames(new[] { 2 }, new List<string>(), new List<string> { "Audio", "MusicVideo", "MusicAlbum", "MusicArtist", "Game", "GameSystem" });
|
return GetItemValueNames(new[] { 2 }, new List<string>(), new List<string> { "Audio", "MusicVideo", "MusicAlbum", "MusicArtist" });
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<string> GetItemValueNames(int[] itemValueTypes, List<string> withItemTypes, List<string> excludeItemTypes)
|
private List<string> GetItemValueNames(int[] itemValueTypes, List<string> withItemTypes, List<string> excludeItemTypes)
|
||||||
|
@ -5652,10 +5631,6 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
||||||
{
|
{
|
||||||
counts.SongCount = value;
|
counts.SongCount = value;
|
||||||
}
|
}
|
||||||
else if (string.Equals(typeName, typeof(Game).FullName, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
counts.GameCount = value;
|
|
||||||
}
|
|
||||||
else if (string.Equals(typeName, typeof(Trailer).FullName, StringComparison.OrdinalIgnoreCase))
|
else if (string.Equals(typeName, typeof(Trailer).FullName, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
counts.TrailerCount = value;
|
counts.TrailerCount = value;
|
||||||
|
|
|
@ -374,10 +374,6 @@ namespace Emby.Server.Implementations.Dto
|
||||||
dto.MusicVideoCount = taggedItems.Count(i => i is MusicVideo);
|
dto.MusicVideoCount = taggedItems.Count(i => i is MusicVideo);
|
||||||
dto.SongCount = taggedItems.Count(i => i is Audio);
|
dto.SongCount = taggedItems.Count(i => i is Audio);
|
||||||
}
|
}
|
||||||
else if (item is GameGenre)
|
|
||||||
{
|
|
||||||
dto.GameCount = taggedItems.Count(i => i is Game);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// This populates them all and covers Genre, Person, Studio, Year
|
// This populates them all and covers Genre, Person, Studio, Year
|
||||||
|
@ -385,7 +381,6 @@ namespace Emby.Server.Implementations.Dto
|
||||||
dto.ArtistCount = taggedItems.Count(i => i is MusicArtist);
|
dto.ArtistCount = taggedItems.Count(i => i is MusicArtist);
|
||||||
dto.AlbumCount = taggedItems.Count(i => i is MusicAlbum);
|
dto.AlbumCount = taggedItems.Count(i => i is MusicAlbum);
|
||||||
dto.EpisodeCount = taggedItems.Count(i => i is Episode);
|
dto.EpisodeCount = taggedItems.Count(i => i is Episode);
|
||||||
dto.GameCount = taggedItems.Count(i => i is Game);
|
|
||||||
dto.MovieCount = taggedItems.Count(i => i is Movie);
|
dto.MovieCount = taggedItems.Count(i => i is Movie);
|
||||||
dto.TrailerCount = taggedItems.Count(i => i is Trailer);
|
dto.TrailerCount = taggedItems.Count(i => i is Trailer);
|
||||||
dto.MusicVideoCount = taggedItems.Count(i => i is MusicVideo);
|
dto.MusicVideoCount = taggedItems.Count(i => i is MusicVideo);
|
||||||
|
@ -532,17 +527,6 @@ namespace Emby.Server.Implementations.Dto
|
||||||
dto.Album = item.Album;
|
dto.Album = item.Album;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetGameProperties(BaseItemDto dto, Game item)
|
|
||||||
{
|
|
||||||
dto.GameSystem = item.GameSystem;
|
|
||||||
dto.MultiPartGameFiles = item.MultiPartGameFiles;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void SetGameSystemProperties(BaseItemDto dto, GameSystem item)
|
|
||||||
{
|
|
||||||
dto.GameSystem = item.GameSystemName;
|
|
||||||
}
|
|
||||||
|
|
||||||
private string[] GetImageTags(BaseItem item, List<ItemImageInfo> images)
|
private string[] GetImageTags(BaseItem item, List<ItemImageInfo> images)
|
||||||
{
|
{
|
||||||
return images
|
return images
|
||||||
|
@ -698,11 +682,6 @@ namespace Emby.Server.Implementations.Dto
|
||||||
return _libraryManager.GetMusicGenreId(name);
|
return _libraryManager.GetMusicGenreId(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (owner is Game || owner is GameSystem)
|
|
||||||
{
|
|
||||||
return _libraryManager.GetGameGenreId(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return _libraryManager.GetGenreId(name);
|
return _libraryManager.GetGenreId(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1206,20 +1185,6 @@ namespace Emby.Server.Implementations.Dto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var game = item as Game;
|
|
||||||
|
|
||||||
if (game != null)
|
|
||||||
{
|
|
||||||
SetGameProperties(dto, game);
|
|
||||||
}
|
|
||||||
|
|
||||||
var gameSystem = item as GameSystem;
|
|
||||||
|
|
||||||
if (gameSystem != null)
|
|
||||||
{
|
|
||||||
SetGameSystemProperties(dto, gameSystem);
|
|
||||||
}
|
|
||||||
|
|
||||||
var musicVideo = item as MusicVideo;
|
var musicVideo = item as MusicVideo;
|
||||||
if (musicVideo != null)
|
if (musicVideo != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -215,7 +215,7 @@ namespace Emby.Server.Implementations.Images
|
||||||
{
|
{
|
||||||
return CreateSquareCollage(item, itemsWithImages, outputPath);
|
return CreateSquareCollage(item, itemsWithImages, outputPath);
|
||||||
}
|
}
|
||||||
if (item is Playlist || item is MusicGenre || item is Genre || item is GameGenre || item is PhotoAlbum)
|
if (item is Playlist || item is MusicGenre || item is Genre || item is PhotoAlbum)
|
||||||
{
|
{
|
||||||
return CreateSquareCollage(item, itemsWithImages, outputPath);
|
return CreateSquareCollage(item, itemsWithImages, outputPath);
|
||||||
}
|
}
|
||||||
|
|
|
@ -869,11 +869,6 @@ namespace Emby.Server.Implementations.Library
|
||||||
return GetItemByNameId<MusicGenre>(MusicGenre.GetPath, name);
|
return GetItemByNameId<MusicGenre>(MusicGenre.GetPath, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Guid GetGameGenreId(string name)
|
|
||||||
{
|
|
||||||
return GetItemByNameId<GameGenre>(GameGenre.GetPath, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a Genre
|
/// Gets a Genre
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -894,16 +889,6 @@ namespace Emby.Server.Implementations.Library
|
||||||
return CreateItemByName<MusicGenre>(MusicGenre.GetPath, name, new DtoOptions(true));
|
return CreateItemByName<MusicGenre>(MusicGenre.GetPath, name, new DtoOptions(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the game genre.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The name.</param>
|
|
||||||
/// <returns>Task{GameGenre}.</returns>
|
|
||||||
public GameGenre GetGameGenre(string name)
|
|
||||||
{
|
|
||||||
return CreateItemByName<GameGenre>(GameGenre.GetPath, name, new DtoOptions(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a Year
|
/// Gets a Year
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1370,17 +1355,6 @@ namespace Emby.Server.Implementations.Library
|
||||||
return ItemRepository.GetGenres(query);
|
return ItemRepository.GetGenres(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryResult<Tuple<BaseItem, ItemCounts>> GetGameGenres(InternalItemsQuery query)
|
|
||||||
{
|
|
||||||
if (query.User != null)
|
|
||||||
{
|
|
||||||
AddUserToQuery(query, query.User);
|
|
||||||
}
|
|
||||||
|
|
||||||
SetTopParentOrAncestorIds(query);
|
|
||||||
return ItemRepository.GetGameGenres(query);
|
|
||||||
}
|
|
||||||
|
|
||||||
public QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query)
|
public QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
if (query.User != null)
|
if (query.User != null)
|
||||||
|
|
|
@ -99,14 +99,12 @@ namespace Emby.Server.Implementations.Library
|
||||||
if (!query.IncludeMedia)
|
if (!query.IncludeMedia)
|
||||||
{
|
{
|
||||||
AddIfMissing(includeItemTypes, typeof(Genre).Name);
|
AddIfMissing(includeItemTypes, typeof(Genre).Name);
|
||||||
AddIfMissing(includeItemTypes, typeof(GameGenre).Name);
|
|
||||||
AddIfMissing(includeItemTypes, typeof(MusicGenre).Name);
|
AddIfMissing(includeItemTypes, typeof(MusicGenre).Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AddIfMissing(excludeItemTypes, typeof(Genre).Name);
|
AddIfMissing(excludeItemTypes, typeof(Genre).Name);
|
||||||
AddIfMissing(excludeItemTypes, typeof(GameGenre).Name);
|
|
||||||
AddIfMissing(excludeItemTypes, typeof(MusicGenre).Name);
|
AddIfMissing(excludeItemTypes, typeof(MusicGenre).Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -308,9 +308,6 @@ namespace Emby.Server.Implementations.Library
|
||||||
mediaTypes.Add(MediaType.Book);
|
mediaTypes.Add(MediaType.Book);
|
||||||
mediaTypes.Add(MediaType.Audio);
|
mediaTypes.Add(MediaType.Audio);
|
||||||
break;
|
break;
|
||||||
case CollectionType.Games:
|
|
||||||
mediaTypes.Add(MediaType.Game);
|
|
||||||
break;
|
|
||||||
case CollectionType.Music:
|
case CollectionType.Music:
|
||||||
mediaTypes.Add(MediaType.Audio);
|
mediaTypes.Add(MediaType.Audio);
|
||||||
break;
|
break;
|
||||||
|
@ -336,7 +333,6 @@ namespace Emby.Server.Implementations.Library
|
||||||
typeof(Person).Name,
|
typeof(Person).Name,
|
||||||
typeof(Studio).Name,
|
typeof(Studio).Name,
|
||||||
typeof(Year).Name,
|
typeof(Year).Name,
|
||||||
typeof(GameGenre).Name,
|
|
||||||
typeof(MusicGenre).Name,
|
typeof(MusicGenre).Name,
|
||||||
typeof(Genre).Name
|
typeof(Genre).Name
|
||||||
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Persistence;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Library.Validators
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class GameGenresPostScanTask
|
|
||||||
/// </summary>
|
|
||||||
public class GameGenresPostScanTask : ILibraryPostScanTask
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The _library manager
|
|
||||||
/// </summary>
|
|
||||||
private readonly ILibraryManager _libraryManager;
|
|
||||||
private readonly ILogger _logger;
|
|
||||||
private readonly IItemRepository _itemRepo;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="GameGenresPostScanTask" /> class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="libraryManager">The library manager.</param>
|
|
||||||
/// <param name="logger">The logger.</param>
|
|
||||||
public GameGenresPostScanTask(ILibraryManager libraryManager, ILogger logger, IItemRepository itemRepo)
|
|
||||||
{
|
|
||||||
_libraryManager = libraryManager;
|
|
||||||
_logger = logger;
|
|
||||||
_itemRepo = itemRepo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Runs the specified progress.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="progress">The progress.</param>
|
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
|
||||||
/// <returns>Task.</returns>
|
|
||||||
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
return new GameGenresValidator(_libraryManager, _logger, _itemRepo).Run(progress, cancellationToken);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Persistence;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Library.Validators
|
|
||||||
{
|
|
||||||
class GameGenresValidator
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The _library manager
|
|
||||||
/// </summary>
|
|
||||||
private readonly ILibraryManager _libraryManager;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The _logger
|
|
||||||
/// </summary>
|
|
||||||
private readonly ILogger _logger;
|
|
||||||
private readonly IItemRepository _itemRepo;
|
|
||||||
|
|
||||||
public GameGenresValidator(ILibraryManager libraryManager, ILogger logger, IItemRepository itemRepo)
|
|
||||||
{
|
|
||||||
_libraryManager = libraryManager;
|
|
||||||
_logger = logger;
|
|
||||||
_itemRepo = itemRepo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Runs the specified progress.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="progress">The progress.</param>
|
|
||||||
/// <param name="cancellationToken">The cancellation token.</param>
|
|
||||||
/// <returns>Task.</returns>
|
|
||||||
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
var names = _itemRepo.GetGameGenreNames();
|
|
||||||
|
|
||||||
var numComplete = 0;
|
|
||||||
var count = names.Count;
|
|
||||||
|
|
||||||
foreach (var name in names)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var item = _libraryManager.GetGameGenre(name);
|
|
||||||
|
|
||||||
await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
catch (OperationCanceledException)
|
|
||||||
{
|
|
||||||
// Don't clutter the log
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogError(ex, "Error refreshing {GenreName}", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
numComplete++;
|
|
||||||
double percent = numComplete;
|
|
||||||
percent /= count;
|
|
||||||
percent *= 100;
|
|
||||||
|
|
||||||
progress.Report(percent);
|
|
||||||
}
|
|
||||||
|
|
||||||
progress.Report(100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "عملية تسجيل الدخول فشلت من {0}",
|
"FailedLoginAttemptWithUserName": "عملية تسجيل الدخول فشلت من {0}",
|
||||||
"Favorites": "المفضلات",
|
"Favorites": "المفضلات",
|
||||||
"Folders": "المجلدات",
|
"Folders": "المجلدات",
|
||||||
"Games": "الألعاب",
|
|
||||||
"Genres": "أنواع الأفلام",
|
"Genres": "أنواع الأفلام",
|
||||||
"HeaderAlbumArtists": "فنانو الألبومات",
|
"HeaderAlbumArtists": "فنانو الألبومات",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "بدأ تشغيل المقطع الصوتي",
|
"NotificationOptionAudioPlayback": "بدأ تشغيل المقطع الصوتي",
|
||||||
"NotificationOptionAudioPlaybackStopped": "تم إيقاف تشغيل المقطع الصوتي",
|
"NotificationOptionAudioPlaybackStopped": "تم إيقاف تشغيل المقطع الصوتي",
|
||||||
"NotificationOptionCameraImageUploaded": "تم رقع صورة الكاميرا",
|
"NotificationOptionCameraImageUploaded": "تم رقع صورة الكاميرا",
|
||||||
"NotificationOptionGamePlayback": "تم تشغيل اللعبة",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "تم إيقاف تشغيل اللعبة",
|
|
||||||
"NotificationOptionInstallationFailed": "عملية التنصيب فشلت",
|
"NotificationOptionInstallationFailed": "عملية التنصيب فشلت",
|
||||||
"NotificationOptionNewLibraryContent": "تم إضافة محتوى جديد",
|
"NotificationOptionNewLibraryContent": "تم إضافة محتوى جديد",
|
||||||
"NotificationOptionPluginError": "فشل في الملحق",
|
"NotificationOptionPluginError": "فشل في الملحق",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Любими",
|
"Favorites": "Любими",
|
||||||
"Folders": "Папки",
|
"Folders": "Папки",
|
||||||
"Games": "Игри",
|
|
||||||
"Genres": "Жанрове",
|
"Genres": "Жанрове",
|
||||||
"HeaderAlbumArtists": "Изпълнители на албуми",
|
"HeaderAlbumArtists": "Изпълнители на албуми",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Възпроизвеждането на звук започна",
|
"NotificationOptionAudioPlayback": "Възпроизвеждането на звук започна",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Възпроизвеждането на звук е спряно",
|
"NotificationOptionAudioPlaybackStopped": "Възпроизвеждането на звук е спряно",
|
||||||
"NotificationOptionCameraImageUploaded": "Изображението от фотоапарата е качено",
|
"NotificationOptionCameraImageUploaded": "Изображението от фотоапарата е качено",
|
||||||
"NotificationOptionGamePlayback": "Възпроизвеждането на играта започна",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Възпроизвеждането на играта е спряна",
|
|
||||||
"NotificationOptionInstallationFailed": "Неуспешно инсталиране",
|
"NotificationOptionInstallationFailed": "Неуспешно инсталиране",
|
||||||
"NotificationOptionNewLibraryContent": "Добавено е ново съдържание",
|
"NotificationOptionNewLibraryContent": "Добавено е ново съдържание",
|
||||||
"NotificationOptionPluginError": "Грешка в приставка",
|
"NotificationOptionPluginError": "Грешка в приставка",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Intent de connexió fallit des de {0}",
|
"FailedLoginAttemptWithUserName": "Intent de connexió fallit des de {0}",
|
||||||
"Favorites": "Preferits",
|
"Favorites": "Preferits",
|
||||||
"Folders": "Directoris",
|
"Folders": "Directoris",
|
||||||
"Games": "Jocs",
|
|
||||||
"Genres": "Gèneres",
|
"Genres": "Gèneres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Un component ha fallat",
|
"NotificationOptionPluginError": "Un component ha fallat",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Neúspěšný pokus o přihlášení z {0}",
|
"FailedLoginAttemptWithUserName": "Neúspěšný pokus o přihlášení z {0}",
|
||||||
"Favorites": "Oblíbené",
|
"Favorites": "Oblíbené",
|
||||||
"Folders": "Složky",
|
"Folders": "Složky",
|
||||||
"Games": "Hry",
|
|
||||||
"Genres": "Žánry",
|
"Genres": "Žánry",
|
||||||
"HeaderAlbumArtists": "Umělci alba",
|
"HeaderAlbumArtists": "Umělci alba",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Přehrávání audia zahájeno",
|
"NotificationOptionAudioPlayback": "Přehrávání audia zahájeno",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Přehrávání audia ukončeno",
|
"NotificationOptionAudioPlaybackStopped": "Přehrávání audia ukončeno",
|
||||||
"NotificationOptionCameraImageUploaded": "Kamerový záznam nahrán",
|
"NotificationOptionCameraImageUploaded": "Kamerový záznam nahrán",
|
||||||
"NotificationOptionGamePlayback": "Spuštění hry zahájeno",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Hra ukončena",
|
|
||||||
"NotificationOptionInstallationFailed": "Chyba instalace",
|
"NotificationOptionInstallationFailed": "Chyba instalace",
|
||||||
"NotificationOptionNewLibraryContent": "Přidán nový obsah",
|
"NotificationOptionNewLibraryContent": "Přidán nový obsah",
|
||||||
"NotificationOptionPluginError": "Chyba zásuvného modulu",
|
"NotificationOptionPluginError": "Chyba zásuvného modulu",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Fejlet loginforsøg fra {0}",
|
"FailedLoginAttemptWithUserName": "Fejlet loginforsøg fra {0}",
|
||||||
"Favorites": "Favoritter",
|
"Favorites": "Favoritter",
|
||||||
"Folders": "Mapper",
|
"Folders": "Mapper",
|
||||||
"Games": "Spil",
|
|
||||||
"Genres": "Genre",
|
"Genres": "Genre",
|
||||||
"HeaderAlbumArtists": "Albumkunstnere",
|
"HeaderAlbumArtists": "Albumkunstnere",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audioafspilning påbegyndt",
|
"NotificationOptionAudioPlayback": "Audioafspilning påbegyndt",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audioafspilning stoppet",
|
"NotificationOptionAudioPlaybackStopped": "Audioafspilning stoppet",
|
||||||
"NotificationOptionCameraImageUploaded": "Kamerabillede uploadet",
|
"NotificationOptionCameraImageUploaded": "Kamerabillede uploadet",
|
||||||
"NotificationOptionGamePlayback": "Afspilning af Spil påbegyndt",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Afspilning af Spil stoppet",
|
|
||||||
"NotificationOptionInstallationFailed": "Installationsfejl",
|
"NotificationOptionInstallationFailed": "Installationsfejl",
|
||||||
"NotificationOptionNewLibraryContent": "Nyt indhold tilføjet",
|
"NotificationOptionNewLibraryContent": "Nyt indhold tilføjet",
|
||||||
"NotificationOptionPluginError": "Pluginfejl",
|
"NotificationOptionPluginError": "Pluginfejl",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Fehlgeschlagener Anmeldeversuch von {0}",
|
"FailedLoginAttemptWithUserName": "Fehlgeschlagener Anmeldeversuch von {0}",
|
||||||
"Favorites": "Favoriten",
|
"Favorites": "Favoriten",
|
||||||
"Folders": "Verzeichnisse",
|
"Folders": "Verzeichnisse",
|
||||||
"Games": "Spiele",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album-Künstler",
|
"HeaderAlbumArtists": "Album-Künstler",
|
||||||
"HeaderCameraUploads": "Kamera Uploads",
|
"HeaderCameraUploads": "Kamera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audiowiedergabe gestartet",
|
"NotificationOptionAudioPlayback": "Audiowiedergabe gestartet",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audiowiedergabe gestoppt",
|
"NotificationOptionAudioPlaybackStopped": "Audiowiedergabe gestoppt",
|
||||||
"NotificationOptionCameraImageUploaded": "Kamera Bild hochgeladen",
|
"NotificationOptionCameraImageUploaded": "Kamera Bild hochgeladen",
|
||||||
"NotificationOptionGamePlayback": "Spielwiedergabe gestartet",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Spielwiedergabe gestoppt",
|
|
||||||
"NotificationOptionInstallationFailed": "Installationsfehler",
|
"NotificationOptionInstallationFailed": "Installationsfehler",
|
||||||
"NotificationOptionNewLibraryContent": "Neuer Inhalt hinzugefügt",
|
"NotificationOptionNewLibraryContent": "Neuer Inhalt hinzugefügt",
|
||||||
"NotificationOptionPluginError": "Plugin Fehler",
|
"NotificationOptionPluginError": "Plugin Fehler",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Αποτυχημένη προσπάθεια σύνδεσης από {0}",
|
"FailedLoginAttemptWithUserName": "Αποτυχημένη προσπάθεια σύνδεσης από {0}",
|
||||||
"Favorites": "Αγαπημένα",
|
"Favorites": "Αγαπημένα",
|
||||||
"Folders": "Φάκελοι",
|
"Folders": "Φάκελοι",
|
||||||
"Games": "Παιχνίδια",
|
|
||||||
"Genres": "Είδη",
|
"Genres": "Είδη",
|
||||||
"HeaderAlbumArtists": "Άλμπουμ Καλλιτεχνών",
|
"HeaderAlbumArtists": "Άλμπουμ Καλλιτεχνών",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Η αναπαραγωγή ήχου ξεκίνησε",
|
"NotificationOptionAudioPlayback": "Η αναπαραγωγή ήχου ξεκίνησε",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Η αναπαραγωγή ήχου σταμάτησε",
|
"NotificationOptionAudioPlaybackStopped": "Η αναπαραγωγή ήχου σταμάτησε",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Η αναπαραγωγή του παιχνιδιού ξεκίνησε",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Η αναπαραγωγή του παιχνιδιού σταμάτησε",
|
|
||||||
"NotificationOptionInstallationFailed": "Αποτυχία εγκατάστασης",
|
"NotificationOptionInstallationFailed": "Αποτυχία εγκατάστασης",
|
||||||
"NotificationOptionNewLibraryContent": "Προστέθηκε νέο περιεχόμενο",
|
"NotificationOptionNewLibraryContent": "Προστέθηκε νέο περιεχόμενο",
|
||||||
"NotificationOptionPluginError": "Αποτυχία του plugin",
|
"NotificationOptionPluginError": "Αποτυχία του plugin",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favourites",
|
"Favorites": "Favourites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Intento fallido de inicio de sesión de {0}",
|
"FailedLoginAttemptWithUserName": "Intento fallido de inicio de sesión de {0}",
|
||||||
"Favorites": "Favoritos",
|
"Favorites": "Favoritos",
|
||||||
"Folders": "Carpetas",
|
"Folders": "Carpetas",
|
||||||
"Games": "Juegos",
|
|
||||||
"Genres": "Géneros",
|
"Genres": "Géneros",
|
||||||
"HeaderAlbumArtists": "Artistas del Álbum",
|
"HeaderAlbumArtists": "Artistas del Álbum",
|
||||||
"HeaderCameraUploads": "Subidos desde Camara",
|
"HeaderCameraUploads": "Subidos desde Camara",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Reproducción de audio iniciada",
|
"NotificationOptionAudioPlayback": "Reproducción de audio iniciada",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Reproducción de audio detenida",
|
"NotificationOptionAudioPlaybackStopped": "Reproducción de audio detenida",
|
||||||
"NotificationOptionCameraImageUploaded": "Imagen de la cámara subida",
|
"NotificationOptionCameraImageUploaded": "Imagen de la cámara subida",
|
||||||
"NotificationOptionGamePlayback": "Ejecución de juego iniciada",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Ejecución de juego detenida",
|
|
||||||
"NotificationOptionInstallationFailed": "Falla de instalación",
|
"NotificationOptionInstallationFailed": "Falla de instalación",
|
||||||
"NotificationOptionNewLibraryContent": "Nuevo contenido agregado",
|
"NotificationOptionNewLibraryContent": "Nuevo contenido agregado",
|
||||||
"NotificationOptionPluginError": "Falla de complemento",
|
"NotificationOptionPluginError": "Falla de complemento",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Error al intentar iniciar sesión a partir de {0}",
|
"FailedLoginAttemptWithUserName": "Error al intentar iniciar sesión a partir de {0}",
|
||||||
"Favorites": "Favoritos",
|
"Favorites": "Favoritos",
|
||||||
"Folders": "Carpetas",
|
"Folders": "Carpetas",
|
||||||
"Games": "Juegos",
|
|
||||||
"Genres": "Géneros",
|
"Genres": "Géneros",
|
||||||
"HeaderAlbumArtists": "Artistas del Álbum",
|
"HeaderAlbumArtists": "Artistas del Álbum",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Se inició la reproducción de audio",
|
"NotificationOptionAudioPlayback": "Se inició la reproducción de audio",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Se detuvo la reproducción de audio",
|
"NotificationOptionAudioPlaybackStopped": "Se detuvo la reproducción de audio",
|
||||||
"NotificationOptionCameraImageUploaded": "Imagen de la cámara cargada",
|
"NotificationOptionCameraImageUploaded": "Imagen de la cámara cargada",
|
||||||
"NotificationOptionGamePlayback": "Se inició la reproducción del juego",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Se detuvo la reproducción del juego",
|
|
||||||
"NotificationOptionInstallationFailed": "Error de instalación",
|
"NotificationOptionInstallationFailed": "Error de instalación",
|
||||||
"NotificationOptionNewLibraryContent": "Nuevo contenido añadido",
|
"NotificationOptionNewLibraryContent": "Nuevo contenido añadido",
|
||||||
"NotificationOptionPluginError": "Error en plugin",
|
"NotificationOptionPluginError": "Error en plugin",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "تلاش برای ورود از {0} ناموفق بود",
|
"FailedLoginAttemptWithUserName": "تلاش برای ورود از {0} ناموفق بود",
|
||||||
"Favorites": "مورد علاقه ها",
|
"Favorites": "مورد علاقه ها",
|
||||||
"Folders": "پوشه ها",
|
"Folders": "پوشه ها",
|
||||||
"Games": "بازی ها",
|
|
||||||
"Genres": "ژانرها",
|
"Genres": "ژانرها",
|
||||||
"HeaderAlbumArtists": "هنرمندان آلبوم",
|
"HeaderAlbumArtists": "هنرمندان آلبوم",
|
||||||
"HeaderCameraUploads": "آپلودهای دوربین",
|
"HeaderCameraUploads": "آپلودهای دوربین",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "پخش صدا آغاز شد",
|
"NotificationOptionAudioPlayback": "پخش صدا آغاز شد",
|
||||||
"NotificationOptionAudioPlaybackStopped": "پخش صدا متوقف شد",
|
"NotificationOptionAudioPlaybackStopped": "پخش صدا متوقف شد",
|
||||||
"NotificationOptionCameraImageUploaded": "تصاویر دوربین آپلود شد",
|
"NotificationOptionCameraImageUploaded": "تصاویر دوربین آپلود شد",
|
||||||
"NotificationOptionGamePlayback": "پخش بازی آغاز شد",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "پخش بازی متوقف شد",
|
|
||||||
"NotificationOptionInstallationFailed": "شکست نصب",
|
"NotificationOptionInstallationFailed": "شکست نصب",
|
||||||
"NotificationOptionNewLibraryContent": "محتوای جدید افزوده شد",
|
"NotificationOptionNewLibraryContent": "محتوای جدید افزوده شد",
|
||||||
"NotificationOptionPluginError": "خرابی افزونه",
|
"NotificationOptionPluginError": "خرابی افزونه",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Échec d'une tentative de connexion de {0}",
|
"FailedLoginAttemptWithUserName": "Échec d'une tentative de connexion de {0}",
|
||||||
"Favorites": "Favoris",
|
"Favorites": "Favoris",
|
||||||
"Folders": "Dossiers",
|
"Folders": "Dossiers",
|
||||||
"Games": "Jeux",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Artistes de l'album",
|
"HeaderAlbumArtists": "Artistes de l'album",
|
||||||
"HeaderCameraUploads": "Photos transférées",
|
"HeaderCameraUploads": "Photos transférées",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Lecture audio démarrée",
|
"NotificationOptionAudioPlayback": "Lecture audio démarrée",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Lecture audio arrêtée",
|
"NotificationOptionAudioPlaybackStopped": "Lecture audio arrêtée",
|
||||||
"NotificationOptionCameraImageUploaded": "L'image de l'appareil photo a été transférée",
|
"NotificationOptionCameraImageUploaded": "L'image de l'appareil photo a été transférée",
|
||||||
"NotificationOptionGamePlayback": "Lecture de jeu démarrée",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Lecture de jeu arrêtée",
|
|
||||||
"NotificationOptionInstallationFailed": "Échec d'installation",
|
"NotificationOptionInstallationFailed": "Échec d'installation",
|
||||||
"NotificationOptionNewLibraryContent": "Nouveau contenu ajouté",
|
"NotificationOptionNewLibraryContent": "Nouveau contenu ajouté",
|
||||||
"NotificationOptionPluginError": "Erreur d'extension",
|
"NotificationOptionPluginError": "Erreur d'extension",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Spiel",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Albuminterprete",
|
"HeaderAlbumArtists": "Albuminterprete",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "משחקים",
|
|
||||||
"Genres": "ז'אנרים",
|
"Genres": "ז'אנרים",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Neuspjeli pokušaj prijave za {0}",
|
"FailedLoginAttemptWithUserName": "Neuspjeli pokušaj prijave za {0}",
|
||||||
"Favorites": "Omiljeni",
|
"Favorites": "Omiljeni",
|
||||||
"Folders": "Mape",
|
"Folders": "Mape",
|
||||||
"Games": "Igre",
|
|
||||||
"Genres": "Žanrovi",
|
"Genres": "Žanrovi",
|
||||||
"HeaderAlbumArtists": "Izvođači albuma",
|
"HeaderAlbumArtists": "Izvođači albuma",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Reprodukcija glazbe započeta",
|
"NotificationOptionAudioPlayback": "Reprodukcija glazbe započeta",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Reprodukcija audiozapisa je zaustavljena",
|
"NotificationOptionAudioPlaybackStopped": "Reprodukcija audiozapisa je zaustavljena",
|
||||||
"NotificationOptionCameraImageUploaded": "Slike kamere preuzete",
|
"NotificationOptionCameraImageUploaded": "Slike kamere preuzete",
|
||||||
"NotificationOptionGamePlayback": "Igrica pokrenuta",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Reprodukcija igre je zaustavljena",
|
|
||||||
"NotificationOptionInstallationFailed": "Instalacija nije izvršena",
|
"NotificationOptionInstallationFailed": "Instalacija nije izvršena",
|
||||||
"NotificationOptionNewLibraryContent": "Novi sadržaj je dodan",
|
"NotificationOptionNewLibraryContent": "Novi sadržaj je dodan",
|
||||||
"NotificationOptionPluginError": "Dodatak otkazao",
|
"NotificationOptionPluginError": "Dodatak otkazao",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Kedvencek",
|
"Favorites": "Kedvencek",
|
||||||
"Folders": "Könyvtárak",
|
"Folders": "Könyvtárak",
|
||||||
"Games": "Játékok",
|
|
||||||
"Genres": "Műfajok",
|
"Genres": "Műfajok",
|
||||||
"HeaderAlbumArtists": "Album Előadók",
|
"HeaderAlbumArtists": "Album Előadók",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audió lejátszás elkezdve",
|
"NotificationOptionAudioPlayback": "Audió lejátszás elkezdve",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audió lejátszás befejezve",
|
"NotificationOptionAudioPlaybackStopped": "Audió lejátszás befejezve",
|
||||||
"NotificationOptionCameraImageUploaded": "Kamera kép feltöltve",
|
"NotificationOptionCameraImageUploaded": "Kamera kép feltöltve",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Telepítési hiba",
|
"NotificationOptionInstallationFailed": "Telepítési hiba",
|
||||||
"NotificationOptionNewLibraryContent": "Új tartalom hozzáadva",
|
"NotificationOptionNewLibraryContent": "Új tartalom hozzáadva",
|
||||||
"NotificationOptionPluginError": "Bővítmény hiba",
|
"NotificationOptionPluginError": "Bővítmény hiba",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Tentativo di accesso fallito da {0}",
|
"FailedLoginAttemptWithUserName": "Tentativo di accesso fallito da {0}",
|
||||||
"Favorites": "Preferiti",
|
"Favorites": "Preferiti",
|
||||||
"Folders": "Cartelle",
|
"Folders": "Cartelle",
|
||||||
"Games": "Giochi",
|
|
||||||
"Genres": "Generi",
|
"Genres": "Generi",
|
||||||
"HeaderAlbumArtists": "Artisti Album",
|
"HeaderAlbumArtists": "Artisti Album",
|
||||||
"HeaderCameraUploads": "Caricamenti Fotocamera",
|
"HeaderCameraUploads": "Caricamenti Fotocamera",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "La riproduzione audio è iniziata",
|
"NotificationOptionAudioPlayback": "La riproduzione audio è iniziata",
|
||||||
"NotificationOptionAudioPlaybackStopped": "La riproduzione audio è stata interrotta",
|
"NotificationOptionAudioPlaybackStopped": "La riproduzione audio è stata interrotta",
|
||||||
"NotificationOptionCameraImageUploaded": "Immagine fotocamera caricata",
|
"NotificationOptionCameraImageUploaded": "Immagine fotocamera caricata",
|
||||||
"NotificationOptionGamePlayback": "Il gioco è stato avviato",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Il gioco è stato fermato",
|
|
||||||
"NotificationOptionInstallationFailed": "Installazione fallita",
|
"NotificationOptionInstallationFailed": "Installazione fallita",
|
||||||
"NotificationOptionNewLibraryContent": "Nuovo contenuto aggiunto",
|
"NotificationOptionNewLibraryContent": "Nuovo contenuto aggiunto",
|
||||||
"NotificationOptionPluginError": "Errore del Plug-in",
|
"NotificationOptionPluginError": "Errore del Plug-in",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "{0} тарапынан кіру әрекеті сәтсіз",
|
"FailedLoginAttemptWithUserName": "{0} тарапынан кіру әрекеті сәтсіз",
|
||||||
"Favorites": "Таңдаулылар",
|
"Favorites": "Таңдаулылар",
|
||||||
"Folders": "Қалталар",
|
"Folders": "Қалталар",
|
||||||
"Games": "Ойындар",
|
|
||||||
"Genres": "Жанрлар",
|
"Genres": "Жанрлар",
|
||||||
"HeaderAlbumArtists": "Альбом орындаушылары",
|
"HeaderAlbumArtists": "Альбом орындаушылары",
|
||||||
"HeaderCameraUploads": "Камерадан жүктелгендер",
|
"HeaderCameraUploads": "Камерадан жүктелгендер",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Дыбыс ойнатуы басталды",
|
"NotificationOptionAudioPlayback": "Дыбыс ойнатуы басталды",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Дыбыс ойнатуы тоқтатылды",
|
"NotificationOptionAudioPlaybackStopped": "Дыбыс ойнатуы тоқтатылды",
|
||||||
"NotificationOptionCameraImageUploaded": "Камерадан фотосурет кері қотарылған",
|
"NotificationOptionCameraImageUploaded": "Камерадан фотосурет кері қотарылған",
|
||||||
"NotificationOptionGamePlayback": "Ойын ойнатуы басталды",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Ойын ойнатуы тоқтатылды",
|
|
||||||
"NotificationOptionInstallationFailed": "Орнату сәтсіздігі",
|
"NotificationOptionInstallationFailed": "Орнату сәтсіздігі",
|
||||||
"NotificationOptionNewLibraryContent": "Жаңа мазмұн үстелген",
|
"NotificationOptionNewLibraryContent": "Жаңа мазмұн үстелген",
|
||||||
"NotificationOptionPluginError": "Плагин сәтсіздігі",
|
"NotificationOptionPluginError": "Плагин сәтсіздігі",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "앨범 아티스트",
|
"HeaderAlbumArtists": "앨범 아티스트",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Žanrai",
|
"Genres": "Žanrai",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Mislykket påloggingsforsøk fra {0}",
|
"FailedLoginAttemptWithUserName": "Mislykket påloggingsforsøk fra {0}",
|
||||||
"Favorites": "Favoritter",
|
"Favorites": "Favoritter",
|
||||||
"Folders": "Mapper",
|
"Folders": "Mapper",
|
||||||
"Games": "Spill",
|
|
||||||
"Genres": "Sjanger",
|
"Genres": "Sjanger",
|
||||||
"HeaderAlbumArtists": "Albumartist",
|
"HeaderAlbumArtists": "Albumartist",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Lyd tilbakespilling startet",
|
"NotificationOptionAudioPlayback": "Lyd tilbakespilling startet",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Lyd avspilling stoppet",
|
"NotificationOptionAudioPlaybackStopped": "Lyd avspilling stoppet",
|
||||||
"NotificationOptionCameraImageUploaded": "Kamera bilde lastet opp",
|
"NotificationOptionCameraImageUploaded": "Kamera bilde lastet opp",
|
||||||
"NotificationOptionGamePlayback": "Spill avspillingen startet",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Filmer",
|
|
||||||
"NotificationOptionInstallationFailed": "Installasjon feil",
|
"NotificationOptionInstallationFailed": "Installasjon feil",
|
||||||
"NotificationOptionNewLibraryContent": "Ny innhold er lagt til",
|
"NotificationOptionNewLibraryContent": "Ny innhold er lagt til",
|
||||||
"NotificationOptionPluginError": "Plugin feil",
|
"NotificationOptionPluginError": "Plugin feil",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Mislukte aanmeld poging van {0}",
|
"FailedLoginAttemptWithUserName": "Mislukte aanmeld poging van {0}",
|
||||||
"Favorites": "Favorieten",
|
"Favorites": "Favorieten",
|
||||||
"Folders": "Mappen",
|
"Folders": "Mappen",
|
||||||
"Games": "Spellen",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album artiesten",
|
"HeaderAlbumArtists": "Album artiesten",
|
||||||
"HeaderCameraUploads": "Camera uploads",
|
"HeaderCameraUploads": "Camera uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Geluid gestart",
|
"NotificationOptionAudioPlayback": "Geluid gestart",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Geluid gestopt",
|
"NotificationOptionAudioPlaybackStopped": "Geluid gestopt",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera afbeelding geüpload",
|
"NotificationOptionCameraImageUploaded": "Camera afbeelding geüpload",
|
||||||
"NotificationOptionGamePlayback": "Spel gestart",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Spel gestopt",
|
|
||||||
"NotificationOptionInstallationFailed": "Installatie mislukt",
|
"NotificationOptionInstallationFailed": "Installatie mislukt",
|
||||||
"NotificationOptionNewLibraryContent": "Nieuwe content toegevoegd",
|
"NotificationOptionNewLibraryContent": "Nieuwe content toegevoegd",
|
||||||
"NotificationOptionPluginError": "Plug-in fout",
|
"NotificationOptionPluginError": "Plug-in fout",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Próba logowania przez {0} zakończona niepowodzeniem",
|
"FailedLoginAttemptWithUserName": "Próba logowania przez {0} zakończona niepowodzeniem",
|
||||||
"Favorites": "Ulubione",
|
"Favorites": "Ulubione",
|
||||||
"Folders": "Foldery",
|
"Folders": "Foldery",
|
||||||
"Games": "Gry",
|
|
||||||
"Genres": "Gatunki",
|
"Genres": "Gatunki",
|
||||||
"HeaderAlbumArtists": "Wykonawcy albumów",
|
"HeaderAlbumArtists": "Wykonawcy albumów",
|
||||||
"HeaderCameraUploads": "Przekazane obrazy",
|
"HeaderCameraUploads": "Przekazane obrazy",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Rozpoczęto odtwarzanie muzyki",
|
"NotificationOptionAudioPlayback": "Rozpoczęto odtwarzanie muzyki",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Odtwarzane dźwięku zatrzymane",
|
"NotificationOptionAudioPlaybackStopped": "Odtwarzane dźwięku zatrzymane",
|
||||||
"NotificationOptionCameraImageUploaded": "Przekazano obraz z urządzenia mobilnego",
|
"NotificationOptionCameraImageUploaded": "Przekazano obraz z urządzenia mobilnego",
|
||||||
"NotificationOptionGamePlayback": "Odtwarzanie gry rozpoczęte",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Odtwarzanie gry zatrzymane",
|
|
||||||
"NotificationOptionInstallationFailed": "Niepowodzenie instalacji",
|
"NotificationOptionInstallationFailed": "Niepowodzenie instalacji",
|
||||||
"NotificationOptionNewLibraryContent": "Dodano nową zawartość",
|
"NotificationOptionNewLibraryContent": "Dodano nową zawartość",
|
||||||
"NotificationOptionPluginError": "Awaria wtyczki",
|
"NotificationOptionPluginError": "Awaria wtyczki",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Falha na tentativa de login de {0}",
|
"FailedLoginAttemptWithUserName": "Falha na tentativa de login de {0}",
|
||||||
"Favorites": "Favoritos",
|
"Favorites": "Favoritos",
|
||||||
"Folders": "Pastas",
|
"Folders": "Pastas",
|
||||||
"Games": "Jogos",
|
|
||||||
"Genres": "Gêneros",
|
"Genres": "Gêneros",
|
||||||
"HeaderAlbumArtists": "Artistas do Álbum",
|
"HeaderAlbumArtists": "Artistas do Álbum",
|
||||||
"HeaderCameraUploads": "Uploads da Câmera",
|
"HeaderCameraUploads": "Uploads da Câmera",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Reprodução de áudio iniciada",
|
"NotificationOptionAudioPlayback": "Reprodução de áudio iniciada",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Reprodução de áudio parada",
|
"NotificationOptionAudioPlaybackStopped": "Reprodução de áudio parada",
|
||||||
"NotificationOptionCameraImageUploaded": "Imagem de câmera enviada",
|
"NotificationOptionCameraImageUploaded": "Imagem de câmera enviada",
|
||||||
"NotificationOptionGamePlayback": "Reprodução de jogo iniciada",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Reprodução de jogo parada",
|
|
||||||
"NotificationOptionInstallationFailed": "Falha na instalação",
|
"NotificationOptionInstallationFailed": "Falha na instalação",
|
||||||
"NotificationOptionNewLibraryContent": "Novo conteúdo adicionado",
|
"NotificationOptionNewLibraryContent": "Novo conteúdo adicionado",
|
||||||
"NotificationOptionPluginError": "Falha de plugin",
|
"NotificationOptionPluginError": "Falha de plugin",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "{0} - попытка входа неудачна",
|
"FailedLoginAttemptWithUserName": "{0} - попытка входа неудачна",
|
||||||
"Favorites": "Избранное",
|
"Favorites": "Избранное",
|
||||||
"Folders": "Папки",
|
"Folders": "Папки",
|
||||||
"Games": "Игры",
|
|
||||||
"Genres": "Жанры",
|
"Genres": "Жанры",
|
||||||
"HeaderAlbumArtists": "Исп-ли альбома",
|
"HeaderAlbumArtists": "Исп-ли альбома",
|
||||||
"HeaderCameraUploads": "Камеры",
|
"HeaderCameraUploads": "Камеры",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Воспр-ие аудио зап-но",
|
"NotificationOptionAudioPlayback": "Воспр-ие аудио зап-но",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Восп-ие аудио ост-но",
|
"NotificationOptionAudioPlaybackStopped": "Восп-ие аудио ост-но",
|
||||||
"NotificationOptionCameraImageUploaded": "Произведена выкладка отснятого с камеры",
|
"NotificationOptionCameraImageUploaded": "Произведена выкладка отснятого с камеры",
|
||||||
"NotificationOptionGamePlayback": "Воспр-ие игры зап-но",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Восп-ие игры ост-но",
|
|
||||||
"NotificationOptionInstallationFailed": "Сбой установки",
|
"NotificationOptionInstallationFailed": "Сбой установки",
|
||||||
"NotificationOptionNewLibraryContent": "Новое содержание добавлено",
|
"NotificationOptionNewLibraryContent": "Новое содержание добавлено",
|
||||||
"NotificationOptionPluginError": "Сбой плагина",
|
"NotificationOptionPluginError": "Сбой плагина",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Neúspešný pokus o prihlásenie z {0}",
|
"FailedLoginAttemptWithUserName": "Neúspešný pokus o prihlásenie z {0}",
|
||||||
"Favorites": "Obľúbené",
|
"Favorites": "Obľúbené",
|
||||||
"Folders": "Priečinky",
|
"Folders": "Priečinky",
|
||||||
"Games": "Hry",
|
|
||||||
"Genres": "Žánre",
|
"Genres": "Žánre",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Spustené prehrávanie audia",
|
"NotificationOptionAudioPlayback": "Spustené prehrávanie audia",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Zastavené prehrávanie audia",
|
"NotificationOptionAudioPlaybackStopped": "Zastavené prehrávanie audia",
|
||||||
"NotificationOptionCameraImageUploaded": "Nahraný obrázok z fotoaparátu",
|
"NotificationOptionCameraImageUploaded": "Nahraný obrázok z fotoaparátu",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Hra ukončená",
|
|
||||||
"NotificationOptionInstallationFailed": "Chyba inštalácie",
|
"NotificationOptionInstallationFailed": "Chyba inštalácie",
|
||||||
"NotificationOptionNewLibraryContent": "Pridaný nový obsah",
|
"NotificationOptionNewLibraryContent": "Pridaný nový obsah",
|
||||||
"NotificationOptionPluginError": "Chyba rozšírenia",
|
"NotificationOptionPluginError": "Chyba rozšírenia",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Misslyckat inloggningsförsök från {0}",
|
"FailedLoginAttemptWithUserName": "Misslyckat inloggningsförsök från {0}",
|
||||||
"Favorites": "Favoriter",
|
"Favorites": "Favoriter",
|
||||||
"Folders": "Mappar",
|
"Folders": "Mappar",
|
||||||
"Games": "Spel",
|
|
||||||
"Genres": "Genrer",
|
"Genres": "Genrer",
|
||||||
"HeaderAlbumArtists": "Albumartister",
|
"HeaderAlbumArtists": "Albumartister",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Ljuduppspelning har påbörjats",
|
"NotificationOptionAudioPlayback": "Ljuduppspelning har påbörjats",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Ljuduppspelning stoppad",
|
"NotificationOptionAudioPlaybackStopped": "Ljuduppspelning stoppad",
|
||||||
"NotificationOptionCameraImageUploaded": "Kamerabild har laddats upp",
|
"NotificationOptionCameraImageUploaded": "Kamerabild har laddats upp",
|
||||||
"NotificationOptionGamePlayback": "Spel har startats",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Spel stoppat",
|
|
||||||
"NotificationOptionInstallationFailed": "Fel vid installation",
|
"NotificationOptionInstallationFailed": "Fel vid installation",
|
||||||
"NotificationOptionNewLibraryContent": "Nytt innehåll har lagts till",
|
"NotificationOptionNewLibraryContent": "Nytt innehåll har lagts till",
|
||||||
"NotificationOptionPluginError": "Fel uppstod med tillägget",
|
"NotificationOptionPluginError": "Fel uppstod med tillägget",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "来自 {0} 的失败登入",
|
"FailedLoginAttemptWithUserName": "来自 {0} 的失败登入",
|
||||||
"Favorites": "最爱",
|
"Favorites": "最爱",
|
||||||
"Folders": "文件夹",
|
"Folders": "文件夹",
|
||||||
"Games": "游戏",
|
|
||||||
"Genres": "风格",
|
"Genres": "风格",
|
||||||
"HeaderAlbumArtists": "专辑作家",
|
"HeaderAlbumArtists": "专辑作家",
|
||||||
"HeaderCameraUploads": "相机上传",
|
"HeaderCameraUploads": "相机上传",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "音频开始播放",
|
"NotificationOptionAudioPlayback": "音频开始播放",
|
||||||
"NotificationOptionAudioPlaybackStopped": "音频播放已停止",
|
"NotificationOptionAudioPlaybackStopped": "音频播放已停止",
|
||||||
"NotificationOptionCameraImageUploaded": "相机图片已上传",
|
"NotificationOptionCameraImageUploaded": "相机图片已上传",
|
||||||
"NotificationOptionGamePlayback": "游戏开始",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "游戏停止",
|
|
||||||
"NotificationOptionInstallationFailed": "安装失败",
|
"NotificationOptionInstallationFailed": "安装失败",
|
||||||
"NotificationOptionNewLibraryContent": "已添加新内容",
|
"NotificationOptionNewLibraryContent": "已添加新内容",
|
||||||
"NotificationOptionPluginError": "插件失败",
|
"NotificationOptionPluginError": "插件失败",
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
"FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
|
||||||
"Favorites": "Favorites",
|
"Favorites": "Favorites",
|
||||||
"Folders": "Folders",
|
"Folders": "Folders",
|
||||||
"Games": "Games",
|
|
||||||
"Genres": "Genres",
|
"Genres": "Genres",
|
||||||
"HeaderAlbumArtists": "Album Artists",
|
"HeaderAlbumArtists": "Album Artists",
|
||||||
"HeaderCameraUploads": "Camera Uploads",
|
"HeaderCameraUploads": "Camera Uploads",
|
||||||
|
@ -51,8 +50,6 @@
|
||||||
"NotificationOptionAudioPlayback": "Audio playback started",
|
"NotificationOptionAudioPlayback": "Audio playback started",
|
||||||
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
"NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
|
||||||
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
"NotificationOptionCameraImageUploaded": "Camera image uploaded",
|
||||||
"NotificationOptionGamePlayback": "Game playback started",
|
|
||||||
"NotificationOptionGamePlaybackStopped": "Game playback stopped",
|
|
||||||
"NotificationOptionInstallationFailed": "Installation failure",
|
"NotificationOptionInstallationFailed": "Installation failure",
|
||||||
"NotificationOptionNewLibraryContent": "New content added",
|
"NotificationOptionNewLibraryContent": "New content added",
|
||||||
"NotificationOptionPluginError": "Plugin failure",
|
"NotificationOptionPluginError": "Plugin failure",
|
||||||
|
|
|
@ -136,12 +136,6 @@ namespace Emby.Server.Implementations
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the game genre path.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game genre path.</value>
|
|
||||||
public string GameGenrePath => Path.Combine(InternalMetadataPath, "GameGenre");
|
|
||||||
|
|
||||||
private string _internalMetadataPath;
|
private string _internalMetadataPath;
|
||||||
public string InternalMetadataPath
|
public string InternalMetadataPath
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
using System;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Sorting;
|
|
||||||
using MediaBrowser.Model.Querying;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Sorting
|
|
||||||
{
|
|
||||||
public class GameSystemComparer : IBaseItemComparer
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Compares the specified x.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="x">The x.</param>
|
|
||||||
/// <param name="y">The y.</param>
|
|
||||||
/// <returns>System.Int32.</returns>
|
|
||||||
public int Compare(BaseItem x, BaseItem y)
|
|
||||||
{
|
|
||||||
return string.Compare(GetValue(x), GetValue(y), StringComparison.CurrentCultureIgnoreCase);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the value.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="x">The x.</param>
|
|
||||||
/// <returns>System.String.</returns>
|
|
||||||
private static string GetValue(BaseItem x)
|
|
||||||
{
|
|
||||||
var game = x as Game;
|
|
||||||
|
|
||||||
if (game != null)
|
|
||||||
{
|
|
||||||
return game.GameSystem;
|
|
||||||
}
|
|
||||||
|
|
||||||
var system = x as GameSystem;
|
|
||||||
|
|
||||||
if (system != null)
|
|
||||||
{
|
|
||||||
return system.GameSystemName;
|
|
||||||
}
|
|
||||||
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the name.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The name.</value>
|
|
||||||
public string Name => ItemSortBy.GameSystem;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Sorting;
|
|
||||||
using MediaBrowser.Model.Querying;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Sorting
|
|
||||||
{
|
|
||||||
public class PlayersComparer : IBaseItemComparer
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Compares the specified x.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="x">The x.</param>
|
|
||||||
/// <param name="y">The y.</param>
|
|
||||||
/// <returns>System.Int32.</returns>
|
|
||||||
public int Compare(BaseItem x, BaseItem y)
|
|
||||||
{
|
|
||||||
return GetValue(x).CompareTo(GetValue(y));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the value.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="x">The x.</param>
|
|
||||||
/// <returns>System.String.</returns>
|
|
||||||
private static int GetValue(BaseItem x)
|
|
||||||
{
|
|
||||||
var game = x as Game;
|
|
||||||
|
|
||||||
if (game != null)
|
|
||||||
{
|
|
||||||
return game.PlayersSupported ?? 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the name.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The name.</value>
|
|
||||||
public string Name => ItemSortBy.Players;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -43,10 +43,6 @@ namespace Emby.Server.Implementations.UserViews
|
||||||
{
|
{
|
||||||
includeItemTypes = new string[] { "Book", "AudioBook" };
|
includeItemTypes = new string[] { "Book", "AudioBook" };
|
||||||
}
|
}
|
||||||
else if (string.Equals(viewType, CollectionType.Games))
|
|
||||||
{
|
|
||||||
includeItemTypes = new string[] { "Game" };
|
|
||||||
}
|
|
||||||
else if (string.Equals(viewType, CollectionType.BoxSets))
|
else if (string.Equals(viewType, CollectionType.BoxSets))
|
||||||
{
|
{
|
||||||
includeItemTypes = new string[] { "BoxSet" };
|
includeItemTypes = new string[] { "BoxSet" };
|
||||||
|
|
|
@ -228,21 +228,6 @@ namespace MediaBrowser.Api
|
||||||
return libraryManager.GetMusicGenre(name);
|
return libraryManager.GetMusicGenre(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected GameGenre GetGameGenre(string name, ILibraryManager libraryManager, DtoOptions dtoOptions)
|
|
||||||
{
|
|
||||||
if (name.IndexOf(BaseItem.SlugChar) != -1)
|
|
||||||
{
|
|
||||||
var result = GetItemFromSlugName<GameGenre>(libraryManager, name, dtoOptions);
|
|
||||||
|
|
||||||
if (result != null)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return libraryManager.GetGameGenre(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Person GetPerson(string name, ILibraryManager libraryManager, DtoOptions dtoOptions)
|
protected Person GetPerson(string name, ILibraryManager libraryManager, DtoOptions dtoOptions)
|
||||||
{
|
{
|
||||||
if (name.IndexOf(BaseItem.SlugChar) != -1)
|
if (name.IndexOf(BaseItem.SlugChar) != -1)
|
||||||
|
@ -349,10 +334,6 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
item = GetMusicGenre(name, libraryManager, dtoOptions);
|
item = GetMusicGenre(name, libraryManager, dtoOptions);
|
||||||
}
|
}
|
||||||
else if (type.IndexOf("GameGenre", StringComparison.OrdinalIgnoreCase) == 0)
|
|
||||||
{
|
|
||||||
item = GetGameGenre(name, libraryManager, dtoOptions);
|
|
||||||
}
|
|
||||||
else if (type.IndexOf("Studio", StringComparison.OrdinalIgnoreCase) == 0)
|
else if (type.IndexOf("Studio", StringComparison.OrdinalIgnoreCase) == 0)
|
||||||
{
|
{
|
||||||
item = GetStudio(name, libraryManager, dtoOptions);
|
item = GetStudio(name, libraryManager, dtoOptions);
|
||||||
|
|
|
@ -143,16 +143,6 @@ namespace MediaBrowser.Api
|
||||||
|
|
||||||
}).ToArray();
|
}).ToArray();
|
||||||
}
|
}
|
||||||
else if (string.Equals(request.IncludeItemTypes, "Game", StringComparison.OrdinalIgnoreCase) ||
|
|
||||||
string.Equals(request.IncludeItemTypes, "GameSystem", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
filters.Genres = _libraryManager.GetGameGenres(genreQuery).Items.Select(i => new NameGuidPair
|
|
||||||
{
|
|
||||||
Name = i.Item1.Name,
|
|
||||||
Id = i.Item1.Id
|
|
||||||
|
|
||||||
}).ToArray();
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
filters.Genres = _libraryManager.GetGenres(genreQuery).Items.Select(i => new NameGuidPair
|
filters.Genres = _libraryManager.GetGenres(genreQuery).Items.Select(i => new NameGuidPair
|
||||||
|
|
|
@ -1,140 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using MediaBrowser.Controller.Dto;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Net;
|
|
||||||
using MediaBrowser.Controller.Persistence;
|
|
||||||
using MediaBrowser.Model.Dto;
|
|
||||||
using MediaBrowser.Model.Services;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Api
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class GetGameSystemSummaries
|
|
||||||
/// </summary>
|
|
||||||
[Route("/Games/SystemSummaries", "GET", Summary = "Finds games similar to a given game.")]
|
|
||||||
public class GetGameSystemSummaries : IReturn<GameSystemSummary[]>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the user id.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The user id.</value>
|
|
||||||
[ApiMember(Name = "UserId", Description = "Optional. Filter by user id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
|
||||||
public Guid UserId { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Class GamesService
|
|
||||||
/// </summary>
|
|
||||||
[Authenticated]
|
|
||||||
public class GamesService : BaseApiService
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The _user manager
|
|
||||||
/// </summary>
|
|
||||||
private readonly IUserManager _userManager;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The _user data repository
|
|
||||||
/// </summary>
|
|
||||||
private readonly IUserDataManager _userDataRepository;
|
|
||||||
/// <summary>
|
|
||||||
/// The _library manager
|
|
||||||
/// </summary>
|
|
||||||
private readonly ILibraryManager _libraryManager;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The _item repo
|
|
||||||
/// </summary>
|
|
||||||
private readonly IItemRepository _itemRepo;
|
|
||||||
/// <summary>
|
|
||||||
/// The _dto service
|
|
||||||
/// </summary>
|
|
||||||
private readonly IDtoService _dtoService;
|
|
||||||
|
|
||||||
private readonly IAuthorizationContext _authContext;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="GamesService" /> class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="userManager">The user manager.</param>
|
|
||||||
/// <param name="userDataRepository">The user data repository.</param>
|
|
||||||
/// <param name="libraryManager">The library manager.</param>
|
|
||||||
/// <param name="itemRepo">The item repo.</param>
|
|
||||||
/// <param name="dtoService">The dto service.</param>
|
|
||||||
public GamesService(IUserManager userManager, IUserDataManager userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService, IAuthorizationContext authContext)
|
|
||||||
{
|
|
||||||
_userManager = userManager;
|
|
||||||
_userDataRepository = userDataRepository;
|
|
||||||
_libraryManager = libraryManager;
|
|
||||||
_itemRepo = itemRepo;
|
|
||||||
_dtoService = dtoService;
|
|
||||||
_authContext = authContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the specified request.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="request">The request.</param>
|
|
||||||
/// <returns>System.Object.</returns>
|
|
||||||
public object Get(GetGameSystemSummaries request)
|
|
||||||
{
|
|
||||||
var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId);
|
|
||||||
var query = new InternalItemsQuery(user)
|
|
||||||
{
|
|
||||||
IncludeItemTypes = new[] { typeof(GameSystem).Name },
|
|
||||||
DtoOptions = new DtoOptions(false)
|
|
||||||
{
|
|
||||||
EnableImages = false
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var result = _libraryManager.GetItemList(query)
|
|
||||||
.Cast<GameSystem>()
|
|
||||||
.Select(i => GetSummary(i, user))
|
|
||||||
.ToArray();
|
|
||||||
|
|
||||||
return ToOptimizedResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the summary.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="system">The system.</param>
|
|
||||||
/// <param name="user">The user.</param>
|
|
||||||
/// <returns>GameSystemSummary.</returns>
|
|
||||||
private GameSystemSummary GetSummary(GameSystem system, User user)
|
|
||||||
{
|
|
||||||
var summary = new GameSystemSummary
|
|
||||||
{
|
|
||||||
Name = system.GameSystemName,
|
|
||||||
DisplayName = system.Name
|
|
||||||
};
|
|
||||||
|
|
||||||
var items = user == null ?
|
|
||||||
system.GetRecursiveChildren(i => i is Game) :
|
|
||||||
system.GetRecursiveChildren(user, new InternalItemsQuery(user)
|
|
||||||
{
|
|
||||||
IncludeItemTypes = new[] { typeof(Game).Name },
|
|
||||||
DtoOptions = new DtoOptions(false)
|
|
||||||
{
|
|
||||||
EnableImages = false
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var games = items.Cast<Game>().ToArray();
|
|
||||||
|
|
||||||
summary.ClientInstalledGameCount = games.Count(i => i.IsPlaceHolder);
|
|
||||||
|
|
||||||
summary.GameCount = games.Length;
|
|
||||||
|
|
||||||
summary.GameFileExtensions = games.Where(i => !i.IsPlaceHolder).Select(i => Path.GetExtension(i.Path))
|
|
||||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
|
||||||
.ToArray();
|
|
||||||
|
|
||||||
return summary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -95,8 +95,6 @@ namespace MediaBrowser.Api.Images
|
||||||
[Route("/Artists/{Name}/Images/{Type}/{Index}", "GET")]
|
[Route("/Artists/{Name}/Images/{Type}/{Index}", "GET")]
|
||||||
[Route("/Genres/{Name}/Images/{Type}", "GET")]
|
[Route("/Genres/{Name}/Images/{Type}", "GET")]
|
||||||
[Route("/Genres/{Name}/Images/{Type}/{Index}", "GET")]
|
[Route("/Genres/{Name}/Images/{Type}/{Index}", "GET")]
|
||||||
[Route("/GameGenres/{Name}/Images/{Type}", "GET")]
|
|
||||||
[Route("/GameGenres/{Name}/Images/{Type}/{Index}", "GET")]
|
|
||||||
[Route("/MusicGenres/{Name}/Images/{Type}", "GET")]
|
[Route("/MusicGenres/{Name}/Images/{Type}", "GET")]
|
||||||
[Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "GET")]
|
[Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "GET")]
|
||||||
[Route("/Persons/{Name}/Images/{Type}", "GET")]
|
[Route("/Persons/{Name}/Images/{Type}", "GET")]
|
||||||
|
@ -109,8 +107,6 @@ namespace MediaBrowser.Api.Images
|
||||||
[Route("/Artists/{Name}/Images/{Type}/{Index}", "HEAD")]
|
[Route("/Artists/{Name}/Images/{Type}/{Index}", "HEAD")]
|
||||||
[Route("/Genres/{Name}/Images/{Type}", "HEAD")]
|
[Route("/Genres/{Name}/Images/{Type}", "HEAD")]
|
||||||
[Route("/Genres/{Name}/Images/{Type}/{Index}", "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}", "HEAD")]
|
||||||
[Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "HEAD")]
|
[Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "HEAD")]
|
||||||
[Route("/Persons/{Name}/Images/{Type}", "HEAD")]
|
[Route("/Persons/{Name}/Images/{Type}", "HEAD")]
|
||||||
|
|
|
@ -57,12 +57,6 @@ namespace MediaBrowser.Api
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("/Items/RemoteSearch/Game", "POST")]
|
|
||||||
[Authenticated]
|
|
||||||
public class GetGameRemoteSearchResults : RemoteSearchQuery<GameInfo>, IReturn<List<RemoteSearchResult>>
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
[Route("/Items/RemoteSearch/BoxSet", "POST")]
|
[Route("/Items/RemoteSearch/BoxSet", "POST")]
|
||||||
[Authenticated]
|
[Authenticated]
|
||||||
public class GetBoxSetRemoteSearchResults : RemoteSearchQuery<BoxSetInfo>, IReturn<List<RemoteSearchResult>>
|
public class GetBoxSetRemoteSearchResults : RemoteSearchQuery<BoxSetInfo>, IReturn<List<RemoteSearchResult>>
|
||||||
|
@ -173,13 +167,6 @@ namespace MediaBrowser.Api
|
||||||
return ToOptimizedResult(result);
|
return ToOptimizedResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<object> Post(GetGameRemoteSearchResults request)
|
|
||||||
{
|
|
||||||
var result = await _providerManager.GetRemoteSearchResults<Game, GameInfo>(request, CancellationToken.None).ConfigureAwait(false);
|
|
||||||
|
|
||||||
return ToOptimizedResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<object> Post(GetBoxSetRemoteSearchResults request)
|
public async Task<object> Post(GetBoxSetRemoteSearchResults request)
|
||||||
{
|
{
|
||||||
var result = await _providerManager.GetRemoteSearchResults<BoxSet, BoxSetInfo>(request, CancellationToken.None).ConfigureAwait(false);
|
var result = await _providerManager.GetRemoteSearchResults<BoxSet, BoxSetInfo>(request, CancellationToken.None).ConfigureAwait(false);
|
||||||
|
|
|
@ -154,11 +154,6 @@ namespace MediaBrowser.Api
|
||||||
Name = "Books",
|
Name = "Books",
|
||||||
Value = "books"
|
Value = "books"
|
||||||
});
|
});
|
||||||
list.Add(new NameValuePair
|
|
||||||
{
|
|
||||||
Name = "Games",
|
|
||||||
Value = "games"
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
list.Add(new NameValuePair
|
list.Add(new NameValuePair
|
||||||
|
|
|
@ -265,7 +265,6 @@ namespace MediaBrowser.Api.Library
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("/Games/{Id}/Similar", "GET", Summary = "Finds games similar to a given game.")]
|
|
||||||
[Route("/Artists/{Id}/Similar", "GET", Summary = "Finds albums similar to a given album.")]
|
[Route("/Artists/{Id}/Similar", "GET", Summary = "Finds albums similar to a given album.")]
|
||||||
[Route("/Items/{Id}/Similar", "GET", Summary = "Gets similar items")]
|
[Route("/Items/{Id}/Similar", "GET", Summary = "Gets similar items")]
|
||||||
[Route("/Albums/{Id}/Similar", "GET", Summary = "Finds albums similar to a given album.")]
|
[Route("/Albums/{Id}/Similar", "GET", Summary = "Finds albums similar to a given album.")]
|
||||||
|
@ -369,8 +368,6 @@ namespace MediaBrowser.Api.Library
|
||||||
return new string[] { "Series", "Season", "Episode" };
|
return new string[] { "Series", "Season", "Episode" };
|
||||||
case CollectionType.Books:
|
case CollectionType.Books:
|
||||||
return new string[] { "Book" };
|
return new string[] { "Book" };
|
||||||
case CollectionType.Games:
|
|
||||||
return new string[] { "Game", "GameSystem" };
|
|
||||||
case CollectionType.Music:
|
case CollectionType.Music:
|
||||||
return new string[] { "MusicAlbum", "MusicArtist", "Audio", "MusicVideo" };
|
return new string[] { "MusicAlbum", "MusicArtist", "Audio", "MusicVideo" };
|
||||||
case CollectionType.HomeVideos:
|
case CollectionType.HomeVideos:
|
||||||
|
@ -952,8 +949,6 @@ namespace MediaBrowser.Api.Library
|
||||||
{
|
{
|
||||||
AlbumCount = GetCount(typeof(MusicAlbum), user, request),
|
AlbumCount = GetCount(typeof(MusicAlbum), user, request),
|
||||||
EpisodeCount = GetCount(typeof(Episode), user, request),
|
EpisodeCount = GetCount(typeof(Episode), user, request),
|
||||||
GameCount = GetCount(typeof(Game), user, request),
|
|
||||||
GameSystemCount = GetCount(typeof(GameSystem), user, request),
|
|
||||||
MovieCount = GetCount(typeof(Movie), user, request),
|
MovieCount = GetCount(typeof(Movie), user, request),
|
||||||
SeriesCount = GetCount(typeof(Series), user, request),
|
SeriesCount = GetCount(typeof(Series), user, request),
|
||||||
SongCount = GetCount(typeof(Audio), user, request),
|
SongCount = GetCount(typeof(Audio), user, request),
|
||||||
|
|
|
@ -194,7 +194,7 @@ namespace MediaBrowser.Api.Session
|
||||||
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
|
[ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
[ApiMember(Name = "PlayableMediaTypes", Description = "A list of playable media types, comma delimited. Audio, Video, Book, Game, Photo.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
|
[ApiMember(Name = "PlayableMediaTypes", Description = "A list of playable media types, comma delimited. Audio, Video, Book, Photo.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
|
||||||
public string PlayableMediaTypes { get; set; }
|
public string PlayableMediaTypes { get; set; }
|
||||||
|
|
||||||
[ApiMember(Name = "SupportedCommands", Description = "A list of supported remote control commands, comma delimited", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
|
[ApiMember(Name = "SupportedCommands", Description = "A list of supported remote control commands, comma delimited", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
|
||||||
|
|
|
@ -224,7 +224,6 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
dto.TrailerCount = counts.TrailerCount;
|
dto.TrailerCount = counts.TrailerCount;
|
||||||
dto.AlbumCount = counts.AlbumCount;
|
dto.AlbumCount = counts.AlbumCount;
|
||||||
dto.SongCount = counts.SongCount;
|
dto.SongCount = counts.SongCount;
|
||||||
dto.GameCount = counts.GameCount;
|
|
||||||
dto.ArtistCount = counts.ArtistCount;
|
dto.ArtistCount = counts.ArtistCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,12 +42,6 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
[ApiMember(Name = "MinIndexNumber", Description = "Optional filter by minimum index number.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "MinIndexNumber", Description = "Optional filter by minimum index number.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||||
public int? MinIndexNumber { get; set; }
|
public int? MinIndexNumber { get; set; }
|
||||||
|
|
||||||
[ApiMember(Name = "MinPlayers", Description = "Optional filter by minimum number of game players.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
|
||||||
public int? MinPlayers { get; set; }
|
|
||||||
|
|
||||||
[ApiMember(Name = "MaxPlayers", Description = "Optional filter by maximum number of game players.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
|
||||||
public int? MaxPlayers { get; set; }
|
|
||||||
|
|
||||||
[ApiMember(Name = "ParentIndexNumber", Description = "Optional filter by parent index number.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "ParentIndexNumber", Description = "Optional filter by parent index number.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
|
||||||
public int? ParentIndexNumber { get; set; }
|
public int? ParentIndexNumber { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -1,105 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using MediaBrowser.Controller.Dto;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Net;
|
|
||||||
using MediaBrowser.Controller.Persistence;
|
|
||||||
using MediaBrowser.Model.Dto;
|
|
||||||
using MediaBrowser.Model.Querying;
|
|
||||||
using MediaBrowser.Model.Services;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Api.UserLibrary
|
|
||||||
{
|
|
||||||
[Route("/GameGenres", "GET", Summary = "Gets all Game genres from a given item, folder, or the entire library")]
|
|
||||||
public class GetGameGenres : GetItemsByName
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
[Route("/GameGenres/{Name}", "GET", Summary = "Gets a Game genre, by name")]
|
|
||||||
public class GetGameGenre : IReturn<BaseItemDto>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the name.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The name.</value>
|
|
||||||
[ApiMember(Name = "Name", Description = "The genre name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
|
|
||||||
public string Name { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the user id.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The user id.</value>
|
|
||||||
[ApiMember(Name = "UserId", Description = "Optional. Filter by user id, and attach user data", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
|
|
||||||
public Guid UserId { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
[Authenticated]
|
|
||||||
public class GameGenresService : BaseItemsByNameService<GameGenre>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the specified request.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="request">The request.</param>
|
|
||||||
/// <returns>System.Object.</returns>
|
|
||||||
public object Get(GetGameGenre request)
|
|
||||||
{
|
|
||||||
var result = GetItem(request);
|
|
||||||
|
|
||||||
return ToOptimizedResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the item.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="request">The request.</param>
|
|
||||||
/// <returns>Task{BaseItemDto}.</returns>
|
|
||||||
private BaseItemDto GetItem(GetGameGenre request)
|
|
||||||
{
|
|
||||||
var dtoOptions = GetDtoOptions(AuthorizationContext, request);
|
|
||||||
|
|
||||||
var item = GetGameGenre(request.Name, LibraryManager, dtoOptions);
|
|
||||||
|
|
||||||
if (!request.UserId.Equals(Guid.Empty))
|
|
||||||
{
|
|
||||||
var user = UserManager.GetUserById(request.UserId);
|
|
||||||
|
|
||||||
return DtoService.GetBaseItemDto(item, dtoOptions, user);
|
|
||||||
}
|
|
||||||
|
|
||||||
return DtoService.GetBaseItemDto(item, dtoOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the specified request.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="request">The request.</param>
|
|
||||||
/// <returns>System.Object.</returns>
|
|
||||||
public object Get(GetGameGenres request)
|
|
||||||
{
|
|
||||||
var result = GetResultSlim(request);
|
|
||||||
|
|
||||||
return ToOptimizedResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query)
|
|
||||||
{
|
|
||||||
return LibraryManager.GetGameGenres(query);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets all items.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="request">The request.</param>
|
|
||||||
/// <param name="items">The items.</param>
|
|
||||||
/// <returns>IEnumerable{Tuple{System.StringFunc{System.Int32}}}.</returns>
|
|
||||||
protected override IEnumerable<BaseItem> GetAllItems(GetItemsByName request, IList<BaseItem> items)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameGenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -101,11 +101,6 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
return LibraryManager.GetMusicGenres(query);
|
return LibraryManager.GetMusicGenres(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.Equals(viewType, CollectionType.Games))
|
|
||||||
{
|
|
||||||
return LibraryManager.GetGameGenres(query);
|
|
||||||
}
|
|
||||||
|
|
||||||
return LibraryManager.GetGenres(query);
|
return LibraryManager.GetGenres(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -304,8 +304,6 @@ namespace MediaBrowser.Api.UserLibrary
|
||||||
VideoTypes = request.GetVideoTypes(),
|
VideoTypes = request.GetVideoTypes(),
|
||||||
AdjacentTo = request.AdjacentTo,
|
AdjacentTo = request.AdjacentTo,
|
||||||
ItemIds = GetGuids(request.Ids),
|
ItemIds = GetGuids(request.Ids),
|
||||||
MinPlayers = request.MinPlayers,
|
|
||||||
MaxPlayers = request.MaxPlayers,
|
|
||||||
MinCommunityRating = request.MinCommunityRating,
|
MinCommunityRating = request.MinCommunityRating,
|
||||||
MinCriticRating = request.MinCriticRating,
|
MinCriticRating = request.MinCriticRating,
|
||||||
ParentId = string.IsNullOrWhiteSpace(request.ParentId) ? Guid.Empty : new Guid(request.ParentId),
|
ParentId = string.IsNullOrWhiteSpace(request.ParentId) ? Guid.Empty : new Guid(request.ParentId),
|
||||||
|
|
|
@ -1149,16 +1149,6 @@ namespace MediaBrowser.Controller.Entities
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.MinPlayers.HasValue)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.MaxPlayers.HasValue)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.MinCommunityRating.HasValue)
|
if (request.MinCommunityRating.HasValue)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,113 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.Model.Configuration;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Serialization;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
|
||||||
{
|
|
||||||
public class Game : BaseItem, IHasTrailers, IHasScreenshots, ISupportsPlaceHolders, IHasLookupInfo<GameInfo>
|
|
||||||
{
|
|
||||||
public Game()
|
|
||||||
{
|
|
||||||
MultiPartGameFiles = Array.Empty<string>();
|
|
||||||
RemoteTrailers = EmptyMediaUrlArray;
|
|
||||||
LocalTrailerIds = Array.Empty<Guid>();
|
|
||||||
RemoteTrailerIds = Array.Empty<Guid>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Guid[] LocalTrailerIds { get; set; }
|
|
||||||
public Guid[] RemoteTrailerIds { get; set; }
|
|
||||||
|
|
||||||
public override bool CanDownload()
|
|
||||||
{
|
|
||||||
return IsFileProtocol;
|
|
||||||
}
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override bool SupportsThemeMedia => true;
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override bool SupportsPeople => false;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the type of the media.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The type of the media.</value>
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override string MediaType => Model.Entities.MediaType.Game;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the players supported.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The players supported.</value>
|
|
||||||
public int? PlayersSupported { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets a value indicating whether this instance is place holder.
|
|
||||||
/// </summary>
|
|
||||||
/// <value><c>true</c> if this instance is place holder; otherwise, <c>false</c>.</value>
|
|
||||||
public bool IsPlaceHolder { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the game system.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game system.</value>
|
|
||||||
public string GameSystem { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets a value indicating whether this instance is multi part.
|
|
||||||
/// </summary>
|
|
||||||
/// <value><c>true</c> if this instance is multi part; otherwise, <c>false</c>.</value>
|
|
||||||
public bool IsMultiPart { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Holds the paths to the game files in the event this is a multipart game
|
|
||||||
/// </summary>
|
|
||||||
public string[] MultiPartGameFiles { get; set; }
|
|
||||||
|
|
||||||
public override List<string> GetUserDataKeys()
|
|
||||||
{
|
|
||||||
var list = base.GetUserDataKeys();
|
|
||||||
var id = this.GetProviderId(MetadataProviders.Gamesdb);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(id))
|
|
||||||
{
|
|
||||||
list.Insert(0, "Game-Gamesdb-" + id);
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override IEnumerable<FileSystemMetadata> GetDeletePaths()
|
|
||||||
{
|
|
||||||
if (!IsInMixedFolder)
|
|
||||||
{
|
|
||||||
return new[] {
|
|
||||||
new FileSystemMetadata
|
|
||||||
{
|
|
||||||
FullName = System.IO.Path.GetDirectoryName(Path),
|
|
||||||
IsDirectory = true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return base.GetDeletePaths();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override UnratedItem GetBlockUnratedType()
|
|
||||||
{
|
|
||||||
return UnratedItem.Game;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameInfo GetLookupInfo()
|
|
||||||
{
|
|
||||||
var id = GetItemLookupInfo<GameInfo>();
|
|
||||||
|
|
||||||
id.GameSystem = GameSystem;
|
|
||||||
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,109 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using MediaBrowser.Controller.Extensions;
|
|
||||||
using MediaBrowser.Model.Serialization;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
|
||||||
{
|
|
||||||
public class GameGenre : BaseItem, IItemByName
|
|
||||||
{
|
|
||||||
public override List<string> GetUserDataKeys()
|
|
||||||
{
|
|
||||||
var list = base.GetUserDataKeys();
|
|
||||||
|
|
||||||
list.Insert(0, GetType().Name + "-" + (Name ?? string.Empty).RemoveDiacritics());
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string CreatePresentationUniqueKey()
|
|
||||||
{
|
|
||||||
return GetUserDataKeys()[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
public override double GetDefaultPrimaryImageAspectRatio()
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns the folder containing the item.
|
|
||||||
/// If the item is a folder, it returns the folder itself
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The containing folder path.</value>
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override string ContainingFolderPath => Path;
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override bool SupportsAncestors => false;
|
|
||||||
|
|
||||||
public override bool IsSaveLocalMetadataEnabled()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CanDelete()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IList<BaseItem> GetTaggedItems(InternalItemsQuery query)
|
|
||||||
{
|
|
||||||
query.GenreIds = new[] { Id };
|
|
||||||
query.IncludeItemTypes = new[] { typeof(Game).Name };
|
|
||||||
|
|
||||||
return LibraryManager.GetItemList(query);
|
|
||||||
}
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override bool SupportsPeople => false;
|
|
||||||
|
|
||||||
public static string GetPath(string name)
|
|
||||||
{
|
|
||||||
return GetPath(name, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetPath(string name, bool normalizeName)
|
|
||||||
{
|
|
||||||
// Trim the period at the end because windows will have a hard time with that
|
|
||||||
var validName = normalizeName ?
|
|
||||||
FileSystem.GetValidFilename(name).Trim().TrimEnd('.') :
|
|
||||||
name;
|
|
||||||
|
|
||||||
return System.IO.Path.Combine(ConfigurationManager.ApplicationPaths.GameGenrePath, validName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetRebasedPath()
|
|
||||||
{
|
|
||||||
return GetPath(System.IO.Path.GetFileName(Path), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool RequiresRefresh()
|
|
||||||
{
|
|
||||||
var newPath = GetRebasedPath();
|
|
||||||
if (!string.Equals(Path, newPath, StringComparison.Ordinal))
|
|
||||||
{
|
|
||||||
Logger.LogDebug("{0} path has changed from {1} to {2}", GetType().Name, Path, newPath);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return base.RequiresRefresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This is called before any metadata refresh and returns true or false indicating if changes were made
|
|
||||||
/// </summary>
|
|
||||||
public override bool BeforeMetadataRefresh(bool replaceAllMetdata)
|
|
||||||
{
|
|
||||||
var hasChanges = base.BeforeMetadataRefresh(replaceAllMetdata);
|
|
||||||
|
|
||||||
var newPath = GetRebasedPath();
|
|
||||||
if (!string.Equals(Path, newPath, StringComparison.Ordinal))
|
|
||||||
{
|
|
||||||
Path = newPath;
|
|
||||||
hasChanges = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return hasChanges;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,77 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.Model.Configuration;
|
|
||||||
using MediaBrowser.Model.Serialization;
|
|
||||||
using MediaBrowser.Model.Users;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class GameSystem
|
|
||||||
/// </summary>
|
|
||||||
public class GameSystem : Folder, IHasLookupInfo<GameSystemInfo>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Return the id that should be used to key display prefs for this item.
|
|
||||||
/// Default is based on the type for everything except actual generic folders.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The display prefs id.</value>
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override Guid DisplayPreferencesId => Id;
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override bool SupportsPlayedStatus => false;
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override bool SupportsInheritedParentImages => false;
|
|
||||||
|
|
||||||
public override double GetDefaultPrimaryImageAspectRatio()
|
|
||||||
{
|
|
||||||
double value = 16;
|
|
||||||
value /= 9;
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the game system.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game system.</value>
|
|
||||||
public string GameSystemName { get; set; }
|
|
||||||
|
|
||||||
public override List<string> GetUserDataKeys()
|
|
||||||
{
|
|
||||||
var list = base.GetUserDataKeys();
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(GameSystemName))
|
|
||||||
{
|
|
||||||
list.Insert(0, "GameSystem-" + GameSystemName);
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool GetBlockUnratedValue(UserPolicy config)
|
|
||||||
{
|
|
||||||
// Don't block. Determine by game
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override UnratedItem GetBlockUnratedType()
|
|
||||||
{
|
|
||||||
return UnratedItem.Game;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameSystemInfo GetLookupInfo()
|
|
||||||
{
|
|
||||||
var id = GetItemLookupInfo<GameSystemInfo>();
|
|
||||||
|
|
||||||
id.Path = Path;
|
|
||||||
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
public override bool SupportsPeople => false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -56,7 +56,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
public IList<BaseItem> GetTaggedItems(InternalItemsQuery query)
|
public IList<BaseItem> GetTaggedItems(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
query.GenreIds = new[] { Id };
|
query.GenreIds = new[] { Id };
|
||||||
query.ExcludeItemTypes = new[] { typeof(Game).Name, typeof(MusicVideo).Name, typeof(Audio.Audio).Name, typeof(MusicAlbum).Name, typeof(MusicArtist).Name };
|
query.ExcludeItemTypes = new[] { typeof(MusicVideo).Name, typeof(Audio.Audio).Name, typeof(MusicAlbum).Name, typeof(MusicArtist).Name };
|
||||||
|
|
||||||
return LibraryManager.GetItemList(query);
|
return LibraryManager.GetItemList(query);
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,9 +95,6 @@ namespace MediaBrowser.Controller.Entities
|
||||||
public bool? IsKids { get; set; }
|
public bool? IsKids { get; set; }
|
||||||
public bool? IsNews { get; set; }
|
public bool? IsNews { get; set; }
|
||||||
public bool? IsSeries { get; set; }
|
public bool? IsSeries { get; set; }
|
||||||
|
|
||||||
public int? MinPlayers { get; set; }
|
|
||||||
public int? MaxPlayers { get; set; }
|
|
||||||
public int? MinIndexNumber { get; set; }
|
public int? MinIndexNumber { get; set; }
|
||||||
public int? AiredDuringSeason { get; set; }
|
public int? AiredDuringSeason { get; set; }
|
||||||
public double? MinCriticRating { get; set; }
|
public double? MinCriticRating { get; set; }
|
||||||
|
|
|
@ -150,7 +150,6 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
private static string[] OriginalFolderViewTypes = new string[]
|
private static string[] OriginalFolderViewTypes = new string[]
|
||||||
{
|
{
|
||||||
MediaBrowser.Model.Entities.CollectionType.Games,
|
|
||||||
MediaBrowser.Model.Entities.CollectionType.Books,
|
MediaBrowser.Model.Entities.CollectionType.Books,
|
||||||
MediaBrowser.Model.Entities.CollectionType.MusicVideos,
|
MediaBrowser.Model.Entities.CollectionType.MusicVideos,
|
||||||
MediaBrowser.Model.Entities.CollectionType.HomeVideos,
|
MediaBrowser.Model.Entities.CollectionType.HomeVideos,
|
||||||
|
|
|
@ -848,52 +848,6 @@ namespace MediaBrowser.Controller.Entities
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query.MinPlayers.HasValue)
|
|
||||||
{
|
|
||||||
var filterValue = query.MinPlayers.Value;
|
|
||||||
|
|
||||||
var game = item as Game;
|
|
||||||
|
|
||||||
if (game != null)
|
|
||||||
{
|
|
||||||
var players = game.PlayersSupported ?? 1;
|
|
||||||
|
|
||||||
var ok = players >= filterValue;
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (query.MaxPlayers.HasValue)
|
|
||||||
{
|
|
||||||
var filterValue = query.MaxPlayers.Value;
|
|
||||||
|
|
||||||
var game = item as Game;
|
|
||||||
|
|
||||||
if (game != null)
|
|
||||||
{
|
|
||||||
var players = game.PlayersSupported ?? 1;
|
|
||||||
|
|
||||||
var ok = players <= filterValue;
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (query.MinCommunityRating.HasValue)
|
if (query.MinCommunityRating.HasValue)
|
||||||
{
|
{
|
||||||
var val = query.MinCommunityRating.Value;
|
var val = query.MinCommunityRating.Value;
|
||||||
|
|
|
@ -46,12 +46,6 @@ namespace MediaBrowser.Controller
|
||||||
/// <value>The music genre path.</value>
|
/// <value>The music genre path.</value>
|
||||||
string MusicGenrePath { get; }
|
string MusicGenrePath { get; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the game genre path.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game genre path.</value>
|
|
||||||
string GameGenrePath { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the path to the Studio directory
|
/// Gets the path to the Studio directory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -88,13 +88,6 @@ namespace MediaBrowser.Controller.Library
|
||||||
/// <returns>Task{MusicGenre}.</returns>
|
/// <returns>Task{MusicGenre}.</returns>
|
||||||
MusicGenre GetMusicGenre(string name);
|
MusicGenre GetMusicGenre(string name);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the game genre.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The name.</param>
|
|
||||||
/// <returns>Task{GameGenre}.</returns>
|
|
||||||
GameGenre GetGameGenre(string name);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a Year
|
/// Gets a Year
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -521,8 +514,6 @@ namespace MediaBrowser.Controller.Library
|
||||||
|
|
||||||
Guid GetMusicGenreId(string name);
|
Guid GetMusicGenreId(string name);
|
||||||
|
|
||||||
Guid GetGameGenreId(string name);
|
|
||||||
|
|
||||||
Task AddVirtualFolder(string name, string collectionType, LibraryOptions options, bool refreshLibrary);
|
Task AddVirtualFolder(string name, string collectionType, LibraryOptions options, bool refreshLibrary);
|
||||||
Task RemoveVirtualFolder(string name, bool refreshLibrary);
|
Task RemoveVirtualFolder(string name, bool refreshLibrary);
|
||||||
void AddMediaPath(string virtualFolderName, MediaPathInfo path);
|
void AddMediaPath(string virtualFolderName, MediaPathInfo path);
|
||||||
|
@ -531,7 +522,6 @@ namespace MediaBrowser.Controller.Library
|
||||||
|
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetGenres(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetGenres(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetGameGenres(InternalItemsQuery query);
|
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetStudios(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetStudios(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetArtists(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetArtists(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetAlbumArtists(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetAlbumArtists(InternalItemsQuery query);
|
||||||
|
|
|
@ -143,13 +143,11 @@ namespace MediaBrowser.Controller.Persistence
|
||||||
|
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetGenres(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetGenres(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetGameGenres(InternalItemsQuery query);
|
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetStudios(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetStudios(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetArtists(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetArtists(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetAlbumArtists(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetAlbumArtists(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetAllArtists(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetAllArtists(InternalItemsQuery query);
|
||||||
|
|
||||||
List<string> GetGameGenreNames();
|
|
||||||
List<string> GetMusicGenreNames();
|
List<string> GetMusicGenreNames();
|
||||||
List<string> GetStudioNames();
|
List<string> GetStudioNames();
|
||||||
List<string> GetGenreNames();
|
List<string> GetGenreNames();
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
namespace MediaBrowser.Controller.Providers
|
|
||||||
{
|
|
||||||
public class GameInfo : ItemLookupInfo
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the game system.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game system.</value>
|
|
||||||
public string GameSystem { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
namespace MediaBrowser.Controller.Providers
|
|
||||||
{
|
|
||||||
public class GameSystemInfo : ItemLookupInfo
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the path.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The path.</value>
|
|
||||||
public string Path { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -128,7 +128,6 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||||
var added = false;
|
var added = false;
|
||||||
var isEpisode = item is Episode;
|
var isEpisode = item is Episode;
|
||||||
var isSong = item.GetType() == typeof(Audio);
|
var isSong = item.GetType() == typeof(Audio);
|
||||||
var isGame = item is Game;
|
|
||||||
var isPerson = item is Person;
|
var isPerson = item is Person;
|
||||||
|
|
||||||
// Logo
|
// Logo
|
||||||
|
@ -157,7 +156,7 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||||
added = AddImage(files, images, "disc", imagePrefix, isInMixedFolder, ImageType.Disc);
|
added = AddImage(files, images, "disc", imagePrefix, isInMixedFolder, ImageType.Disc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isGame || item is Video || item is BoxSet)
|
else if (item is Video || item is BoxSet)
|
||||||
{
|
{
|
||||||
added = AddImage(files, images, "disc", imagePrefix, isInMixedFolder, ImageType.Disc);
|
added = AddImage(files, images, "disc", imagePrefix, isInMixedFolder, ImageType.Disc);
|
||||||
|
|
||||||
|
@ -172,19 +171,6 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isGame)
|
|
||||||
{
|
|
||||||
AddImage(files, images, "box", imagePrefix, isInMixedFolder, ImageType.Box);
|
|
||||||
AddImage(files, images, "menu", imagePrefix, isInMixedFolder, ImageType.Menu);
|
|
||||||
|
|
||||||
added = AddImage(files, images, "back", imagePrefix, isInMixedFolder, ImageType.BoxRear);
|
|
||||||
|
|
||||||
if (!added)
|
|
||||||
{
|
|
||||||
added = AddImage(files, images, "boxrear", imagePrefix, isInMixedFolder, ImageType.BoxRear);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Banner
|
// Banner
|
||||||
if (!isEpisode && !isSong && !isPerson)
|
if (!isEpisode && !isSong && !isPerson)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Xml;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Parsers
|
|
||||||
{
|
|
||||||
public class GameSystemXmlParser : BaseItemXmlParser<GameSystem>
|
|
||||||
{
|
|
||||||
public Task FetchAsync(MetadataResult<GameSystem> item, string metadataFile, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
Fetch(item, metadataFile, cancellationToken);
|
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Fetches the data from XML node.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="reader">The reader.</param>
|
|
||||||
/// <param name="result">The result.</param>
|
|
||||||
protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<GameSystem> result)
|
|
||||||
{
|
|
||||||
var item = result.Item;
|
|
||||||
|
|
||||||
switch (reader.Name)
|
|
||||||
{
|
|
||||||
case "GameSystem":
|
|
||||||
{
|
|
||||||
var val = reader.ReadElementContentAsString();
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
|
||||||
{
|
|
||||||
item.GameSystemName = val;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "GamesDbId":
|
|
||||||
{
|
|
||||||
var val = reader.ReadElementContentAsString();
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
|
||||||
{
|
|
||||||
item.SetProviderId(MetadataProviders.Gamesdb, val);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
|
||||||
base.FetchDataFromXmlNode(reader, result);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameSystemXmlParser(ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlReaderSettingsFactory, IFileSystem fileSystem) : base(logger, providerManager, xmlReaderSettingsFactory, fileSystem)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,85 +0,0 @@
|
||||||
using System.Globalization;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Xml;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Parsers
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class EpisodeXmlParser
|
|
||||||
/// </summary>
|
|
||||||
public class GameXmlParser : BaseItemXmlParser<Game>
|
|
||||||
{
|
|
||||||
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
|
||||||
|
|
||||||
public Task FetchAsync(MetadataResult<Game> item, string metadataFile, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
Fetch(item, metadataFile, cancellationToken);
|
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Fetches the data from XML node.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="reader">The reader.</param>
|
|
||||||
/// <param name="result">The result.</param>
|
|
||||||
protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<Game> result)
|
|
||||||
{
|
|
||||||
var item = result.Item;
|
|
||||||
|
|
||||||
switch (reader.Name)
|
|
||||||
{
|
|
||||||
case "GameSystem":
|
|
||||||
{
|
|
||||||
var val = reader.ReadElementContentAsString();
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
|
||||||
{
|
|
||||||
item.GameSystem = val;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "GamesDbId":
|
|
||||||
{
|
|
||||||
var val = reader.ReadElementContentAsString();
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
|
||||||
{
|
|
||||||
item.SetProviderId(MetadataProviders.Gamesdb, val);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "Players":
|
|
||||||
{
|
|
||||||
var val = reader.ReadElementContentAsString();
|
|
||||||
if (!string.IsNullOrWhiteSpace(val))
|
|
||||||
{
|
|
||||||
if (int.TryParse(val, NumberStyles.Integer, _usCulture, out var num))
|
|
||||||
{
|
|
||||||
item.PlayersSupported = num;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
|
||||||
base.FetchDataFromXmlNode(reader, result);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameXmlParser(ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlReaderSettingsFactory, IFileSystem fileSystem) : base(logger, providerManager, xmlReaderSettingsFactory, fileSystem)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
using System.IO;
|
|
||||||
using System.Threading;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.LocalMetadata.Parsers;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Xml;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Providers
|
|
||||||
{
|
|
||||||
public class GameSystemXmlProvider : BaseXmlProvider<GameSystem>
|
|
||||||
{
|
|
||||||
private readonly ILogger _logger;
|
|
||||||
private readonly IProviderManager _providerManager;
|
|
||||||
private readonly IXmlReaderSettingsFactory _xmlSettings;
|
|
||||||
|
|
||||||
public GameSystemXmlProvider(IFileSystem fileSystem, ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlSettings)
|
|
||||||
: base(fileSystem)
|
|
||||||
{
|
|
||||||
_logger = logger;
|
|
||||||
_providerManager = providerManager;
|
|
||||||
_xmlSettings = xmlSettings;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Fetch(MetadataResult<GameSystem> result, string path, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
new GameSystemXmlParser(_logger, _providerManager, _xmlSettings, FileSystem).Fetch(result, path, cancellationToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService)
|
|
||||||
{
|
|
||||||
return directoryService.GetFile(Path.Combine(info.Path, "gamesystem.xml"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
using System.IO;
|
|
||||||
using System.Threading;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.LocalMetadata.Parsers;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Xml;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Providers
|
|
||||||
{
|
|
||||||
public class GameXmlProvider : BaseXmlProvider<Game>
|
|
||||||
{
|
|
||||||
private readonly ILogger _logger;
|
|
||||||
private readonly IProviderManager _providerManager;
|
|
||||||
private readonly IXmlReaderSettingsFactory _xmlSettings;
|
|
||||||
|
|
||||||
public GameXmlProvider(IFileSystem fileSystem, ILogger logger, IProviderManager providerManager, IXmlReaderSettingsFactory xmlSettings)
|
|
||||||
: base(fileSystem)
|
|
||||||
{
|
|
||||||
_logger = logger;
|
|
||||||
_providerManager = providerManager;
|
|
||||||
_xmlSettings = xmlSettings;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Fetch(MetadataResult<Game> result, string path, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
new GameXmlParser(_logger, _providerManager, _xmlSettings, FileSystem).Fetch(result, path, cancellationToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService)
|
|
||||||
{
|
|
||||||
var specificFile = Path.ChangeExtension(info.Path, ".xml");
|
|
||||||
var file = FileSystem.GetFileInfo(specificFile);
|
|
||||||
|
|
||||||
return info.IsInMixedFolder || file.Exists ? file : FileSystem.GetFileInfo(Path.Combine(Path.GetDirectoryName(info.Path), "game.xml"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
using System.IO;
|
|
||||||
using System.Xml;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Xml;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
|
||||||
{
|
|
||||||
public class GameSystemXmlSaver : BaseXmlSaver
|
|
||||||
{
|
|
||||||
public GameSystemXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger, xmlReaderSettingsFactory)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
|
||||||
{
|
|
||||||
if (!item.SupportsLocalMetadata)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return item is GameSystem && updateType >= ItemUpdateType.MetadataDownload;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
|
||||||
{
|
|
||||||
var gameSystem = (GameSystem)item;
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(gameSystem.GameSystemName))
|
|
||||||
{
|
|
||||||
writer.WriteElementString("GameSystem", gameSystem.GameSystemName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string GetLocalSavePath(BaseItem item)
|
|
||||||
{
|
|
||||||
return Path.Combine(item.Path, "gamesystem.xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string GetRootElementName(BaseItem item)
|
|
||||||
{
|
|
||||||
return "Item";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,68 +0,0 @@
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
|
||||||
using System.Xml;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Xml;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.LocalMetadata.Savers
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Saves game.xml for games
|
|
||||||
/// </summary>
|
|
||||||
public class GameXmlSaver : BaseXmlSaver
|
|
||||||
{
|
|
||||||
private readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
|
||||||
|
|
||||||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
|
||||||
{
|
|
||||||
if (!item.SupportsLocalMetadata)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return item is Game && updateType >= ItemUpdateType.MetadataDownload;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
|
|
||||||
{
|
|
||||||
var game = (Game)item;
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(game.GameSystem))
|
|
||||||
{
|
|
||||||
writer.WriteElementString("GameSystem", game.GameSystem);
|
|
||||||
}
|
|
||||||
if (game.PlayersSupported.HasValue)
|
|
||||||
{
|
|
||||||
writer.WriteElementString("Players", game.PlayersSupported.Value.ToString(UsCulture));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string GetLocalSavePath(BaseItem item)
|
|
||||||
{
|
|
||||||
return GetGameSavePath((Game)item);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string GetRootElementName(BaseItem item)
|
|
||||||
{
|
|
||||||
return "Item";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetGameSavePath(Game item)
|
|
||||||
{
|
|
||||||
if (item.IsInMixedFolder)
|
|
||||||
{
|
|
||||||
return Path.ChangeExtension(item.Path, ".xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
return Path.Combine(item.ContainingFolderPath, "game.xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger, xmlReaderSettingsFactory)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -16,8 +16,6 @@ namespace MediaBrowser.Model.Channels
|
||||||
|
|
||||||
MovieExtra = 6,
|
MovieExtra = 6,
|
||||||
|
|
||||||
TvExtra = 7,
|
TvExtra = 7
|
||||||
|
|
||||||
GameExtra = 8
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ namespace MediaBrowser.Model.Configuration
|
||||||
Trailer,
|
Trailer,
|
||||||
Series,
|
Series,
|
||||||
Music,
|
Music,
|
||||||
Game,
|
|
||||||
Book,
|
Book,
|
||||||
LiveTvChannel,
|
LiveTvChannel,
|
||||||
LiveTvProgram,
|
LiveTvProgram,
|
||||||
|
|
|
@ -116,16 +116,8 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// <value>The critic rating.</value>
|
/// <value>The critic rating.</value>
|
||||||
public float? CriticRating { get; set; }
|
public float? CriticRating { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the game system.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game system.</value>
|
|
||||||
public string GameSystem { get; set; }
|
|
||||||
|
|
||||||
public string[] ProductionLocations { get; set; }
|
public string[] ProductionLocations { get; set; }
|
||||||
|
|
||||||
public string[] MultiPartGameFiles { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the path.
|
/// Gets or sets the path.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -604,11 +596,6 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// <value>The episode count.</value>
|
/// <value>The episode count.</value>
|
||||||
public int? EpisodeCount { get; set; }
|
public int? EpisodeCount { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the game count.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game count.</value>
|
|
||||||
public int? GameCount { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the song count.
|
/// Gets or sets the song count.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The song count.</value>
|
/// <value>The song count.</value>
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Dto
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class GameSystemSummary
|
|
||||||
/// </summary>
|
|
||||||
public class GameSystemSummary
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the name.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The name.</value>
|
|
||||||
public string Name { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the name.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The name.</value>
|
|
||||||
public string DisplayName { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the game count.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game count.</value>
|
|
||||||
public int GameCount { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the game extensions.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game extensions.</value>
|
|
||||||
public string[] GameFileExtensions { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the client installed game count.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The client installed game count.</value>
|
|
||||||
public int ClientInstalledGameCount { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="GameSystemSummary"/> class.
|
|
||||||
/// </summary>
|
|
||||||
public GameSystemSummary()
|
|
||||||
{
|
|
||||||
GameFileExtensions = Array.Empty<string>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -20,19 +20,9 @@ namespace MediaBrowser.Model.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The episode count.</value>
|
/// <value>The episode count.</value>
|
||||||
public int EpisodeCount { get; set; }
|
public int EpisodeCount { get; set; }
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the game count.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game count.</value>
|
|
||||||
public int GameCount { get; set; }
|
|
||||||
public int ArtistCount { get; set; }
|
public int ArtistCount { get; set; }
|
||||||
public int ProgramCount { get; set; }
|
public int ProgramCount { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the game system count.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The game system count.</value>
|
|
||||||
public int GameSystemCount { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the trailer count.
|
/// Gets or sets the trailer count.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The trailer count.</value>
|
/// <value>The trailer count.</value>
|
||||||
|
|
|
@ -18,7 +18,6 @@ namespace MediaBrowser.Model.Entities
|
||||||
|
|
||||||
public const string Books = "books";
|
public const string Books = "books";
|
||||||
public const string Photos = "photos";
|
public const string Photos = "photos";
|
||||||
public const string Games = "games";
|
|
||||||
public const string LiveTv = "livetv";
|
public const string LiveTv = "livetv";
|
||||||
public const string Playlists = "playlists";
|
public const string Playlists = "playlists";
|
||||||
public const string Folders = "folders";
|
public const string Folders = "folders";
|
||||||
|
|
|
@ -14,10 +14,6 @@ namespace MediaBrowser.Model.Entities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string Audio = "Audio";
|
public const string Audio = "Audio";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The game
|
|
||||||
/// </summary>
|
|
||||||
public const string Game = "Game";
|
|
||||||
/// <summary>
|
|
||||||
/// The photo
|
/// The photo
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string Photo = "Photo";
|
public const string Photo = "Photo";
|
||||||
|
|
|
@ -5,7 +5,6 @@ namespace MediaBrowser.Model.Entities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public enum MetadataProviders
|
public enum MetadataProviders
|
||||||
{
|
{
|
||||||
Gamesdb = 1,
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The imdb
|
/// The imdb
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -5,10 +5,8 @@ namespace MediaBrowser.Model.Notifications
|
||||||
ApplicationUpdateAvailable,
|
ApplicationUpdateAvailable,
|
||||||
ApplicationUpdateInstalled,
|
ApplicationUpdateInstalled,
|
||||||
AudioPlayback,
|
AudioPlayback,
|
||||||
GamePlayback,
|
|
||||||
VideoPlayback,
|
VideoPlayback,
|
||||||
AudioPlaybackStopped,
|
AudioPlaybackStopped,
|
||||||
GamePlaybackStopped,
|
|
||||||
VideoPlaybackStopped,
|
VideoPlaybackStopped,
|
||||||
InstallationFailed,
|
InstallationFailed,
|
||||||
PluginError,
|
PluginError,
|
||||||
|
|
|
@ -30,8 +30,6 @@ namespace MediaBrowser.Model.Providers
|
||||||
public string ImageUrl { get; set; }
|
public string ImageUrl { get; set; }
|
||||||
|
|
||||||
public string SearchProviderName { get; set; }
|
public string SearchProviderName { get; set; }
|
||||||
|
|
||||||
public string GameSystem { get; set; }
|
|
||||||
public string Overview { get; set; }
|
public string Overview { get; set; }
|
||||||
|
|
||||||
public RemoteSearchResult AlbumArtist { get; set; }
|
public RemoteSearchResult AlbumArtist { get; set; }
|
||||||
|
|
|
@ -71,8 +71,6 @@ namespace MediaBrowser.Model.Querying
|
||||||
public const string VideoBitRate = "VideoBitRate";
|
public const string VideoBitRate = "VideoBitRate";
|
||||||
public const string AirTime = "AirTime";
|
public const string AirTime = "AirTime";
|
||||||
public const string Studio = "Studio";
|
public const string Studio = "Studio";
|
||||||
public const string Players = "Players";
|
|
||||||
public const string GameSystem = "GameSystem";
|
|
||||||
public const string IsFavoriteOrLiked = "IsFavoriteOrLiked";
|
public const string IsFavoriteOrLiked = "IsFavoriteOrLiked";
|
||||||
public const string DateLastContentAdded = "DateLastContentAdded";
|
public const string DateLastContentAdded = "DateLastContentAdded";
|
||||||
public const string SeriesDatePlayed = "SeriesDatePlayed";
|
public const string SeriesDatePlayed = "SeriesDatePlayed";
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Providers.Manager;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Providers.GameGenres
|
|
||||||
{
|
|
||||||
public class GameGenreMetadataService : MetadataService<GameGenre, ItemLookupInfo>
|
|
||||||
{
|
|
||||||
protected override void MergeData(MetadataResult<GameGenre> source, MetadataResult<GameGenre> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings)
|
|
||||||
{
|
|
||||||
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Providers.Manager;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Providers.Games
|
|
||||||
{
|
|
||||||
public class GameMetadataService : MetadataService<Game, GameInfo>
|
|
||||||
{
|
|
||||||
protected override void MergeData(MetadataResult<Game> source, MetadataResult<Game> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings)
|
|
||||||
{
|
|
||||||
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
|
|
||||||
|
|
||||||
var sourceItem = source.Item;
|
|
||||||
var targetItem = target.Item;
|
|
||||||
|
|
||||||
if (replaceData || string.IsNullOrEmpty(targetItem.GameSystem))
|
|
||||||
{
|
|
||||||
targetItem.GameSystem = sourceItem.GameSystem;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (replaceData || !targetItem.PlayersSupported.HasValue)
|
|
||||||
{
|
|
||||||
targetItem.PlayersSupported = sourceItem.PlayersSupported;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Providers;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Providers.Manager;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Providers.Games
|
|
||||||
{
|
|
||||||
public class GameSystemMetadataService : MetadataService<GameSystem, GameSystemInfo>
|
|
||||||
{
|
|
||||||
protected override void MergeData(MetadataResult<GameSystem> source, MetadataResult<GameSystem> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings)
|
|
||||||
{
|
|
||||||
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
|
|
||||||
|
|
||||||
var sourceItem = source.Item;
|
|
||||||
var targetItem = target.Item;
|
|
||||||
|
|
||||||
if (replaceData || string.IsNullOrEmpty(targetItem.GameSystemName))
|
|
||||||
{
|
|
||||||
targetItem.GameSystemName = sourceItem.GameSystemName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameSystemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue