Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
830ce3d035 | ||
|
|
207846fa04 | ||
|
|
47433f3dc9 |
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "multi-render-blender",
|
"name": "multi-render-blender",
|
||||||
"version": "1.6.3",
|
"version": "1.7.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "multi-render-blender",
|
"name": "multi-render-blender",
|
||||||
"version": "1.6.3",
|
"version": "1.7.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nodemailer": "^8.0.1"
|
"nodemailer": "^8.0.1"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "multi-render-blender",
|
"name": "multi-render-blender",
|
||||||
"version": "1.6.4",
|
"version": "1.7.0",
|
||||||
"description": "Application Electron pour piloter des rendus Blender multi-cameras",
|
"description": "Application Electron pour piloter des rendus Blender multi-cameras",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -6,12 +6,16 @@ const { app } = require("electron");
|
|||||||
const { execFile } = require("child_process");
|
const { execFile } = require("child_process");
|
||||||
|
|
||||||
const GITEA_HOST = "git.sorlinv.fr";
|
const GITEA_HOST = "git.sorlinv.fr";
|
||||||
const REPO_PATH = "/api/v1/repos/sorlinv/multi_render_blender/tags";
|
const GITEA_BASE = "https://git.sorlinv.fr";
|
||||||
const ARCHIVE_URL_BASE = "https://git.sorlinv.fr/sorlinv/multi_render_blender/archive/";
|
const REPO_OWNER = "sorlinv";
|
||||||
|
const REPO_NAME = "multi_render_blender";
|
||||||
|
const REPO_PATH = "/api/v1/repos/" + REPO_OWNER + "/" + REPO_NAME + "/tags";
|
||||||
|
const RELEASES_API = "/api/v1/repos/" + REPO_OWNER + "/" + REPO_NAME + "/releases/tags/";
|
||||||
|
const PRODUCT_NAME = "multi-render-blender";
|
||||||
const NB_TIMEOUT_API = 10000;
|
const NB_TIMEOUT_API = 10000;
|
||||||
const NB_TIMEOUT_DOWNLOAD = 60000;
|
const NB_TIMEOUT_DOWNLOAD = 300000;
|
||||||
const LIST_REQUIRED_FILES = ["main.js", "version.json"];
|
const LIST_REQUIRED_FILES = ["main.js", "version.json"];
|
||||||
const LIST_TARGETS = ["main.js", "preload.js", "src", "version.json", "package.json"];
|
const LIST_TARGETS = ["main.js", "preload.js", "src", "version.json", "package.json", "node_modules"];
|
||||||
|
|
||||||
const UpdateManager = {
|
const UpdateManager = {
|
||||||
obj_window: null,
|
obj_window: null,
|
||||||
@@ -106,9 +110,6 @@ const UpdateManager = {
|
|||||||
.then((str_extracted_root) => {
|
.then((str_extracted_root) => {
|
||||||
return UpdateManager._replace_app_files(str_extracted_root);
|
return UpdateManager._replace_app_files(str_extracted_root);
|
||||||
})
|
})
|
||||||
.then(() => {
|
|
||||||
return UpdateManager._install_dependencies();
|
|
||||||
})
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
UpdateManager._send_event("update-progress", {
|
UpdateManager._send_event("update-progress", {
|
||||||
str_step: "restarting",
|
str_step: "restarting",
|
||||||
@@ -211,9 +212,84 @@ const UpdateManager = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_download_zip: (str_tag_name, str_zip_path) => {
|
_fetch_release_asset_url: (str_tag_name) => {
|
||||||
let str_url = ARCHIVE_URL_BASE + str_tag_name + ".zip";
|
let str_platform = process.platform === "win32" ? "win-x64" : "linux-x64";
|
||||||
|
let str_expected_suffix = "-" + str_platform + ".zip";
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let obj_options = {
|
||||||
|
hostname: GITEA_HOST,
|
||||||
|
path: RELEASES_API + str_tag_name,
|
||||||
|
method: "GET",
|
||||||
|
timeout: NB_TIMEOUT_API,
|
||||||
|
headers: {
|
||||||
|
"Accept": "application/json",
|
||||||
|
"User-Agent": "MultiRenderBlender",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let obj_req = https.request(obj_options, (obj_res) => {
|
||||||
|
let str_data = "";
|
||||||
|
|
||||||
|
obj_res.on("data", (chunk) => {
|
||||||
|
str_data += chunk;
|
||||||
|
});
|
||||||
|
|
||||||
|
obj_res.on("end", () => {
|
||||||
|
if (obj_res.statusCode !== 200) {
|
||||||
|
reject(new Error("Release API status " + obj_res.statusCode));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let obj_release = JSON.parse(str_data);
|
||||||
|
let list_assets = obj_release.assets || [];
|
||||||
|
let obj_asset = null;
|
||||||
|
|
||||||
|
for (let obj_a of list_assets) {
|
||||||
|
let str_name = obj_a.name || "";
|
||||||
|
if (str_name.endsWith(str_expected_suffix)) {
|
||||||
|
obj_asset = obj_a;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!obj_asset) {
|
||||||
|
reject(new Error("Asset build introuvable pour " + str_platform + " dans la release " + str_tag_name));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let str_url = obj_asset.browser_download_url || "";
|
||||||
|
if (!str_url) {
|
||||||
|
str_url = GITEA_BASE + "/" + REPO_OWNER + "/" + REPO_NAME + "/releases/download/" + str_tag_name + "/" + obj_asset.name;
|
||||||
|
}
|
||||||
|
resolve(str_url);
|
||||||
|
} catch (obj_err) {
|
||||||
|
reject(new Error("Reponse JSON release invalide"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
obj_req.on("timeout", () => {
|
||||||
|
obj_req.destroy();
|
||||||
|
reject(new Error("Timeout API release"));
|
||||||
|
});
|
||||||
|
|
||||||
|
obj_req.on("error", (obj_err) => {
|
||||||
|
reject(obj_err);
|
||||||
|
});
|
||||||
|
|
||||||
|
obj_req.end();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_download_zip: (str_tag_name, str_zip_path) => {
|
||||||
|
return UpdateManager._fetch_release_asset_url(str_tag_name)
|
||||||
|
.then((str_url) => {
|
||||||
|
return UpdateManager._download_file(str_url, str_zip_path);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_download_file: (str_url, str_zip_path) => {
|
||||||
let fn_download = (str_download_url, nb_redirects) => {
|
let fn_download = (str_download_url, nb_redirects) => {
|
||||||
if (nb_redirects > 5) {
|
if (nb_redirects > 5) {
|
||||||
return Promise.reject(new Error("Trop de redirections"));
|
return Promise.reject(new Error("Trop de redirections"));
|
||||||
@@ -314,39 +390,41 @@ const UpdateManager = {
|
|||||||
|
|
||||||
_find_extracted_root: (str_temp_dir) => {
|
_find_extracted_root: (str_temp_dir) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let list_entries = fs.readdirSync(str_temp_dir);
|
let fn_find_version_json = (str_dir, nb_depth) => {
|
||||||
let str_root = null;
|
if (nb_depth > 5) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
let str_version_check = path.join(str_dir, "version.json");
|
||||||
|
if (fs.existsSync(str_version_check)) {
|
||||||
|
return str_dir;
|
||||||
|
}
|
||||||
|
let list_entries;
|
||||||
|
try {
|
||||||
|
list_entries = fs.readdirSync(str_dir);
|
||||||
|
} catch (obj_err) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
for (let str_entry of list_entries) {
|
for (let str_entry of list_entries) {
|
||||||
if (str_entry === "update.zip") {
|
if (str_entry === "update.zip") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let str_full = path.join(str_temp_dir, str_entry);
|
let str_full = path.join(str_dir, str_entry);
|
||||||
|
try {
|
||||||
if (!fs.statSync(str_full).isDirectory()) {
|
if (!fs.statSync(str_full).isDirectory()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
} catch (obj_err) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let str_found = fn_find_version_json(str_full, nb_depth + 1);
|
||||||
|
if (str_found) {
|
||||||
|
return str_found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
let str_version_check = path.join(str_full, "version.json");
|
let str_root = fn_find_version_json(str_temp_dir, 0);
|
||||||
if (fs.existsSync(str_version_check)) {
|
|
||||||
str_root = str_full;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
let list_sub = fs.readdirSync(str_full);
|
|
||||||
for (let str_sub of list_sub) {
|
|
||||||
let str_sub_full = path.join(str_full, str_sub);
|
|
||||||
if (fs.statSync(str_sub_full).isDirectory()) {
|
|
||||||
let str_nested_check = path.join(str_sub_full, "version.json");
|
|
||||||
if (fs.existsSync(str_nested_check)) {
|
|
||||||
str_root = str_sub_full;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (str_root) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!str_root) {
|
if (!str_root) {
|
||||||
reject(new Error("Dossier extrait introuvable (version.json absent)"));
|
reject(new Error("Dossier extrait introuvable (version.json absent)"));
|
||||||
@@ -431,36 +509,6 @@ const UpdateManager = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_install_dependencies: () => {
|
|
||||||
let str_app_dir = path.join(__dirname, "..", "..");
|
|
||||||
let str_pkg = path.join(str_app_dir, "package.json");
|
|
||||||
|
|
||||||
if (!fs.existsSync(str_pkg)) {
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
let obj_pkg = JSON.parse(fs.readFileSync(str_pkg, "utf8"));
|
|
||||||
if (!obj_pkg.dependencies || Object.keys(obj_pkg.dependencies).length === 0) {
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
} catch (_err) {
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let str_npm = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
||||||
execFile(str_npm, ["install", "--production", "--no-audit", "--no-fund"], { cwd: str_app_dir, timeout: 60000 }, (obj_err) => {
|
|
||||||
if (obj_err) {
|
|
||||||
console.error("UpdateManager: npm install echoue :", obj_err.message);
|
|
||||||
reject(new Error("Installation des dependances echouee : " + obj_err.message));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_cleanup: (str_dir) => {
|
_cleanup: (str_dir) => {
|
||||||
try {
|
try {
|
||||||
if (fs.existsSync(str_dir)) {
|
if (fs.existsSync(str_dir)) {
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"str_version": "1.6.4"
|
"str_version": "1.7.0"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user