public async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { if (TvdbSeriesProvider.IsValidSeries(item.ProviderIds)) { var language = item.GetPreferredMetadataLanguage(); var seriesDataPath = await TvdbSeriesProvider.Current.EnsureSeriesInfo(item.ProviderIds, language, cancellationToken).ConfigureAwait(false); var path = Path.Combine(seriesDataPath, "banners.xml"); try { var seriesOffset = TvdbSeriesProvider.GetSeriesOffset(item.ProviderIds); if (seriesOffset != null && seriesOffset.Value != 0) return TvdbSeasonImageProvider.GetImages(path, language, seriesOffset.Value + 1, cancellationToken); return GetImages(path, language, cancellationToken); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } catch (DirectoryNotFoundException) { // No tvdb data yet. Don't blow up } } return new RemoteImageInfo[] { }; }
public Task<IEnumerable<RemoteImageInfo>> GetAllImages(IHasImages item, CancellationToken cancellationToken) { var list = new List<RemoteImageInfo>(); RemoteImageInfo info = null; var album = item as MusicAlbum; if (album != null) { info = GetInfo(album.LastFmImageUrl, album.LastFmImageSize); } var musicArtist = item as MusicArtist; if (musicArtist != null) { info = GetInfo(musicArtist.LastFmImageUrl, musicArtist.LastFmImageSize); } if (info != null) { list.Add(info); } // The only info we have is size return Task.FromResult<IEnumerable<RemoteImageInfo>>(list.OrderByDescending(i => i.Width ?? 0)); }
public async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { var season = (Season)item; var series = season.Series; var identity = season.Identities.OfType<SeasonIdentity>().FirstOrDefault(id => id.Type == MetadataProviders.Tvdb.ToString()); var seriesId = identity != null ? identity.SeriesId : null; if (!string.IsNullOrEmpty(seriesId) && season.IndexNumber.HasValue) { await TvdbSeriesProvider.Current.EnsureSeriesInfo(seriesId, series.GetPreferredMetadataLanguage(), cancellationToken).ConfigureAwait(false); // Process images var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, seriesId); var path = Path.Combine(seriesDataPath, "banners.xml"); try { int seasonNumber = AdjustForSeriesOffset(series, identity.SeasonIndex); return GetImages(path, item.GetPreferredMetadataLanguage(), seasonNumber, cancellationToken); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } } return new RemoteImageInfo[] { }; }
private async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, bool posters, bool thumbs, CancellationToken cancellationToken) { var list = new List<RemoteImageInfo>(); if (posters) { var posterPath = Path.Combine(_config.ApplicationPaths.CachePath, "imagesbyname", "remotestudioposters.txt"); await EnsurePosterList(posterPath, cancellationToken).ConfigureAwait(false); list.Add(GetImage(item, posterPath, ImageType.Primary, "folder")); } cancellationToken.ThrowIfCancellationRequested(); if (thumbs) { var thumbsPath = Path.Combine(_config.ApplicationPaths.CachePath, "imagesbyname", "remotestudiothumbs.txt"); await EnsureThumbsList(thumbsPath, cancellationToken).ConfigureAwait(false); list.Add(GetImage(item, thumbsPath, ImageType.Thumb, "thumb")); } return list.Where(i => i != null); }
public IEnumerable<ImageType> GetSupportedImages(IHasImages item) { return new List<ImageType> { ImageType.Primary }; }
public async Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) { var liveTvItem = (LiveTvChannel)item; var imageResponse = new DynamicImageResponse(); var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, liveTvItem.ServiceName, StringComparison.OrdinalIgnoreCase)); if (service != null && !item.HasImage(ImageType.Primary)) { try { var response = await service.GetChannelImageAsync(liveTvItem.ExternalId, cancellationToken).ConfigureAwait(false); if (response != null) { imageResponse.HasImage = true; imageResponse.Stream = response.Stream; imageResponse.Format = response.Format; } } catch (NotImplementedException) { } } return imageResponse; }
public async Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) { var channelItem = (IChannelItem)item; var imageResponse = new DynamicImageResponse(); if (!string.IsNullOrEmpty(channelItem.OriginalImageUrl)) { var options = new HttpRequestOptions { CancellationToken = cancellationToken, Url = channelItem.OriginalImageUrl }; var response = await _httpClient.GetResponse(options).ConfigureAwait(false); if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) { imageResponse.HasImage = true; imageResponse.Stream = response.Content; imageResponse.SetFormatFromMimeType(response.ContentType); } else { _logger.Error("Provider did not return an image content type."); } } return imageResponse; }
public bool Supports(IHasImages item) { if (item is Photo) { return false; } if (!item.IsSaveLocalMetadataEnabled()) { return true; } // Extracted images will be saved in here if (item is Audio) { return true; } if (item.SupportsLocalMetadata && !item.AlwaysScanInternalMetadataPath) { return false; } return true; }
public bool Supports(IHasImages item) { // Save the http requests since we know it's not currently supported // TODO: Check again periodically if (item is Person) { return false; } // Save the http requests since we know it's not currently supported if (item is Series || item is Season || item is Episode) { return false; } var channelItem = item as IChannelMediaItem; if (channelItem != null) { if (channelItem.ContentType == ChannelMediaContentType.Movie) { return true; } if (channelItem.ContentType == ChannelMediaContentType.MovieExtra) { if (channelItem.ExtraType == ExtraType.Trailer) { return true; } } } return item is Movie; }
public bool Supports(IHasImages item) { if (item.SupportsLocalMetadata) { // Episode has it's own provider if (item.IsOwnedItem || item is Episode || item is Audio || item is Photo) { return false; } return true; } if (item.LocationType == LocationType.Virtual) { var season = item as Season; if (season != null) { var series = season.Series; if (series != null && series.LocationType == LocationType.FileSystem) { return true; } } } return false; }
public async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { var season = (Season)item; var series = season.Series; if (series != null && season.IndexNumber.HasValue && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { var seriesProviderIds = series.ProviderIds; var seasonNumber = season.IndexNumber.Value; var seriesDataPath = await TvdbSeriesProvider.Current.EnsureSeriesInfo(seriesProviderIds, series.GetPreferredMetadataLanguage(), cancellationToken).ConfigureAwait(false); if (!string.IsNullOrWhiteSpace(seriesDataPath)) { var path = Path.Combine(seriesDataPath, "banners.xml"); try { return GetImages(path, item.GetPreferredMetadataLanguage(), seasonNumber, cancellationToken); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } catch (DirectoryNotFoundException) { // No tvdb data yet. Don't blow up } } } return new RemoteImageInfo[] { }; }
public bool Supports(IHasImages item) { //var channelItem = item as IChannelMediaItem; //if (channelItem != null) //{ // if (channelItem.ContentType == ChannelMediaContentType.Movie) // { // return true; // } // if (channelItem.ContentType == ChannelMediaContentType.MovieExtra) // { // if (channelItem.ExtraType == ExtraType.Trailer) // { // return true; // } // } //} // Supports images for tv movies //var tvProgram = item as LiveTvProgram; //if (tvProgram != null && tvProgram.IsMovie) //{ // return true; //} return item is Movie || item is BoxSet || item is MusicVideo; }
public async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { var series = (Series)item; var seriesId = series.GetProviderId(MetadataProviders.Tvdb); if (!string.IsNullOrEmpty(seriesId)) { var language = item.GetPreferredMetadataLanguage(); await TvdbSeriesProvider.Current.EnsureSeriesInfo(seriesId, language, cancellationToken).ConfigureAwait(false); // Process images var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, seriesId); var path = Path.Combine(seriesDataPath, "banners.xml"); try { return GetImages(path, language, cancellationToken); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } } return new RemoteImageInfo[] { }; }
public Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) { var video = (Video)item; // No support for this if (video.VideoType == VideoType.HdDvd || video.IsPlaceHolder) { return Task.FromResult(new DynamicImageResponse { HasImage = false }); } // Can't extract from iso's if we weren't unable to determine iso type if (video.VideoType == VideoType.Iso && !video.IsoType.HasValue) { return Task.FromResult(new DynamicImageResponse { HasImage = false }); } // Can't extract if we didn't find a video stream in the file if (!video.DefaultVideoStreamIndex.HasValue) { _logger.Info("Skipping image extraction due to missing DefaultVideoStreamIndex for {0}.", video.Path ?? string.Empty); return Task.FromResult(new DynamicImageResponse { HasImage = false }); } return GetVideoImage(video, cancellationToken); }
public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService) { var parentPath = Path.GetDirectoryName(item.Path); var parentPathFiles = directoryService.GetFileSystemEntries(parentPath) .ToList(); var nameWithoutExtension = _fileSystem.GetFileNameWithoutExtension(item.Path); var files = GetFilesFromParentFolder(nameWithoutExtension, parentPathFiles); if (files.Count > 0) { return files; } var metadataPath = Path.Combine(parentPath, "metadata"); if (parentPathFiles.Any(i => string.Equals(i.FullName, metadataPath, StringComparison.OrdinalIgnoreCase))) { return GetFilesFromParentFolder(nameWithoutExtension, directoryService.GetFiles(metadataPath)); } return new List<LocalImageInfo>(); }
public bool Supports(IHasImages item) { var channelItem = item as IChannelMediaItem; if (channelItem != null) { if (channelItem.ContentType == ChannelMediaContentType.Movie) { return true; } if (channelItem.ContentType == ChannelMediaContentType.MovieExtra) { if (channelItem.ExtraType == ExtraType.Trailer) { return true; } } } // Supports images for tv movies var tvProgram = item as LiveTvProgram; if (tvProgram != null && tvProgram.IsMovie) { return true; } return item is Movie || item is MusicVideo; }
public Task<IEnumerable<RemoteImageInfo>> GetAllImages(IHasImages item, CancellationToken cancellationToken) { var season = (Season)item; var seriesId = season.Series != null ? season.Series.GetProviderId(MetadataProviders.Tvdb) : null; if (!string.IsNullOrEmpty(seriesId) && season.IndexNumber.HasValue) { // Process images var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, seriesId); var path = Path.Combine(seriesDataPath, "banners.xml"); try { var result = GetImages(path, season.IndexNumber.Value, cancellationToken); return Task.FromResult(result); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } } return Task.FromResult<IEnumerable<RemoteImageInfo>>(new RemoteImageInfo[] { }); }
public async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { var album = (MusicAlbum)item; var list = new List<RemoteImageInfo>(); var artistMusicBrainzId = album.MusicArtist.GetProviderId(MetadataProviders.MusicBrainzArtist); if (!string.IsNullOrEmpty(artistMusicBrainzId)) { await FanartArtistProvider.Current.EnsureArtistXml(artistMusicBrainzId, cancellationToken).ConfigureAwait(false); var artistXmlPath = FanartArtistProvider.GetArtistXmlPath(_config.CommonApplicationPaths, artistMusicBrainzId); var musicBrainzReleaseGroupId = album.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); var musicBrainzId = album.GetProviderId(MetadataProviders.MusicBrainzAlbum); try { AddImages(list, artistXmlPath, musicBrainzId, musicBrainzReleaseGroupId, cancellationToken); } catch (FileNotFoundException) { } catch (DirectoryNotFoundException) { } } var language = item.GetPreferredMetadataLanguage(); var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase); // Sort first by width to prioritize HD versions return list.OrderByDescending(i => i.Width ?? 0) .ThenByDescending(i => { if (string.Equals(language, i.Language, StringComparison.OrdinalIgnoreCase)) { return 3; } if (!isLanguageEn) { if (string.Equals("en", i.Language, StringComparison.OrdinalIgnoreCase)) { return 2; } } if (string.IsNullOrEmpty(i.Language)) { return isLanguageEn ? 3 : 2; } return 0; }) .ThenByDescending(i => i.CommunityRating ?? 0) .ThenByDescending(i => i.VoteCount ?? 0); }
public async Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) { var liveTvItem = (LiveTvProgram)item; var imageResponse = new DynamicImageResponse(); if (!string.IsNullOrEmpty(liveTvItem.ProviderImagePath)) { imageResponse.Path = liveTvItem.ProviderImagePath; imageResponse.HasImage = true; } else if (!string.IsNullOrEmpty(liveTvItem.ProviderImageUrl)) { var options = new HttpRequestOptions { CancellationToken = cancellationToken, Url = liveTvItem.ProviderImageUrl }; var response = await _httpClient.GetResponse(options).ConfigureAwait(false); if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) { imageResponse.HasImage = true; imageResponse.Stream = response.Content; imageResponse.SetFormatFromMimeType(response.ContentType); } else { _logger.Error("Provider did not return an image content type."); } } else if (liveTvItem.HasProviderImage ?? true) { var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, liveTvItem.ServiceName, StringComparison.OrdinalIgnoreCase)); if (service != null) { try { var channel = _liveTvManager.GetInternalChannel(liveTvItem.ChannelId); var response = await service.GetProgramImageAsync(liveTvItem.ExternalId, channel.ExternalId, cancellationToken).ConfigureAwait(false); if (response != null) { imageResponse.HasImage = true; imageResponse.Stream = response.Stream; imageResponse.Format = response.Format; } } catch (NotImplementedException) { } } } return imageResponse; }
public Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { var list = new List<RemoteImageInfo>(); RemoteImageInfo info = null; var musicBrainzId = item is MusicAlbum ? item.GetProviderId(MetadataProviders.MusicBrainzAlbum) : item.GetProviderId(MetadataProviders.MusicBrainzArtist); if (!string.IsNullOrEmpty(musicBrainzId)) { var cachePath = Path.Combine(_config.ApplicationPaths.CachePath, "lastfm", musicBrainzId, "image.txt"); try { var parts = File.ReadAllText(cachePath).Split('|'); info = GetInfo(parts.FirstOrDefault(), parts.LastOrDefault()); } catch (DirectoryNotFoundException) { } catch (FileNotFoundException) { } } if (info == null) { var musicBrainzReleaseGroupId = item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); if (!string.IsNullOrEmpty(musicBrainzReleaseGroupId)) { var cachePath = Path.Combine(_config.ApplicationPaths.CachePath, "lastfm", musicBrainzReleaseGroupId, "image.txt"); try { var parts = File.ReadAllText(cachePath).Split('|'); info = GetInfo(parts.FirstOrDefault(), parts.LastOrDefault()); } catch (DirectoryNotFoundException) { } catch (FileNotFoundException) { } } } if (info != null) { list.Add(info); } // The only info we have is size return Task.FromResult<IEnumerable<RemoteImageInfo>>(list.OrderByDescending(i => i.Width ?? 0)); }
public IEnumerable<ImageType> GetSupportedImages(IHasImages item) { return new List<ImageType> { ImageType.Backdrop, ImageType.Thumb }; }
public Task<IEnumerable<RemoteImageInfo>> GetAllImages(IHasImages item, CancellationToken cancellationToken) { var album = (MusicAlbum)item; var list = new List<RemoteImageInfo>(); var artistMusicBrainzId = album.Parent.GetProviderId(MetadataProviders.Musicbrainz); if (!string.IsNullOrEmpty(artistMusicBrainzId)) { var artistXmlPath = FanArtArtistProvider.GetArtistDataPath(_config.CommonApplicationPaths, artistMusicBrainzId); artistXmlPath = Path.Combine(artistXmlPath, "fanart.xml"); var musicBrainzReleaseGroupId = album.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); var musicBrainzId = album.GetProviderId(MetadataProviders.Musicbrainz); try { AddImages(list, artistXmlPath, musicBrainzId, musicBrainzReleaseGroupId, cancellationToken); } catch (FileNotFoundException) { } } var language = item.GetPreferredMetadataLanguage(); var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase); // Sort first by width to prioritize HD versions list = list.OrderByDescending(i => i.Width ?? 0) .ThenByDescending(i => { if (string.Equals(language, i.Language, StringComparison.OrdinalIgnoreCase)) { return 3; } if (!isLanguageEn) { if (string.Equals("en", i.Language, StringComparison.OrdinalIgnoreCase)) { return 2; } } if (string.IsNullOrEmpty(i.Language)) { return isLanguageEn ? 3 : 2; } return 0; }) .ThenByDescending(i => i.CommunityRating ?? 0) .ThenByDescending(i => i.VoteCount ?? 0) .ToList(); return Task.FromResult<IEnumerable<RemoteImageInfo>>(list); }
public async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { var list = new List<RemoteImageInfo>(); var season = (Season)item; var series = season.Series; if (series != null) { var id = series.GetProviderId(MetadataProviders.Tvdb); if (!string.IsNullOrEmpty(id) && season.IndexNumber.HasValue) { await FanartSeriesProvider.Current.EnsureSeriesXml(id, cancellationToken).ConfigureAwait(false); var xmlPath = FanartSeriesProvider.Current.GetFanartXmlPath(id); try { int seasonNumber = AdjustForSeriesOffset(series, season.IndexNumber.Value); AddImages(list, seasonNumber, xmlPath, cancellationToken); } catch (FileNotFoundException) { // No biggie. Don't blow up } } } var language = item.GetPreferredMetadataLanguage(); var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase); // Sort first by width to prioritize HD versions return list.OrderByDescending(i => i.Width ?? 0) .ThenByDescending(i => { if (string.Equals(language, i.Language, StringComparison.OrdinalIgnoreCase)) { return 3; } if (!isLanguageEn) { if (string.Equals("en", i.Language, StringComparison.OrdinalIgnoreCase)) { return 2; } } if (string.IsNullOrEmpty(i.Language)) { return isLanguageEn ? 3 : 2; } return 0; }) .ThenByDescending(i => i.CommunityRating ?? 0) .ThenByDescending(i => i.VoteCount ?? 0); }
public Task<IEnumerable<RemoteImageInfo>> GetAllImages(IHasImages item, CancellationToken cancellationToken) { var list = new List<RemoteImageInfo>(); var season = (Season)item; var series = season.Series; if (series != null) { var id = series.GetProviderId(MetadataProviders.Tvdb); if (!string.IsNullOrEmpty(id) && season.IndexNumber.HasValue) { var xmlPath = FanArtTvProvider.Current.GetFanartXmlPath(id); try { AddImages(list, season.IndexNumber.Value, xmlPath, cancellationToken); } catch (FileNotFoundException) { // No biggie. Don't blow up } } } var language = _config.Configuration.PreferredMetadataLanguage; var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase); // Sort first by width to prioritize HD versions list = list.OrderByDescending(i => i.Width ?? 0) .ThenByDescending(i => { if (string.Equals(language, i.Language, StringComparison.OrdinalIgnoreCase)) { return 3; } if (!isLanguageEn) { if (string.Equals("en", i.Language, StringComparison.OrdinalIgnoreCase)) { return 2; } } if (string.IsNullOrEmpty(i.Language)) { return isLanguageEn ? 3 : 2; } return 0; }) .ThenByDescending(i => i.CommunityRating ?? 0) .ThenByDescending(i => i.VoteCount ?? 0) .ToList(); return Task.FromResult<IEnumerable<RemoteImageInfo>>(list); }
public IEnumerable<ImageType> GetSupportedImages(IHasImages item) { return new List<ImageType> { ImageType.Primary, ImageType.Logo, ImageType.Banner, ImageType.Backdrop }; }
public List<LocalImageInfo> GetImages(IHasImages item, IDirectoryService directoryService) { var files = GetFiles(item, true, directoryService).ToList(); var list = new List<LocalImageInfo>(); PopulateImages(item, list, files, true, directoryService); return list; }
public bool Supports(IHasImages item) { // Supports images for tv movies var tvProgram = item as LiveTvProgram; if (tvProgram != null && tvProgram.IsMovie) { return true; } return item is Movie || item is MusicVideo || item is Trailer; }
public static string GetImageCacheTag(this IImageProcessor processor, IHasImages item, ImageType imageType, int imageIndex) { var imageInfo = item.GetImageInfo(imageType, imageIndex); if (imageInfo == null) { return null; } return processor.GetImageCacheTag(item, imageInfo); }
public async Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { var season = (Season) item; var series = season.Series; var seriesId = series.ProviderIds.GetOrDefault(ProviderNames.AniDb); if (string.IsNullOrEmpty(seriesId)) return Enumerable.Empty<RemoteImageInfo>(); return await new AniDbSeriesImagesProvider(_httpClient, _appPaths).GetImages(seriesId, cancellationToken); }
public Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, CancellationToken cancellationToken) { var view = item as UserView; if (view != null) { return GetImages(view.ViewType, cancellationToken); } var folder = (ICollectionFolder)item; return GetImages(folder.CollectionType, cancellationToken); }
public bool Supports(IHasImages item) { return(item is Series); }
public bool Supports(IHasImages item) { return(item is Episode && item.SupportsLocalMetadata); }
public bool Supports(IHasImages item) { return(item is Controller.Entities.TV.Episode); }
public IEnumerable <IImageProvider> GetImageProviders(IHasImages item) { return(GetImageProviders(item, GetMetadataOptions(item), false)); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(IHasImages item, CancellationToken cancellationToken) { var list = new List <RemoteImageInfo>(); var results = await FetchImages((BaseItem)item, _jsonSerializer, cancellationToken).ConfigureAwait(false); if (results == null) { return(list); } var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); var tmdbImageUrl = tmdbSettings.images.base_url + "original"; var supportedImages = GetSupportedImages(item).ToList(); if (supportedImages.Contains(ImageType.Primary)) { list.AddRange(GetPosters(results).Select(i => new RemoteImageInfo { Url = tmdbImageUrl + i.file_path, CommunityRating = i.vote_average, VoteCount = i.vote_count, Width = i.width, Height = i.height, Language = i.iso_639_1, ProviderName = Name, Type = ImageType.Primary, RatingType = RatingType.Score })); } if (supportedImages.Contains(ImageType.Backdrop)) { list.AddRange(GetBackdrops(results).Select(i => new RemoteImageInfo { Url = tmdbImageUrl + i.file_path, CommunityRating = i.vote_average, VoteCount = i.vote_count, Width = i.width, Height = i.height, ProviderName = Name, Type = ImageType.Backdrop, RatingType = RatingType.Score })); } var language = item.GetPreferredMetadataLanguage(); var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase); return(list.OrderByDescending(i => { if (string.Equals(language, i.Language, StringComparison.OrdinalIgnoreCase)) { return 3; } if (!isLanguageEn) { if (string.Equals("en", i.Language, StringComparison.OrdinalIgnoreCase)) { return 2; } } if (string.IsNullOrEmpty(i.Language)) { return isLanguageEn ? 3 : 2; } return 0; }) .ThenByDescending(i => i.CommunityRating ?? 0) .ThenByDescending(i => i.VoteCount ?? 0) .ToList()); }
public bool Supports(IHasImages item) { return(item is UserView || item is ICollectionFolder); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(IHasImages item, CancellationToken cancellationToken) { var album = (MusicAlbum)item; var list = new List <RemoteImageInfo>(); var musicArtist = album.MusicArtist; if (musicArtist == null) { return(list); } var artistMusicBrainzId = musicArtist.GetProviderId(MetadataProviders.MusicBrainzArtist); if (!string.IsNullOrEmpty(artistMusicBrainzId)) { await FanartArtistProvider.Current.EnsureArtistJson(artistMusicBrainzId, cancellationToken).ConfigureAwait(false); var artistJsonPath = FanartArtistProvider.GetArtistJsonPath(_config.CommonApplicationPaths, artistMusicBrainzId); var musicBrainzReleaseGroupId = album.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); var musicBrainzId = album.GetProviderId(MetadataProviders.MusicBrainzAlbum); try { AddImages(list, artistJsonPath, musicBrainzId, musicBrainzReleaseGroupId, cancellationToken); } catch (FileNotFoundException) { } catch (DirectoryNotFoundException) { } } var language = item.GetPreferredMetadataLanguage(); var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase); // Sort first by width to prioritize HD versions return(list.OrderByDescending(i => i.Width ?? 0) .ThenByDescending(i => { if (string.Equals(language, i.Language, StringComparison.OrdinalIgnoreCase)) { return 3; } if (!isLanguageEn) { if (string.Equals("en", i.Language, StringComparison.OrdinalIgnoreCase)) { return 2; } } if (string.IsNullOrEmpty(i.Language)) { return isLanguageEn ? 3 : 2; } return 0; }) .ThenByDescending(i => i.CommunityRating ?? 0) .ThenByDescending(i => i.VoteCount ?? 0)); }
public static bool HasImage(this IHasImages item, ImageType imageType) { return(item.HasImage(imageType, 0)); }
/// <summary> /// Gets the image path. /// </summary> /// <param name="item">The item.</param> /// <param name="imageType">Type of the image.</param> /// <returns>System.String.</returns> public static string GetImagePath(this IHasImages item, ImageType imageType) { return(item.GetImagePath(imageType, 0)); }
/// <summary> /// Sets the image path. /// </summary> /// <param name="item">The item.</param> /// <param name="imageType">Type of the image.</param> /// <param name="file">The file.</param> public static void SetImagePath(this IHasImages item, ImageType imageType, string file) { item.SetImagePath(imageType, new FileInfo(file)); }
/// <summary> /// Sets the image path. /// </summary> /// <param name="item">The item.</param> /// <param name="imageType">Type of the image.</param> /// <param name="file">The file.</param> public static void SetImagePath(this IHasImages item, ImageType imageType, FileSystemInfo file) { item.SetImagePath(imageType, 0, file); }
/// <summary> /// Gets the current image path. /// </summary> /// <param name="item">The item.</param> /// <param name="type">The type.</param> /// <param name="imageIndex">Index of the image.</param> /// <returns>System.String.</returns> /// <exception cref="System.ArgumentNullException"> /// imageIndex /// or /// imageIndex /// </exception> private ItemImageInfo GetCurrentImage(IHasImages item, ImageType type, int imageIndex) { return(item.GetImageInfo(type, imageIndex)); }
/// <summary> /// Sets the image path. /// </summary> /// <param name="item">The item.</param> /// <param name="type">The type.</param> /// <param name="imageIndex">Index of the image.</param> /// <param name="path">The path.</param> /// <exception cref="System.ArgumentNullException">imageIndex /// or /// imageIndex</exception> private void SetImagePath(IHasImages item, ImageType type, int?imageIndex, string path) { item.SetImagePath(type, imageIndex ?? 0, _fileSystem.GetFileInfo(path)); }
/// <summary> /// Gets the save path. /// </summary> /// <param name="item">The item.</param> /// <param name="type">The type.</param> /// <param name="imageIndex">Index of the image.</param> /// <param name="mimeType">Type of the MIME.</param> /// <param name="saveLocally">if set to <c>true</c> [save locally].</param> /// <returns>System.String.</returns> /// <exception cref="System.ArgumentNullException"> /// imageIndex /// or /// imageIndex /// </exception> private string GetStandardSavePath(IHasImages item, ImageType type, int?imageIndex, string mimeType, bool saveLocally) { var season = item as Season; var extension = MimeTypes.ToExtension(mimeType); if (string.IsNullOrWhiteSpace(extension)) { throw new ArgumentException(string.Format("Unable to determine image file extension from mime type {0}", mimeType)); } if (type == ImageType.Thumb && saveLocally) { if (season != null && season.IndexNumber.HasValue) { var seriesFolder = season.SeriesPath; var seasonMarker = season.IndexNumber.Value == 0 ? "-specials" : season.IndexNumber.Value.ToString("00", UsCulture); var imageFilename = "season" + seasonMarker + "-landscape" + extension; return(Path.Combine(seriesFolder, imageFilename)); } if (item.DetectIsInMixedFolder()) { return(GetSavePathForItemInMixedFolder(item, type, "landscape", extension)); } return(Path.Combine(item.ContainingFolderPath, "landscape" + extension)); } if (type == ImageType.Banner && saveLocally) { if (season != null && season.IndexNumber.HasValue) { var seriesFolder = season.SeriesPath; var seasonMarker = season.IndexNumber.Value == 0 ? "-specials" : season.IndexNumber.Value.ToString("00", UsCulture); var imageFilename = "season" + seasonMarker + "-banner" + extension; return(Path.Combine(seriesFolder, imageFilename)); } } string filename; var folderName = item is MusicAlbum || item is MusicArtist || item is PhotoAlbum || item is Person || (saveLocally && _config.Configuration.ImageSavingConvention == ImageSavingConvention.Legacy) ? "folder" : "poster"; switch (type) { case ImageType.Art: filename = "clearart"; break; case ImageType.BoxRear: filename = "back"; break; case ImageType.Thumb: filename = "landscape"; break; case ImageType.Disc: filename = item is MusicAlbum ? "cdart" : "disc"; break; case ImageType.Primary: filename = item is Episode?_fileSystem.GetFileNameWithoutExtension(item.Path) : folderName; break; case ImageType.Backdrop: filename = GetBackdropSaveFilename(item.GetImages(type), "backdrop", "backdrop", imageIndex); break; case ImageType.Screenshot: filename = GetBackdropSaveFilename(item.GetImages(type), "screenshot", "screenshot", imageIndex); break; default: filename = type.ToString().ToLower(); break; } if (string.Equals(extension, ".jpeg", StringComparison.OrdinalIgnoreCase)) { extension = ".jpg"; } extension = extension.ToLower(); string path = null; if (saveLocally) { if (type == ImageType.Primary && item is Episode) { path = Path.Combine(_fileSystem.GetDirectoryName(item.Path), "metadata", filename + extension); } else if (item.DetectIsInMixedFolder()) { path = GetSavePathForItemInMixedFolder(item, type, filename, extension); } if (string.IsNullOrEmpty(path)) { path = Path.Combine(item.ContainingFolderPath, filename + extension); } } // None of the save local conditions passed, so store it in our internal folders if (string.IsNullOrEmpty(path)) { if (string.IsNullOrEmpty(filename)) { filename = folderName; } path = Path.Combine(item.GetInternalMetadataPath(), filename + extension); } return(path); }
public bool Supports(IHasImages item) { return(item is Season); }
public bool Supports(IHasImages item) { return(item is MusicAlbum); }
public bool Supports(IHasImages item) { return(item is CollectionFolder); }
public IEnumerable <ImageType> GetSupportedImages(IHasImages item) { return(new List <ImageType> { ImageType.Primary }); }
public static string GetImageCacheTag(this IImageProcessor processor, IHasImages item, ImageType imageType) { return(processor.GetImageCacheTag(item, imageType, 0)); }
public Task <IEnumerable <RemoteImageInfo> > GetImages(IHasImages item, CancellationToken cancellationToken) { return(GetImages(item, true, true, cancellationToken)); }
private IEnumerable <IRemoteImageProvider> GetRemoteImageProviders(IHasImages item, bool includeDisabled) { var options = GetMetadataOptions(item); return(GetImageProviders(item, options, includeDisabled).OfType <IRemoteImageProvider>()); }
public bool Supports(IHasImages item) { return(item is Studio); }
public Task SaveImage(IHasImages item, Stream source, string mimeType, ImageType type, int?imageIndex, CancellationToken cancellationToken) { return(new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger).SaveImage(item, source, mimeType, type, imageIndex, cancellationToken)); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(IHasImages item, CancellationToken cancellationToken) { var episode = (Controller.Entities.TV.Episode)item; var series = episode.Series; var seriesId = series != null?series.GetProviderId(MetadataProviders.Tmdb) : null; var list = new List <RemoteImageInfo>(); if (string.IsNullOrEmpty(seriesId)) { return(list); } var seasonNumber = episode.ParentIndexNumber; var episodeNumber = episode.IndexNumber; if (!seasonNumber.HasValue || !episodeNumber.HasValue) { return(list); } var response = await GetEpisodeInfo(seriesId, seasonNumber.Value, episodeNumber.Value, item.GetPreferredMetadataLanguage(), cancellationToken).ConfigureAwait(false); var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); var tmdbImageUrl = tmdbSettings.images.base_url + "original"; list.AddRange(GetPosters(response.images).Select(i => new RemoteImageInfo { Url = tmdbImageUrl + i.file_path, CommunityRating = i.vote_average, VoteCount = i.vote_count, Width = i.width, Height = i.height, ProviderName = Name, Type = ImageType.Primary, RatingType = RatingType.Score })); var language = item.GetPreferredMetadataLanguage(); var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase); return(list.OrderByDescending(i => { if (string.Equals(language, i.Language, StringComparison.OrdinalIgnoreCase)) { return 3; } if (!isLanguageEn) { if (string.Equals("en", i.Language, StringComparison.OrdinalIgnoreCase)) { return 2; } } if (string.IsNullOrEmpty(i.Language)) { return isLanguageEn ? 3 : 2; } return 0; }) .ThenByDescending(i => i.CommunityRating ?? 0) .ThenByDescending(i => i.VoteCount ?? 0) .ToList()); }
/// <summary> /// Gets the compatible save paths. /// </summary> /// <param name="item">The item.</param> /// <param name="type">The type.</param> /// <param name="imageIndex">Index of the image.</param> /// <param name="mimeType">Type of the MIME.</param> /// <returns>IEnumerable{System.String}.</returns> /// <exception cref="System.ArgumentNullException">imageIndex</exception> private string[] GetCompatibleSavePaths(IHasImages item, ImageType type, int?imageIndex, string mimeType) { var season = item as Season; var extension = MimeTypes.ToExtension(mimeType); // Backdrop paths if (type == ImageType.Backdrop) { if (!imageIndex.HasValue) { throw new ArgumentNullException("imageIndex"); } if (imageIndex.Value == 0) { if (item.DetectIsInMixedFolder()) { return(new[] { GetSavePathForItemInMixedFolder(item, type, "fanart", extension) }); } if (season != null && season.IndexNumber.HasValue) { var seriesFolder = season.SeriesPath; var seasonMarker = season.IndexNumber.Value == 0 ? "-specials" : season.IndexNumber.Value.ToString("00", UsCulture); var imageFilename = "season" + seasonMarker + "-fanart" + extension; return(new[] { Path.Combine(seriesFolder, imageFilename) }); } return(new[] { Path.Combine(item.ContainingFolderPath, "fanart" + extension) }); } var outputIndex = imageIndex.Value; if (item.DetectIsInMixedFolder()) { return(new[] { GetSavePathForItemInMixedFolder(item, type, "fanart" + outputIndex.ToString(UsCulture), extension) }); } var extraFanartFilename = GetBackdropSaveFilename(item.GetImages(ImageType.Backdrop), "fanart", "fanart", outputIndex); var list = new List <string> { Path.Combine(item.ContainingFolderPath, "extrafanart", extraFanartFilename + extension) }; if (EnableExtraThumbsDuplication) { list.Add(Path.Combine(item.ContainingFolderPath, "extrathumbs", "thumb" + outputIndex.ToString(UsCulture) + extension)); } return(list.ToArray()); } if (type == ImageType.Primary) { if (season != null && season.IndexNumber.HasValue) { var seriesFolder = season.SeriesPath; var seasonMarker = season.IndexNumber.Value == 0 ? "-specials" : season.IndexNumber.Value.ToString("00", UsCulture); var imageFilename = "season" + seasonMarker + "-poster" + extension; return(new[] { Path.Combine(seriesFolder, imageFilename) }); } if (item is Episode) { var seasonFolder = _fileSystem.GetDirectoryName(item.Path); var imageFilename = _fileSystem.GetFileNameWithoutExtension(item.Path) + "-thumb" + extension; return(new[] { Path.Combine(seasonFolder, imageFilename) }); } if (item.DetectIsInMixedFolder() || item is MusicVideo) { return(new[] { GetSavePathForItemInMixedFolder(item, type, string.Empty, extension) }); } if (item is MusicAlbum || item is MusicArtist) { return(new[] { Path.Combine(item.ContainingFolderPath, "folder" + extension) }); } return(new[] { Path.Combine(item.ContainingFolderPath, "poster" + extension) }); } // All other paths are the same return(new[] { GetStandardSavePath(item, type, imageIndex, mimeType, true) }); }
public bool Supports(IHasImages item) { return(item is Genre); }
public bool Supports(IHasImages item) { return(item.LocationType == LocationType.FileSystem && item is Audio); }
public async Task SaveImage(IHasImages item, Stream source, string mimeType, ImageType type, int?imageIndex, bool?saveLocallyWithMedia, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(mimeType)) { throw new ArgumentNullException("mimeType"); } var saveLocally = item.SupportsLocalMetadata && item.IsSaveLocalMetadataEnabled() && !item.IsOwnedItem && !(item is Audio); if (item is User) { saveLocally = true; } if (type != ImageType.Primary && item is Episode) { saveLocally = false; } var locationType = item.LocationType; if (locationType == LocationType.Remote || locationType == LocationType.Virtual) { saveLocally = false; var season = item as Season; // If season is virtual under a physical series, save locally if using compatible convention if (season != null && _config.Configuration.ImageSavingConvention == ImageSavingConvention.Compatible) { var series = season.Series; if (series != null && series.SupportsLocalMetadata && series.IsSaveLocalMetadataEnabled()) { saveLocally = true; } } } if (saveLocallyWithMedia.HasValue && !saveLocallyWithMedia.Value) { saveLocally = saveLocallyWithMedia.Value; } if (!imageIndex.HasValue && item.AllowsMultipleImages(type)) { imageIndex = item.GetImages(type).Count(); } var index = imageIndex ?? 0; var paths = GetSavePaths(item, type, imageIndex, mimeType, saveLocally); var retryPaths = GetSavePaths(item, type, imageIndex, mimeType, false); // If there are more than one output paths, the stream will need to be seekable var memoryStream = _memoryStreamProvider.CreateNew(); using (source) { await source.CopyToAsync(memoryStream).ConfigureAwait(false); } source = memoryStream; var currentImage = GetCurrentImage(item, type, index); var currentImageIsLocalFile = currentImage != null && currentImage.IsLocalFile; var currentImagePath = currentImage == null ? null : currentImage.Path; var savedPaths = new List <string>(); using (source) { var currentPathIndex = 0; foreach (var path in paths) { source.Position = 0; string retryPath = null; if (paths.Length == retryPaths.Length) { retryPath = retryPaths[currentPathIndex]; } var savedPath = await SaveImageToLocation(source, path, retryPath, cancellationToken).ConfigureAwait(false); savedPaths.Add(savedPath); currentPathIndex++; } } // Set the path into the item SetImagePath(item, type, imageIndex, savedPaths[0]); // Delete the current path if (currentImageIsLocalFile && !savedPaths.Contains(currentImagePath, StringComparer.OrdinalIgnoreCase)) { var currentPath = currentImagePath; _logger.Info("Deleting previous image {0}", currentPath); _libraryMonitor.ReportFileSystemChangeBeginning(currentPath); try { _fileSystem.DeleteFile(currentPath); } catch (FileNotFoundException) { } finally { _libraryMonitor.ReportFileSystemChangeComplete(currentPath, false); } } }
/// <summary> /// Saves the image. /// </summary> /// <param name="item">The item.</param> /// <param name="source">The source.</param> /// <param name="mimeType">Type of the MIME.</param> /// <param name="type">The type.</param> /// <param name="imageIndex">Index of the image.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> /// <exception cref="System.ArgumentNullException">mimeType</exception> public Task SaveImage(IHasImages item, Stream source, string mimeType, ImageType type, int?imageIndex, CancellationToken cancellationToken) { return(SaveImage(item, source, mimeType, type, imageIndex, null, cancellationToken)); }
public bool Supports(IHasImages item) { var audio = item as Audio; return(item.LocationType == LocationType.FileSystem && audio != null); }