/// <summary> /// Converts this object to the text on disk /// </summary> /// <returns></returns> public string ToCMMText() { var metaOutLines = new List <string>(); // Write out MetaCMM Classic metaOutLines.Add(ModName); metaOutLines.Add(Version); metaOutLines.Add(InstalledBy); metaOutLines.Add(Guid.NewGuid().ToString()); // This is not used in Mod Manager 6 // Write MetaCMM Extended if (IncompatibleDLC.Any()) { metaOutLines.Add($@"{MetaCMM.PrefixIncompatibleDLC}{string.Join(';', IncompatibleDLC)}"); } if (OptionsSelectedAtInstallTime.Any()) { // I hope this covers all cases. Mods targeting moddesc 6 or lower don't need friendlyname or description, but virtually all of them did // as MM4/5 autonaming was ugly metaOutLines.Add($@"{MetaCMM.PrefixOptionsSelectedOnInstall}{string.Join(';', OptionsSelectedAtInstallTime)}"); } return(string.Join('\n', metaOutLines)); }
private void parseMetaCmm(bool disabled, bool modNamePrefersTPMI) { DLCFolderNameString = DLCFolderName.TrimStart('x'); //this string is not to show M3L.GetString(M3L.string_disabled) var metaFile = Path.Combine(dlcFolderPath, @"_metacmm.txt"); if (File.Exists(metaFile)) { InstalledByManagedSolution = true; InstalledBy = M3L.GetString(M3L.string_installedByModManager); //Default value when finding metacmm. MetaCMM mcmm = new MetaCMM(metaFile); if (DLCFolderNameString != ModName && mcmm.ModName != ModName) { DLCFolderNameString += $@" ({ModName})"; if (!modNamePrefersTPMI || ModName == null) { ModName = mcmm.ModName; } } ModName = mcmm.ModName; Version = mcmm.Version; InstallerInstanceBuild = mcmm.InstalledBy; if (int.TryParse(InstallerInstanceBuild, out var _)) { InstalledBy = M3L.GetString(M3L.string_installedByModManager); } else { InstalledBy = M3L.GetString(M3L.string_interp_installedByX, InstallerInstanceBuild); } // MetaCMM Extended if (mcmm.OptionsSelectedAtInstallTime != null) { ChosenInstallOptions.ReplaceAll(mcmm.OptionsSelectedAtInstallTime); } if (mcmm.IncompatibleDLC != null) { IncompatibleDLC.ReplaceAll(mcmm.IncompatibleDLC); } } else { InstalledBy = M3L.GetString(M3L.string_notInstalledByModManager); } if (disabled) { DLCFolderNameString += @" - " + M3L.GetString(M3L.string_disabled); } }
public MetaCMM(string metaFile) { var lines = File.ReadAllLines(metaFile); int i = 0; foreach (var line in lines) { switch (i) { case 0: ModName = line; break; case 1: Version = line; break; case 2: InstalledBy = line; break; case 3: InstallerInstanceGUID = line; break; default: // MetaCMM Extended if (line.StartsWith(PrefixOptionsSelectedOnInstall)) { var parsedline = line.Substring(PrefixOptionsSelectedOnInstall.Length); OptionsSelectedAtInstallTime.ReplaceAll(StringStructParser.GetSemicolonSplitList(parsedline)); } else if (line.StartsWith(PrefixIncompatibleDLC)) { var parsedline = line.Substring(PrefixIncompatibleDLC.Length); IncompatibleDLC.ReplaceAll(StringStructParser.GetSemicolonSplitList(parsedline)); } break; } i++; } }
public void WriteMetaCMM(string path) { StringBuilder sb = new StringBuilder(); sb.AppendLine(ModName); sb.AppendLine(Version); sb.AppendLine(InstalledBy ?? App.BuildNumber.ToString()); sb.AppendLine(InstallerInstanceGUID); // MetaCMM Extended if (OptionsSelectedAtInstallTime.Any()) { sb.AppendLine($@"{PrefixOptionsSelectedOnInstall}{string.Join(';', OptionsSelectedAtInstallTime)}"); } if (IncompatibleDLC.Any()) { sb.AppendLine($@"{PrefixIncompatibleDLC}{string.Join(';', IncompatibleDLC)}"); } File.WriteAllText(path, sb.ToString()); }