diff --git a/Ikkoku/src/CommandLine/ConvertCmd.cs b/Ikkoku/src/CommandLine/ConvertCmd.cs index bdbfe6e..e39a0af 100644 --- a/Ikkoku/src/CommandLine/ConvertCmd.cs +++ b/Ikkoku/src/CommandLine/ConvertCmd.cs @@ -1,5 +1,6 @@ using Mobsub.Ikkoku.SubtileProcess; using Mobsub.SubtitleParse.AssTypes; +using Mobsub.SubtitleParse.PGS; using System.CommandLine; namespace Mobsub.Ikkoku.CommandLine; @@ -62,11 +63,6 @@ internal static void ConvertSubtitle(FileInfo fromFile, FileSystemInfo? optPath, break; } - var optFile = Utils.ChangeSuffix(fromFile, optDir, convertSuffix); - var fs = new FileStream(optFile.FullName, FileMode.Create, FileAccess.Write); - using var memStream = new MemoryStream(); - using var sw = new StreamWriter(memStream, SubtitleParse.Utils.EncodingRefOS()); - switch (fromFile.Extension) { case ".ass": @@ -76,23 +72,33 @@ internal static void ConvertSubtitle(FileInfo fromFile, FileSystemInfo? optPath, switch (convertSuffix) { case ".txt": - ConvertSub.ConvertAssToTxt(sw, ass); + var optFile = Utils.ChangeSuffix(fromFile, optDir, convertSuffix); + var fs = new FileStream(optFile.FullName, FileMode.Create, FileAccess.Write); + using (var memStream = new MemoryStream()) + { + using var sw = new StreamWriter(memStream, SubtitleParse.Utils.EncodingRefOS()); + ConvertSub.ConvertAssToTxt(sw, ass); + sw.Flush(); + memStream.Seek(0, SeekOrigin.Begin); + memStream.CopyTo(fs); + } + break; + default: + throw new NotImplementedException($"Unsupport: {fromFile.Extension} convert to {convertSuffix}."); + } + break; + case ".sup": + switch (convertSuffix) + { + case ".bmp": + PGSData.DecodeImages(fromFile.FullName, optDir.FullName); break; default: - // fs.Close(); throw new NotImplementedException($"Unsupport: {fromFile.Extension} convert to {convertSuffix}."); } - break; default: - // fs.Close(); throw new NotImplementedException($"Unsupport: {fromFile.Extension}."); } - - sw.Flush(); - - memStream.Seek(0, SeekOrigin.Begin); - memStream.CopyTo(fs); - // fs.Close(); } } diff --git a/Ikkoku/src/Program.cs b/Ikkoku/src/Program.cs index e2c704e..3045894 100644 --- a/Ikkoku/src/Program.cs +++ b/Ikkoku/src/Program.cs @@ -21,7 +21,7 @@ static async Task Main(string[] args) switch (p) { case FileInfo f: - if (!(f.Name.EndsWith(".ass") || f.Name.EndsWith(".txt"))) + if (!(f.Name.EndsWith(".ass") || f.Name.EndsWith(".txt") || f.Name.EndsWith(".sup"))) { result.ErrorMessage = "You should input .ass or txt file or a directory."; }