更新 ChineseNfoRegistry 类,优化 Job 方法的锁定逻辑,改为同步执行以避免潜在的并发问题;更新 JobTriggerController 类,增加日志记录以跟踪路径、季号和集号的处理情况。
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 15s
Docker Build & Deploy / Deploy to Production (push) Successful in 5s

This commit is contained in:
孙诚
2025-04-22 15:24:21 +08:00
parent 2364e41825
commit 3403881b2a
2 changed files with 28 additions and 7 deletions

View File

@@ -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;
}

View File

@@ -16,6 +16,8 @@ public class JobTriggerController : BaseController
private readonly IChineseNfoRegistry _chineseNfoRegistry;
private readonly IDiskMonitorRegistry _diskMonitorRegistry;
private readonly ILogger<JobTriggerController> _logger;
/// <summary>
/// ctor
/// </summary>
@@ -27,7 +29,8 @@ public class JobTriggerController : BaseController
IStartupRegistry startupRegistry,
IShutdownRegistry shutdownRegistry,
IChineseNfoRegistry chineseNfoRegistry,
IDiskMonitorRegistry diskMonitorRegistry)
IDiskMonitorRegistry diskMonitorRegistry,
ILogger<JobTriggerController> 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";