From 4f4433fe63559c1df59e83dc7d3e04dd9d0f5927 Mon Sep 17 00:00:00 2001
From: cxfksword <718792+cxfksword@users.noreply.github.com>
Date: Sat, 25 Feb 2023 09:58:42 +0800
Subject: [PATCH] Optimize identity
---
Jellyfin.Plugin.MetaShark/Core/Utils.cs | 24 ++++++++++++
.../Providers/BaseProvider.cs | 37 ++++++++++++++++++-
.../Providers/SeasonProvider.cs | 12 +++++-
3 files changed, 71 insertions(+), 2 deletions(-)
diff --git a/Jellyfin.Plugin.MetaShark/Core/Utils.cs b/Jellyfin.Plugin.MetaShark/Core/Utils.cs
index 448fad5..e082f7e 100644
--- a/Jellyfin.Plugin.MetaShark/Core/Utils.cs
+++ b/Jellyfin.Plugin.MetaShark/Core/Utils.cs
@@ -45,5 +45,29 @@ namespace Jellyfin.Plugin.MetaShark.Core
return null;
}
+
+ ///
+ /// 转换中文数字
+ ///
+ public static string? ToChineseNumber(int? number)
+ {
+ if (number is null) return null;
+
+ var chineseNumberMap = new Dictionary() {
+ {'1','一'},
+ {'2','二'},
+ {'3','三'},
+ {'4','四'},
+ {'5','五'},
+ {'6','六'},
+ {'7','七'},
+ {'8','八'},
+ {'9','九'},
+ {'0','零'},
+ };
+
+ var numberArr = $"{number}".ToCharArray().Select(x => chineseNumberMap.ContainsKey(x) ? chineseNumberMap[x] : x).ToArray();
+ return new string(numberArr);
+ }
}
}
diff --git a/Jellyfin.Plugin.MetaShark/Providers/BaseProvider.cs b/Jellyfin.Plugin.MetaShark/Providers/BaseProvider.cs
index 58590c8..b708255 100644
--- a/Jellyfin.Plugin.MetaShark/Providers/BaseProvider.cs
+++ b/Jellyfin.Plugin.MetaShark/Providers/BaseProvider.cs
@@ -51,7 +51,7 @@ namespace Jellyfin.Plugin.MetaShark.Providers
protected readonly IHttpContextAccessor _httpContextAccessor;
protected Regex regMetaSourcePrefix = new Regex(@"^\[.+\]", RegexOptions.Compiled);
- protected Regex regSeasonNameSuffix = new Regex(@"\s第[0-9一二三四五六七八九十]+?季$", RegexOptions.Compiled);
+ protected Regex regSeasonNameSuffix = new Regex(@"\s第[0-9一二三四五六七八九十]+?季$|(? GuestDoubanSeasonBySeasonNameAsync(string name, int? seasonNumber, CancellationToken cancellationToken)
+ {
+ if (seasonNumber is null or 0)
+ {
+ return null;
+ }
+
+ var chineseSeasonNumber = Utils.ToChineseNumber(seasonNumber);
+ if (string.IsNullOrEmpty(chineseSeasonNumber))
+ {
+ return null;
+ }
+
+ var seasonName = $"{name}{seasonNumber}";
+ var chineseSeasonName = $"{name} 第{chineseSeasonNumber}季";
+ if (seasonNumber == 1)
+ {
+ seasonName = name;
+ }
+ this.Log($"GuestDoubanSeasonBySeasonNameAsync of [name]: {seasonName} 或 {chineseSeasonName}");
+
+ // 通过名称精确匹配
+ var result = await this._doubanApi.SearchAsync(name, cancellationToken).ConfigureAwait(false);
+ var item = result.Where(x => x.Category == "电视剧" && x.Rating > 0 && (x.Name == seasonName || x.Name == chineseSeasonName)).FirstOrDefault();
+ if (item != null && !string.IsNullOrEmpty(item.Sid))
+ {
+ this.Log($"Found douban [id]: {item.Name}({item.Sid})");
+ return item.Sid;
+ }
+
+
+ this.Log($"GuestDoubanSeasonBySeasonNameAsync not found!");
+ return null;
+ }
+
protected async Task GuestByTmdbAsync(string name, int? year, ItemLookupInfo info, CancellationToken cancellationToken)
{
diff --git a/Jellyfin.Plugin.MetaShark/Providers/SeasonProvider.cs b/Jellyfin.Plugin.MetaShark/Providers/SeasonProvider.cs
index 06b3d9a..6c5654b 100644
--- a/Jellyfin.Plugin.MetaShark/Providers/SeasonProvider.cs
+++ b/Jellyfin.Plugin.MetaShark/Providers/SeasonProvider.cs
@@ -165,7 +165,17 @@ namespace Jellyfin.Plugin.MetaShark.Providers
if (!string.IsNullOrEmpty(seriesName) && seasonYear > 0)
{
- return await this.GuestDoubanSeasonByYearAsync(seriesName, seasonYear, cancellationToken).ConfigureAwait(false);
+ var seasonSid = await this.GuestDoubanSeasonByYearAsync(seriesName, seasonYear, cancellationToken).ConfigureAwait(false);
+ if (!string.IsNullOrEmpty(seasonSid))
+ {
+ return seasonSid;
+ }
+ }
+
+ // 通过季名匹配douban id,作为关闭tmdb api/api超时的后备方法使用
+ if (!string.IsNullOrEmpty(seriesName) && seasonNumber.HasValue && seasonNumber > 0)
+ {
+ return await this.GuestDoubanSeasonBySeasonNameAsync(seriesName, seasonNumber, cancellationToken).ConfigureAwait(false);
}
return null;