import { DateTime } from 'luxon';
import { fetchJson } from '../api.js';
import type { MirrorFileEntry, StoredData } from '../types.js';
import { BASE_URL, FILE_SIZE_OPTS, launcherTargets } from '../utils/constants.js';
import math from '../utils/math.js';
import { generateDownloadLinks } from '../utils/ui.js';
export async function renderLaunchers(container: HTMLElement, mirrorFileDb: MirrorFileEntry[]) {
for (const region of launcherTargets) {
for (const app of region.apps) {
const section = document.createElement('div');
section.className = 'mb-5';
section.innerHTML = `
${region.id.toUpperCase()} ${app}
`;
const accordion = document.createElement('div');
accordion.className = 'accordion';
accordion.id = `accordion-launcher-${region.id}-${app}`;
let itemIndex = 0;
// Zip
try {
const urlZip = `${BASE_URL}/akEndfield/launcher/launcher/${app}/${region.channel}/all.json`;
const dataZip = await fetchJson[]>(urlZip);
let rows = '';
for (const e of [...dataZip].reverse()) {
const dateStr = DateTime.fromISO(e.updatedAt).toFormat('yyyy/MM/dd HH:mm:ss');
const fileName = new URL(e.rsp.zip_package_url).pathname.split('/').pop() ?? '';
const unpacked = parseInt(e.rsp.total_size) - parseInt(e.rsp.package_size);
rows += `
| ${dateStr} |
${e.rsp.version} |
${fileName} |
${e.rsp.md5} |
${math.formatFileSize(unpacked, FILE_SIZE_OPTS)} |
${math.formatFileSize(parseInt(e.rsp.package_size), FILE_SIZE_OPTS)} |
${generateDownloadLinks(e.rsp.zip_package_url, mirrorFileDb)} |
`;
}
const itemId = `launcher-zip-${region.id}-${app}`;
const isExpanded = false;
itemIndex++;
const item = document.createElement('div');
item.className = 'accordion-item';
item.innerHTML = `
| Date |
Version |
File |
MD5 Checksum |
Unpacked |
Packed |
DL |
${rows}
`;
accordion.appendChild(item);
} catch (e) {}
// Exe
try {
const urlExe = `${BASE_URL}/akEndfield/launcher/launcherExe/${app}/${region.channel}/all.json`;
const dataExe = await fetchJson[]>(urlExe);
let rows = '';
for (const e of [...dataExe].reverse()) {
const dateStr = DateTime.fromISO(e.updatedAt).toFormat('yyyy/MM/dd HH:mm:ss');
const fileName = new URL(e.rsp.exe_url).pathname.split('/').pop() ?? '';
rows += `
| ${dateStr} |
${e.rsp.version} |
${fileName} |
${math.formatFileSize(parseInt(e.rsp.exe_size), FILE_SIZE_OPTS)} |
${generateDownloadLinks(e.rsp.exe_url, mirrorFileDb)} |
`;
}
const itemId = `launcher-exe-${region.id}-${app}`;
const isExpanded = false;
itemIndex++;
const item = document.createElement('div');
item.className = 'accordion-item';
item.innerHTML = `
| Date |
Version |
File |
Size |
DL |
${rows}
`;
accordion.appendChild(item);
} catch (e) {}
if (accordion.childElementCount > 0) {
section.appendChild(accordion);
container.appendChild(section);
}
}
}
}