private Task <Either <ProcessFailedResult, AniDbEpisodeData> > MapEpisodeDataAsync(int aniDbSeriesId, TvDbSeriesData tvDbSeriesData, TvDbEpisodeData tvDbEpisodeData, ProcessResultContext resultContext) { var seriesMapping = _mappingList.GetSeriesMappingsFromTvDb(tvDbSeriesData.Id, resultContext) .BindAsync(sm => sm.Where(m => m.Ids.AniDbSeriesId == aniDbSeriesId) .Match( () => resultContext.Failed( $"No series mapping between TvDb series Id '{tvDbSeriesData.Id}' and AniDb series id '{aniDbSeriesId}'"), Prelude.Right <ProcessFailedResult, ISeriesMapping>, (head, tail) => resultContext.Failed( $"Multiple series mappings found between TvDb series Id '{tvDbSeriesData.Id}' and AniDb series Id '{aniDbSeriesId}'"))); return(seriesMapping.BindAsync(sm => { var episodeGroupMapping = sm.GetEpisodeGroupMapping(tvDbEpisodeData.AiredEpisodeNumber, tvDbEpisodeData.AiredSeason); var aniDbEpisodeData = _episodeMapper.MapTvDbEpisodeAsync(tvDbEpisodeData.AiredEpisodeNumber, sm, episodeGroupMapping); return aniDbEpisodeData.ToEither(resultContext.Failed( $"Failed to find a corresponding AniDb episode in AniDb series id '{aniDbSeriesId}'")); })); }
private AniDbEpisodeData SetUpEpisodeMapping(int tvDbEpisodeIndex, int aniDbEpisodeIndex, ISeriesMapping seriesMapping, string title) { var aniDbEpisodeData = new AniDbEpisodeData { RawEpisodeNumber = new EpisodeNumberData { RawNumber = aniDbEpisodeIndex.ToString(), RawType = 1 }, Titles = new [] { new EpisodeTitleData { Title = title } } }; _sources.AniDb.SelectTitle(aniDbEpisodeData.Titles, "en", Arg.Any <ProcessResultContext>()) .Returns(title); _episodeMapper.MapTvDbEpisodeAsync(tvDbEpisodeIndex, seriesMapping, Option <EpisodeGroupMapping> .None) .Returns(aniDbEpisodeData); return(aniDbEpisodeData); }