diff --git a/.gitignore b/.gitignore
index 28d9e23..6a50bc2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
node_modules/
.mcattributes
package-lock.json
-dist/
\ No newline at end of file
+dist/
+dist_debug/
+ccIDE.wheel
\ No newline at end of file
diff --git a/TestProject/geoscanner (example 4).ccp b/TestProject/geoscanner (example 4).ccp
new file mode 100644
index 0000000..532299b
--- /dev/null
+++ b/TestProject/geoscanner (example 4).ccp
@@ -0,0 +1 @@
+{"usedlibrary":["Advanced_Peripherals","CCPeripheral","CCTextutils","NativeIO"],"content":{"blocks":{"languageVersion":0,"blocks":[{"type":"ide_start","id":"_s{i,SzdnGk`iz}V{Ef,","x":30,"y":150,"inputs":{"DO":{"block":{"type":"variables_set","id":"4`t0A~mi9udqazuPFltl","fields":{"VAR":{"id":"b!G3HI*3Su-;s=l@m`{C"}},"inputs":{"VALUE":{"block":{"type":"io_open","id":"{s9Q{?YzVj[IT}u~g52k","fields":{"MODE":"w"},"inputs":{"FILENAME":{"block":{"type":"text","id":"}r@r{xS9G6@i@C{jDAOG","fields":{"TEXT":"test.json"}}}}}}},"next":{"block":{"type":"variables_set","id":"la(`]]2fjOy@W3|#H+j5","fields":{"VAR":{"id":"!60`+fJsl+LMzF5L;((_"}},"inputs":{"VALUE":{"block":{"type":"peripheral_wrap","id":"#gIy8pYRI5r;|Gpt((6D","inputs":{"NAME":{"shadow":{"type":"text","id":"s1SZ;+Ll-[Dn*[yCTh4^","fields":{"TEXT":"geoScanner_1"}}}}}}},"next":{"block":{"type":"io_write","id":"cXQ`rD/MHKTs*S:asoq`","inputs":{"DATA":{"shadow":{"type":"text","id":"j_Am~Q@Lu.p2e[cVK%_+","fields":{"TEXT":"Hello, world!"}},"block":{"type":"textutils_serialize_json","id":"7D;X/4FI7*aP+^+JG]w~","fields":{"NBT":false,"UNICODE":false,"ALLOWREPETI":false},"inputs":{"OBJECT":{"block":{"type":"advanced_peripherals_geo_scanner_scan","id":"=uxVRL!ZaUB=t@-]@;`4","inputs":{"RADIUS":{"shadow":{"type":"math_number","id":"e5oF_eP.dd+gJ@3YxYYJ","fields":{"NUM":2}}},"SCANNER":{"block":{"type":"variables_get","id":"Y`peao|kXro)ax|@x8v*","fields":{"VAR":{"id":"!60`+fJsl+LMzF5L;((_"}}}}}}}}}},"FILE":{"block":{"type":"variables_get","id":"-iS.RqK;e21F_P4Psbm+","fields":{"VAR":{"id":"b!G3HI*3Su-;s=l@m`{C"}}}}}}}}}}}}}]},"variables":[{"name":"scanner","id":"!60`+fJsl+LMzF5L;((_"},{"name":"file","id":"b!G3HI*3Su-;s=l@m`{C"}]}}
\ No newline at end of file
diff --git a/assets/dpsoftware.png b/assets/dpsoftware.png
new file mode 100644
index 0000000..6d52394
Binary files /dev/null and b/assets/dpsoftware.png differ
diff --git a/blocks/Advanced_Peripherals/block_design.json b/blocks/Advanced_Peripherals/block_design.json
index 59137eb..476aa3e 100644
--- a/blocks/Advanced_Peripherals/block_design.json
+++ b/blocks/Advanced_Peripherals/block_design.json
@@ -1199,5 +1199,314 @@
"colour": 200,
"tooltip": "Writes NBT data into the block.",
"helpUrl": "https://advancedperipherals.netlify.app/peripherals/nbt_storage/#writetable"
+ },
+
+ "advanced_peripherals_block_reader_get_block_name": {
+ "message0": "Get current block name in front of reader %1",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "READER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "String",
+ "colour": 200,
+ "tooltip": "Returns the registry name of the block (ex. minecraft:dirt)"
+ },
+ "advanced_peripherals_block_reader_get_block_data": {
+ "message0": "Get current block data in front of reader %1",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "READER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Array",
+ "colour": 200,
+ "tooltip": "Returns the block data of the block if block is a tile entity."
+ },
+ "advanced_peripherals_block_reader_get_block_states": {
+ "message0": "Get current block states in front of reader %1",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "READER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Array",
+ "colour": 200,
+ "tooltip": "Returns the properties of a block and its state."
+ },
+ "advanced_peripherals_block_reader_is_tile_entity": {
+ "message0": "Is entity in front of reader %1",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "READER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Boolean",
+ "colour": 200,
+ "tooltip": "Returns true whether the block is a tile entity or not."
+ },
+
+ "advanced_peripherals_geo_scanner_get_fuel_level": {
+ "message0": "Get current fuel level from scanner %1",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "SCANNER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Number",
+ "colour": 200,
+ "tooltip": "Returns the amount of stored fuel."
+ },
+ "advanced_peripherals_geo_scanner_get_max_fuel_level": {
+ "message0": "Get max fuel level from scanner %1",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "SCANNER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Number",
+ "colour": 200,
+ "tooltip": "Returns the maximum amount of possible stored fuel."
+ },
+ "advanced_peripherals_geo_scanner_cost": {
+ "message0": "Calculate cost for scan in radius %1 with scanner %2",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "RADIUS",
+ "check": "Number"
+ },
+ {
+ "type": "input_value",
+ "name": "SCANNER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Number",
+ "colour": 200,
+ "tooltip": "Returns the cost in FE for a scan with the given radius."
+ },
+ "advanced_peripherals_geo_scanner_scan": {
+ "message0": "Scan in radius %1 with scanner %2",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "RADIUS",
+ "check": "Number"
+ },
+ {
+ "type": "input_value",
+ "name": "SCANNER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": ["Array", "String"],
+ "colour": 200,
+ "tooltip": "Returns a list of data about all blocks in the radius. Or if the scan fails it returns nil and an error message.",
+ "helpUrl": "https://advancedperipherals.netlify.app/peripherals/geo_scanner/#scan"
+ },
+ "advanced_peripherals_geo_get_scan_cooldown": {
+ "message0": "Get cooldown scan time from scanner %1",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "SCANNER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Number",
+ "colour": 200,
+ "tooltip": "Returns the current time remaining until then next scan() can be ran."
+ },
+ "advanced_peripherals_geo_chunk_analyze": {
+ "message0": "Analyze current chunk with scanner %1",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "SCANNER",
+ "check": "Peripheral"
+ }
+ ],
+ "output": ["Array", "String"],
+ "colour": 200,
+ "tooltip": "Returns a table of data about how many of each ore type is in the block's chunk. Or if the analyze fails it returns nil and an error message."
+ },
+
+ "advanced_peripherals_redstone_integrator_get_input": {
+ "message0": "Get redstone input from side %1 of integrator %2",
+ "args0": [
+ {
+ "type": "field_dropdown",
+ "name": "SIDE",
+ "options": [
+ ["Top", "top"],
+ ["Bottom", "bottom"],
+ ["North", "north"],
+ ["East", "east"],
+ ["West", "west"],
+ ["South", "south"]
+ ]
+ },
+ {
+ "type": "input_value",
+ "name": "INTEGRATOR",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Boolean",
+ "colour": 200,
+ "tooltip": "Returns true or false depending on if the redstone at the given side is on."
+ },
+ "advanced_peripherals_redstone_integrator_get_output": {
+ "message0": "Get redstone output from side %1 of integrator %2",
+ "args0": [
+ {
+ "type": "field_dropdown",
+ "name": "SIDE",
+ "options": [
+ ["Top", "top"],
+ ["Bottom", "bottom"],
+ ["North", "north"],
+ ["East", "east"],
+ ["West", "west"],
+ ["South", "south"]
+ ]
+ },
+ {
+ "type": "input_value",
+ "name": "INTEGRATOR",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Boolean",
+ "colour": 200,
+ "tooltip": "Returns true or false depending on if the Redstone Integrator is sending a signal to the given side."
+ },
+ "advanced_peripherals_redstone_integrator_get_analog_input": {
+ "message0": "Get redstone analog input from side %1 of integrator %2",
+ "args0": [
+ {
+ "type": "field_dropdown",
+ "name": "SIDE",
+ "options": [
+ ["Top", "top"],
+ ["Bottom", "bottom"],
+ ["North", "north"],
+ ["East", "east"],
+ ["West", "west"],
+ ["South", "south"]
+ ]
+ },
+ {
+ "type": "input_value",
+ "name": "INTEGRATOR",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Number",
+ "colour": 200,
+ "tooltip": "Returns the redstone level input on the given side. (0-15)"
+ },
+ "advanced_peripherals_redstone_integrator_get_analog_output": {
+ "message0": "Get redstone analog output from side %1 of integrator %2",
+ "args0": [
+ {
+ "type": "field_dropdown",
+ "name": "SIDE",
+ "options": [
+ ["Top", "top"],
+ ["Bottom", "bottom"],
+ ["North", "north"],
+ ["East", "east"],
+ ["West", "west"],
+ ["South", "south"]
+ ]
+ },
+ {
+ "type": "input_value",
+ "name": "INTEGRATOR",
+ "check": "Peripheral"
+ }
+ ],
+ "output": "Number",
+ "colour": 200,
+ "tooltip": "Returns the redstone level being output by the Redstone Integrator on the given side. (0-15)"
+ },
+ "advanced_peripherals_redstone_integrator_set_output": {
+ "message0": "Set redstone output %1 to side %2 of integrator %3",
+ "args0": [
+ {
+ "type": "field_dropdown",
+ "name": "POWERED",
+ "options": [
+ ["On", "ON"],
+ ["Off", "OFF"]
+ ]
+ },
+ {
+ "type": "field_dropdown",
+ "name": "SIDE",
+ "options": [
+ ["Top", "top"],
+ ["Bottom", "bottom"],
+ ["North", "north"],
+ ["East", "east"],
+ ["West", "west"],
+ ["South", "south"]
+ ]
+ },
+ {
+ "type": "input_value",
+ "name": "INTEGRATOR",
+ "check": "Peripheral"
+ }
+ ],
+ "previousStatement": null,
+ "nextStatement": null,
+ "colour": 200,
+ "tooltip": "Sets the redstone level output to 0 or 15 on the given side depending on powered."
+ },
+ "advanced_peripherals_redstone_integrator_set_analog_output": {
+ "message0": "Set redstone analog output level %1 to side %2 of integrator %3",
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "POWER",
+ "check": "Number"
+ },
+ {
+ "type": "field_dropdown",
+ "name": "SIDE",
+ "options": [
+ ["Top", "top"],
+ ["Bottom", "bottom"],
+ ["North", "north"],
+ ["East", "east"],
+ ["West", "west"],
+ ["South", "south"]
+ ]
+ },
+ {
+ "type": "input_value",
+ "name": "INTEGRATOR",
+ "check": "Peripheral"
+ }
+ ],
+ "previousStatement": null,
+ "nextStatement": null,
+ "colour": 200,
+ "tooltip": "Sets the redstone level output on the given side to the given power level. (0-15)"
}
}
diff --git a/blocks/Advanced_Peripherals/generator.js b/blocks/Advanced_Peripherals/generator.js
index 5283c23..275d6f1 100644
--- a/blocks/Advanced_Peripherals/generator.js
+++ b/blocks/Advanced_Peripherals/generator.js
@@ -433,4 +433,123 @@ luaGenerator.forBlock['advanced_peripherals_nbt_storage_write_table'] = function
var nbtstorage = generator.valueToCode(block, 'NBTDEV', generator.ORDER_ATOMIC);
return `${nbtstorage}.writeTable(${nbt})\n`;
+};
+
+// Generator for Block Reader
+
+luaGenerator.forBlock['advanced_peripherals_block_reader_get_block_name'] = function(block, generator) {
+ var reader = generator.valueToCode(block, 'READER', generator.ORDER_ATOMIC);
+
+ return [`${reader}.getBlockName()`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_block_reader_get_block_data'] = function(block, generator) {
+ var reader = generator.valueToCode(block, 'READER', generator.ORDER_ATOMIC);
+
+ return [`${reader}.getBlockData()`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_block_reader_get_block_states'] = function(block, generator) {
+ var reader = generator.valueToCode(block, 'READER', generator.ORDER_ATOMIC);
+
+ return [`${reader}.getBlockStates()`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_block_reader_is_tile_entity'] = function(block, generator) {
+ var reader = generator.valueToCode(block, 'READER', generator.ORDER_ATOMIC);
+
+ return [`${reader}.isTileEntity()`, luaGenerator.ORDER_NONE];
+};
+
+// Generator for Geo Scanner
+
+luaGenerator.forBlock['advanced_peripherals_geo_scanner_get_fuel_level'] = function(block, generator) {
+ var scanner = generator.valueToCode(block, 'SCANNER', generator.ORDER_ATOMIC);
+
+ return [`${scanner}.getFuelLevel()`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_geo_scanner_get_max_fuel_level'] = function(block, generator) {
+ var scanner = generator.valueToCode(block, 'SCANNER', generator.ORDER_ATOMIC);
+
+ return [`${scanner}.getMaxFuelLevel()`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_geo_scanner_cost'] = function(block, generator) {
+ var radius = generator.valueToCode(block, 'RADIUS', generator.ORDER_ATOMIC);
+ var scanner = generator.valueToCode(block, 'SCANNER', generator.ORDER_ATOMIC);
+
+ return [`${scanner}.cost(${radius})`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_geo_scanner_scan'] = function(block, generator) {
+ var radius = generator.valueToCode(block, 'RADIUS', generator.ORDER_ATOMIC);
+ var scanner = generator.valueToCode(block, 'SCANNER', generator.ORDER_ATOMIC);
+
+ return [`${scanner}.scan(${radius})`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_geo_get_scan_cooldown'] = function(block, generator) {
+ var scanner = generator.valueToCode(block, 'SCANNER', generator.ORDER_ATOMIC);
+
+ return [`${scanner}.getScanCooldown()`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_geo_chunk_analyze'] = function(block, generator) {
+ var scanner = generator.valueToCode(block, 'SCANNER', generator.ORDER_ATOMIC);
+
+ return [`${scanner}.chunkAnalyze()`, luaGenerator.ORDER_NONE];
+};
+
+// Generator for Redstone Integrator
+
+luaGenerator.forBlock['advanced_peripherals_redstone_integrator_get_input'] = function(block, generator) {
+ var side = block.getFieldValue('SIDE');
+ var integrator = generator.valueToCode(block, 'INTEGRATOR', generator.ORDER_ATOMIC);
+
+ return [`${integrator}.getInput("${side}")`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_redstone_integrator_get_output'] = function(block, generator) {
+ var side = block.getFieldValue('SIDE');
+ var integrator = generator.valueToCode(block, 'INTEGRATOR', generator.ORDER_ATOMIC);
+
+ return [`${integrator}.getOutput("${side}")`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_redstone_integrator_get_analog_input'] = function(block, generator) {
+ var side = block.getFieldValue('SIDE');
+ var integrator = generator.valueToCode(block, 'INTEGRATOR', generator.ORDER_ATOMIC);
+
+ return [`${integrator}.getAnalogInput("${side}")`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_redstone_integrator_get_analog_output'] = function(block, generator) {
+ var side = block.getFieldValue('SIDE');
+ var integrator = generator.valueToCode(block, 'INTEGRATOR', generator.ORDER_ATOMIC);
+
+ return [`${integrator}.getAnalogOutput("${side}")`, luaGenerator.ORDER_NONE];
+};
+
+luaGenerator.forBlock['advanced_peripherals_redstone_integrator_set_output'] = function(block, generator) {
+ var powered = block.getFieldValue('POWERED');
+ var side = block.getFieldValue('SIDE');
+ var integrator = generator.valueToCode(block, 'INTEGRATOR', generator.ORDER_ATOMIC);
+
+ var ispowerd;
+ if (powered == "ON") {
+ ispowerd = "true";
+ } else {
+ ispowerd = "false";
+ }
+
+ return `${integrator}.setOutput("${side}", ${ispowerd})\n`;
+};
+
+luaGenerator.forBlock['advanced_peripherals_redstone_integrator_set_analog_output'] = function(block, generator) {
+ var power = generator.valueToCode(block, 'POWER', generator.ORDER_ATOMIC);
+ var side = block.getFieldValue('SIDE');
+ var integrator = generator.valueToCode(block, 'INTEGRATOR', generator.ORDER_ATOMIC);
+
+ return `${integrator}.setOutput("${side}", ${power})\n`;
};
\ No newline at end of file
diff --git a/blocks/Advanced_Peripherals/index.json b/blocks/Advanced_Peripherals/index.json
index 006214a..821789a 100644
--- a/blocks/Advanced_Peripherals/index.json
+++ b/blocks/Advanced_Peripherals/index.json
@@ -14,8 +14,8 @@
"basic": true,
"adv": true,
"command": true,
- "pocket": false,
- "advpocket": false,
+ "pocket": true,
+ "advpocket": true,
"turtle": true,
"advturtle": true
}
diff --git a/blocks/Advanced_Peripherals/toolbox.xml b/blocks/Advanced_Peripherals/toolbox.xml
index 560a1e8..44a3587 100644
--- a/blocks/Advanced_Peripherals/toolbox.xml
+++ b/blocks/Advanced_Peripherals/toolbox.xml
@@ -416,6 +416,51 @@
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 15
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blocks/CCPeripheral/block_design.json b/blocks/CCPeripheral/block_design.json
index 5fadd0f..fdd6bdd 100644
--- a/blocks/CCPeripheral/block_design.json
+++ b/blocks/CCPeripheral/block_design.json
@@ -10,7 +10,8 @@
"args0": [
{
"type": "input_value",
- "name": "NAME"
+ "name": "NAME",
+ "check": "String"
}
],
"output": "Boolean",
diff --git a/blocks/CCPeripheral/toolbox.xml b/blocks/CCPeripheral/toolbox.xml
index 9adc0e3..ea9bb6b 100644
--- a/blocks/CCPeripheral/toolbox.xml
+++ b/blocks/CCPeripheral/toolbox.xml
@@ -1,13 +1,47 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blocks/CCRedstone/block_design.json b/blocks/CCRedstone/block_design.json
index 7997665..2893de4 100644
--- a/blocks/CCRedstone/block_design.json
+++ b/blocks/CCRedstone/block_design.json
@@ -6,8 +6,8 @@
"type": "field_dropdown",
"name": "STATE",
"options": [
- ["On", "OFF"],
- ["Off", "ON"]
+ ["On", "ON"],
+ ["Off", "OFF"]
]
},
{
diff --git a/index.js b/index.js
index 01afbe6..dcbdd75 100644
--- a/index.js
+++ b/index.js
@@ -5,10 +5,12 @@ const prompt = require('electron-prompt');
const path = require('path');
const pino = require('pino')
const pretty = require('pino-pretty');
-const { log } = require('console');
+const https = require('node:https');
+const LocalStorage = require('node-localstorage').LocalStorage
const ipc = ipcMain
const logger = pino(pretty())
+const localStorage = new LocalStorage('.');
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
@@ -22,6 +24,7 @@ var isopennewproject = false;
var appstarted = false;
var version;
+var gitver;
try {
// Read package.json synchronously
@@ -32,18 +35,55 @@ try {
// Get project version
version = packageJson.version;
-
- console.log("Project version:", version);
} catch (err) {
console.error("Error reading package.json:", err);
}
-app.whenReady().then(() => {
+function checkupdate() {
+ return new Promise((resolve, reject) => {
+ const req = https.request({
+ hostname: 'api.github.com',
+ port: 443,
+ path: '/repos/DPSoftware-Foundation/ccIDE/releases/latest',
+ method: 'GET',
+ headers: {
+ 'User-Agent': 'ccIDE-Check-Update-Service', // GitHub API requires a User-Agent header
+ }
+ }, (res) => {
+ let data = '';
+ res.setEncoding('utf8');
+ res.on('data', (chunk) => {
+ data += chunk;
+ });
+ res.on('end', () => {
+ try {
+ const json = JSON.parse(data);
+ resolve(json.tag_name); // Return the tag_name or other relevant data
+ } catch (e) {
+ reject('Error parsing JSON: ' + e.message);
+ }
+ });
+ });
+
+ req.on('error', (e) => {
+ reject('Error fetching release: ' + e.message);
+ });
+
+ req.end();
+ });
+}
+
+function normalizeVersion(version, length = 4) {
+ // Split the version string into parts and pad with zeros if necessary
+ return version.split('.').map(part => part.padStart(2, '0')).concat(Array(length).fill('00')).slice(0, length).join('.');
+}
+
+app.whenReady().then(async () => {
logger.info("Initializing splash window...")
reloadall(false);
var splash = new BrowserWindow({
- width: 600,
- height: 300,
+ width: 720,
+ height: 400,
icon: path.join(__dirname, 'assets', 'ccIDEIcon.ico'),
transparent: true,
frame: false,
@@ -51,12 +91,72 @@ app.whenReady().then(() => {
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
- }
+ },
+ resizable: false
});
splash.loadFile('src/splash.html');
+ while (!splash.isVisible()) {}
+
+ // checkupdate
+ logger.info("Checking for new update...")
+ splash.webContents.send("change-status", "Checking for new update...")
+
+ try {
+ const latestRelease = await checkupdate();
+ // Store the version or use it as needed
+ gitver = latestRelease;
+ } catch (error) {
+ logger.error('Error in update check:', error);
+ }
+
+ logger.info("Version in github: " + gitver)
+ logger.info("Current version: " + version)
+
+ const normalizedAppVersion = normalizeVersion(version);
+ const normalizedReleaseVersion = normalizeVersion(gitver);
+
+ if (normalizedAppVersion >= normalizedReleaseVersion) {
+ logger.info("Software is up-to-date.");
+ } else {
+ logger.info("A new update is available: " + gitver)
+ var is_not_skip_update = localStorage.getItem('skip_update_version') != normalizedAppVersion;
+ var is_ignore = localStorage.getItem('ignore_update');
+ if (is_ignore || is_not_skip_update) {
+ const result = dialog.showMessageBoxSync({
+ type: 'question',
+ buttons: ['Update', 'Ignore', 'Skip'],
+ defaultId: 0,
+ title: 'Update Available',
+ message: `A new version (${gitver}) is available. Do you want to update now?`,
+ detail: 'Click "Update" to go to the release page, "Ignore" to ignore this update, or "Skip" to skip this version.'
+ });
+ switch (result.response) {
+ case 0: // 'Update'
+ (async () => {
+ try {
+ const { default: open } = await import('open');
+
+ await open('https://github.com/DPSoftware-Foundation/ccIDE/releases/latest');
+ console.log('URL opened in default browser');
+ } catch (err) {
+ console.error('Error opening URL:', err);
+ }
+ })();
+ break;
+ case 1: // 'Ignore'
+ localStorage.setItem('ignore_update', true);
+ break;
+ case 2: // 'Skip'
+ localStorage.setItem('skip_update_version', normalizedReleaseVersion);
+ break;
+ }
+ }
+ }
+
logger.info("Initializing main windows...")
+ splash.webContents.send("change-status", "Initializing main windows...")
const win = new BrowserWindow({
width: 1280,
@@ -96,6 +196,15 @@ app.whenReady().then(() => {
appstarted = true;
});
+ ipc.on("splash-close", (event) => {
+ if (appstarted) {
+ splash.hide();
+ } else {
+ splash.close();
+ win.close();
+ }
+ })
+
ipc.on('erroronstart', (event, errormessage) => {
logger.error(errormessage)
dialog.showErrorBox("Error on startup", errormessage);
@@ -508,7 +617,7 @@ app.whenReady().then(() => {
win.on("closed", () => {
logger.info("Exiting...")
- if (splash) {
+ if (!splash.isDestroyed()) {
splash.close()
}
})
diff --git a/package-lock.json b/package-lock.json
index 7c47c61..598ba0d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ccide",
- "version": "1.1",
+ "version": "1.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "ccide",
- "version": "1.1",
+ "version": "1.4",
"license": "GPL-3.0-or-later",
"dependencies": {
"@blockly/plugin-workspace-search": "^9.0.5",
@@ -14,6 +14,8 @@
"blockly": "^11.1.1",
"bootstrap": "^5.3.3",
"electron-prompt": "^1.7.0",
+ "node-localstorage": "^3.0.5",
+ "open": "^10.1.0",
"pino": "^9.3.2",
"pino-pretty": "^11.2.2",
"xmldom": "^0.6.0"
@@ -262,6 +264,20 @@
"node": "*"
}
},
+ "node_modules/bundle-name": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
+ "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+ "dependencies": {
+ "run-applescript": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -391,6 +407,32 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/default-browser": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
+ "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
+ "dependencies": {
+ "bundle-name": "^4.1.0",
+ "default-browser-id": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/default-browser-id": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
+ "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/defer-to-connect": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
@@ -416,6 +458,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/define-lazy-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/define-properties": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
@@ -885,11 +938,64 @@
}
]
},
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
},
+ "node_modules/is-wsl": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "dependencies": {
+ "is-inside-container": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/joycon": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
@@ -1024,6 +1130,17 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "node_modules/node-localstorage": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-3.0.5.tgz",
+ "integrity": "sha512-GCwtK33iwVXboZWYcqQHu3aRvXEBwmPkAMRBLeaX86ufhqslyUkLGsi4aW3INEfdQYpUB5M9qtYf3eHvAk2VBg==",
+ "dependencies": {
+ "write-file-atomic": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
"node_modules/normalize-url": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
@@ -1065,6 +1182,23 @@
"wrappy": "1"
}
},
+ "node_modules/open": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
+ "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
+ "dependencies": {
+ "default-browser": "^5.2.1",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "is-wsl": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/p-cancelable": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
@@ -1278,6 +1412,17 @@
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
"integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw=="
},
+ "node_modules/run-applescript": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
+ "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -1355,6 +1500,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/sonic-boom": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz",
@@ -1542,6 +1698,18 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
+ "node_modules/write-file-atomic": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
"node_modules/ws": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
@@ -1754,6 +1922,14 @@
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="
},
+ "bundle-name": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
+ "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+ "requires": {
+ "run-applescript": "^7.0.0"
+ }
+ },
"cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -1844,6 +2020,20 @@
}
}
},
+ "default-browser": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
+ "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
+ "requires": {
+ "bundle-name": "^4.1.0",
+ "default-browser-id": "^5.0.0"
+ }
+ },
+ "default-browser-id": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
+ "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="
+ },
"defer-to-connect": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
@@ -1860,6 +2050,11 @@
"gopd": "^1.0.1"
}
},
+ "define-lazy-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="
+ },
"define-properties": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
@@ -2185,11 +2380,37 @@
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
+ },
+ "is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="
+ },
+ "is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "requires": {
+ "is-docker": "^3.0.0"
+ }
+ },
"is-potential-custom-element-name": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
},
+ "is-wsl": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "requires": {
+ "is-inside-container": "^1.0.0"
+ }
+ },
"joycon": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
@@ -2292,6 +2513,14 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "node-localstorage": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-3.0.5.tgz",
+ "integrity": "sha512-GCwtK33iwVXboZWYcqQHu3aRvXEBwmPkAMRBLeaX86ufhqslyUkLGsi4aW3INEfdQYpUB5M9qtYf3eHvAk2VBg==",
+ "requires": {
+ "write-file-atomic": "^5.0.1"
+ }
+ },
"normalize-url": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
@@ -2321,6 +2550,17 @@
"wrappy": "1"
}
},
+ "open": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
+ "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
+ "requires": {
+ "default-browser": "^5.2.1",
+ "define-lazy-prop": "^3.0.0",
+ "is-inside-container": "^1.0.0",
+ "is-wsl": "^3.1.0"
+ }
+ },
"p-cancelable": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
@@ -2495,6 +2735,11 @@
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
"integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw=="
},
+ "run-applescript": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
+ "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A=="
+ },
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -2543,6 +2788,11 @@
"type-fest": "^0.13.1"
}
},
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
+ },
"sonic-boom": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz",
@@ -2687,6 +2937,15 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
+ "write-file-atomic": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ }
+ },
"ws": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
diff --git a/package.json b/package.json
index fff7bbd..5d719cd 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,12 @@
{
"name": "ccide",
- "version": "1.3",
+ "version": "1.4",
"description": "ComputerCraft mod virtual lua IDE",
"main": "index.js",
"scripts": {
"dev": "electron .",
- "build": "electron-packager . ccIDE --platform=win32 --arch=x64 --icon=assets/ccIDEIcon.ico --out=dist --overwrite"
+ "build": "electron-packager . ccIDE --platform=win32 --arch=x64 --icon=assets/ccIDEIcon.ico --out=dist --overwrite && for /d %i in (dist\\ccIDE-*) do copy package.json %i\\",
+ "build_debug": "electron-packager . ccIDE --platform=win32 --arch=x64 --icon=assets/ccIDEIcon.ico --out=dist_debug --overwrite --debug && for /d %i in (dist_debug\\ccIDE-*) do copy package.json %i\\"
},
"author": "DPSoftware Foundation",
"license": "GPL-3.0-or-later",
@@ -18,6 +19,8 @@
"blockly": "^11.1.1",
"bootstrap": "^5.3.3",
"electron-prompt": "^1.7.0",
+ "node-localstorage": "^3.0.5",
+ "open": "^10.1.0",
"pino": "^9.3.2",
"pino-pretty": "^11.2.2",
"xmldom": "^0.6.0"
diff --git a/readme.md b/readme.md
index e7d689e..4f8d04d 100644
--- a/readme.md
+++ b/readme.md
@@ -91,7 +91,7 @@ Event: https://tweaked.cc/event/alarm.html
| Mod | Status
|------------|--------
|[Create Additions](https://www.curseforge.com/minecraft/mc-mods/createaddition) | 🟩 Supported all
-|[Advanced Peripherals](https://www.curseforge.com/minecraft/mc-mods/advanced-peripherals) | 🟨 Unfinished 3/13
+|[Advanced Peripherals](https://www.curseforge.com/minecraft/mc-mods/advanced-peripherals) | 🟨 Partially Supported (9/13 Peripheral)
|[Create](https://www.curseforge.com/minecraft/mc-mods/create) | 🟨 Third support
|[CC:C Bridge](https://www.curseforge.com/minecraft/mc-mods/cccbridge) | 🟥 Unsupport
|[Extreme Reactors](https://www.curseforge.com/minecraft/mc-mods/extreme-reactors) ([Command](https://ftbwiki.org/Reactor_Computer_Port)) | 🟥 Unsupport
diff --git a/src/codegen.js b/src/codegen.js
index 3d097d3..deef436 100644
--- a/src/codegen.js
+++ b/src/codegen.js
@@ -1,7 +1,3 @@
-function delay(time) {
- return new Promise(resolve => setTimeout(resolve, time));
-}
-
const { luaGenerator } = require('blockly/lua'); // Use require syntax for Blockly module
const { CCRemote } = require("./ccRemote")
diff --git a/src/index.html b/src/index.html
index caaeb6b..d0d7aed 100644
--- a/src/index.html
+++ b/src/index.html
@@ -5,7 +5,6 @@
diff --git a/src/index.js b/src/index.js
index d5fe3f8..05b5378 100644
--- a/src/index.js
+++ b/src/index.js
@@ -11,6 +11,10 @@ window.onerror = function (message, source, lineno, colno, error) {
return true; // Prevents the default browser error handling
};
+function delay(time) {
+ return new Promise(resolve => setTimeout(resolve, time));
+}
+
console.originalLog = console.log;
console.log = function (...args) {
@@ -18,7 +22,6 @@ console.log = function (...args) {
console.originalLog(...args)
};
-
console.log("Importing module...")
const fs = require('fs');
const path = require('path');
diff --git a/src/splash.html b/src/splash.html
index a285dc4..e1f35e3 100644
--- a/src/splash.html
+++ b/src/splash.html
@@ -2,87 +2,195 @@
- Splash Screen
+
+ Product Page
-
-

-
Loading ccIDE...
-
-
+
+
+
+
+ DPSoftware Foundation
+
+
+
+

+
ccIDE
-
Initializing...
-
-
- © 2024 DPSoftware Foundation. Licensed under GPL v3.
+
+
Loading ...
+
damp11113.xyz
diff --git a/src/splash_old.html b/src/splash_old.html
new file mode 100644
index 0000000..a285dc4
--- /dev/null
+++ b/src/splash_old.html
@@ -0,0 +1,90 @@
+
+
+
+
+
Splash Screen
+
+
+
+
+

+
Loading ccIDE...
+
+
Initializing...
+
+
+ © 2024 DPSoftware Foundation. Licensed under GPL v3.
+
+
+
+