0.10.2-16 Frontend Features
This commit is contained in:
@@ -5201,6 +5201,32 @@ class PipelineService extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
async ejectDriveIfEnabled(settingsMap, devicePath = null) {
|
||||
try {
|
||||
const enabled = String(settingsMap?.auto_eject_after_rip || '').trim().toLowerCase();
|
||||
if (enabled !== 'true' && enabled !== '1') {
|
||||
return;
|
||||
}
|
||||
const device = devicePath
|
||||
|| (settingsMap?.drive_mode === 'explicit' ? String(settingsMap?.drive_device || '').trim() : null)
|
||||
|| String(settingsMap?.drive_device || '').trim()
|
||||
|| '/dev/sr0';
|
||||
logger.info('eject:drive', { device });
|
||||
await new Promise((resolve) => {
|
||||
execFile('eject', [device], { timeout: 10000 }, (error) => {
|
||||
if (error) {
|
||||
logger.warn('eject:drive:failed', { device, error: errorToMeta(error) });
|
||||
} else {
|
||||
logger.info('eject:drive:ok', { device });
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
} catch (error) {
|
||||
logger.warn('eject:drive:error', { error: errorToMeta(error) });
|
||||
}
|
||||
}
|
||||
|
||||
normalizeDiscValue(value) {
|
||||
return String(value || '').trim().toLowerCase();
|
||||
}
|
||||
@@ -9605,6 +9631,7 @@ class PipelineService extends EventEmitter {
|
||||
title: 'Ripster - Job abgeschlossen',
|
||||
message: `${job.title || job.detected_title || `Job #${jobId}`} -> ${finalizedOutputPath}`
|
||||
});
|
||||
void this.ejectDriveIfEnabled(settings);
|
||||
}
|
||||
|
||||
setTimeout(async () => {
|
||||
@@ -13267,6 +13294,7 @@ class PipelineService extends EventEmitter {
|
||||
title: 'Ripster - CD Rip erfolgreich',
|
||||
message: `Job #${jobId}: ${selectedMeta?.title || 'Audio CD'}`
|
||||
});
|
||||
void this.ejectDriveIfEnabled(settings);
|
||||
} catch (error) {
|
||||
settleLifecycle();
|
||||
const failedCdLive = buildLiveContext(currentTrackPosition || null);
|
||||
|
||||
Reference in New Issue
Block a user