You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.5 KiB
JavaScript
97 lines
2.5 KiB
JavaScript
// updates
|
|
const updates_list = [];
|
|
async function getUpdateInfo(dev) {
|
|
if (updates_list.includes(dev.info.id)) return;
|
|
|
|
/** @type {string} */
|
|
const ver = dev.info.version;
|
|
if (!ver || !ver.includes('@')) return;
|
|
|
|
const namever = ver.split('@', 2);
|
|
let proj;
|
|
try {
|
|
const resp = await fetch("https://raw.githubusercontent.com/"+namever[0]+"/main/project.json", { cache: "no-store" });
|
|
proj = await resp.json();
|
|
} catch (e) {
|
|
return;
|
|
}
|
|
|
|
if (!('builds' in proj) || !('version' in proj) || proj.version === namever[1]) return;
|
|
|
|
updates_list.push(dev.info.id);
|
|
const platform = dev.info.platform;
|
|
for (const build of proj.builds) {
|
|
if (build.chipFamily === platform)
|
|
return {
|
|
name: namever[0],
|
|
version: proj.version,
|
|
notes: proj.notes,
|
|
url: build.parts[0].path,
|
|
};
|
|
{
|
|
const text = `${namever[0]} v${proj.version}:\n${proj.notes}\n\n${lang.p_upd}?`;
|
|
if (await asyncConfirm(text, lang.p_has_upd + '!')) otaUrl(build.parts[0].path, 'flash');
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
async function installOta(dev, type, url) {
|
|
showPopup('OTA start');
|
|
try {
|
|
await dev.otaUrl(type, url);
|
|
} catch (e) {
|
|
showPopupError('[OTA url] ' + getError(e));
|
|
return;
|
|
}
|
|
showPopup('[OTA] ' + lang.done);
|
|
}
|
|
|
|
async function checkUpdates(dev) {
|
|
if (!cfg.check_upd) return;
|
|
|
|
const upd = await getUpdateInfo(dev);
|
|
if (!upd) return;
|
|
|
|
const text = `${upd.name} v${upd.version}:\n${upd.notes}\n\n${lang.p_upd}?`;
|
|
if (!await asyncConfirm(text, lang.p_has_upd + '!')) return;
|
|
|
|
await installOta(dev, 'flash', upd.url);
|
|
}
|
|
|
|
async function otaUrl(url, type) {
|
|
if (!await asyncConfirm(lang.fs_upload + ' OTA?'))
|
|
return;
|
|
|
|
await installOta(hub.dev(focused), type, url);
|
|
}
|
|
|
|
async function uploadOta(file, type) {
|
|
const dev = hub.dev(focused);
|
|
|
|
if (!file.name.endsWith(dev.info.ota_t)) {
|
|
asyncAlert(lang.wrong_ota + ' .' + dev.info.ota_t);
|
|
return;
|
|
}
|
|
|
|
const res = await asyncConfirm(lang.fs_upload + ' OTA ' + type + '?');
|
|
if (!res) return;
|
|
|
|
EL('ota_label').innerHTML = waiter(25, 'var(--font)', false);
|
|
EL('ota_upload').value = '';
|
|
EL('ota_upload_fs').value = '';
|
|
|
|
try {
|
|
await dev.uploadOta(file, type, perc => {
|
|
EL('ota_label').textContent = perc + '%';
|
|
});
|
|
} catch (e) {
|
|
showPopupError('[OTA] ' + getError(e));
|
|
EL('ota_label').textContent = lang.error;
|
|
return;
|
|
}
|
|
|
|
showPopup('[OTA] ' + lang.done);
|
|
EL('ota_label').textContent = lang.done;
|
|
}
|