Fix search only return one result

This commit is contained in:
cxfksword 2023-03-19 00:19:02 +08:00
parent a51c145361
commit c5fa522be5
3 changed files with 17 additions and 6 deletions

View File

@ -42,9 +42,9 @@ namespace Jellyfin.Plugin.MetaShark.Test
Task.Run(async () => 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 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); Assert.IsNotNull(result);
var str = result.ToJson(); var str = result.ToJson();

View File

@ -52,13 +52,14 @@ namespace Jellyfin.Plugin.MetaShark.Providers
} }
// 从douban搜索 // 从douban搜索
// BUG注意ProviderIds传多个meta值会导致识别搜索时只返回一个结果
var res = await this._doubanApi.SearchAsync(info.Name, cancellationToken).ConfigureAwait(false); var res = await this._doubanApi.SearchAsync(info.Name, cancellationToken).ConfigureAwait(false);
result.AddRange(res.Take(Configuration.PluginConfiguration.MAX_SEARCH_RESULT).Select(x => result.AddRange(res.Take(Configuration.PluginConfiguration.MAX_SEARCH_RESULT).Select(x =>
{ {
return new RemoteSearchResult return new RemoteSearchResult
{ {
SearchProviderName = DoubanProviderName, SearchProviderName = DoubanProviderName,
ProviderIds = new Dictionary<string, string> { { DoubanProviderId, x.Sid }, { Plugin.ProviderId, MetaSource.Douban } }, ProviderIds = new Dictionary<string, string> { { DoubanProviderId, x.Sid } },
ImageUrl = this.GetProxyImageUrl(x.Img), ImageUrl = this.GetProxyImageUrl(x.Img),
ProductionYear = x.Year, ProductionYear = x.Year,
Name = x.Name, Name = x.Name,
@ -75,7 +76,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers
return new RemoteSearchResult return new RemoteSearchResult
{ {
SearchProviderName = TmdbProviderName, SearchProviderName = TmdbProviderName,
ProviderIds = new Dictionary<string, string> { { MetadataProvider.Tmdb.ToString(), x.Id.ToString(CultureInfo.InvariantCulture) }, { Plugin.ProviderId, MetaSource.Tmdb } }, ProviderIds = new Dictionary<string, string> { { MetadataProvider.Tmdb.ToString(), x.Id.ToString(CultureInfo.InvariantCulture) } },
Name = string.Format("[TMDB]{0}", x.Title ?? x.OriginalTitle), Name = string.Format("[TMDB]{0}", x.Title ?? x.OriginalTitle),
ImageUrl = this._tmdbApi.GetPosterUrl(x.PosterPath), ImageUrl = this._tmdbApi.GetPosterUrl(x.PosterPath),
Overview = x.Overview, Overview = x.Overview,
@ -97,6 +98,11 @@ namespace Jellyfin.Plugin.MetaShark.Providers
var sid = info.GetProviderId(DoubanProviderId); var sid = info.GetProviderId(DoubanProviderId);
var tmdbId = info.GetProviderId(MetadataProvider.Tmdb); var tmdbId = info.GetProviderId(MetadataProvider.Tmdb);
var metaSource = info.GetProviderId(Plugin.ProviderId); var metaSource = info.GetProviderId(Plugin.ProviderId);
// 用于修正识别时指定tmdb没法读取tmdb数据的BUG。。。两个合在一起太难了。。。
if (string.IsNullOrEmpty(metaSource) && info.Name.StartsWith("[TMDB]"))
{
metaSource = MetaSource.Tmdb;
}
// 注意会存在元数据有tmdbId但metaSource没值的情况之前由TMDB插件刮削导致 // 注意会存在元数据有tmdbId但metaSource没值的情况之前由TMDB插件刮削导致
var hasTmdbMeta = metaSource == MetaSource.Tmdb && !string.IsNullOrEmpty(tmdbId); var hasTmdbMeta = metaSource == MetaSource.Tmdb && !string.IsNullOrEmpty(tmdbId);
var hasDoubanMeta = metaSource != MetaSource.Tmdb && !string.IsNullOrEmpty(sid); var hasDoubanMeta = metaSource != MetaSource.Tmdb && !string.IsNullOrEmpty(sid);

View File

@ -50,7 +50,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers
return new RemoteSearchResult return new RemoteSearchResult
{ {
SearchProviderName = DoubanProviderName, SearchProviderName = DoubanProviderName,
ProviderIds = new Dictionary<string, string> { { DoubanProviderId, x.Sid }, { Plugin.ProviderId, MetaSource.Douban } }, ProviderIds = new Dictionary<string, string> { { DoubanProviderId, x.Sid } },
ImageUrl = this.GetProxyImageUrl(x.Img), ImageUrl = this.GetProxyImageUrl(x.Img),
ProductionYear = x.Year, ProductionYear = x.Year,
Name = x.Name, Name = x.Name,
@ -66,7 +66,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers
return new RemoteSearchResult return new RemoteSearchResult
{ {
SearchProviderName = TmdbProviderName, SearchProviderName = TmdbProviderName,
ProviderIds = new Dictionary<string, string> { { MetadataProvider.Tmdb.ToString(), x.Id.ToString(CultureInfo.InvariantCulture) }, { Plugin.ProviderId, MetaSource.Tmdb } }, ProviderIds = new Dictionary<string, string> { { MetadataProvider.Tmdb.ToString(), x.Id.ToString(CultureInfo.InvariantCulture) } },
Name = string.Format("[TMDB]{0}", x.Name ?? x.OriginalName), Name = string.Format("[TMDB]{0}", x.Name ?? x.OriginalName),
ImageUrl = this._tmdbApi.GetPosterUrl(x.PosterPath), ImageUrl = this._tmdbApi.GetPosterUrl(x.PosterPath),
Overview = x.Overview, Overview = x.Overview,
@ -87,6 +87,11 @@ namespace Jellyfin.Plugin.MetaShark.Providers
var sid = info.GetProviderId(DoubanProviderId); var sid = info.GetProviderId(DoubanProviderId);
var tmdbId = info.GetProviderId(MetadataProvider.Tmdb); var tmdbId = info.GetProviderId(MetadataProvider.Tmdb);
var metaSource = info.GetProviderId(Plugin.ProviderId); var metaSource = info.GetProviderId(Plugin.ProviderId);
// 用于修正识别时指定tmdb没法读取tmdb数据的BUG。。。两个合在一起太难了。。。
if (string.IsNullOrEmpty(metaSource) && info.Name.StartsWith("[TMDB]"))
{
metaSource = MetaSource.Tmdb;
}
// 注意会存在元数据有tmdbId但metaSource没值的情况之前由TMDB插件刮削导致 // 注意会存在元数据有tmdbId但metaSource没值的情况之前由TMDB插件刮削导致
var hasTmdbMeta = metaSource == MetaSource.Tmdb && !string.IsNullOrEmpty(tmdbId); var hasTmdbMeta = metaSource == MetaSource.Tmdb && !string.IsNullOrEmpty(tmdbId);
var hasDoubanMeta = metaSource != MetaSource.Tmdb && !string.IsNullOrEmpty(sid); var hasDoubanMeta = metaSource != MetaSource.Tmdb && !string.IsNullOrEmpty(sid);