public async Task ParseHtml()
        {
            var logger = new Mock<ILogger>();

            var downloader = new Mock<IAniDbTitleDownloader>();
            downloader.Setup(d => d.Load(It.IsAny<CancellationToken>())).Returns(Task.FromResult(0));
            downloader.Setup(d => d.TitlesFilePath).Returns("TestData/anidb/titles.xml");

            var matcher = new AniDbTitleMatcher(logger.Object, downloader.Object);

            Assert.That(matcher.IsLoaded, Is.False);

            Assert.That(await matcher.FindSeries("CotS"), Is.EqualTo("1"));
            Assert.That(await matcher.FindSeries("Crest of the Stars"), Is.EqualTo("1"));
            Assert.That(await matcher.FindSeries("星界の紋章"), Is.EqualTo("1"));
            Assert.That(await matcher.FindSeries("サザンアイズ"), Is.EqualTo("2"));
            Assert.That(await matcher.FindSeries("3x3 Eyes"), Is.EqualTo("2"));
            Assert.That(await matcher.FindSeries("Sazan Eyes"), Is.EqualTo("2"));

            Assert.That(await matcher.FindSeries("Black Rock Shooter"), Is.EqualTo("6820"));
            Assert.That(await matcher.FindSeries("ブラック★ロックシューター"), Is.EqualTo("6820"));
            Assert.That(await matcher.FindSeries("brs"), Is.EqualTo("6820"));
            Assert.That(await matcher.FindSeries("BLACK★ROCK SHOOTER"), Is.EqualTo("6820"));
            Assert.That(await matcher.FindSeries("Black Rock Shooter (2012)"), Is.EqualTo("8584"));
            Assert.That(await matcher.FindSeries("ブラック★ロックシューター (2012)"), Is.EqualTo("8584"));
        }
示例#2
0
        public async Task ParseHtml()
        {
            var logger = new Mock <ILogger>();

            var downloader = new Mock <IAniDbTitleDownloader>();

            downloader.Setup(d => d.Load(It.IsAny <CancellationToken>())).Returns(Task.FromResult(0));
            downloader.Setup(d => d.TitlesFilePath).Returns("TestData/anidb/titles.xml");

            var matcher = new AniDbTitleMatcher(logger.Object, downloader.Object);

            Assert.That(matcher.IsLoaded, Is.False);

            Assert.That(await matcher.FindSeries("CotS"), Is.EqualTo("1"));
            Assert.That(await matcher.FindSeries("Crest of the Stars"), Is.EqualTo("1"));
            Assert.That(await matcher.FindSeries("星界の紋章"), Is.EqualTo("1"));
            Assert.That(await matcher.FindSeries("サザンアイズ"), Is.EqualTo("2"));
            Assert.That(await matcher.FindSeries("3x3 Eyes"), Is.EqualTo("2"));
            Assert.That(await matcher.FindSeries("Sazan Eyes"), Is.EqualTo("2"));

            Assert.That(await matcher.FindSeries("Black Rock Shooter"), Is.EqualTo("6820"));
            Assert.That(await matcher.FindSeries("ブラック★ロックシューター"), Is.EqualTo("6820"));
            Assert.That(await matcher.FindSeries("brs"), Is.EqualTo("6820"));
            Assert.That(await matcher.FindSeries("BLACK★ROCK SHOOTER"), Is.EqualTo("6820"));
            Assert.That(await matcher.FindSeries("Black Rock Shooter (2012)"), Is.EqualTo("8584"));
            Assert.That(await matcher.FindSeries("ブラック★ロックシューター (2012)"), Is.EqualTo("8584"));
        }
        public async Task ErrorLoggedIfTitlesFileMissing()
        {
            var downloader = new Mock<IAniDbTitleDownloader>();
            downloader.Setup(d => d.Load(It.IsAny<CancellationToken>())).Returns(Task.FromResult(0));
            downloader.Setup(d => d.TitlesFilePath).Returns("InvalidPath");

            var logger = new Mock<ILogger>();
            logger.Setup(l => l.ErrorException("Failed to load AniDB titles", It.IsAny<Exception>())).Verifiable();

            var matcher = new AniDbTitleMatcher(logger.Object, downloader.Object);

            await matcher.FindSeries("CotS");

            logger.Verify();
        }
示例#4
0
        public async Task ErrorLoggedIfTitlesFileMissing()
        {
            var downloader = new Mock <IAniDbTitleDownloader>();

            downloader.Setup(d => d.Load(It.IsAny <CancellationToken>())).Returns(Task.FromResult(0));
            downloader.Setup(d => d.TitlesFilePath).Returns("InvalidPath");

            var logger = new Mock <ILogger>();

            logger.Setup(l => l.ErrorException("Failed to load AniDB titles", It.IsAny <Exception>())).Verifiable();

            var matcher = new AniDbTitleMatcher(logger.Object, downloader.Object);

            await matcher.FindSeries("CotS");

            logger.Verify();
        }
示例#5
0
        public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken)
        {
            var results = new Dictionary <string, RemoteSearchResult>();

            var aid = searchInfo.ProviderIds.GetOrDefault(ProviderNames.AniList);

            if (!string.IsNullOrEmpty(aid))
            {
                var anime = await _api.GetAnime(aid);

                if (anime != null && !results.ContainsKey(aid))
                {
                    results.Add(aid, ToSearchResult(anime));
                }
            }

            if (!string.IsNullOrEmpty(searchInfo.Name))
            {
                var search = await _api.Search(searchInfo.Name);

                foreach (var a in search)
                {
                    if (!results.ContainsKey(a.id.ToString()))
                    {
                        results.Add(a.id.ToString(), ToSearchResult(a));
                    }
                }

                var cleaned = AniDbTitleMatcher.GetComparableName(searchInfo.Name);
                if (String.Compare(cleaned, searchInfo.Name, StringComparison.OrdinalIgnoreCase) != 0)
                {
                    search = await _api.Search(cleaned);

                    foreach (var a in search)
                    {
                        if (!results.ContainsKey(a.id.ToString()))
                        {
                            results.Add(a.id.ToString(), ToSearchResult(a));
                        }
                    }
                }
            }

            return(results.Values);
        }
示例#6
0
        public async Task Identify(SeriesInfo info)
        {
            if (!string.IsNullOrEmpty(info.ProviderIds.GetOrDefault(ProviderNames.AniList)) && !Plugin.Instance.CheckForceRefreshFlag())
            {
                return;
            }

            if (string.IsNullOrEmpty(info.Name))
            {
                return;
            }

            try
            {
                var search = await _api.Search(info.Name);

                var cleaned = AniDbTitleMatcher.GetComparableName(info.Name);
                if (!search.Any() && String.Compare(info.Name, cleaned, StringComparison.OrdinalIgnoreCase) != 0)
                {
                    search = await _api.Search(cleaned);
                }

                var first = search.FirstOrDefault();

                if (first == null)
                {
                    return;
                }

                info.ProviderIds.Remove(ProviderNames.AniList);
                info.ProviderIds.Add(ProviderNames.AniList, first.id.ToString());
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e);
                // ignore
            }
        }
示例#7
0
        public async Task <MetadataResult <Series> > GetMetadata(SeriesInfo info, CancellationToken cancellationToken)
        {
            var result = new MetadataResult <Series>();

            var aid = info.ProviderIds.GetOrDefault(ProviderNames.AniList);

            if (string.IsNullOrEmpty(aid) && !string.IsNullOrEmpty(info.Name))
            {
                var search = await _api.Search(info.Name);

                foreach (var a in search)
                {
                    if (string.IsNullOrEmpty(aid))
                    {
                        if (Equals_check.Compare_strings(a.title_english, info.Name))
                        {
                            aid = a.id.ToString();
                        }

                        if (Equals_check.Compare_strings(a.title_japanese, info.Name))
                        {
                            aid = a.id.ToString();
                        }

                        if (Equals_check.Compare_strings(a.title_romaji, info.Name))
                        {
                            aid = a.id.ToString();
                        }
                        _log.Log(LogSeverity.Info, a.title_romaji + "vs" + info.Name);
                    }
                }
                if (string.IsNullOrEmpty(aid))
                {
                    var cleaned = AniDbTitleMatcher.GetComparableName(Equals_check.clear_name(info.Name));
                    if (String.Compare(cleaned, info.Name, StringComparison.OrdinalIgnoreCase) != 0)
                    {
                        search = await _api.Search(cleaned);

                        foreach (var b in search)
                        {
                            if (Equals_check.Compare_strings(b.title_english, info.Name))
                            {
                                aid = b.id.ToString();
                            }

                            if (Equals_check.Compare_strings(b.title_japanese, info.Name))
                            {
                                aid = b.id.ToString();
                            }

                            if (Equals_check.Compare_strings(b.title_romaji, info.Name))
                            {
                                aid = b.id.ToString();
                            }
                        }
                    }
                }
                if (string.IsNullOrEmpty(aid))
                {
                    search = await _api.Search(Equals_check.clear_name(info.Name));

                    foreach (var b in search)
                    {
                        if (Equals_check.Compare_strings(b.title_english, info.Name))
                        {
                            aid = b.id.ToString();
                        }

                        if (Equals_check.Compare_strings(b.title_japanese, info.Name))
                        {
                            aid = b.id.ToString();
                        }

                        if (Equals_check.Compare_strings(b.title_romaji, info.Name))
                        {
                            aid = b.id.ToString();
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(aid))
            {
                result.Item        = new Series();
                result.HasMetadata = true;

                result.Item.ProviderIds.Add(ProviderNames.AniList, aid);

                var anime = await _api.GetAnime(aid);

                result.Item.Name     = SelectName(anime, Plugin.Instance.Configuration.TitlePreference, info.MetadataLanguage ?? "en");
                result.Item.Overview = anime.description;

                DateTime start;
                if (DateTime.TryParse(anime.start_date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out start))
                {
                    result.Item.PremiereDate = start;
                }

                DateTime end;
                if (DateTime.TryParse(anime.end_date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out end))
                {
                    result.Item.EndDate = end;
                }

                if (anime.genres != null)
                {
                    foreach (var genre in anime.genres)
                    {
                        if (!string.IsNullOrEmpty(genre))
                        {
                            result.Item.AddGenre(genre);
                        }
                    }

                    GenreHelper.CleanupGenres(result.Item);
                }

                if (!string.IsNullOrEmpty(anime.image_url_lge))
                {
                    StoreImageUrl(aid, anime.image_url_lge, "image");
                }

                if (!string.IsNullOrEmpty(anime.image_url_banner))
                {
                    StoreImageUrl(aid, anime.image_url_banner, "banner");
                }

                if (string.IsNullOrEmpty(result.Item.Name))
                {
                    if (!string.IsNullOrEmpty(anime.title_romaji))
                    {
                        result.Item.Name = anime.title_romaji;
                    }
                }
            }

            return(result);
        }