public void WriteScriptToMicrocontroller(LuaScript luaScript) { Console.WriteLine($"Local lua file '{luaScript.LuaFileName}' object ID {luaScript.ObjectId} script changed."); if (!File.Exists(luaScript.VehicleXmlPath)) { Console.WriteLine($"Target vehicle file '{luaScript.VehicleXmlPath}' not found."); return; } var processedScript = ProcessScript(luaScript); if (processedScript == null) { return; } if (!FileHelper.TryWriteFile(luaScript.MinifiedLuaPath, processedScript)) { return; } var currentScript = ScriptExtractHelper.GetScriptFromXmlFile(luaScript.VehicleXmlPath, luaScript.ObjectId); if (currentScript == null) { Console.WriteLine($"Failed to find the Lua object with ID {luaScript.ObjectId} in vehicle file '{luaScript.VehicleXmlPath}'."); return; } if (currentScript == processedScript) { Console.WriteLine($"Script {luaScript.ObjectId} hasn't changed compared to the vehicle XML."); return; } var currentXml = FileHelper.NoTouchReadFile(luaScript.VehicleXmlPath); // Backup if (!BackupFileHelper.BackupFile(currentXml, luaScript.VehicleXmlFileName)) { return; } processedScript = WebUtility.HtmlEncode(processedScript); var pattern = Statics.ObjectMatchPattern(luaScript.ObjectId); var newXml = Regex.Replace(currentXml, pattern, "<object id=\"${id}\" script='" + processedScript + "'>"); // Overwrite if (!FileHelper.TryWriteFile(luaScript.VehicleXmlPath, newXml)) { return; } Console.WriteLine($"Updated vehicle {luaScript.VehicleName} XML with new script with ID {luaScript.ObjectId}."); }
private void VehicleChanged(string xmlfilepath) { if (xmlfilepath == _ignoreNextVehicleUpdatePath) { _ignoreNextVehicleUpdatePath = null; return; } var savedVehicleScripts = ScriptExtractHelper.ExtractScriptsFromMicrocontrollerXml(xmlfilepath).ToList(); var previouslyExtractedScripts = _luaScripts.Where(ls => ls.VehicleXmlPath == xmlfilepath).ToList(); var newScripts = savedVehicleScripts.Where(vs => previouslyExtractedScripts.All(nvs => nvs.ObjectId != vs.ObjectId)); var deletedScripts = previouslyExtractedScripts.Where(vs => savedVehicleScripts.All(nvs => nvs.ObjectId != vs.ObjectId)).ToList(); foreach (var newScript in newScripts) { _luaScripts.Add(newScript); _ignoreNextLuaUpdatePaths.Add(newScript.LuaFilePath); _xmlToLocalLuaWriteService.WriteVehicleLuaScriptToFile(newScript); } foreach (var deletedScript in deletedScripts) { _luaScripts.Remove(deletedScript); var deletedScriptContent = FileHelper.NoTouchReadFile(deletedScript.LuaFilePath); if (!BackupFileHelper.BackupFile(deletedScriptContent, deletedScript.LuaFileName)) { continue; } File.Delete(deletedScript.LuaFilePath); File.Delete(deletedScript.MinifiedLuaPath); } foreach (var existingScript in previouslyExtractedScripts.Except(deletedScripts)) { _ignoreNextLuaUpdatePaths.Add(existingScript.LuaFilePath); if (!_xmlToLocalLuaWriteService.WriteVehicleLuaScriptToFile(existingScript)) { _ignoreNextLuaUpdatePaths.Remove(existingScript.LuaFilePath); } } }
public bool WriteVehicleLuaScriptToFile(LuaScript luaScript) { Console.WriteLine($"Extracting Lua scripts from vehicle '{luaScript.VehicleName}'"); var vehicleXmlScript = ScriptExtractHelper.GetScriptFromXmlFile(luaScript.VehicleXmlPath, luaScript.ObjectId); var isMinifiedScript = vehicleXmlScript.EndsWith(Constants.MinifiedScriptSuffix); if (File.Exists(luaScript.LuaFilePath)) { var currentLocalScript = FileHelper.NoTouchReadFile(isMinifiedScript ? luaScript.MinifiedLuaPath : luaScript.LuaFilePath); if (currentLocalScript == vehicleXmlScript) { Console.WriteLine($"Nothing changed for script {luaScript.ObjectId} from vehicle {luaScript.VehicleName}."); return(false); } if (isMinifiedScript) { ConsoleHelper.WriteWarning($"Script {luaScript.ObjectId} in microcontroller {luaScript.MicrocontrollerName} in vehicle {luaScript.VehicleName} was changed, but it's a minified script. Not updating local file."); return(false); } // Backup if (!BackupFileHelper.BackupFile(currentLocalScript, luaScript.MinifiedLuaFileName)) { return(false); } } Directory.CreateDirectory(Path.GetDirectoryName(luaScript.LuaFilePath)); FileHelper.TryWriteFile(luaScript.LuaFilePath, vehicleXmlScript); FileHelper.TryWriteFile(luaScript.MinifiedLuaPath, vehicleXmlScript); Console.WriteLine($"Wrote script {luaScript.ObjectId} from vehicle {luaScript.VehicleName} to {luaScript.LuaFileName}."); return(true); }