From 0a626e5f66e1b6892a65b618a0554d83a5dc0ba8 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sat, 16 Mar 2024 16:57:12 +0100 Subject: [PATCH] feat: Add completer to recording save functions Signed-off-by: Myzel394 <50424412+Myzel394@users.noreply.github.com> --- .../organisms/RecorderEventsHandler.kt | 24 +++++++++++++++---- .../alibi/ui/models/BaseRecorderModel.kt | 5 +++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/RecorderEventsHandler.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/RecorderEventsHandler.kt index d01c5ad..4db1b32 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/RecorderEventsHandler.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/RecorderEventsHandler.kt @@ -1,6 +1,5 @@ package app.myzel394.alibi.ui.components.RecorderScreen.organisms -import android.content.Intent import android.net.Uri import android.util.Log import androidx.compose.material3.SnackbarDuration @@ -9,8 +8,6 @@ import androidx.compose.material3.SnackbarResult import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableDoubleStateOf -import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -33,6 +30,7 @@ import app.myzel394.alibi.ui.models.AudioRecorderModel import app.myzel394.alibi.ui.models.BaseRecorderModel import app.myzel394.alibi.ui.models.VideoRecorderModel import app.myzel394.alibi.ui.utils.rememberFileSaverDialog +import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @@ -227,6 +225,8 @@ fun RecorderEventsHandler( // Register audio recorder events DisposableEffect(key1 = audioRecorder, key2 = settings) { audioRecorder.onRecordingSave = { justSave -> + val completer = CompletableDeferred() + scope.launch { if (justSave) { saveRecording(audioRecorder as RecorderModel) @@ -239,7 +239,11 @@ fun RecorderEventsHandler( audioRecorder.destroyService(context) } + + completer.complete(Unit) } + + completer } audioRecorder.onRecordingStart = { snackbarHostState.currentSnackbarData?.dismiss() @@ -265,7 +269,9 @@ fun RecorderEventsHandler( } onDispose { - audioRecorder.onRecordingSave = {} + audioRecorder.onRecordingSave = { + throw NotImplementedError("onRecordingSave should not be called now") + } audioRecorder.onError = {} } } @@ -273,6 +279,8 @@ fun RecorderEventsHandler( // Register video recorder events DisposableEffect(key1 = videoRecorder, key2 = settings) { videoRecorder.onRecordingSave = { justSave -> + val completer = CompletableDeferred() + scope.launch { if (justSave) { saveRecording(videoRecorder as RecorderModel) @@ -285,7 +293,11 @@ fun RecorderEventsHandler( videoRecorder.destroyService(context) } + + completer.complete(Unit) } + + completer } videoRecorder.onRecordingStart = { snackbarHostState.currentSnackbarData?.dismiss() @@ -311,7 +323,9 @@ fun RecorderEventsHandler( } onDispose { - videoRecorder.onRecordingSave = {} + videoRecorder.onRecordingSave = { + throw NotImplementedError("onRecordingSave should not be called now") + } videoRecorder.onError = {} } } 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 452419b..ebc054e 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 @@ -17,6 +17,7 @@ import app.myzel394.alibi.helpers.BatchesFolder import app.myzel394.alibi.services.IntervalRecorderService import app.myzel394.alibi.services.RecorderNotificationHelper import app.myzel394.alibi.services.RecorderService +import kotlinx.coroutines.CompletableDeferred import kotlinx.serialization.json.Json abstract class BaseRecorderModel> : @@ -45,7 +46,9 @@ abstract class BaseRecorderModel Unit = {} + var onRecordingSave: (isSavingAsOldRecording: Boolean) -> CompletableDeferred = { + throw NotImplementedError("onRecordingSave not implemented") + } var onRecordingStart: () -> Unit = {} var onError: () -> Unit = {} var onBatchesFolderNotAccessible: () -> Unit = {}