Fix setPackagePriority type safety and add missing .catch() to IPC calls

- Use PackagePriority type instead of string/any in preload and app-controller
- Add .catch() to start(), extractNow(), setPackagePriority(), updateSettings(columnOrder), openLog(), openSessionLog()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sucukdeluxe 2026-03-05 03:59:10 +01:00
parent 575fca3806
commit db97a7df14
3 changed files with 12 additions and 10 deletions

View File

@ -5,6 +5,7 @@ import {
AppSettings, AppSettings,
DuplicatePolicy, DuplicatePolicy,
HistoryEntry, HistoryEntry,
PackagePriority,
ParsedPackageInput, ParsedPackageInput,
SessionStats, SessionStats,
StartConflictEntry, StartConflictEntry,
@ -360,8 +361,8 @@ export class AppController {
clearHistory(this.storagePaths); clearHistory(this.storagePaths);
} }
public setPackagePriority(packageId: string, priority: string): void { public setPackagePriority(packageId: string, priority: PackagePriority): void {
this.manager.setPackagePriority(packageId, priority as any); this.manager.setPackagePriority(packageId, priority);
} }
public skipItems(itemIds: string[]): void { public skipItems(itemIds: string[]): void {

View File

@ -4,6 +4,7 @@ import {
AppSettings, AppSettings,
DuplicatePolicy, DuplicatePolicy,
HistoryEntry, HistoryEntry,
PackagePriority,
SessionStats, SessionStats,
StartConflictEntry, StartConflictEntry,
StartConflictResolutionResult, StartConflictResolutionResult,
@ -56,7 +57,7 @@ const api: ElectronApi = {
getHistory: (): Promise<HistoryEntry[]> => ipcRenderer.invoke(IPC_CHANNELS.GET_HISTORY), getHistory: (): Promise<HistoryEntry[]> => ipcRenderer.invoke(IPC_CHANNELS.GET_HISTORY),
clearHistory: (): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.CLEAR_HISTORY), clearHistory: (): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.CLEAR_HISTORY),
removeHistoryEntry: (entryId: string): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.REMOVE_HISTORY_ENTRY, entryId), removeHistoryEntry: (entryId: string): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.REMOVE_HISTORY_ENTRY, entryId),
setPackagePriority: (packageId: string, priority: string): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.SET_PACKAGE_PRIORITY, packageId, priority), setPackagePriority: (packageId: string, priority: PackagePriority): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.SET_PACKAGE_PRIORITY, packageId, priority),
skipItems: (itemIds: string[]): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.SKIP_ITEMS, itemIds), skipItems: (itemIds: string[]): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.SKIP_ITEMS, itemIds),
resetItems: (itemIds: string[]): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.RESET_ITEMS, itemIds), resetItems: (itemIds: string[]): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.RESET_ITEMS, itemIds),
startItems: (itemIds: string[]): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.START_ITEMS, itemIds), startItems: (itemIds: string[]): Promise<void> => ipcRenderer.invoke(IPC_CHANNELS.START_ITEMS, itemIds),

View File

@ -2249,10 +2249,10 @@ export function App(): ReactElement {
</button> </button>
{openMenu === "hilfe" && ( {openMenu === "hilfe" && (
<div className="menu-dropdown"> <div className="menu-dropdown">
<button className="menu-dropdown-item" onClick={() => { closeMenus(); void window.rd.openLog(); }}> <button className="menu-dropdown-item" onClick={() => { closeMenus(); void window.rd.openLog().catch(() => {}); }}>
<span>Log öffnen</span> <span>Log öffnen</span>
</button> </button>
<button className="menu-dropdown-item" onClick={() => { closeMenus(); void window.rd.openSessionLog(); }}> <button className="menu-dropdown-item" onClick={() => { closeMenus(); void window.rd.openSessionLog().catch(() => {}); }}>
<span>Session-Log öffnen</span> <span>Session-Log öffnen</span>
</button> </button>
<button className="menu-dropdown-item" onClick={() => { closeMenus(); void onCheckUpdates(); }}> <button className="menu-dropdown-item" onClick={() => { closeMenus(); void onCheckUpdates(); }}>
@ -2408,7 +2408,7 @@ export function App(): ReactElement {
newOrder.splice(toIdx, 0, dragColId); newOrder.splice(toIdx, 0, dragColId);
setColumnOrder(newOrder); setColumnOrder(newOrder);
setDragColId(null); setDragColId(null);
void window.rd.updateSettings({ columnOrder: newOrder }); void window.rd.updateSettings({ columnOrder: newOrder }).catch(() => {});
}} }}
onDragEnd={() => { setDragColId(null); setDropTargetCol(null); }} onDragEnd={() => { setDragColId(null); setDropTargetCol(null); }}
onClick={sortCol ? () => { onClick={sortCol ? () => {
@ -3050,7 +3050,7 @@ export function App(): ReactElement {
setContextMenu(null); setContextMenu(null);
}}>Ausgewählte Downloads starten{multi ? ` (${selectedIds.size})` : ""}</button> }}>Ausgewählte Downloads starten{multi ? ` (${selectedIds.size})` : ""}</button>
)} )}
<button className="ctx-menu-item" onClick={() => { void window.rd.start(); setContextMenu(null); }}>Alle Downloads starten</button> <button className="ctx-menu-item" onClick={() => { void window.rd.start().catch(() => {}); setContextMenu(null); }}>Alle Downloads starten</button>
<div className="ctx-menu-sep" /> <div className="ctx-menu-sep" />
<button className="ctx-menu-item" onClick={() => showLinksPopup(contextMenu.packageId, contextMenu.itemId)}>Linkadressen anzeigen</button> <button className="ctx-menu-item" onClick={() => showLinksPopup(contextMenu.packageId, contextMenu.itemId)}>Linkadressen anzeigen</button>
<div className="ctx-menu-sep" /> <div className="ctx-menu-sep" />
@ -3100,7 +3100,7 @@ export function App(): ReactElement {
const someCompleted = items.some((item) => item && item.status === "completed"); const someCompleted = items.some((item) => item && item.status === "completed");
return (<> return (<>
{someCompleted && ( {someCompleted && (
<button className="ctx-menu-item" onClick={() => { void window.rd.extractNow(contextMenu.packageId); setContextMenu(null); }}>Jetzt entpacken</button> <button className="ctx-menu-item" onClick={() => { void window.rd.extractNow(contextMenu.packageId).catch(() => {}); setContextMenu(null); }}>Jetzt entpacken</button>
)} )}
</>); </>);
})()} })()}
@ -3113,7 +3113,7 @@ export function App(): ReactElement {
const label = p === "high" ? "Hoch" : p === "low" ? "Niedrig" : "Standard"; const label = p === "high" ? "Hoch" : p === "low" ? "Niedrig" : "Standard";
const pkgIds = [...selectedIds].filter((id) => snapshot.session.packages[id]); const pkgIds = [...selectedIds].filter((id) => snapshot.session.packages[id]);
const allMatch = pkgIds.every((id) => (snapshot.session.packages[id]?.priority || "normal") === p); const allMatch = pkgIds.every((id) => (snapshot.session.packages[id]?.priority || "normal") === p);
return <button key={p} className={`ctx-menu-item${allMatch ? " ctx-menu-active" : ""}`} onClick={() => { for (const id of pkgIds) void window.rd.setPackagePriority(id, p); setContextMenu(null); }}>{allMatch ? `${label}` : label}</button>; return <button key={p} className={`ctx-menu-item${allMatch ? " ctx-menu-active" : ""}`} onClick={() => { for (const id of pkgIds) void window.rd.setPackagePriority(id, p).catch(() => {}); setContextMenu(null); }}>{allMatch ? `${label}` : label}</button>;
})} })}
</div> </div>
</div> </div>
@ -3166,7 +3166,7 @@ export function App(): ReactElement {
newOrder.splice(insertAt, 0, col); newOrder.splice(insertAt, 0, col);
} }
setColumnOrder(newOrder); setColumnOrder(newOrder);
void window.rd.updateSettings({ columnOrder: newOrder }); void window.rd.updateSettings({ columnOrder: newOrder }).catch(() => {});
}} }}
> >
{isVisible ? "\u2713 " : "\u2003 "}{def.label} {isVisible ? "\u2713 " : "\u2003 "}{def.label}