import { DateTime } from 'luxon'; import { fetchJson } from '../api.js'; import type { MirrorFileEntry, StoredData } from '../types.js'; import { BASE_URL, FILE_SIZE_OPTS, gameTargets } from '../utils/constants.js'; import math from '../utils/math.js'; import { generateDownloadLinks } from '../utils/ui.js'; export async function renderPatches(container: HTMLElement, mirrorFileDb: MirrorFileEntry[]) { for (const target of gameTargets) { const url = `${BASE_URL}/akEndfield/launcher/game/${target.dirName}/all_patch.json`; try { const data = await fetchJson[]>(url); if (data.length === 0) continue; const section = document.createElement('div'); section.className = 'mb-5'; section.innerHTML = `

${target.region === 'cn' ? 'China' : 'Global'}, ${target.name}

`; const accordion = document.createElement('div'); accordion.className = 'accordion'; accordion.id = `accordion-patch-${target.dirName}`; let itemIndex = 0; for (const e of [...data].reverse()) { if (!e.rsp.patch) continue; const version = e.rsp.version; const reqVersion = e.rsp.request_version; const dateStr = DateTime.fromISO(e.updatedAt).toFormat('yyyy/MM/dd HH:mm:ss'); const packedSize = math.arrayTotal(e.rsp.patch.patches.map((f: any) => parseInt(f.package_size))); const unpackedSize = parseInt(e.rsp.patch.total_size) - packedSize; let rows = ''; const fileName = (url: string) => new URL(url).pathname.split('/').pop() ?? ''; if (e.rsp.patch.url) { rows += ` ${fileName(e.rsp.patch.url)} ${e.rsp.patch.md5} ${math.formatFileSize(parseInt(e.rsp.patch.package_size), FILE_SIZE_OPTS)} ${generateDownloadLinks(e.rsp.patch.url, mirrorFileDb)} `; } for (const f of e.rsp.patch.patches) { rows += ` ${fileName(f.url)} ${f.md5} ${math.formatFileSize(parseInt(f.package_size), FILE_SIZE_OPTS)} ${generateDownloadLinks(f.url, mirrorFileDb)} `; } const itemId = `patch-${target.dirName}-${itemIndex}`; const isExpanded = false; itemIndex++; const item = document.createElement('div'); item.className = 'accordion-item'; item.innerHTML = `

Unpacked Size${math.formatFileSize(unpackedSize, FILE_SIZE_OPTS)}
Packed Size${math.formatFileSize(packedSize, FILE_SIZE_OPTS)}
${rows}
FileMD5 ChecksumSizeDL
`; accordion.appendChild(item); } section.appendChild(accordion); container.appendChild(section); } catch (err) { // Ignore } } }