chore: Bump version to 1.0.3 and enhance update handling in the desktop application. Introduce release date stamping before build, add version listing functionality, and improve update prompts with detailed version information. Update README and scripts for clarity on release date management and version publishing.
This commit is contained in:
@@ -215,10 +215,113 @@ async function downloadAndInstall(manifest, onProgress) {
|
||||
return { ok: true, destPath };
|
||||
}
|
||||
|
||||
/**
|
||||
* Fecha de release de la versión instalada, leída desde MinIO
|
||||
* (latest.json si coincide la versión, si no DATA.txt de esa carpeta).
|
||||
* @returns {Promise<{ releaseDate?: string, releaseDateDisplay?: string } | null>}
|
||||
*/
|
||||
async function getCurrentReleaseMeta() {
|
||||
const base = LATEST_JSON_URL.replace(/\/latest\.json$/i, "");
|
||||
|
||||
try {
|
||||
const { buffer } = await download(LATEST_JSON_URL);
|
||||
if (buffer) {
|
||||
/** @type {UpdateManifest} */
|
||||
const manifest = JSON.parse(buffer.toString("utf8"));
|
||||
if (manifest?.version && compareSemver(CURRENT_VERSION, manifest.version) === 0) {
|
||||
if (!manifest.releaseDateDisplay) {
|
||||
try {
|
||||
const dataUrl = `${base}/${CURRENT_VERSION}/DATA.txt`;
|
||||
const { buffer: dataBuf } = await download(dataUrl);
|
||||
const display = dataBuf?.toString("utf8").trim().split(/\r?\n/)[0]?.trim();
|
||||
if (display) {
|
||||
manifest.releaseDateDisplay = display;
|
||||
const iso = display.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
|
||||
if (iso && !manifest.releaseDate) {
|
||||
manifest.releaseDate = `${iso[3]}-${iso[2].padStart(2, "0")}-${iso[1].padStart(2, "0")}`;
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
/* opcional */
|
||||
}
|
||||
}
|
||||
if (manifest.releaseDate || manifest.releaseDateDisplay) {
|
||||
return {
|
||||
releaseDate: manifest.releaseDate,
|
||||
releaseDateDisplay: manifest.releaseDateDisplay,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
/* probar DATA.txt de la versión instalada */
|
||||
}
|
||||
|
||||
try {
|
||||
const dataUrl = `${base}/${CURRENT_VERSION}/DATA.txt`;
|
||||
const { buffer: dataBuf } = await download(dataUrl);
|
||||
const display = dataBuf?.toString("utf8").trim().split(/\r?\n/)[0]?.trim();
|
||||
if (!display) return null;
|
||||
const isoMatch = display.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
|
||||
return {
|
||||
releaseDateDisplay: display,
|
||||
releaseDate: isoMatch
|
||||
? `${isoMatch[3]}-${isoMatch[2].padStart(2, "0")}-${isoMatch[1].padStart(2, "0")}`
|
||||
: undefined,
|
||||
};
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Lista todas las versiones publicadas (versions.json).
|
||||
* Si no existe, cae a [latest.json].
|
||||
* @returns {Promise<{ currentVersion: string, versions: UpdateManifest[], error?: string }>}
|
||||
*/
|
||||
async function listVersions() {
|
||||
const versionsUrl = LATEST_JSON_URL.replace(/\/latest\.json$/i, "/versions.json");
|
||||
try {
|
||||
const { buffer } = await download(versionsUrl);
|
||||
if (buffer) {
|
||||
const parsed = JSON.parse(buffer.toString("utf8"));
|
||||
const versions = Array.isArray(parsed?.versions)
|
||||
? parsed.versions.filter((v) => v?.version && v?.url && v?.fileName)
|
||||
: [];
|
||||
if (versions.length > 0) {
|
||||
versions.sort((a, b) => compareSemver(b.version, a.version));
|
||||
return { currentVersion: CURRENT_VERSION, versions };
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
/* fallback latest */
|
||||
}
|
||||
|
||||
try {
|
||||
const { buffer } = await download(LATEST_JSON_URL);
|
||||
if (!buffer) {
|
||||
return { currentVersion: CURRENT_VERSION, versions: [], error: "Respuesta vacía" };
|
||||
}
|
||||
const manifest = JSON.parse(buffer.toString("utf8"));
|
||||
if (!manifest?.version || !manifest?.url || !manifest?.fileName) {
|
||||
return { currentVersion: CURRENT_VERSION, versions: [], error: "Manifiesto inválido" };
|
||||
}
|
||||
return { currentVersion: CURRENT_VERSION, versions: [manifest] };
|
||||
} catch (err) {
|
||||
return {
|
||||
currentVersion: CURRENT_VERSION,
|
||||
versions: [],
|
||||
error: err instanceof Error ? err.message : String(err),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
CURRENT_VERSION,
|
||||
LATEST_JSON_URL,
|
||||
compareSemver,
|
||||
checkForUpdates,
|
||||
downloadAndInstall,
|
||||
getCurrentReleaseMeta,
|
||||
listVersions,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user