diff --git a/app/src/main/java/app/myzel394/alibi/helpers/BatchesFolder.kt b/app/src/main/java/app/myzel394/alibi/helpers/BatchesFolder.kt index 0525b10..85ce600 100644 --- a/app/src/main/java/app/myzel394/alibi/helpers/BatchesFolder.kt +++ b/app/src/main/java/app/myzel394/alibi/helpers/BatchesFolder.kt @@ -126,23 +126,25 @@ abstract class BatchesFolder( extension = extension, ) - if (disableCache || !checkIfOutputAlreadyExists(recordingStart, extension)) { - val filePaths = getBatchesForFFmpeg() + if (!disableCache && checkIfOutputAlreadyExists(recordingStart, extension)) { + return outputFile + } - for (parameter in ffmpegParameters) { - Log.i("Concatenation", "Trying parameter $parameter") - onNextParameterTry(parameter) + val filePaths = getBatchesForFFmpeg() - try { - concatenateFunction( - filePaths, - outputFile, - parameter, - ).await() - return outputFile - } catch (e: MediaConverter.FFmpegException) { - continue - } + for (parameter in ffmpegParameters) { + Log.i("Concatenation", "Trying parameter $parameter") + onNextParameterTry(parameter) + + try { + concatenateFunction( + filePaths, + outputFile, + parameter, + ).await() + return outputFile + } catch (e: MediaConverter.FFmpegException) { + continue } } diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderEventsHandler.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderEventsHandler.kt index 0862f1a..877d063 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderEventsHandler.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderEventsHandler.kt @@ -132,11 +132,19 @@ fun RecorderEventsHandler( // When recording is loaded from lastRecording ?: settings.lastRecording ?: throw Exception("No recording information available") - val batchesFolder = - if (recorder.javaClass == AudioRecorderModel::class.java) - AudioBatchesFolder.importFromFolder(recording.folderPath, context) - else - VideoBatchesFolder.importFromFolder(recording.folderPath, context) + val batchesFolder = when (recorder.javaClass) { + AudioRecorderModel::class.java -> AudioBatchesFolder.importFromFolder( + recording.folderPath, + context + ) + + VideoRecorderModel::class.java -> VideoBatchesFolder.importFromFolder( + recording.folderPath, + context + ) + + else -> throw Exception("Unknown recorder type") + } batchesFolder.concatenate( recording.recordingStart, @@ -151,20 +159,24 @@ fun RecorderEventsHandler( when (batchesFolder.type) { BatchesFolder.BatchType.INTERNAL -> { - if (batchesFolder is AudioBatchesFolder) { - saveAudioFile( - batchesFolder.asInternalGetOutputFile( - recording.recordingStart, - recording.fileExtension, - ), name - ) - } else if (batchesFolder is VideoBatchesFolder) { - saveVideoFile( - batchesFolder.asInternalGetOutputFile( - recording.recordingStart, - recording.fileExtension, - ), name - ) + when (batchesFolder) { + is AudioBatchesFolder -> { + saveAudioFile( + batchesFolder.asInternalGetOutputFile( + recording.recordingStart, + recording.fileExtension, + ), name + ) + } + + is VideoBatchesFolder -> { + saveVideoFile( + batchesFolder.asInternalGetOutputFile( + recording.recordingStart, + recording.fileExtension, + ), name + ) + } } } @@ -186,17 +198,21 @@ fun RecorderEventsHandler( // Register audio recorder events DisposableEffect(key1 = audioRecorder, key2 = settings) { - audioRecorder.onRecordingSave = { + audioRecorder.onRecordingSave = { justSave -> scope.launch { - audioRecorder.stopRecording(context) + if (justSave) { + saveRecording(audioRecorder as RecorderModel) + } else { + audioRecorder.stopRecording(context) - kotlin.runCatching { - saveAsLastRecording(audioRecorder as RecorderModel) + runCatching { + saveAsLastRecording(audioRecorder as RecorderModel) - saveRecording(audioRecorder) + saveRecording(audioRecorder) + } + + audioRecorder.destroyService(context) } - - audioRecorder.destroyService(context) } } audioRecorder.onError = { @@ -215,17 +231,21 @@ fun RecorderEventsHandler( // Register video recorder events DisposableEffect(key1 = videoRecorder, key2 = settings) { - videoRecorder.onRecordingSave = { + videoRecorder.onRecordingSave = { justSave -> scope.launch { - videoRecorder.stopRecording(context) + if (justSave) { + saveRecording(videoRecorder as RecorderModel) + } else { + videoRecorder.stopRecording(context) - kotlin.runCatching { - saveAsLastRecording(videoRecorder as RecorderModel) + runCatching { + saveAsLastRecording(videoRecorder as RecorderModel) - saveRecording(videoRecorder) + saveRecording(videoRecorder) + } + + videoRecorder.destroyService(context) } - - videoRecorder.destroyService(context) } } videoRecorder.onError = { diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/AudioRecordingStatus.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/AudioRecordingStatus.kt index 0233368..13b66a3 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/AudioRecordingStatus.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/AudioRecordingStatus.kt @@ -92,7 +92,7 @@ fun AudioRecordingStatus( } }, onSave = { - audioRecorder.onRecordingSave() + audioRecorder.onRecordingSave(false) } ) diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt index 1e9d4cf..2cd2fd2 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt @@ -169,7 +169,7 @@ fun VideoRecordingStatus( } }, onSave = { - videoRecorder.onRecordingSave() + videoRecorder.onRecordingSave(false) } ) } diff --git a/app/src/main/java/app/myzel394/alibi/ui/models/BaseRecorderModel.kt b/app/src/main/java/app/myzel394/alibi/ui/models/BaseRecorderModel.kt index ce7b3dc..a33d6e8 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/models/BaseRecorderModel.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/models/BaseRecorderModel.kt @@ -40,7 +40,9 @@ abstract class BaseRecorderModel(null) protected set - var onRecordingSave: () -> Unit = {} + // If `isSavingAsOldRecording` is true, the user is saving an old recording, + // thus the service is not running and thus doesn't need to be stopped or destroyed + var onRecordingSave: (isSavingAsOldRecording: Boolean) -> Unit = {} var onError: () -> Unit = {} abstract var batchesFolder: B @@ -132,8 +134,6 @@ abstract class BaseRecorderModel + audioRecorder.onRecordingSave(true) + + RecordingInformation.Type.VIDEO -> + videoRecorder.onRecordingSave(true) + } }, showAudioRecorder = topBarVisible, onHideTopBar = {