From 84e35fb63199fbbd095d78c0455371b9df7f60b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E8=AF=9A?= Date: Tue, 22 Apr 2025 15:57:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20IChineseNfoRegistry=20?= =?UTF-8?q?=E5=92=8C=20ChineseNfoRegistry=20=E7=B1=BB=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20Job=20=E6=96=B9=E6=B3=95=E7=9A=84=E5=AD=A3=E5=8F=B7?= =?UTF-8?q?=E5=92=8C=E9=9B=86=E5=8F=B7=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=B8=BA=20int=EF=BC=8C=E5=A2=9E=E5=BC=BA=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E6=80=A7=EF=BC=9B=E7=AE=80=E5=8C=96=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95=EF=BC=8C=E5=87=8F=E5=B0=91=E5=86=97?= =?UTF-8?q?=E4=BD=99=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=8F=90=E9=AB=98=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Interface/Jobs/IChineseNfoRegistry.cs | 4 +- src/Service/Jobs/ChineseNfoRegistry.cs | 316 +++++++----------- .../Controllers/JobTriggerController.cs | 14 +- 3 files changed, 130 insertions(+), 204 deletions(-) diff --git a/src/Interface/Jobs/IChineseNfoRegistry.cs b/src/Interface/Jobs/IChineseNfoRegistry.cs index 5d8deb7..17726d6 100644 --- a/src/Interface/Jobs/IChineseNfoRegistry.cs +++ b/src/Interface/Jobs/IChineseNfoRegistry.cs @@ -4,8 +4,8 @@ public interface IChineseNfoRegistry { void Job( string? path = null, - string? seasonNumber = null, - string? episodeNumber = null, + int? seasonNumber = null, + int? episodeNumber = null, bool ignoreLocked = false, bool ignoreCompleted = false ); diff --git a/src/Service/Jobs/ChineseNfoRegistry.cs b/src/Service/Jobs/ChineseNfoRegistry.cs index 0d20b0f..3cbb61d 100644 --- a/src/Service/Jobs/ChineseNfoRegistry.cs +++ b/src/Service/Jobs/ChineseNfoRegistry.cs @@ -1,6 +1,7 @@ using System.Net; using System.Text.RegularExpressions; using System.Xml; +using Core; using FluentScheduler; using FreeSql; using FreeSql.DataAnnotations; @@ -50,8 +51,8 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry public void Job( string? path = null, - string? seasonNumber = null, - string? episodeNumber = null, + int? seasonNumber = null, + int? episodeNumber = null, bool ignoreLocked = false, bool ignoreCompleted = false ) @@ -72,14 +73,15 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry } catch (Exception e) { - _logger.LogError(e, "ChineseNfoRegistry.Job() error"); + _logger.LogError(e, "error"); + WxNotify.SendCommonAsync($"ChineseNfoRegistry.Job() 执行失败 {e.Message}").Wait(); } } private async Task JobExecute( string? requestPath = null, - string? requestSeasonNumber = null, - string? requestEpisodeNumber = null, + int? requestSeasonNumber = null, + int? requestEpisodeNumber = null, bool ignoreLocked = false, bool ignoreCompleted = false) { @@ -87,7 +89,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (string.IsNullOrEmpty(tvFolder)) { - _logger.LogError("ChineseNfoRegistry.Job() tvFolder is null or empty"); + _logger.LogError("tvFolder is null or empty"); return; } @@ -101,34 +103,18 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (tvNfos.Length == 0) { - _logger.LogError("ChineseNfoRegistry.Job() tvNfo is null or empty"); + _logger.LogError("tvNfo is null or empty"); return; } - + var ctn = new ChineseNfoContent(); foreach (var tv in tvNfos) { - if (!string.IsNullOrEmpty(requestPath)) - { - var latestPath = Path.GetFileName(requestPath) ?? string.Empty; + ctn.tvNfoPath = tv; - if (!tv.Contains(latestPath)) - { - continue; - } + await HandleTv(); - _logger.LogInformation("ChineseNfoRegistry.Job() tv is contains path"); - } - - try - { - await HandleTv(tv); - } - catch (Exception e) - { - _logger.LogError(e, "ChineseNfoRegistry.Job() HandleTv() error"); - } var seasonNfos = Directory.GetFiles(Path.GetDirectoryName(tv) ?? string.Empty, "season.nfo", SearchOption.AllDirectories); // 如果seasonNfos为空,则创建 @@ -162,29 +148,18 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry foreach (var season in seasonNfos) { var seasonNumber = season - .Split("Season ")[1] - .Split(Path.DirectorySeparatorChar)[0]; + .Split("Season ").LastOrDefault() + ?.Split(Path.DirectorySeparatorChar) + .FirstOrDefault(); - try + if (int.TryParse(seasonNumber, out var seasonNumberInt)) { - if (!string.IsNullOrEmpty(requestSeasonNumber)) - { - if (seasonNumber != requestSeasonNumber) - { - continue; - } - else - { - _logger.LogInformation("ChineseNfoRegistry.Job() seasonNumber is equal"); - } - } + ctn.seasonNumber = seasonNumberInt; + ctn.seasonNfoPath = season; + } + + await HandleSeason(); - await HandleSeason(tv, season); - } - catch (Exception e) - { - _logger.LogError(e, "ChineseNfoRegistry.Job() HandleSeason() error"); - } var episodeNfos = Directory .GetFiles(Path.GetDirectoryName(season) ?? string.Empty, "*.nfo", SearchOption.AllDirectories) .Where(x => !x.EndsWith("season.nfo")) @@ -192,39 +167,29 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry foreach (var episode in episodeNfos) { - try - { - var split = $"S{(seasonNumber.Length == 1 ? $"0{seasonNumber}" : seasonNumber)}E"; - var episodeNumber = Path.GetFileName(episode) - .Split(split, StringSplitOptions.None)[1] - .Split(" - ", StringSplitOptions.None)[0]; + ctn.episodeNfoPath = episode; - if (!string.IsNullOrEmpty(requestEpisodeNumber)) - { - if (int.Parse(episodeNumber).ToString() != requestEpisodeNumber) - { - continue; - } - else - { - _logger.LogInformation("ChineseNfoRegistry.Job() episodeNumber is equal"); - } - } - - await HandleEpisode(tv, season, episode); - } - catch (Exception e) - { - _logger.LogError(e, "ChineseNfoRegistry.Job() episodeNfo is null or empty"); - } + await HandleEpisode(); } } } - async Task HandleTv(string tvNfo) + async Task HandleTv() { - var nfoContent = File.ReadAllText(tvNfo); + if (!string.IsNullOrEmpty(requestPath)) + { + var latestPath = Path.GetFileName(requestPath) ?? string.Empty; + + if (!ctn.tvNfoPath.Contains(latestPath)) + { + return; + } + + _logger.LogInformation("tv is contains path"); + } + + var nfoContent = File.ReadAllText(ctn.tvNfoPath); var tvXml = new XmlDocument(); tvXml.LoadXml(nfoContent); @@ -233,7 +198,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (isLockedNode != null && isLockedNode.InnerText == "true" && ignoreLocked) { - _logger.LogInformation("ChineseNfoRegistry.Job() tvNfo is locked"); + _logger.LogInformation("tvNfo is locked"); return; } @@ -241,7 +206,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (isCompletedNode != null && isCompletedNode.InnerText == "true" && ignoreCompleted) { - _logger.LogInformation("ChineseNfoRegistry.Job() tvNfo is completed"); + _logger.LogInformation("tvNfo is completed"); return; } @@ -249,21 +214,21 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (uniqueIdNode == null) { - _logger.LogError("ChineseNfoRegistry.Job() uniqueIdNode is null"); + _logger.LogError("uniqueIdNode is null"); return; } if (!int.TryParse(uniqueIdNode.InnerText, out var tmdbId)) { - _logger.LogError("ChineseNfoRegistry.Job() tmdbId is null"); + _logger.LogError("tmdbId is null"); return; } - var tvInfo = await GetTmdbTv(tvNfo, tmdbId); + var tvInfo = await GetTmdbTv(ctn.tvNfoPath, tmdbId); if (tvInfo == null) { - _logger.LogError("ChineseNfoRegistry.Job() tvInfo is null"); + _logger.LogError("tvInfo is null"); return; } @@ -281,7 +246,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry sorttitleNode.InnerXml = $""; } - _logger.LogInformation("ChineseNfoRegistry.Job() tvInfo: {tvInfo}", tvInfo["name"]); + _logger.LogInformation("tvInfo: {tvInfo}", tvInfo["name"]); } if (tvInfo["overview"] != null) @@ -298,16 +263,16 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry outlineNode.InnerXml = $""; } - _logger.LogInformation("ChineseNfoRegistry.Job() tvInfo: {tvInfo}", tvInfo["overview"]); + _logger.LogInformation("tvInfo: {tvInfo}", tvInfo["overview"]); } if (tvInfo["poster_path"] != null) { var posterPath = tvInfo["poster_path"]!.ToString(); - var image = await GetTmdbImage(tvNfo, posterPath); + var image = await GetTmdbImage(ctn.tvNfoPath, posterPath); if (image != null) { - var imagePath = Path.Combine(Path.GetDirectoryName(tvNfo) ?? string.Empty, "poster" + Path.GetExtension(posterPath)); + var imagePath = Path.Combine(Path.GetDirectoryName(ctn.tvNfoPath) ?? string.Empty, "poster" + Path.GetExtension(posterPath)); await File.WriteAllBytesAsync(imagePath, image); } } @@ -321,7 +286,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry } } - _logger.LogInformation("ChineseNfoRegistry.Job() tmdbId: {tmdbId}, name: {name}", tmdbId, tvInfo["name"]?.ToString()); + _logger.LogInformation("tmdbId: {tmdbId}, name: {name}", tmdbId, tvInfo["name"]?.ToString()); if (isLockedNode != null) { @@ -346,31 +311,23 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry } // 保存 - tvXml.Save(tvNfo); + tvXml.Save(ctn.tvNfoPath); } - async Task HandleSeason(string tvNfo, string seasonNfo) + async Task HandleSeason() { - var tvNfoContent = File.ReadAllText(tvNfo); - - var tvXml = new XmlDocument(); - tvXml.LoadXml(tvNfoContent); - - var uniqueIdNode = tvXml.SelectSingleNode("//uniqueid[@type='tmdb']"); - - if (uniqueIdNode == null) + if (ctn.seasonNumber == 0 || string.IsNullOrEmpty(ctn.seasonNfoPath)) { - _logger.LogError("ChineseNfoRegistry.Job() uniqueIdNode is null"); + _logger.LogError("seasonNfoPath is null or empty"); return; } - if (!int.TryParse(uniqueIdNode.InnerText, out var tmdbId)) + if (requestEpisodeNumber != null && ctn.episodeNumber != requestEpisodeNumber) { - _logger.LogError("ChineseNfoRegistry.Job() tmdbId is null"); return; } - var nfoContent = File.ReadAllText(seasonNfo); + var nfoContent = File.ReadAllText(ctn.seasonNfoPath); var seasonXml = new XmlDocument(); seasonXml.LoadXml(nfoContent); @@ -379,7 +336,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (isLockedNode != null && isLockedNode.InnerText == "true" && ignoreLocked) { - _logger.LogInformation("ChineseNfoRegistry.Job() tvNfo is locked"); + _logger.LogInformation("tvNfo is locked"); return; } @@ -387,7 +344,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (isCompletedNode != null && isCompletedNode.InnerText == "true" && ignoreCompleted) { - _logger.LogInformation("ChineseNfoRegistry.Job() tvNfo is completed"); + _logger.LogInformation("tvNfo is completed"); return; } @@ -395,68 +352,52 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (seasonNumberNode == null) { - _logger.LogError("ChineseNfoRegistry.Job() seasonNumberNode is null"); + _logger.LogError("seasonNumberNode is null"); return; } if (!int.TryParse(seasonNumberNode.InnerText, out var seasonNumber)) { - _logger.LogError("ChineseNfoRegistry.Job() seasonNumber is null"); + _logger.LogError("seasonNumber is null"); return; } - if (!string.IsNullOrEmpty(requestPath)) - { - if (!string.IsNullOrEmpty(requestSeasonNumber)) - { - if (seasonNumber != int.Parse(requestSeasonNumber)) - { - return; - } - else - { - _logger.LogInformation("ChineseNfoRegistry.Job() seasonNumber is equal"); - return; - } - } - } - - var seasonInfo = await GetTmdbSeason(seasonNfo, tmdbId, seasonNumber); + var seasonInfo = await GetTmdbSeason(ctn); if (seasonInfo == null) { - _logger.LogError("ChineseNfoRegistry.Job() seasonInfo is null"); + _logger.LogError("seasonInfo is null"); return; } var titleNode = seasonXml.SelectSingleNode("//sorttitle"); if (titleNode != null && seasonInfo["name"] != null) { - _logger.LogInformation("ChineseNfoRegistry.Job() seasonInfo: {seasonInfo}", seasonInfo["name"]); + _logger.LogInformation("seasonInfo: {seasonInfo}", seasonInfo["name"]); titleNode.InnerXml = $""; } var plotNode = seasonXml.SelectSingleNode("//plot"); if (plotNode != null && seasonInfo["overview"] != null) { - _logger.LogInformation("ChineseNfoRegistry.Job() seasonInfo: {seasonInfo}", seasonInfo["overview"]); + _logger.LogInformation("seasonInfo: {seasonInfo}", seasonInfo["overview"]); plotNode.InnerXml = $""; } var outlineNode = seasonXml.SelectSingleNode("//outline"); if (outlineNode != null && seasonInfo["overview"] != null) { - _logger.LogInformation("ChineseNfoRegistry.Job() seasonInfo: {seasonInfo}", seasonInfo["overview"]); + _logger.LogInformation("seasonInfo: {seasonInfo}", seasonInfo["overview"]); outlineNode.InnerXml = $""; } var poster_path = seasonInfo["poster_path"]?.ToString(); if (poster_path != null) { - var image = await GetTmdbImage(seasonNfo, poster_path); + var image = await GetTmdbImage(ctn.seasonNfoPath, poster_path); if (image != null) { - var imagePath = Path.Combine(Path.GetDirectoryName(tvNfo) ?? string.Empty, "season" + seasonNumber.ToString("D2") + "-poster" + Path.GetExtension(poster_path)); + var imagePath = Path.Combine(Path.GetDirectoryName(ctn.tvNfoPath) ?? string.Empty, "season" + seasonNumber.ToString("D2") + "-poster" + Path.GetExtension(poster_path)); await File.WriteAllBytesAsync(imagePath, image); } } @@ -483,50 +424,18 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry isCompletedNode.InnerText = "true"; } - seasonXml.Save(seasonNfo); + seasonXml.Save(ctn.seasonNfoPath); } - async Task HandleEpisode(string tvNfo, string seasonNfo, string episodeNfo) + async Task HandleEpisode() { - var tvNfoContent = File.ReadAllText(tvNfo); - - var tvXml = new XmlDocument(); - tvXml.LoadXml(tvNfoContent); - - var uniqueIdNode = tvXml.SelectSingleNode("//uniqueid[@type='tmdb']"); - - if (uniqueIdNode == null) + if (string.IsNullOrEmpty(ctn.episodeNfoPath)) { - _logger.LogError("ChineseNfoRegistry.Job() uniqueIdNode is null"); + _logger.LogError("episodeNfoPath is null or empty"); return; } - if (!int.TryParse(uniqueIdNode.InnerText, out var tmdbId)) - { - _logger.LogError("ChineseNfoRegistry.Job() tmdbId is null"); - return; - } - - var seasonNfoContent = File.ReadAllText(seasonNfo); - - var seasonXml = new XmlDocument(); - seasonXml.LoadXml(seasonNfoContent); - - var seasonNumberNode = seasonXml.SelectSingleNode("//seasonnumber"); - - if (seasonNumberNode == null) - { - _logger.LogError("ChineseNfoRegistry.Job() seasonNumberNode is null"); - return; - } - - if (!int.TryParse(seasonNumberNode.InnerText, out var seasonNumber)) - { - _logger.LogError("ChineseNfoRegistry.Job() seasonNumber is null"); - return; - } - - var nfoContent = File.ReadAllText(episodeNfo); + var nfoContent = File.ReadAllText(ctn.episodeNfoPath); var episodeXml = new XmlDocument(); episodeXml.LoadXml(nfoContent); @@ -535,7 +444,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (isLockedNode != null && isLockedNode.InnerText == "true" && ignoreLocked) { - _logger.LogInformation("ChineseNfoRegistry.Job() tvNfo is locked"); + _logger.LogInformation("tvNfo is locked"); return; } @@ -543,70 +452,71 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (isCompletedNode != null && isCompletedNode.InnerText == "true" && ignoreCompleted) { - _logger.LogInformation("ChineseNfoRegistry.Job() tvNfo is completed"); + _logger.LogInformation("tvNfo is completed"); return; } - var episodeNumberNode = episodeXml.SelectSingleNode("//episode"); if (episodeNumberNode == null) { - _logger.LogError("ChineseNfoRegistry.Job() episodeNumberNode is null"); + _logger.LogError("episodeNumberNode is null"); return; } if (!int.TryParse(episodeNumberNode.InnerText, out var episodeNumber)) { - _logger.LogError("ChineseNfoRegistry.Job() episodeNumber is null"); + _logger.LogError("episodeNumber is null"); return; } + ctn.episodeNumber = episodeNumber; + if (!string.IsNullOrEmpty(requestPath)) { - if (!string.IsNullOrEmpty(requestSeasonNumber)) + if (requestSeasonNumber != null) { - if (!string.IsNullOrEmpty(requestEpisodeNumber)) + if (requestEpisodeNumber != null) { - if (seasonNumber != int.Parse(requestSeasonNumber) || episodeNumber != int.Parse(requestEpisodeNumber)) + if (episodeNumber != requestEpisodeNumber) { return; } else { - _logger.LogInformation("ChineseNfoRegistry.Job() episodeNumber is equal"); + _logger.LogInformation("episodeNumber is equal"); return; } } } } - var episodeInfo = await GetTmdbEpisode(episodeNfo, tmdbId, seasonNumber, episodeNumber); + var episodeInfo = await GetTmdbEpisode(ctn); if (episodeInfo == null) { - _logger.LogError("ChineseNfoRegistry.Job() episodeInfo is null"); + _logger.LogError("episodeInfo is null"); return; } var titleNode = episodeXml.SelectSingleNode("//title"); if (titleNode != null && episodeInfo["name"] != null) { - _logger.LogInformation("ChineseNfoRegistry.Job() episodeInfo: {episodeInfo}", episodeInfo["name"]); + _logger.LogInformation("episodeInfo: {episodeInfo}", episodeInfo["name"]); titleNode.InnerXml = $""; } var plotNode = episodeXml.SelectSingleNode("//plot"); if (plotNode != null && episodeInfo["overview"] != null) { - _logger.LogInformation("ChineseNfoRegistry.Job() episodeInfo: {episodeInfo}", episodeInfo["overview"]); + _logger.LogInformation("episodeInfo: {episodeInfo}", episodeInfo["overview"]); plotNode.InnerXml = $""; } var outlineNode = episodeXml.SelectSingleNode("//outline"); if (outlineNode != null && episodeInfo["overview"] != null) { - _logger.LogInformation("ChineseNfoRegistry.Job() episodeInfo: {episodeInfo}", episodeInfo["overview"]); + _logger.LogInformation("episodeInfo: {episodeInfo}", episodeInfo["overview"]); outlineNode.InnerXml = $""; } @@ -619,7 +529,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry } } - _logger.LogInformation("ChineseNfoRegistry.Job() tmdbId: {tmdbId}, name: {name}", tmdbId, episodeInfo["name"]?.ToString()); + _logger.LogInformation("tmdbId: {tmdbId}, name: {name}", ctn.tvId, episodeInfo["name"]?.ToString()); if (isLockedNode != null) { @@ -644,7 +554,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry } // 保存 - episodeXml.Save(episodeNfo); + episodeXml.Save(ctn.episodeNfoPath); } async Task GetTmdbPersonName( @@ -702,7 +612,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry nameNode!.InnerXml = $""; } - _logger.LogInformation("ChineseNfoRegistry.Job() actor: {actor}", name); + _logger.LogInformation("actor: {actor}", name); } } } @@ -896,12 +806,15 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry } } - private async Task GetTmdbSeason( - string path, - int tmdbId, - int seasonNumber) + private async Task GetTmdbSeason(ChineseNfoContent ctn) { - var uniqueId = $"{tmdbId}-{seasonNumber}"; + if (ctn.seasonNumber == 0 || string.IsNullOrEmpty(ctn.seasonNfoPath)) + { + _logger.LogError("seasonNfoPath is null or empty"); + return null; + } + + var uniqueId = $"{ctn.tvId}-{ctn.seasonNumber}"; var record = await _freeSql.Select() .Where(x => x.Type == TheMovieDbType.Season) @@ -919,7 +832,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry UniqueId = uniqueId }; - var requestUrl = string.Format("/3/tv/{0}/season/{1}?api_key=e28e1bc408db7adefc8bacce225c5085&language=zh-CN", tmdbId, seasonNumber); + var requestUrl = string.Format("/3/tv/{0}/season/{1}?api_key=e28e1bc408db7adefc8bacce225c5085&language=zh-CN", ctn.tvId, ctn.seasonNumber); try { @@ -927,7 +840,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (!response.IsSuccessStatusCode) { - _logger.LogError("ChineseNfoRegistry.GetTmdbSeason() 接口调用失败 {requestUrl} & {path} & {response.StatusCode}", requestUrl, path, response.StatusCode); + _logger.LogError("ChineseNfoRegistry.GetTmdbSeason() 接口调用失败 {requestUrl} & {path} & {response.StatusCode}", requestUrl, ctn.tvNfoPath, response.StatusCode); return null; } @@ -943,18 +856,14 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry } catch (Exception e) { - _logger.LogError("ChineseNfoRegistry.GetTmdbSeason() 接口调用失败 {requestUrl} & {path} \r {e}", requestUrl, path, e); + _logger.LogError("ChineseNfoRegistry.GetTmdbSeason() 接口调用失败 {requestUrl} & {path} \r {e}", requestUrl, ctn.tvNfoPath, e); return null; } } - private async Task GetTmdbEpisode( - string path, - int tmdbId, - int seasonNumber, - int episodeNumber) + private async Task GetTmdbEpisode(ChineseNfoContent ctn) { - var uniqueId = $"{tmdbId}-{seasonNumber}-{episodeNumber}"; + var uniqueId = $"{ctn.tvId}-{ctn.seasonNumber}-{ctn.episodeNumber}"; var record = await _freeSql.Select() .Where(x => x.Type == TheMovieDbType.Episode) @@ -972,7 +881,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry UniqueId = uniqueId }; - var requestUrl = string.Format("/3/tv/{0}/season/{1}/episode/{2}?api_key=e28e1bc408db7adefc8bacce225c5085&language=zh-CN", tmdbId, seasonNumber, episodeNumber); + var requestUrl = string.Format("/3/tv/{0}/season/{1}/episode/{2}?api_key=e28e1bc408db7adefc8bacce225c5085&language=zh-CN", ctn.tvId, ctn.seasonNumber, ctn.episodeNumber); try { @@ -980,7 +889,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (!response.IsSuccessStatusCode) { - _logger.LogError("ChineseNfoRegistry.GetTmdbEpisode() 接口调用失败 {requestUrl} & {path} & {response.StatusCode}", requestUrl, path, response.StatusCode); + _logger.LogError("ChineseNfoRegistry.GetTmdbEpisode() 接口调用失败 {requestUrl} & {path} & {response.StatusCode}", requestUrl, ctn.episodeNfoPath, response.StatusCode); return null; } @@ -996,7 +905,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry } catch (Exception e) { - _logger.LogError("ChineseNfoRegistry.GetTmdbEpisode() 接口调用失败 {requestUrl} & {path} \r {e}", requestUrl, path, e); + _logger.LogError("ChineseNfoRegistry.GetTmdbEpisode() 接口调用失败 {requestUrl} & {path} \r {e}", requestUrl, ctn.episodeNfoPath, e); return null; } } @@ -1028,4 +937,19 @@ public enum TheMovieDbLanguage { ZhCn = 1, ZhTw = 2 -} \ No newline at end of file +} + +public class ChineseNfoContent +{ + public int tvId { get; set; } + + public string tvNfoPath { get; set; } = string.Empty; + + public int seasonNumber { get; set; } + + public string seasonNfoPath { get; set; } = string.Empty; + + public int episodeNumber { get; set; } + + public string episodeNfoPath { get; set; } = string.Empty; +} diff --git a/src/WebApi/Controllers/JobTriggerController.cs b/src/WebApi/Controllers/JobTriggerController.cs index eacf082..6ead8e4 100644 --- a/src/WebApi/Controllers/JobTriggerController.cs +++ b/src/WebApi/Controllers/JobTriggerController.cs @@ -2,6 +2,8 @@ using Core; using Interface.Jobs; using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace WebApi.Controllers; @@ -118,7 +120,7 @@ public class JobTriggerController : BaseController using var reader = new StreamReader(body); var text = await reader.ReadToEndAsync(); - var json = JsonNode.Parse(text); + var json = JsonConvert.DeserializeObject(text); var eventType = json?["eventType"]?.ToString(); @@ -127,13 +129,13 @@ public class JobTriggerController : BaseController return "OK"; } - var seasonNumber = json?["episodes"]?[0]?["seasonNumber"]?.ToString(); - var episodeNumber = json?["episodes"]?[0]?["episodeNumber"]?.ToString(); + var seasonNumber = json?["episodes"]?[0]?["seasonNumber"]?.ToObject(); + var episodeNumber = json?["episodes"]?[0]?["episodeNumber"]?.ToObject(); var path = json?["series"]?["path"]?.ToString(); _logger.LogInformation("SonarrChangedConvertChineseNfo() path: {path}, seasonNumber: {seasonNumber}, episodeNumber: {episodeNumber}", path, seasonNumber, episodeNumber); - if (string.IsNullOrEmpty(path) || string.IsNullOrEmpty(seasonNumber) || string.IsNullOrEmpty(episodeNumber)) + if (string.IsNullOrEmpty(path) || seasonNumber == null || episodeNumber == null) { return "OK"; } @@ -147,8 +149,8 @@ public class JobTriggerController : BaseController [HttpGet] public string ConvertChineseNfoByPath( string path, - string? seasonNumber = null, - string? episodeNumber = null, + int? seasonNumber = null, + int? episodeNumber = null, bool ignoreLocked = true, bool ignoreCompleted = true) {