更新 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);
// 如果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)
{
try
@@ -255,12 +283,9 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
else
{
tvXml.CreateElement("locked");
isLockedNode = tvXml.SelectSingleNode("//locked");
if (isLockedNode != null)
{
isLockedNode.InnerText = "true";
}
isLockedNode = tvXml.CreateElement("locked");
tvXml.DocumentElement?.AppendChild(isLockedNode);
isLockedNode.InnerText = "true";
}
if (isCompletedNode != null)
@@ -269,12 +294,9 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
else
{
tvXml.CreateElement("completed");
isCompletedNode = tvXml.SelectSingleNode("//completed");
if (isCompletedNode != null)
{
isCompletedNode.InnerText = "true";
}
isCompletedNode = tvXml.CreateElement("completed");
tvXml.DocumentElement?.AppendChild(isCompletedNode);
isCompletedNode.InnerText = "true";
}
// 保存
@@ -395,12 +417,9 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
else
{
tvXml.CreateElement("locked");
isLockedNode = tvXml.SelectSingleNode("//locked");
if (isLockedNode != null)
{
isLockedNode.InnerText = "true";
}
isLockedNode = seasonXml.CreateElement("locked");
seasonXml.DocumentElement?.AppendChild(isLockedNode);
isLockedNode.InnerText = "true";
}
if (isCompletedNode != null)
@@ -409,12 +428,9 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
else
{
tvXml.CreateElement("completed");
isCompletedNode = tvXml.SelectSingleNode("//completed");
if (isCompletedNode != null)
{
isCompletedNode.InnerText = "true";
}
isCompletedNode = seasonXml.CreateElement("completed");
seasonXml.DocumentElement?.AppendChild(isCompletedNode);
isCompletedNode.InnerText = "true";
}
seasonXml.Save(seasonNfo);
@@ -557,12 +573,9 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
else
{
tvXml.CreateElement("locked");
isLockedNode = tvXml.SelectSingleNode("//locked");
if (isLockedNode != null)
{
isLockedNode.InnerText = "true";
}
isLockedNode = episodeXml.CreateElement("locked");
episodeXml.DocumentElement?.AppendChild(isLockedNode);
isLockedNode.InnerText = "true";
}
if (isCompletedNode != null)
@@ -571,12 +584,9 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
else
{
tvXml.CreateElement("completed");
isCompletedNode = tvXml.SelectSingleNode("//completed");
if (isCompletedNode != null)
{
isCompletedNode.InnerText = "true";
}
isCompletedNode = episodeXml.CreateElement("completed");
episodeXml.DocumentElement?.AppendChild(isCompletedNode);
isCompletedNode.InnerText = "true";
}
// 保存

View File

@@ -133,6 +133,20 @@ public class JobTriggerController : BaseController
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]
public string DiskMonitor()
{