public JsonArray ReadUsedMod() { SSBaseLinkUrl ModFolderPath = InstallationUrl + new SSLinkUrl("mods"); SSMod Dummy = new SSMod(ModFolderPath); SSRelativeUrl rela = new SSRelativeUrl("enabled_mods.json"); SSJson file = new SSJson(Dummy, rela); file.ExtractFile(); JsonToken trying; file.Fields.TryGetValue(".enabledMods", out trying); if (trying == null) { return(new JsonArray()); } return(trying as JsonArray); }
public void CopyTo(SSBaseLinkUrl newPath) { SSBaseUrl InstallationUrl = new SSBaseUrl(newPath.Base); SSFullUrl SourceUrl = InstallationUrl + this.SourceMod.ModUrl.GetLink() + this.RelativeUrl; SSFullUrl TargetUrl = newPath + this.RelativeUrl; FileInfo sourceInfo = new FileInfo(SourceUrl.ToString()); FileInfo targetInfo = new FileInfo(TargetUrl.ToString()); if (targetInfo.Exists) { targetInfo = new FileInfo(TargetUrl.ToString() + SourceMod.ModName); } DirectoryInfo targetDir = targetInfo.Directory; if (!targetDir.Exists) { targetDir.Create(); } sourceInfo.CopyTo(targetInfo.FullName); }
public override void WriteTo(SSBaseLinkUrl newPath) { throw new NotImplementedException(); }
public override void WriteTo(SSBaseLinkUrl newPath) { SSBaseUrl InstallationUrl = new SSBaseUrl(newPath.Base); SSFullUrl TargetUrl = newPath + this.RelativeUrl; //we do not merge core csv on the patch, it would be pointless List <SSCsv> NonCoreFile = (from SSCsv file in this.CommonFiles where file.SourceMod.CurrentType != ModType.Core select file).ToList <SSCsv>(); if (NonCoreFile.Count() == 0) { return; } //we need to make sure the directory exist FileInfo targetInfo = new FileInfo(TargetUrl.ToString()); DirectoryInfo targetDir = targetInfo.Directory; if (!targetDir.Exists) { targetDir.Create(); } Factory csvFactory = new Factory(); //csv merge requires us to match column tutle using (StreamWriter sw = File.CreateText(TargetUrl.ToString())) { CsvWriter csvWriter = new CsvWriter(sw, CultureInfo.InvariantCulture); List <List <String> > allHeaders = new List <List <string> >(); foreach (SSCsv file in NonCoreFile) { SSFullUrl SourceUrl = InstallationUrl + file.SourceMod.ModUrl.GetLink() + file.RelativeUrl; using (StreamReader sr = File.OpenText(SourceUrl.ToString())) { IParser parser = csvFactory.CreateParser(sr, CultureInfo.InvariantCulture); allHeaders.Add(parser.Read().ToList <string>()); } } List <string> finalHeaders = allHeaders.SelectMany(c => c).Distinct().ToList <string>(); //lets write column title once foreach (string head in finalHeaders) { csvWriter.WriteField(head); } csvWriter.NextRecord(); for (int fileIndex = 0; fileIndex < NonCoreFile.Count; fileIndex++) { SSFullUrl SourceUrl = InstallationUrl + NonCoreFile[fileIndex].SourceMod.ModUrl.GetLink() + NonCoreFile[fileIndex].RelativeUrl; List <string> localHeaders = allHeaders[fileIndex]; int[] finalSourceFromLocal = new int[finalHeaders.Count]; for (int finalIndex = 0; finalIndex < finalHeaders.Count; finalIndex++) { finalSourceFromLocal[finalIndex] = localHeaders.FindIndex(c => c == finalHeaders[finalIndex]); } using (StreamReader sr = File.OpenText(SourceUrl.ToString())) { IParser parser = csvFactory.CreateParser(sr, CultureInfo.InvariantCulture); parser.Configuration.AllowComments = true; parser.Configuration.BadDataFound = null; string[] line = parser.Read(); //skip first line that contain headers line = parser.Read(); while (line != null) { if (line.Count() != localHeaders.Count) { line = parser.Read(); continue; } foreach (int source in finalSourceFromLocal) { if (source == -1) { csvWriter.WriteField(""); } else { csvWriter.WriteField(line[source]); } } csvWriter.NextRecord(); line = parser.Read(); } } } } }