更新 ChineseNfoRegistry 类,增加季节 NFO 文件创建逻辑;更新 JobTriggerController 类,新增根据路径转换中文 NFO 的方法,支持季号和集号参数。
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 14s
Docker Build & Deploy / Deploy to Production (push) Successful in 4s

This commit is contained in:
孙诚
2025-04-21 13:23:42 +08:00
parent 84357b7f31
commit 8ceb88846c
2 changed files with 60 additions and 36 deletions

View File

@@ -118,6 +118,34 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
} }
var seasonNfos = Directory.GetFiles(Path.GetDirectoryName(tv) ?? string.Empty, "season.nfo", SearchOption.AllDirectories); var seasonNfos = Directory.GetFiles(Path.GetDirectoryName(tv) ?? string.Empty, "season.nfo", SearchOption.AllDirectories);
// 如果seasonNfos为空则创建
if (seasonNfos.Length == 0)
{
var sseasons = Directory.GetDirectories(Path.GetDirectoryName(tv) ?? string.Empty, "Season *", SearchOption.AllDirectories);
var sseasonsNumbers = sseasons.Select(x => x.Split("Season ", StringSplitOptions.None)[1]).Select(int.Parse).ToList();
foreach (var seasonNumber in sseasonsNumbers)
{
var seasonNfo = Path.Combine(Path.GetDirectoryName(tv) ?? string.Empty,$"Season {seasonNumber}", "season.nfo");
await File.WriteAllTextAsync(seasonNfo, string.Format(
"""
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<season>
<plot></plot>
<outline></outline>
<lockdata></lockdata>
<seasonnumber>{0}</seasonnumber>
</season>
"""
, seasonNumber)
);
seasonNfos = seasonNfos.Append(seasonNfo).ToArray();
}
}
foreach (var season in seasonNfos) foreach (var season in seasonNfos)
{ {
try try
@@ -255,13 +283,10 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
} }
else else
{ {
tvXml.CreateElement("locked"); isLockedNode = tvXml.CreateElement("locked");
isLockedNode = tvXml.SelectSingleNode("//locked"); tvXml.DocumentElement?.AppendChild(isLockedNode);
if (isLockedNode != null)
{
isLockedNode.InnerText = "true"; isLockedNode.InnerText = "true";
} }
}
if (isCompletedNode != null) if (isCompletedNode != null)
{ {
@@ -269,13 +294,10 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
} }
else else
{ {
tvXml.CreateElement("completed"); isCompletedNode = tvXml.CreateElement("completed");
isCompletedNode = tvXml.SelectSingleNode("//completed"); tvXml.DocumentElement?.AppendChild(isCompletedNode);
if (isCompletedNode != null)
{
isCompletedNode.InnerText = "true"; isCompletedNode.InnerText = "true";
} }
}
// 保存 // 保存
tvXml.Save(tvNfo); tvXml.Save(tvNfo);
@@ -395,13 +417,10 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
} }
else else
{ {
tvXml.CreateElement("locked"); isLockedNode = seasonXml.CreateElement("locked");
isLockedNode = tvXml.SelectSingleNode("//locked"); seasonXml.DocumentElement?.AppendChild(isLockedNode);
if (isLockedNode != null)
{
isLockedNode.InnerText = "true"; isLockedNode.InnerText = "true";
} }
}
if (isCompletedNode != null) if (isCompletedNode != null)
{ {
@@ -409,13 +428,10 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
} }
else else
{ {
tvXml.CreateElement("completed"); isCompletedNode = seasonXml.CreateElement("completed");
isCompletedNode = tvXml.SelectSingleNode("//completed"); seasonXml.DocumentElement?.AppendChild(isCompletedNode);
if (isCompletedNode != null)
{
isCompletedNode.InnerText = "true"; isCompletedNode.InnerText = "true";
} }
}
seasonXml.Save(seasonNfo); seasonXml.Save(seasonNfo);
} }
@@ -557,13 +573,10 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
} }
else else
{ {
tvXml.CreateElement("locked"); isLockedNode = episodeXml.CreateElement("locked");
isLockedNode = tvXml.SelectSingleNode("//locked"); episodeXml.DocumentElement?.AppendChild(isLockedNode);
if (isLockedNode != null)
{
isLockedNode.InnerText = "true"; isLockedNode.InnerText = "true";
} }
}
if (isCompletedNode != null) if (isCompletedNode != null)
{ {
@@ -571,13 +584,10 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
} }
else else
{ {
tvXml.CreateElement("completed"); isCompletedNode = episodeXml.CreateElement("completed");
isCompletedNode = tvXml.SelectSingleNode("//completed"); episodeXml.DocumentElement?.AppendChild(isCompletedNode);
if (isCompletedNode != null)
{
isCompletedNode.InnerText = "true"; isCompletedNode.InnerText = "true";
} }
}
// 保存 // 保存
episodeXml.Save(episodeNfo); episodeXml.Save(episodeNfo);

View File

@@ -133,6 +133,20 @@ public class JobTriggerController : BaseController
return "OK"; return "OK";
} }
[HttpGet]
public string ConvertChineseNfoByPath(
string path,
string? seasonNumber = null,
string? episodeNumber = null,
bool ignoreLocked = true,
bool ignoreCompleted = true)
{
_chineseNfoRegistry.Job(path: path, seasonNumber: seasonNumber, episodeNumber: episodeNumber, ignoreLocked: ignoreLocked, ignoreCompleted: ignoreCompleted);
return "OK";
}
[HttpGet] [HttpGet]
public string DiskMonitor() public string DiskMonitor()
{ {