From c2a9791680593c73dd00c6a8b4f7b30e2f307d76 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Fri, 15 Dec 2023 21:24:28 +0100 Subject: [PATCH] feat: Add save last recording functionality again --- .../myzel394/alibi/helpers/BatchesFolder.kt | 32 +++---- .../atoms/RecorderEventsHandler.kt | 86 ++++++++++++------- .../organisms/AudioRecordingStatus.kt | 2 +- .../organisms/VideoRecordingStatus.kt | 2 +- .../alibi/ui/models/BaseRecorderModel.kt | 6 +- .../alibi/ui/screens/RecorderScreen.kt | 9 +- 6 files changed, 83 insertions(+), 54 deletions(-) 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 = {