From 3403881b2a891ed113efb830d4ad051c6fc85c4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E8=AF=9A?= Date: Tue, 22 Apr 2025 15:24:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20ChineseNfoRegistry=20?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E4=BC=98=E5=8C=96=20Job=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E7=9A=84=E9=94=81=E5=AE=9A=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=90=8C=E6=AD=A5=E6=89=A7=E8=A1=8C=E4=BB=A5=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E6=BD=9C=E5=9C=A8=E7=9A=84=E5=B9=B6=E5=8F=91=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9B=E6=9B=B4=E6=96=B0=20JobTriggerController=20?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E4=BB=A5=E8=B7=9F=E8=B8=AA=E8=B7=AF=E5=BE=84=E3=80=81?= =?UTF-8?q?=E5=AD=A3=E5=8F=B7=E5=92=8C=E9=9B=86=E5=8F=B7=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=83=85=E5=86=B5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Service/Jobs/ChineseNfoRegistry.cs | 22 ++++++++++++++----- .../Controllers/JobTriggerController.cs | 13 ++++++++++- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/Service/Jobs/ChineseNfoRegistry.cs b/src/Service/Jobs/ChineseNfoRegistry.cs index cea8a55..0d20b0f 100644 --- a/src/Service/Jobs/ChineseNfoRegistry.cs +++ b/src/Service/Jobs/ChineseNfoRegistry.cs @@ -48,7 +48,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry Schedule(() => Job(ignoreLocked: true, ignoreCompleted: true)).ToRunEvery(1).Days(); } - public async void Job( + public void Job( string? path = null, string? seasonNumber = null, string? episodeNumber = null, @@ -58,7 +58,17 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry { try { - await JobExecute(path, seasonNumber, episodeNumber, ignoreLocked, ignoreCompleted); + var lockAll = "lock-all"; + lock (lockAll) + { + var lockKey = $"{path}-{seasonNumber}-{episodeNumber}"; + + lock (lockKey) + { + JobExecute(path, seasonNumber, episodeNumber, ignoreLocked, ignoreCompleted).Wait(); + } + } + } catch (Exception e) { @@ -102,7 +112,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry if (!string.IsNullOrEmpty(requestPath)) { var latestPath = Path.GetFileName(requestPath) ?? string.Empty; - + if (!tv.Contains(latestPath)) { continue; @@ -130,7 +140,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry foreach (var seasonNumber in sseasonsNumbers) { - var seasonNfo = Path.Combine(Path.GetDirectoryName(tv) ?? string.Empty,$"Season {seasonNumber}", "season.nfo"); + var seasonNfo = Path.Combine(Path.GetDirectoryName(tv) ?? string.Empty, $"Season {seasonNumber}", "season.nfo"); await File.WriteAllTextAsync(seasonNfo, string.Format( """ @@ -188,10 +198,10 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry var episodeNumber = Path.GetFileName(episode) .Split(split, StringSplitOptions.None)[1] .Split(" - ", StringSplitOptions.None)[0]; - + if (!string.IsNullOrEmpty(requestEpisodeNumber)) { - if (int.Parse(episodeNumber).ToString() != requestEpisodeNumber) + if (int.Parse(episodeNumber).ToString() != requestEpisodeNumber) { continue; } diff --git a/src/WebApi/Controllers/JobTriggerController.cs b/src/WebApi/Controllers/JobTriggerController.cs index 0be2b9d..eacf082 100644 --- a/src/WebApi/Controllers/JobTriggerController.cs +++ b/src/WebApi/Controllers/JobTriggerController.cs @@ -16,6 +16,8 @@ public class JobTriggerController : BaseController private readonly IChineseNfoRegistry _chineseNfoRegistry; private readonly IDiskMonitorRegistry _diskMonitorRegistry; + private readonly ILogger _logger; + /// /// ctor /// @@ -27,7 +29,8 @@ public class JobTriggerController : BaseController IStartupRegistry startupRegistry, IShutdownRegistry shutdownRegistry, IChineseNfoRegistry chineseNfoRegistry, - IDiskMonitorRegistry diskMonitorRegistry) + IDiskMonitorRegistry diskMonitorRegistry, + ILogger logger) { _logTotalNotifyJobRegistry = logTotalNotifyJobRegistry; _diskActionMonitorRegistry = diskActionMonitorRegistry; @@ -37,6 +40,7 @@ public class JobTriggerController : BaseController _shutdownRegistry = shutdownRegistry; _chineseNfoRegistry = chineseNfoRegistry; _diskMonitorRegistry = diskMonitorRegistry; + _logger = logger; } [HttpGet] @@ -127,6 +131,13 @@ public class JobTriggerController : BaseController var episodeNumber = json?["episodes"]?[0]?["episodeNumber"]?.ToString(); 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)) + { + return "OK"; + } + _chineseNfoRegistry.Job(path: path, seasonNumber: seasonNumber, episodeNumber: episodeNumber, ignoreLocked: true, ignoreCompleted: true); return "OK";