mirror of
https://github.com/revenz/FileFlowsPlugins.git
synced 2025-12-30 23:29:29 -06:00
FF-1520: Added flow element to create comicinfo.xml
This commit is contained in:
@@ -59,7 +59,7 @@ public class CreateComicInfo : Node
|
||||
return 2;
|
||||
}
|
||||
|
||||
var info = GetInfo(args.Logger, args.LibraryFileName, Publisher);
|
||||
var info = GetInfo(args.Logger, args.LibraryFileName, args.LibraryPath, Publisher);
|
||||
if (info.Failed(out error))
|
||||
{
|
||||
args.FailureReason = error;
|
||||
@@ -102,9 +102,10 @@ public class CreateComicInfo : Node
|
||||
/// </summary>
|
||||
/// <param name="logger">the logger to log with</param>
|
||||
/// <param name="libraryFile">the library filename to use</param>
|
||||
/// <param name="libraryPath">the library path</param>
|
||||
/// <param name="publisher">if there is a publisher folder</param>
|
||||
/// <returns>the comic info</returns>
|
||||
public static Result<ComicInfo> GetInfo(ILogger? logger, string libraryFile, bool publisher)
|
||||
public static Result<ComicInfo> GetInfo(ILogger? logger, string libraryFile, string libraryPath, bool publisher)
|
||||
{
|
||||
// Publisher / Series (year?) / Title - #number (of #)- Issue Title.extension
|
||||
ComicInfo info = new();
|
||||
@@ -115,10 +116,12 @@ public class CreateComicInfo : Node
|
||||
if (yearMatch.Success)
|
||||
{
|
||||
info.Volume = yearMatch.Groups["year"].Value;
|
||||
info.Series = Regex.Replace(info.Series, @"\((19|20)\d{2}\)", "").Trim();
|
||||
// info.Series = Regex.Replace(info.Series, @"\((19|20)\d{2}\)", "").Trim();
|
||||
}
|
||||
|
||||
info.Publisher = publisher ? FileHelper.GetDirectoryName(FileHelper.GetDirectory(libraryFile)) : null;
|
||||
string relative = libraryFile[(libraryPath.Length + 1)..];
|
||||
|
||||
info.Publisher = publisher ? relative.Replace("\\", "/").Split('/').First() : null;
|
||||
string shortname = FileHelper.GetShortFileName(libraryFile);
|
||||
info.Tags = GetTags(ref shortname);
|
||||
shortname = shortname[..shortname.LastIndexOf('.')];
|
||||
@@ -140,7 +143,15 @@ public class CreateComicInfo : Node
|
||||
}
|
||||
else
|
||||
{
|
||||
logger?.WLog("Issue number not found in: " + parts[1]);
|
||||
var volMatch = Regex.Match(parts[1], @"\b[Vv](?:olume|ol)?\s*(\d+)\b", RegexOptions.IgnoreCase);
|
||||
if (volMatch.Success)
|
||||
{
|
||||
info.Volume = "Volume " + int.Parse(volMatch.Groups[1].Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger?.WLog("Issue number not found in: " + parts[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (parts.Length > 2)
|
||||
|
||||
@@ -12,7 +12,8 @@ public class ComicInfoTests : TestBase
|
||||
public void Basic()
|
||||
{
|
||||
var result = CreateComicInfo.GetInfo(Logger,
|
||||
"/home/john/comics/DC/Batman (1939)/Batman - #1 - Batman vs. Joker [old] [great] [amazing].cbr", true);
|
||||
"/home/john/Comics/DC/Batman (1939)/Batman - #1 - Batman vs. Joker [old] [great] [amazing].cbr",
|
||||
"/home/john/Comics",true);
|
||||
|
||||
TestContext.WriteLine(Logger.ToString());
|
||||
|
||||
@@ -20,7 +21,7 @@ public class ComicInfoTests : TestBase
|
||||
var info = result.Value;
|
||||
Assert.IsNotNull(info);
|
||||
Assert.AreEqual("DC", info.Publisher);
|
||||
Assert.AreEqual("Batman", info.Series);
|
||||
Assert.AreEqual("Batman (1939)", info.Series);
|
||||
Assert.AreEqual("1939", info.Volume);
|
||||
Assert.AreEqual("Batman vs. Joker", info.Title);
|
||||
Assert.AreEqual(3, info.Tags.Length);
|
||||
@@ -33,7 +34,55 @@ public class ComicInfoTests : TestBase
|
||||
TestContext.WriteLine(new string('-', 70));
|
||||
TestContext.WriteLine(xml);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void VolumeYear()
|
||||
{
|
||||
var result = CreateComicInfo.GetInfo(Logger,
|
||||
"/home/john/Comics/actual/DC/He-Man and the Masters of the Universe/He-Man and the Masters of the Universe (2013)/He-Man and the Masters of the Universe - #001 - Desperate Times.cbr",
|
||||
"/home/john/Comics/actual",
|
||||
true);
|
||||
|
||||
TestContext.WriteLine(Logger.ToString());
|
||||
|
||||
Assert.IsFalse(result.IsFailed);
|
||||
var info = result.Value;
|
||||
Assert.IsNotNull(info);
|
||||
Assert.AreEqual("DC", info.Publisher);
|
||||
Assert.AreEqual("He-Man and the Masters of the Universe (2013)", info.Series);
|
||||
Assert.AreEqual("2013", info.Volume);
|
||||
Assert.AreEqual("Desperate Times", info.Title);
|
||||
|
||||
var xml = CreateComicInfo.SerializeToXml(info);
|
||||
Assert.IsFalse(string.IsNullOrWhiteSpace(xml));
|
||||
TestContext.WriteLine(new string('-', 70));
|
||||
TestContext.WriteLine(xml);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Volume()
|
||||
{
|
||||
var result = CreateComicInfo.GetInfo(Logger,
|
||||
"/home/john/Comics/Marvel/Ultimate Spider-Man (2000)/Ultimate Spider-Man - v05 - Public Scrutiny.cbz",
|
||||
"/home/john/Comics",
|
||||
true);
|
||||
|
||||
TestContext.WriteLine(Logger.ToString());
|
||||
|
||||
Assert.IsFalse(result.IsFailed);
|
||||
var info = result.Value;
|
||||
Assert.IsNotNull(info);
|
||||
Assert.AreEqual("Marvel", info.Publisher);
|
||||
Assert.AreEqual("Ultimate Spider-Man (2000)", info.Series);
|
||||
Assert.AreEqual("Volume 5", info.Volume);
|
||||
Assert.AreEqual("Public Scrutiny", info.Title);
|
||||
|
||||
var xml = CreateComicInfo.SerializeToXml(info);
|
||||
Assert.IsFalse(string.IsNullOrWhiteSpace(xml));
|
||||
TestContext.WriteLine(new string('-', 70));
|
||||
TestContext.WriteLine(xml);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PhysicalFileTest()
|
||||
{
|
||||
@@ -42,7 +91,8 @@ public class ComicInfoTests : TestBase
|
||||
var logger = new TestLogger();
|
||||
var args = new NodeParameters(FILE, logger, false, string.Empty, new LocalFileService())
|
||||
{
|
||||
LibraryFileName = FILE
|
||||
LibraryFileName = FILE,
|
||||
LibraryPath = "/home/john/Comics"
|
||||
};
|
||||
args.TempPath = TempPath;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user