public static AddonInfo GetAddonInfo(string _AddonName, string _AddonFolderPath) { AddonInfo addonInfo = new AddonInfo(_AddonName); if (System.IO.Directory.Exists(_AddonFolderPath) == false || System.IO.File.Exists(_AddonFolderPath + "\\" + _AddonName + ".toc") == false) { return(null); } string[] tocLines = System.IO.File.ReadAllLines(_AddonFolderPath + "\\" + _AddonName + ".toc"); List <string> startupFiles = new List <string>(); foreach (var tocLine in tocLines) { try { if (tocLine.StartsWith("##"))//SettingsLine { if (tocLine.StartsWith("## Version:")) { addonInfo.m_VersionString = tocLine.SplitVF("## Version:").Last().Trim(); addonInfo.m_TOCVersionString = true; } else if (tocLine.StartsWith("## Dependencies:")) { string[] dependencies = tocLine.SplitVF("## Dependencies:").Last().Split(','); foreach (var dependency in dependencies) { addonInfo.m_Dependencies.Add(dependency.Trim()); } } else if (tocLine.StartsWith("## RequiredDeps:")) { string[] dependencies = tocLine.SplitVF("## RequiredDeps:").Last().Split(','); foreach (var dependency in dependencies) { addonInfo.m_Dependencies.Add(dependency.Trim()); } } else if (tocLine.StartsWith("## Dep")) { string[] dependencies = tocLine.Substring(tocLine.IndexOf(':') + 1).Split(','); foreach (var dependency in dependencies) { addonInfo.m_Dependencies.Add(dependency.Trim()); } } else if (tocLine.StartsWith("## SavedVariables:")) { string[] dependencies = tocLine.SplitVF("## SavedVariables:").Last().Split(','); foreach (var dependency in dependencies) { addonInfo.m_SavedVariables.Add(dependency.Trim()); } } else if (tocLine.StartsWith("## SavedVariablesPerCharacter:")) { string[] dependencies = tocLine.SplitVF("## SavedVariablesPerCharacter:").Last().Split(','); foreach (var dependency in dependencies) { addonInfo.m_SavedVariablesPerCharacter.Add(dependency.Trim()); } } else if (tocLine.StartsWith("## Title:")) { addonInfo.m_AddonTitle = tocLine.SplitVF("## Title:").Last().Trim(); if (addonInfo.m_AddonTitle.Contains(" v") && addonInfo.m_VersionString == "") { string versionSplit = addonInfo.m_AddonTitle.SplitVF(" v").Last(); versionSplit = versionSplit.Split(' ').First(); if (versionSplit.Contains(".")) { string[] versionNrs = versionSplit.Split('.'); bool isVersionString = true; foreach (string versionNr in versionNrs) { int versionInt; if (int.TryParse(versionNr, out versionInt) == false) { isVersionString = false; break; } } if (isVersionString == true) { addonInfo.m_VersionString = "#TocGuess# " + versionSplit; } } } } else if (tocLine.StartsWith("## Notes:")) { addonInfo.m_Notes = tocLine.Substring(tocLine.IndexOf(':') + 1); } else if (tocLine.StartsWith("## Notes")) { if (addonInfo.m_Notes == "") { addonInfo.m_Notes = tocLine.Substring(tocLine.IndexOf(':') + 1); } } else if (tocLine.StartsWith("## Author:")) { addonInfo.m_Author = tocLine.Substring(tocLine.IndexOf(':') + 1); } } else { startupFiles.Add(tocLine); } } catch (Exception) {} } if (addonInfo.m_AddonName == "SW_Stats" && addonInfo.m_VersionString == "2.0 Beta") { if (System.IO.File.Exists(_AddonFolderPath + "\\neutral.lua") == true) { var neutralFile = System.IO.File.ReadAllText(_AddonFolderPath + "\\neutral.lua"); if (neutralFile.Contains("SW_VERSION = \"2.0 Beta.7\"") == true) { addonInfo.m_VersionString = "2.0 Beta.7"; } } } if (addonInfo.m_VersionString == "") { string lowerCaseAddonName = _AddonName.ToLower(); List <string> addonFiles = Utility.GetFilesInDirectory(_AddonFolderPath, "*.lua"); var addonFilesOrdered = addonFiles.OrderBy((_Value) => { int findIndex = startupFiles.FindIndex((_File) => _File == _Value); if (findIndex != -1) { return(findIndex); } return(startupFiles.Count + lowerCaseAddonName.LevenshteinDistance(_Value.ToLower())); }); foreach (var addonFile in addonFilesOrdered) { DateTime currLastWriteTime = System.IO.File.GetLastWriteTimeUtc(addonFile); if (currLastWriteTime > addonInfo.m_NewestModificationDate) { addonInfo.m_NewestModificationDate = currLastWriteTime; } if (addonInfo.m_VersionString == "") { string[] fileLines = System.IO.File.ReadAllLines(_AddonFolderPath + "\\" + addonFile); foreach (var fileLine in fileLines) { try { string currLineLowered = fileLine.ToLower(); if (currLineLowered.Contains("version") && currLineLowered.Contains(lowerCaseAddonName)) { string variableVersion = fileLine.Split('=').Last().SplitVF("--").First().Trim(); while (variableVersion.EndsWith(";")) { variableVersion = variableVersion.Substring(0, variableVersion.Length - 1).Trim(); } addonInfo.m_VersionString = "#LuaGuess# " + variableVersion.Replace("\"", ""); break; } } catch (Exception) { } } } } } else { List <string> addonFiles = Utility.GetFilesInDirectory(_AddonFolderPath, "*.lua"); foreach (var addonFile in addonFiles) { DateTime currLastWriteTime = System.IO.File.GetLastWriteTimeUtc(addonFile); if (currLastWriteTime > addonInfo.m_NewestModificationDate) { addonInfo.m_NewestModificationDate = currLastWriteTime; } } } return(addonInfo); }