public async Task ExceptionThrown_LogsException()
            {
                var exception = new Exception("Failed");

                _mediaItemProcessor.GetResultAsync(_episodeInfo, MediaItemTypes.Episode, Arg.Any <IEnumerable <EmbyItemId> >())
                .Throws(exception);

                await _episodeProvider.GetMetadata(_episodeInfo, CancellationToken.None);

                _logger.Received(1).ErrorException("Failed to get data for episode 'EpisodeName'", exception);
            }
            public async Task ExceptionThrown_LogsException()
            {
                var exception = new Exception("Failed");

                _mediaItemProcessor.GetResultAsync(_seriesInfo, MediaItemTypes.Series, Enumerable.Empty <EmbyItemId>())
                .Throws(exception);

                await _seriesProvider.GetMetadata(_seriesInfo, CancellationToken.None);

                _logger.Received(1).ErrorException("Failed to get data for series 'SeriesName'", exception);
            }
示例#3
0
        public Task <MetadataResult <Episode> > GetMetadata(EpisodeInfo info, CancellationToken cancellationToken)
        {
            var metadataResult = Try(() =>
            {
                var result = _mediaItemProcessor.GetResultAsync(info, MediaItemTypes.Episode, GetParentIds(info));

                return(result.Map(either =>
                                  either.Match(r =>
                {
                    _log.Info($"Found data for episode '{info.Name}': '{r.EmbyMetadataResult.Item.Name}'");

                    info.IndexNumber = null;
                    info.ParentIndexNumber = null;
                    info.Name = "";
                    info.ProviderIds = new Dictionary <string, string>();

                    return r.EmbyMetadataResult;
                },
                                               failure =>
                {
                    _log.Error($"Failed to get data for episode '{info.Name}': {failure.Reason}");

                    return EmptyMetadataResult;
                })
                                  ));
            })
                                 .IfFail(e =>
            {
                _log.ErrorException($"Failed to get data for episode '{info.Name}'", e);

                return(EmptyMetadataResult.AsTask());
            });

            return(metadataResult);
        }
示例#4
0
        public Task <MetadataResult <Series> > GetMetadata(SeriesInfo info, CancellationToken cancellationToken)
        {
            var metadataResult = Try(() =>
            {
                if (_pluginConfiguration.ExcludedSeriesNames.Contains(info.Name,
                                                                      StringComparer.InvariantCultureIgnoreCase))
                {
                    _log.Info($"Skipping series '{info.Name}' as it is excluded");

                    return(EmptyMetadataResult.AsTask());
                }

                var result =
                    _mediaItemProcessor.GetResultAsync(info, MediaItemTypes.Series, Enumerable.Empty <EmbyItemId>());

                return(result.Map(either =>
                                  either.Match(r =>
                {
                    _log.Info($"Found data for series '{info.Name}': '{r.EmbyMetadataResult.Item.Name}'");

                    info.IndexNumber = null;
                    info.ParentIndexNumber = null;
                    info.Name = "";
                    info.ProviderIds = new Dictionary <string, string>();

                    return r.EmbyMetadataResult;
                },
                                               failure =>
                {
                    _log.Error($"Failed to get data for series '{info.Name}': {failure.Reason}");

                    return EmptyMetadataResult;
                })
                                  ));
            })
                                 .IfFail(e =>
            {
                _log.ErrorException($"Failed to get data for series '{info.Name}'", e);

                return(EmptyMetadataResult.AsTask());
            });

            return(metadataResult);
        }