Skip to content

Commit fd110a9

Browse files
committed
Release DL Studio 1.0.6
- Split processing and transfer queues with per-item retry, remove, pause, and cancel controls. - Harden resumable uploads with network retry, timeout handling, pause gates, and smoother speed calculation. - Apply local cleanup from the checkbox state at upload or backup completion time. - Update Windows and Mac package versions, app update date, tests, and release workflow default tag.
1 parent ac6a3ba commit fd110a9

13 files changed

Lines changed: 2470 additions & 2100 deletions

File tree

.github/workflows/release-installers.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ on:
99
tag:
1010
description: "Release tag to upload installers to"
1111
required: true
12-
default: "v1.0.5"
12+
default: "v1.0.6"
1313

1414
permissions:
1515
contents: write

Mac/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Mac/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "dl-studio-mac",
3-
"version": "1.0.5",
3+
"version": "1.0.6",
44
"private": true,
55
"description": "Desktop batch video downsampler for macOS.",
66
"main": "src/main/main.js",

Mac/scripts/app-shell.test.cjs

Lines changed: 73 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -193,42 +193,48 @@ assert.match(app, /const RAW_DATA_VIDEO_UPLOAD_PATH = "\/memory\/raw-data\/video
193193
assert.match(app, /deleteRawDataArchive/);
194194
assert.match(app, /getRawDataId/);
195195
assert.match(app, /repositoryState/);
196-
assert.match(app, /selectionMode/);
197-
assert.match(app, /selectedJobIds/);
198-
assert.match(app, /toggleSelectionMode/);
199-
assert.match(app, /toggleAllSelectedJobs/);
200-
assert.match(app, /backupSelectedJobs/);
201-
assert.match(app, /destination: "DL Rawdata"/);
196+
assert.match(app, /transferQueue/);
197+
assert.match(app, /transferDockExpanded/);
198+
assert.match(app, /transferRunning/);
199+
assert.match(app, /transferQueueRef/);
200+
assert.match(app, /transferRunningRef/);
201+
assert.match(app, /canAddTransfer/);
202+
assert.match(app, /canStartTransfers/);
203+
assert.match(app, /canClearFinishedTransfers/);
204+
assert.match(app, /enqueueAutomationTransfers/);
205+
assert.match(app, /scheduleTransferQueueStart/);
206+
assert.match(app, /startTransferQueue/);
207+
assert.match(app, /restartFailed = true/);
208+
assert.match(app, /restartFailed: false/);
209+
assert.match(app, /retryTransferTask/);
210+
assert.match(app, /createTransferTask/);
211+
assert.match(app, /createJobFromTransferTask/);
212+
assert.match(app, /getTransferTaskUploadOptions/);
213+
assert.match(app, /getPendingAutomationTransferKinds/);
214+
assert.match(app, /getNextTransferTask/);
215+
assert.match(app, /sortTransferQueue/);
216+
assert.match(app, /UploadQueueDock/);
217+
assert.match(app, /TransferQueueItem/);
218+
assert.match(app, /sourceJobId/);
219+
assert.match(app, /autoUploadRequested/);
220+
assert.match(app, /autoBackupRequested/);
221+
assert.match(app, /shouldClearLocalOnComplete/);
222+
assert.match(app, /automationOptionsRef\.current\.autoClearLocal/);
223+
assert.match(app, /destination: isBackup \? "DL Rawdata" : "Delphi Repository"/);
202224
assert.match(app, /if \(job\?\.uploadName\)/);
203-
assert.match(app, /hasPendingAutomationActions/);
204-
assert.match(app, /enqueueAutomationJobs/);
205-
assert.match(app, /const jobsRef = useRef\(jobs\)/);
206-
assert.match(app, /jobsRef\.current = jobs/);
207-
assert.match(app, /automationDrainTimerRef/);
208-
assert.match(app, /scheduleAutomationDrain/);
209-
assert.match(app, /getFreshAutomationJobs/);
210-
assert.match(app, /jobsRef\.current\.find\(\(job\) => job\.id === queuedJob\.id\) \|\| queuedJob/);
211-
assert.match(app, /scheduleAutomationDrain\(300\)/);
212-
assert.match(app, /drainAutomationQueue/);
213-
assert.match(app, /runAutomationTransfers/);
214-
assert.match(app, /mode: "auto-upload"/);
215-
assert.match(app, /mode: "auto-backup"/);
216-
assert.match(app, / \$\{destination\}/);
217-
assert.match(app, /clearLocalTarget: "output"/);
218-
assert.match(app, /clearLocalTarget: "source"/);
219-
assert.match(app, /autoBackupStatus/);
225+
assert.match(app, /clearLocalTarget: isBackup \? "source" : "output"/);
220226
assert.match(app, /backedUpAt/);
221227
assert.match(app, /deletedOriginalPath/);
228+
assert.match(app, /deletedOutputPath/);
222229
assert.match(app, /clearUploadedLocalFile/);
230+
assert.match(app, /getProcessingDoneMessage/);
231+
assert.match(app, /getProcessingOutputActionPath/);
232+
assert.match(app, //);
223233
assert.match(app, //);
224234
assert.match(app, //);
225235
assert.doesNotMatch(app, //);
226-
assert.match(app, /uploadSelectedJobs/);
227236
assert.match(app, /createUploadItems/);
228237
assert.match(app, /cancelCurrentUpload/);
229-
assert.match(app, /closeUploadPanel/);
230-
assert.match(app, /toggleUploadDetails/);
231-
assert.match(app, /UploadProgressPanel/);
232238
assert.match(app, /uploadId/);
233239
assert.match(app, /onInferaUploadProgress/);
234240
assert.match(app, /speedBytesPerSecond/);
@@ -237,23 +243,17 @@ assert.match(app, /getUploadCurrentSpeed/);
237243
assert.match(app, /getTransferErrorStatus/);
238244
assert.match(app, /isTransferErrorStatus/);
239245
assert.match(app, /createTransferFailureSnapshot/);
240-
assert.match(app, /restoreTransferFailureSnapshot/);
241-
assert.match(app, /TransferStatusChips/);
242-
assert.match(app, /getJobTransferChips/);
243246
assert.match(app, /formatJobTransferStatusLabel/);
244-
assert.match(app, /uploadFailureSnapshot/);
245-
assert.match(app, /backupFailed/);
246247
assert.match(app, /transferFailureSnapshot/);
247248
assert.match(app, /upload_error/);
248249
assert.match(app, /backup_error/);
249250
assert.match(app, /status: canceled \? "canceled" : transferErrorStatus/);
250251
assert.match(app, /toggleCurrentUploadPaused/);
251252
assert.match(app, /pauseInferaUpload/);
252253
assert.match(app, /resumeInferaUpload/);
253-
assert.match(app, /AutoUploadNotice/);
254254
assert.match(app, /getUploadItemElapsedMs/);
255255
assert.match(app, /getUploadItemRemainingMs/);
256-
assert.match(app, /className="upload-detail-time"/);
256+
assert.match(app, /className="transfer-item-meta"/);
257257
assert.match(app, / <DurationValue value=\{getUploadItemElapsedMs\(item, now\)\}/);
258258
assert.match(app, / <DurationValue value=\{getUploadItemRemainingMs\(item, now\)\}/);
259259
assert.match(app, /formatBytes\(item\.bytesUploaded, \{ precision: 2 \}\)/);
@@ -262,23 +262,39 @@ assert.match(app, /getActiveEncodingJob/);
262262
assert.match(app, /formatEncodingSpeed/);
263263
assert.match(app, /className="encoding-stats-chip"/);
264264
assert.match(app, /activeEncodingJob/);
265-
assert.match(app, /canBackupSelection/);
266-
assert.match(app, /canUploadSelection/);
267265
assert.match(app, /isLowFrameRateJob/);
268-
assert.match(app, /isJobUploadable/);
269266
assert.match(app, /getJobUploadPath/);
270267
assert.match(app, /dlEditor\.uploadInferaVideo/);
271268
assert.match(app, /\/memory\/assets\/web-video\/events/);
272269
assert.match(app, /className="frame-rate-chip"/);
273-
assert.match(app, /className="selection-count"/);
274-
assert.match(app, /className="queue-select-box"/);
270+
assert.doesNotMatch(app, /selectionMode/);
271+
assert.doesNotMatch(app, /selectedJobIds/);
272+
assert.doesNotMatch(app, /toggleSelectionMode/);
273+
assert.doesNotMatch(app, /toggleAllSelectedJobs/);
274+
assert.doesNotMatch(app, /backupSelectedJobs/);
275+
assert.doesNotMatch(app, /hasPendingAutomationActions/);
276+
assert.doesNotMatch(app, /enqueueAutomationJobs/);
277+
assert.doesNotMatch(app, /automationDrainTimerRef/);
278+
assert.doesNotMatch(app, /drainAutomationQueue/);
279+
assert.doesNotMatch(app, /mode: "auto-upload"/);
280+
assert.doesNotMatch(app, /mode: "auto-backup"/);
281+
assert.doesNotMatch(app, /autoBackupStatus/);
282+
assert.doesNotMatch(app, /uploadSelectedJobs/);
283+
assert.doesNotMatch(app, /closeUploadPanel/);
284+
assert.doesNotMatch(app, /toggleUploadDetails/);
285+
assert.doesNotMatch(app, /UploadProgressPanel/);
286+
assert.doesNotMatch(app, /TransferStatusChips/);
287+
assert.doesNotMatch(app, /getJobTransferChips/);
288+
assert.doesNotMatch(app, /AutoUploadNotice/);
289+
assert.doesNotMatch(app, /getNextUploadPanelStatus/);
290+
assert.doesNotMatch(app, /className="selection-count"/);
291+
assert.doesNotMatch(app, /className="queue-select-box"/);
292+
assert.doesNotMatch(app, /title=""/);
293+
assert.doesNotMatch(app, /title=" Delphi Repository"/);
275294
assert.match(app, /cloudSpaceId/);
276295
assert.match(app, /setCloudSpaceId/);
277296
assert.match(app, /className="cloud-space-button"/);
278297
assert.match(app, /className="cloud-space-menu"/);
279-
assert.match(app, /title=""/);
280-
assert.match(app, /title=""/);
281-
assert.match(app, /title=" Delphi Repository"/);
282298
assert.match(app, /const CLOUD_FILTERS/);
283299
assert.match(app, /getCloudRepositoryStats/);
284300
assert.match(app, /cloudQuery/);
@@ -350,7 +366,7 @@ assert.match(styles, /\.login-account-identity/);
350366
assert.match(styles, /\.placeholder-page/);
351367
assert.match(styles, /\.engine-page/);
352368
assert.match(styles, /\.engine-gate/);
353-
assert.match(styles, /\.auto-upload-notice/);
369+
assert.doesNotMatch(styles, /\.auto-upload-notice/);
354370
assert.match(styles, /\.cloud-page/);
355371
assert.match(styles, /\.cloud-drive/);
356372
assert.match(styles, /\.cloud-sidebar/);
@@ -361,21 +377,23 @@ assert.match(styles, /\.cloud-search/);
361377
assert.match(styles, /\.cloud-view-toggle/);
362378
assert.match(styles, /\.cloud-file-table/);
363379
assert.match(styles, /\.cloud-file-grid/);
364-
assert.match(styles, /\.queue-item\.selection-open/);
365-
assert.match(styles, /\.queue-select-box/);
366-
assert.doesNotMatch(styles, /\.queue-select-box\s*\{[^}]*border:/s);
367-
assert.match(styles, /\.selection-count/);
380+
assert.doesNotMatch(styles, /\.queue-item\.selection-open/);
381+
assert.doesNotMatch(styles, /\.queue-select-box/);
382+
assert.doesNotMatch(styles, /\.selection-count/);
368383
assert.match(styles, /\.frame-rate-chip/);
369384
assert.match(styles, /\.encoding-stats-chip/);
370-
assert.match(styles, /\.transfer-status-chip\.upload_error/);
371-
assert.match(styles, /\.transfer-status-chip\.backup_error/);
372-
assert.match(styles, /\.upload-panel/);
373-
assert.match(styles, /\.upload-actions/);
385+
assert.doesNotMatch(styles, /\.transfer-status-chip/);
386+
assert.doesNotMatch(styles, /\.upload-panel/);
387+
assert.doesNotMatch(styles, /\.upload-actions/);
374388
assert.match(styles, /\.upload-progress-fill/);
375-
assert.match(styles, /\.upload-panel\.upload_error \.upload-icon/);
376-
assert.match(styles, /\.upload-panel\.backup_error \.upload-progress-fill/);
377-
assert.match(styles, /\.upload-detail-list/);
378-
assert.match(styles, /\.upload-detail-time/);
389+
assert.doesNotMatch(styles, /\.upload-detail-list/);
390+
assert.doesNotMatch(styles, /\.upload-detail-time/);
391+
assert.match(styles, /\.transfer-dock/);
392+
assert.match(styles, /\.transfer-fab/);
393+
assert.match(styles, /\.transfer-dock-panel/);
394+
assert.match(styles, /\.transfer-dock-actions/);
395+
assert.match(styles, /\.transfer-item/);
396+
assert.match(styles, /\.transfer-retry-button/);
379397
assert.match(styles, /\.repository-list/);
380398
assert.match(styles, /\.repository-item/);
381399
assert.match(styles, /\.repository-row/);

0 commit comments

Comments
 (0)