| 6987 | } |
| 6988 | serverThumbnailJob.cancelRequested = true; |
| 6989 | try { |
| 6990 | sendToThumbnailWorker('cancel-server-thumbnail-job'); |
| 6991 | } catch (error) { |
| 6992 | console.warn('[Server thumbnails] Cancel notify failed:', error.message); |
| 6993 | } |
| 6994 | return { success: true }; |
| 6995 | }); |
| 6996 | |
| 6997 | ipcMain.handle('report-server-thumbnail-progress', async (_event, progress) => { |
| 6998 | broadcastThumbnailJobEvent('thumbnail-job-progress', progress || {}); |
| 6999 | return true; |
| 7000 | }); |
| 7001 | |
| 7002 | ipcMain.handle('report-server-thumbnail-complete', async (_event, result) => { |
| 7003 | serverThumbnailJob = { status: 'idle', mode: null, cancelRequested: false }; |
| 7004 | broadcastThumbnailJobEvent('thumbnail-job-complete', result || {}); |
| 7005 | if (global.broadcastEvent) { |
| 7006 | global.broadcastEvent('refresh-grid'); |
| 7007 | } |
| 7008 | return true; |
| 7009 | }); |
| 7010 | |
| 7011 | ipcMain.handle('report-server-thumbnail-error', async (_event, errorInfo) => { |
| 7012 | serverThumbnailJob = { status: 'idle', mode: null, cancelRequested: false }; |
| 7013 | const message = (errorInfo && (errorInfo.message || errorInfo.error)) || String(errorInfo || 'Thumbnail job failed'); |
| 7014 | broadcastThumbnailJobEvent('thumbnail-job-error', { error: message }); |
| 7015 | return true; |
| 7016 | }); |
| 7017 | |
| 7018 | ipcMain.handle('get-server-thumbnail-job-status', async () => { |
| 7019 | return { |
| 7020 | status: serverThumbnailJob.status, |
| 7021 | mode: serverThumbnailJob.mode, |
| 7022 | cancelRequested: !!serverThumbnailJob.cancelRequested |
| 7023 | }; |
| 7024 | }); |
| 7025 | |
| 7026 | // Update the shouldSkipDirectory function |
| 7027 | function getScanExcludeNames() { |