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 bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) { var episode = (Episode)item; if (!episode.IsVirtualUnaired) { // For non-unaired items, only enable if configured if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) { return(false); } } if (!item.HasImage(ImageType.Primary)) { var series = episode.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { // Process images var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, series.ProviderIds); var files = TvdbEpisodeProvider.Current.GetEpisodeXmlFiles(episode.ParentIndexNumber, episode.IndexNumber, episode.IndexNumberEnd, seriesDataPath); return(files.Any(i => _fileSystem.GetLastWriteTimeUtc(i) > date)); } } return(false); }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) { // For non-unaired items, only enable if configured if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) { return(false); } if (!item.HasImage(ImageType.Primary)) { var episode = (Episode)item; var series = episode.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { // Process images var seriesXmlPath = TvdbSeriesProvider.Current.GetSeriesXmlPath(series.ProviderIds, series.GetPreferredMetadataLanguage()); return(_fileSystem.GetLastWriteTimeUtc(seriesXmlPath) > item.DateLastRefreshed); } } 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.Name, series.ProductionYear, series.GetPreferredMetadataLanguage(), cancellationToken).ConfigureAwait(false); if (!string.IsNullOrWhiteSpace(seriesDataPath)) { var path = Path.Combine(seriesDataPath, "banners.xml"); try { return(GetImages(path, item.GetPreferredMetadataLanguage(), seasonNumber, _xmlSettings, _fileSystem, cancellationToken)); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } catch (IOException) { // No tvdb data yet. Don't blow up } } } return(new RemoteImageInfo[] { }); }
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, item.Name, item.ProductionYear, language, cancellationToken).ConfigureAwait(false); var path = Path.Combine(seriesDataPath, "banners.xml"); try { return(GetImages(path, language, cancellationToken)); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } catch (IOException) { // No tvdb data yet. Don't blow up } } return(new RemoteImageInfo[] { }); }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) { if (item.LocationType != LocationType.Virtual) { // For non-virtual items, only enable if configured if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) { return(false); } } var season = (Season)item; var series = season.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { // Process images var imagesXmlPath = Path.Combine(TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, series.ProviderIds), "banners.xml"); var fileInfo = _fileSystem.GetFileInfo(imagesXmlPath); return(fileInfo.Exists && _fileSystem.GetLastWriteTimeUtc(fileInfo) > date); } return(false); }
public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var seriesProviderIds = searchInfo.SeriesProviderIds; var list = new List <RemoteSearchResult>(); var identity = Identity.ParseIdentity(searchInfo.GetProviderId(FullIdKey)); if (identity == null) { await Identify(searchInfo).ConfigureAwait(false); identity = Identity.ParseIdentity(searchInfo.GetProviderId(FullIdKey)); } if (identity != null) { seriesProviderIds = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); seriesProviderIds[MetadataProviders.Tvdb.ToString()] = identity.Value.SeriesId; } if (TvdbSeriesProvider.IsValidSeries(seriesProviderIds)) { var seriesDataPath = await TvdbSeriesProvider.Current.EnsureSeriesInfo(seriesProviderIds, searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false); try { var metadataResult = FetchEpisodeData(searchInfo, identity, seriesDataPath, searchInfo.SeriesProviderIds, cancellationToken); if (metadataResult.HasMetadata) { var item = metadataResult.Item; list.Add(new RemoteSearchResult { IndexNumber = item.IndexNumber, Name = item.Name, ParentIndexNumber = item.ParentIndexNumber, PremiereDate = item.PremiereDate, ProductionYear = item.ProductionYear, ProviderIds = item.ProviderIds, SearchProviderName = Name, IndexNumberEnd = item.IndexNumberEnd }); } } catch (FileNotFoundException) { // Don't fail the provider because this will just keep on going and going. } catch (DirectoryNotFoundException) { // Don't fail the provider because this will just keep on going and going. } } return(list); }
public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var list = new List <RemoteSearchResult>(); // The search query must either provide an episode number or date if (!searchInfo.IndexNumber.HasValue && !searchInfo.PremiereDate.HasValue) { return(list); } if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds)) { var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, searchInfo.SeriesProviderIds); var searchNumbers = new EpisodeNumbers(); if (searchInfo.IndexNumber.HasValue) { searchNumbers.EpisodeNumber = searchInfo.IndexNumber.Value; } searchNumbers.SeasonNumber = searchInfo.ParentIndexNumber; searchNumbers.EpisodeNumberEnd = searchInfo.IndexNumberEnd ?? searchNumbers.EpisodeNumber; try { var metadataResult = FetchEpisodeData(searchInfo, searchNumbers, seriesDataPath, cancellationToken); if (metadataResult.HasMetadata) { var item = metadataResult.Item; list.Add(new RemoteSearchResult { IndexNumber = item.IndexNumber, Name = item.Name, ParentIndexNumber = item.ParentIndexNumber, PremiereDate = item.PremiereDate, ProductionYear = item.ProductionYear, ProviderIds = item.ProviderIds, SearchProviderName = Name, IndexNumberEnd = item.IndexNumberEnd }); } } catch (FileNotFoundException) { // Don't fail the provider because this will just keep on going and going. } catch (DirectoryNotFoundException) { // Don't fail the provider because this will just keep on going and going. } } return(list); }
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 identity = TvdbSeasonIdentityProvider.ParseIdentity(season.GetProviderId(TvdbSeasonIdentityProvider.FullIdKey)); if (identity == null) { identity = new TvdbSeasonIdentity(series.GetProviderId(MetadataProviders.Tvdb), seasonNumber); } if (identity != null) { var id = identity.Value; seasonNumber = AdjustForSeriesOffset(series, id.Index); seriesProviderIds = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); seriesProviderIds[MetadataProviders.Tvdb.ToString()] = id.SeriesId; } 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 async Task <MetadataResult <Episode> > GetMetadata(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var result = new MetadataResult <Episode>(); result.QueriedById = true; if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) && (searchInfo.IndexNumber.HasValue || searchInfo.PremiereDate.HasValue)) { var seriesDataPath = await TvdbSeriesProvider.Current.EnsureSeriesInfo(searchInfo.SeriesProviderIds, null, null, searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false); if (string.IsNullOrEmpty(seriesDataPath)) { return(result); } var searchNumbers = new EpisodeNumbers(); if (searchInfo.IndexNumber.HasValue) { searchNumbers.EpisodeNumber = searchInfo.IndexNumber.Value; } searchNumbers.SeasonNumber = searchInfo.ParentIndexNumber; searchNumbers.EpisodeNumberEnd = searchInfo.IndexNumberEnd ?? searchNumbers.EpisodeNumber; try { result = FetchEpisodeData(searchInfo, searchNumbers, seriesDataPath, cancellationToken); } catch (FileNotFoundException) { // Don't fail the provider because this will just keep on going and going. } catch (IOException) { // Don't fail the provider because this will just keep on going and going. } } else { _logger.Debug("No series identity found for {0}", searchInfo.Name); } return(result); }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService) { if (!TvdbSeriesProvider.Current.GetTvDbOptions().EnableAutomaticUpdates) { return(false); } if (TvdbSeriesProvider.IsValidSeries(item.ProviderIds)) { // Process images var imagesXmlPath = Path.Combine(TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, item.ProviderIds), "banners.xml"); var fileInfo = _fileSystem.GetFileInfo(imagesXmlPath); return(fileInfo.Exists && _fileSystem.GetLastWriteTimeUtc(fileInfo) > item.DateLastRefreshed); } return(false); }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) { // Only enable for virtual items if (item.LocationType != LocationType.Virtual) { return(false); } var episode = (Episode)item; var series = episode.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { // Process images var seriesXmlPath = TvdbSeriesProvider.Current.GetSeriesXmlPath(series.ProviderIds, series.GetPreferredMetadataLanguage()); return(_fileSystem.GetLastWriteTimeUtc(seriesXmlPath) > date); } return(false); }
public Task <IEnumerable <RemoteImageInfo> > GetImages(IHasImages item, CancellationToken cancellationToken) { var episode = (Episode)item; var series = episode.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { // Process images var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, series.ProviderIds); var indexOffset = TvdbSeriesProvider.GetSeriesOffset(series.ProviderIds) ?? 0; var files = TvdbEpisodeProvider.Current.GetEpisodeXmlFiles(episode.ParentIndexNumber + indexOffset, episode.IndexNumber, episode.IndexNumberEnd, seriesDataPath); var result = files.Select(i => GetImageInfo(i, cancellationToken)) .Where(i => i != null); return(Task.FromResult(result)); } return(Task.FromResult <IEnumerable <RemoteImageInfo> >(new RemoteImageInfo[] { })); }
public Task <IEnumerable <RemoteImageInfo> > GetImages(IHasMetadata item, CancellationToken cancellationToken) { var episode = (Episode)item; var series = episode.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { // Process images var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, series.ProviderIds); var nodes = TvdbEpisodeProvider.Current.GetEpisodeXmlNodes(seriesDataPath, episode.GetLookupInfo()); var result = nodes.Select(i => GetImageInfo(i, cancellationToken)) .Where(i => i != null) .ToList(); return(Task.FromResult <IEnumerable <RemoteImageInfo> >(result)); } return(Task.FromResult <IEnumerable <RemoteImageInfo> >(new RemoteImageInfo[] { })); }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) { // Only enable for virtual items if (item.LocationType != LocationType.Virtual) { return(false); } var episode = (Episode)item; var series = episode.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { // Process images var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, series.ProviderIds); var files = GetEpisodeXmlFiles(episode.ParentIndexNumber, episode.IndexNumber, episode.IndexNumberEnd, seriesDataPath); return(files.Any(i => _fileSystem.GetLastWriteTimeUtc(i) > date)); } return(false); }
public async Task <MetadataResult <Episode> > GetMetadata(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var result = new MetadataResult <Episode>(); if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) && (searchInfo.IndexNumber.HasValue || searchInfo.PremiereDate.HasValue)) { var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, searchInfo.SeriesProviderIds); var searchNumbers = new EpisodeNumbers(); if (searchInfo.IndexNumber.HasValue) { searchNumbers.EpisodeNumber = searchInfo.IndexNumber.Value; } searchNumbers.SeasonNumber = searchInfo.ParentIndexNumber; searchNumbers.EpisodeNumberEnd = searchInfo.IndexNumberEnd ?? searchNumbers.EpisodeNumber; try { result = FetchEpisodeData(searchInfo, searchNumbers, seriesDataPath, cancellationToken); } catch (FileNotFoundException) { // Don't fail the provider because this will just keep on going and going. } catch (DirectoryNotFoundException) { // Don't fail the provider because this will just keep on going and going. } } else { _logger.Debug("No series identity found for {0}", searchInfo.Name); } return(result); }
public async Task <MetadataResult <Episode> > GetMetadata(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var identity = Identity.ParseIdentity(searchInfo.GetProviderId(FullIdKey)); if (identity == null) { await Identify(searchInfo).ConfigureAwait(false); identity = Identity.ParseIdentity(searchInfo.GetProviderId(FullIdKey)); } var result = new MetadataResult <Episode>(); if (identity != null) { var seriesProviderIds = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); seriesProviderIds[MetadataProviders.Tvdb.ToString()] = identity.Value.SeriesId; var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, seriesProviderIds); var searchNumbers = new EpisodeNumbers(); searchNumbers.EpisodeNumber = identity.Value.EpisodeNumber; var seasonOffset = TvdbSeriesProvider.GetSeriesOffset(searchInfo.SeriesProviderIds) ?? 0; searchNumbers.SeasonNumber = identity.Value.SeasonIndex + seasonOffset; searchNumbers.EpisodeNumberEnd = identity.Value.EpisodeNumberEnd ?? searchNumbers.EpisodeNumber; try { result = FetchEpisodeData(searchInfo, searchNumbers, seriesDataPath, cancellationToken); } catch (FileNotFoundException) { // Don't fail the provider because this will just keep on going and going. } catch (DirectoryNotFoundException) { // Don't fail the provider because this will just keep on going and going. } } else if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) && searchInfo.IndexNumber.HasValue) { var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, searchInfo.SeriesProviderIds); var searchNumbers = new EpisodeNumbers(); searchNumbers.EpisodeNumber = searchInfo.IndexNumber.Value; searchNumbers.SeasonNumber = searchInfo.ParentIndexNumber; searchNumbers.EpisodeNumberEnd = searchInfo.IndexNumberEnd ?? searchNumbers.EpisodeNumber; try { result = FetchEpisodeData(searchInfo, searchNumbers, seriesDataPath, cancellationToken); } catch (FileNotFoundException) { // Don't fail the provider because this will just keep on going and going. } catch (DirectoryNotFoundException) { // Don't fail the provider because this will just keep on going and going. } } else { _logger.Debug("No series identity found for {0}", searchInfo.Name); } return(result); }