From c5fa522be52b007c8b88c6bb1578888212eef072 Mon Sep 17 00:00:00 2001 From: cxfksword <718792+cxfksword@users.noreply.github.com> Date: Sun, 19 Mar 2023 00:19:02 +0800 Subject: [PATCH] Fix search only return one result --- Jellyfin.Plugin.MetaShark.Test/MovieProviderTest.cs | 4 ++-- Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs | 10 ++++++++-- Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs | 9 +++++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Jellyfin.Plugin.MetaShark.Test/MovieProviderTest.cs b/Jellyfin.Plugin.MetaShark.Test/MovieProviderTest.cs index 2c8095d..80b1bf5 100644 --- a/Jellyfin.Plugin.MetaShark.Test/MovieProviderTest.cs +++ b/Jellyfin.Plugin.MetaShark.Test/MovieProviderTest.cs @@ -42,9 +42,9 @@ namespace Jellyfin.Plugin.MetaShark.Test Task.Run(async () => { - var info = new MovieInfo() { Name = "南极料理人", MetadataLanguage = "zh" }; + var info = new MovieInfo() { Name = "我", MetadataLanguage = "zh" }; var provider = new MovieProvider(httpClientFactory, loggerFactory, libraryManagerStub.Object, httpContextAccessorStub.Object, doubanApi, tmdbApi, omdbApi); - var result = await provider.GetMetadata(info, CancellationToken.None); + var result = await provider.GetSearchResults(info, CancellationToken.None); Assert.IsNotNull(result); var str = result.ToJson(); diff --git a/Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs b/Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs index d164c85..3cddd0d 100644 --- a/Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs +++ b/Jellyfin.Plugin.MetaShark/Providers/MovieProvider.cs @@ -52,13 +52,14 @@ namespace Jellyfin.Plugin.MetaShark.Providers } // 从douban搜索 + // BUG注意:ProviderIds传多个meta值,会导致识别搜索时只返回一个结果 var res = await this._doubanApi.SearchAsync(info.Name, cancellationToken).ConfigureAwait(false); result.AddRange(res.Take(Configuration.PluginConfiguration.MAX_SEARCH_RESULT).Select(x => { return new RemoteSearchResult { SearchProviderName = DoubanProviderName, - ProviderIds = new Dictionary { { DoubanProviderId, x.Sid }, { Plugin.ProviderId, MetaSource.Douban } }, + ProviderIds = new Dictionary { { DoubanProviderId, x.Sid } }, ImageUrl = this.GetProxyImageUrl(x.Img), ProductionYear = x.Year, Name = x.Name, @@ -75,7 +76,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers return new RemoteSearchResult { SearchProviderName = TmdbProviderName, - ProviderIds = new Dictionary { { MetadataProvider.Tmdb.ToString(), x.Id.ToString(CultureInfo.InvariantCulture) }, { Plugin.ProviderId, MetaSource.Tmdb } }, + ProviderIds = new Dictionary { { MetadataProvider.Tmdb.ToString(), x.Id.ToString(CultureInfo.InvariantCulture) } }, Name = string.Format("[TMDB]{0}", x.Title ?? x.OriginalTitle), ImageUrl = this._tmdbApi.GetPosterUrl(x.PosterPath), Overview = x.Overview, @@ -97,6 +98,11 @@ namespace Jellyfin.Plugin.MetaShark.Providers var sid = info.GetProviderId(DoubanProviderId); var tmdbId = info.GetProviderId(MetadataProvider.Tmdb); var metaSource = info.GetProviderId(Plugin.ProviderId); + // 用于修正识别时指定tmdb,没法读取tmdb数据的BUG。。。两个合在一起太难了。。。 + if (string.IsNullOrEmpty(metaSource) && info.Name.StartsWith("[TMDB]")) + { + metaSource = MetaSource.Tmdb; + } // 注意:会存在元数据有tmdbId,但metaSource没值的情况(之前由TMDB插件刮削导致) var hasTmdbMeta = metaSource == MetaSource.Tmdb && !string.IsNullOrEmpty(tmdbId); var hasDoubanMeta = metaSource != MetaSource.Tmdb && !string.IsNullOrEmpty(sid); diff --git a/Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs b/Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs index 0f98866..ad860ee 100644 --- a/Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs +++ b/Jellyfin.Plugin.MetaShark/Providers/SeriesProvider.cs @@ -50,7 +50,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers return new RemoteSearchResult { SearchProviderName = DoubanProviderName, - ProviderIds = new Dictionary { { DoubanProviderId, x.Sid }, { Plugin.ProviderId, MetaSource.Douban } }, + ProviderIds = new Dictionary { { DoubanProviderId, x.Sid } }, ImageUrl = this.GetProxyImageUrl(x.Img), ProductionYear = x.Year, Name = x.Name, @@ -66,7 +66,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers return new RemoteSearchResult { SearchProviderName = TmdbProviderName, - ProviderIds = new Dictionary { { MetadataProvider.Tmdb.ToString(), x.Id.ToString(CultureInfo.InvariantCulture) }, { Plugin.ProviderId, MetaSource.Tmdb } }, + ProviderIds = new Dictionary { { MetadataProvider.Tmdb.ToString(), x.Id.ToString(CultureInfo.InvariantCulture) } }, Name = string.Format("[TMDB]{0}", x.Name ?? x.OriginalName), ImageUrl = this._tmdbApi.GetPosterUrl(x.PosterPath), Overview = x.Overview, @@ -87,6 +87,11 @@ namespace Jellyfin.Plugin.MetaShark.Providers var sid = info.GetProviderId(DoubanProviderId); var tmdbId = info.GetProviderId(MetadataProvider.Tmdb); var metaSource = info.GetProviderId(Plugin.ProviderId); + // 用于修正识别时指定tmdb,没法读取tmdb数据的BUG。。。两个合在一起太难了。。。 + if (string.IsNullOrEmpty(metaSource) && info.Name.StartsWith("[TMDB]")) + { + metaSource = MetaSource.Tmdb; + } // 注意:会存在元数据有tmdbId,但metaSource没值的情况(之前由TMDB插件刮削导致) var hasTmdbMeta = metaSource == MetaSource.Tmdb && !string.IsNullOrEmpty(tmdbId); var hasDoubanMeta = metaSource != MetaSource.Tmdb && !string.IsNullOrEmpty(sid);