static bool CheckFileWriteAction(WriteToFileAction action, List <string> loadErrors) { if (action.Content is null) { loadErrors.Add($"FileWrite - {nameof(action.Content)}: No items provided in 'Content' list"); return(false); } // Can only modify files in the game path if (!ValidGameFilePath(action.TargetFile)) { loadErrors.Add($"FileWrite - {nameof(action.TargetFile)}: Provided path must be in the [GAME] folder"); return(false); } foreach (var content in action.Content) { if (!string.IsNullOrWhiteSpace(content.DataFilePath) && !string.IsNullOrWhiteSpace(content.Text)) { loadErrors.Add($"FileWrite - {nameof(content.DataFilePath)}/{nameof(content.Text)}: File write action must provide either 'Text' or 'DataFilePath' properties"); return(false); } if (content.Replace && !content.EndOffset.HasValue) { loadErrors.Add($"FileWrite - {nameof(content.Replace)}: File writes with 'Replace' enabled must provide an 'EndOffset' property"); return(false); } } return(true); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jObject = JObject.Load(reader); string actionType = (string)jObject["Action"] ?? string.Empty; ModInstallAction item = null; if (actionType.Equals("MoveFile", StringComparison.InvariantCultureIgnoreCase)) { item = new MoveFileAction(); } else if (actionType.Equals("MoveFiles", StringComparison.InvariantCultureIgnoreCase)) { item = new MoveFilesAction(); } else if (actionType.Equals("DeleteFiles", StringComparison.InvariantCultureIgnoreCase)) { item = new DeleteFilesAction(); } else if (actionType.Equals("ReplaceFile", StringComparison.InvariantCultureIgnoreCase)) { item = new ReplaceFileAction(); } else if (actionType.Equals("ReplaceFiles", StringComparison.InvariantCultureIgnoreCase)) { item = new ReplaceFilesAction(); } else if (actionType.Equals("CopyFile", StringComparison.InvariantCultureIgnoreCase)) { item = new CopyFileAction(); } else if (actionType.Equals("CopyFiles", StringComparison.InvariantCultureIgnoreCase)) { item = new CopyFilesAction(); } else if (actionType.Equals("WriteToFile", StringComparison.InvariantCultureIgnoreCase)) { item = new WriteToFileAction(); } else if (actionType.Equals("QuickBMSExtract", StringComparison.InvariantCultureIgnoreCase)) { item = new QuickBMSExtractAction(); } else if (actionType.Equals("UnluacDecompile", StringComparison.InvariantCultureIgnoreCase)) { item = new UnluacDecompileAction(); } else { item = new ModInstallAction(); } serializer.Populate(jObject.CreateReader(), item); return(item); }