Harden Mega web flow and smooth download runtime
Build and Release / build (push) Has been cancelled

This commit is contained in:
Sucukdeluxe
2026-02-27 06:17:15 +01:00
parent 40bfda2ad7
commit 583d74fcc9
9 changed files with 198 additions and 61 deletions
+51 -25
View File
@@ -170,26 +170,36 @@ export function App(): ReactElement {
};
const onAddLinks = async (): Promise<void> => {
await window.rd.updateSettings(settingsDraft);
const result = await window.rd.addLinks({ rawText: linksRaw, packageName: settingsDraft.packageName });
if (result.addedLinks > 0) {
setStatusToast(`${result.addedPackages} Paket(e), ${result.addedLinks} Link(s) hinzugefügt`);
setLinksRaw("");
} else {
setStatusToast("Keine gültigen Links gefunden");
try {
await window.rd.updateSettings(settingsDraft);
const result = await window.rd.addLinks({ rawText: linksRaw, packageName: settingsDraft.packageName });
if (result.addedLinks > 0) {
setStatusToast(`${result.addedPackages} Paket(e), ${result.addedLinks} Link(s) hinzugefügt`);
setLinksRaw("");
} else {
setStatusToast("Keine gültigen Links gefunden");
}
setTimeout(() => setStatusToast(""), 2200);
} catch (error) {
setStatusToast(`Fehler beim Hinzufügen: ${String(error)}`);
setTimeout(() => setStatusToast(""), 2600);
}
setTimeout(() => setStatusToast(""), 2200);
};
const onImportDlc = async (): Promise<void> => {
const files = await window.rd.pickContainers();
if (files.length === 0) {
return;
try {
const files = await window.rd.pickContainers();
if (files.length === 0) {
return;
}
await window.rd.updateSettings(settingsDraft);
const result = await window.rd.addContainers(files);
setStatusToast(`DLC importiert: ${result.addedPackages} Paket(e), ${result.addedLinks} Link(s)`);
setTimeout(() => setStatusToast(""), 2200);
} catch (error) {
setStatusToast(`Fehler beim DLC-Import: ${String(error)}`);
setTimeout(() => setStatusToast(""), 2600);
}
await window.rd.updateSettings(settingsDraft);
const result = await window.rd.addContainers(files);
setStatusToast(`DLC importiert: ${result.addedPackages} Paket(e), ${result.addedLinks} Link(s)`);
setTimeout(() => setStatusToast(""), 2200);
};
const onDrop = async (event: DragEvent<HTMLTextAreaElement>): Promise<void> => {
@@ -202,10 +212,15 @@ export function App(): ReactElement {
if (dlc.length === 0) {
return;
}
await window.rd.updateSettings(settingsDraft);
const result = await window.rd.addContainers(dlc);
setStatusToast(`Drag-and-Drop: ${result.addedPackages} Paket(e), ${result.addedLinks} Link(s)`);
setTimeout(() => setStatusToast(""), 2200);
try {
await window.rd.updateSettings(settingsDraft);
const result = await window.rd.addContainers(dlc);
setStatusToast(`Drag-and-Drop: ${result.addedPackages} Paket(e), ${result.addedLinks} Link(s)`);
setTimeout(() => setStatusToast(""), 2200);
} catch (error) {
setStatusToast(`Fehler bei Drag-and-Drop: ${String(error)}`);
setTimeout(() => setStatusToast(""), 2600);
}
};
const setBool = (key: keyof AppSettings, value: boolean): void => {
@@ -220,6 +235,15 @@ export function App(): ReactElement {
setSettingsDraft((prev: AppSettings) => ({ ...prev, [key]: value }));
};
const performQuickAction = async (action: () => Promise<unknown>): Promise<void> => {
try {
await action();
} catch (error) {
setStatusToast(`Fehler: ${String(error)}`);
setTimeout(() => setStatusToast(""), 2600);
}
};
return (
<div className="app-shell">
<header className="top-header">
@@ -239,15 +263,17 @@ export function App(): ReactElement {
className="btn accent"
disabled={!snapshot.canStart}
onClick={async () => {
await window.rd.updateSettings(settingsDraft);
await window.rd.start();
await performQuickAction(async () => {
await window.rd.updateSettings(settingsDraft);
await window.rd.start();
});
}}
>Start</button>
<button className="btn" disabled={!snapshot.canPause} onClick={() => window.rd.togglePause()}>
<button className="btn" disabled={!snapshot.canPause} onClick={() => { void performQuickAction(() => window.rd.togglePause()); }}>
{snapshot.session.paused ? "Resume" : "Pause"}
</button>
<button className="btn" disabled={!snapshot.canStop} onClick={() => window.rd.stop()}>Stop</button>
<button className="btn" onClick={() => window.rd.clearAll()}>Alles leeren</button>
<button className="btn" disabled={!snapshot.canStop} onClick={() => { void performQuickAction(() => window.rd.stop()); }}>Stop</button>
<button className="btn" onClick={() => { void performQuickAction(() => window.rd.clearAll()); }}>Alles leeren</button>
</div>
<div className="speed-config">
<label>
@@ -310,7 +336,7 @@ export function App(): ReactElement {
key={pkg.id}
pkg={pkg}
items={pkg.itemIds.map((id) => snapshot.session.items[id]).filter(Boolean)}
onCancel={() => window.rd.cancelPackage(pkg.id)}
onCancel={() => { void performQuickAction(() => window.rd.cancelPackage(pkg.id)); }}
/>
))}
</section>