fix(security): harden sidecar and media processing lifecycles

This commit is contained in:
NimBold
2026-06-17 09:45:31 +03:30
parent 7c7317adc9
commit 58f4a8a14d
8 changed files with 135 additions and 21 deletions
+5 -1
View File
@@ -93,6 +93,7 @@ export const DownloadItem = React.memo<DownloadItemProps>(({
ref={progressBarRef}
className={`download-progress-fill ${
download.status === 'paused' ? 'paused' :
download.status === 'processing' ? 'processing' :
download.status === 'queued' ? 'queued' : ''
}`}
style={{ width: `${(download.fraction || 0) * 100}%` }}
@@ -103,6 +104,7 @@ export const DownloadItem = React.memo<DownloadItemProps>(({
className={`download-status flex items-center gap-1.5 ${
download.status === 'paused' ? 'download-status-paused' :
download.status === 'failed' ? 'download-status-failed' :
download.status === 'processing' ? 'download-status-processing' :
download.status === 'downloading' ? 'download-status-downloading' :
download.status === 'queued' ? 'download-status-queued' : ''
}`}
@@ -114,6 +116,8 @@ export const DownloadItem = React.memo<DownloadItemProps>(({
</>
) : download.status === 'downloading' ? (
`${((download.fraction || 0) * 100).toFixed(0)}%`
) : download.status === 'processing' ? (
'Processing'
) : (
download.status.charAt(0).toUpperCase() + download.status.slice(1)
)}
@@ -156,7 +160,7 @@ export const DownloadItem = React.memo<DownloadItemProps>(({
</button>
</>
)}
{download.status === 'downloading' && (
{(download.status === 'downloading' || download.status === 'processing') && (
<button onClick={() => handlePause(download.id)} className="app-icon-button h-7 w-7" title="Pause">
<Pause size={14} fill="currentColor" />
</button>
+3 -2
View File
@@ -136,13 +136,14 @@ export const PropertiesModal = () => {
setSelectedPropertiesDownloadId(null);
};
const isLocked = ['downloading', 'completed'].includes(item.status);
const isTransferLocked = item.status === 'downloading';
const isLocked = ['downloading', 'processing', 'completed'].includes(item.status);
const isTransferLocked = item.status === 'downloading' || item.status === 'processing';
let statusColor = 'text-text-secondary';
let StatusIcon = Info;
if (item.status === 'completed') { statusColor = 'text-green-500'; StatusIcon = CheckCircle; }
else if (item.status === 'downloading') { statusColor = 'text-blue-500'; StatusIcon = Play; }
else if (item.status === 'processing') { statusColor = 'text-sky-500'; StatusIcon = Play; }
else if (item.status === 'paused') { statusColor = 'text-orange-500'; StatusIcon = Pause; }
else if (item.status === 'failed') { statusColor = 'text-red-500'; StatusIcon = AlertCircle; }