paradox-mod-merger/Clear.cs
2023-02-04 03:15:06 +06:00

71 lines
2.9 KiB
C#

namespace ParadoxModMerger;
static class Clear
{
static ConsoleLogger logger = new($"logs", "clear");
static void Log(params string[] msg) => logger.Log(msg);
public static void ClearWorkshop(string workshopDir, string outDir)
{
string[] moddirs = Directory.GetDirectories(workshopDir);
Log("b", $"found {moddirs.Length} mod dirs");
for (int i = 0; i < moddirs.Length; i++)
{
string modarch = "";
if (Directory.GetFiles(moddirs[i], "*.zip").Length != 0)
modarch = Directory.GetFiles(moddirs[i], "*.zip")[0];
if (modarch.Length != 0)
{
Log("y", $"archive found: {modarch}");
var pr = new Process();
pr.StartInfo.CreateNoWindow = true;
pr.StartInfo.UseShellExecute = false;
pr.StartInfo.FileName = Path.Concat("7z", "7z.exe");
pr.StartInfo.Arguments = $"x -y -o _UNZIP \"{modarch}\"";
pr.Start();
pr.WaitForExit();
moddirs[i] = "_UNZIP";
Log("g", "\tfiles extracted");
}
string modname = File.ReadAllText(Path.Concat(moddirs[i], "descriptor.mod"));
modname = modname.Remove(0, modname.IndexOf("name=\"", StringComparison.Ordinal) + 6);
modname = Path.CorrectString(modname.Remove(modname.IndexOf("\"", StringComparison.Ordinal)));
Log("b", $"[{i + 1}/{moddirs.Length}] copying mod ", "c", $"{modname}");
string[] subdirs = Directory.GetDirectories(moddirs[i]);
for (sbyte n = 0; n < subdirs.Length; n++)
{
subdirs[n] = subdirs[n].Remove(0, subdirs[n].LastIndexOf(Path.Sep) + 1);
switch (subdirs[n])
{
// stellaris
case "common":
case "events":
case "flags":
case "fonts":
case "gfx":
case "interface":
case "localisation":
case "localisation_synced":
case "map":
case "music":
case "prescripted_countries":
case "sound":
// hoi4
case "history":
case "portraits":
{
Directory.Copy(Path.Concat(moddirs[i], subdirs[n]),
Path.Concat(outDir, modname, subdirs[n]),
out List<string> _conflicts, true);
Program.LogConflicts(_conflicts);
break;
}
}
}
if (Directory.Exists("_UNZIP")) Directory.Delete("_UNZIP");
}
}
}