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 = `

${rows}
Date Version File MD5 Checksum Unpacked Packed DL
`; 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 = `

${rows}
Date Version File Size DL
`; accordion.appendChild(item); } catch (e) {} if (accordion.childElementCount > 0) { section.appendChild(accordion); container.appendChild(section); } } } }