🐛 fix: job index rebuild after restore, drop-target visibility, XSS

- Rebuild _jobIndexById after restoring queue from config on startup
  (prevented progress updates from finding restored jobs)
- Show and focus mainWindow when files are dropped on floating
  drop-target while window is minimized/hidden
- Escape status text in queue table HTML to prevent XSS from
  unexpected status values

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Administrator 2026-03-21 13:52:22 +01:00
parent b5a853b8d4
commit f6c9979ac5
2 changed files with 6 additions and 1 deletions

View File

@ -1259,6 +1259,10 @@ ipcMain.handle('hide-drop-target', () => {
ipcMain.on('drop-target:files', (_event, paths) => { ipcMain.on('drop-target:files', (_event, paths) => {
if (mainWindow && !mainWindow.isDestroyed()) { if (mainWindow && !mainWindow.isDestroyed()) {
if (!mainWindow.isVisible() || mainWindow.isMinimized()) {
mainWindow.show();
mainWindow.focus();
}
mainWindow.webContents.send('drop-target:files', paths); mainWindow.webContents.send('drop-target:files', paths);
} }
}); });

View File

@ -408,6 +408,7 @@ function restoreQueueStateFromConfig() {
} }
} }
queueJobs = Array.from(seen.values()); queueJobs = Array.from(seen.values());
rebuildJobIndex();
} }
function buildPersistedQueueState() { function buildPersistedQueueState() {
@ -750,7 +751,7 @@ function buildRowHtml(job) {
<td class="col-filename" title="${escapeAttr(job.fileName)}">${escapeHtml(job.fileName)}</td> <td class="col-filename" title="${escapeAttr(job.fileName)}">${escapeHtml(job.fileName)}</td>
<td class="col-size">${uploadedSize}</td> <td class="col-size">${uploadedSize}</td>
<td class="col-host">${escapeHtml(job.hoster)}</td> <td class="col-host">${escapeHtml(job.hoster)}</td>
<td class="col-status"><span class="status-badge ${statusClass}">${statusText}</span></td> <td class="col-status"><span class="status-badge ${statusClass}">${escapeHtml(statusText)}</span></td>
<td class="col-elapsed">${elapsed}</td> <td class="col-elapsed">${elapsed}</td>
<td class="col-remaining">${remaining}</td> <td class="col-remaining">${remaining}</td>
<td class="col-speed">${speed}</td> <td class="col-speed">${speed}</td>