mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-18 14:55:26 +02:00
fix: Properly concatenate in own thread wait for end properly
Signed-off-by: Myzel394 <50424412+Myzel394@users.noreply.github.com>
This commit is contained in:
parent
24928661c5
commit
7d83bca1fe
@ -132,7 +132,7 @@ class VideoRecorderService :
|
||||
_videoFinalizerListener = CompletableDeferred()
|
||||
|
||||
activeRecording = newRecording.start(ContextCompat.getMainExecutor(this)) { event ->
|
||||
if (event is VideoRecordEvent.Finalize && this@VideoRecorderService.state == RecorderState.STOPPED || this@VideoRecorderService.state == RecorderState.PAUSED) {
|
||||
if (event is VideoRecordEvent.Finalize && (this@VideoRecorderService.state == RecorderState.STOPPED || this@VideoRecorderService.state == RecorderState.PAUSED)) {
|
||||
_videoFinalizerListener.complete(Unit)
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +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.delay
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlin.concurrent.thread
|
||||
@ -136,13 +136,15 @@ fun RecorderEventsHandler(
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun saveRecording(recorder: RecorderModel, cleanupOldFiles: Boolean = false): Thread {
|
||||
fun saveRecording(
|
||||
recorder: RecorderModel,
|
||||
cleanupOldFiles: Boolean = false
|
||||
): CompletableDeferred<Unit> {
|
||||
isProcessing = true
|
||||
|
||||
// Give the user some time to see the processing dialog
|
||||
delay(100)
|
||||
val completer = CompletableDeferred<Unit>()
|
||||
|
||||
return thread {
|
||||
thread {
|
||||
runBlocking {
|
||||
try {
|
||||
if (recorder.isCurrentlyActivelyRecording) {
|
||||
@ -230,22 +232,19 @@ fun RecorderEventsHandler(
|
||||
recorder.recorderService?.unlockFiles(cleanupOldFiles)
|
||||
}
|
||||
isProcessing = false
|
||||
processingProgress = null
|
||||
completer.complete(Unit)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return completer
|
||||
}
|
||||
|
||||
// Register audio recorder events
|
||||
DisposableEffect(key1 = audioRecorder, key2 = settings) {
|
||||
audioRecorder.onRecordingSave = { cleanupOldFiles ->
|
||||
// We create our own coroutine because we show our own dialog and we want to
|
||||
// keep saving until it's finished.
|
||||
// So it's smarter to take things into our own hands and use our local coroutine,
|
||||
// instead of hoping that the coroutine from where this will be called will be alive
|
||||
// until the end of the saving process
|
||||
scope.launch {
|
||||
saveRecording(audioRecorder as RecorderModel, cleanupOldFiles).join()
|
||||
}
|
||||
saveRecording(audioRecorder as RecorderModel, cleanupOldFiles)
|
||||
}
|
||||
audioRecorder.onRecordingStart = {
|
||||
snackbarHostState.currentSnackbarData?.dismiss()
|
||||
@ -288,14 +287,7 @@ fun RecorderEventsHandler(
|
||||
// Register video recorder events
|
||||
DisposableEffect(key1 = videoRecorder, key2 = settings) {
|
||||
videoRecorder.onRecordingSave = { cleanupOldFiles ->
|
||||
// We create our own coroutine because we show our own dialog and we want to
|
||||
// keep saving until it's finished.
|
||||
// So it's smarter to take things into our own hands and use our local coroutine,
|
||||
// instead of hoping that the coroutine from where this will be called will be alive
|
||||
// until the end of the saving process
|
||||
scope.launch {
|
||||
saveRecording(videoRecorder as RecorderModel, cleanupOldFiles).join()
|
||||
}
|
||||
saveRecording(videoRecorder as RecorderModel, cleanupOldFiles)
|
||||
}
|
||||
videoRecorder.onRecordingStart = {
|
||||
snackbarHostState.currentSnackbarData?.dismiss()
|
||||
|
@ -17,7 +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.Job
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
abstract class BaseRecorderModel<I, B : BatchesFolder, T : IntervalRecorderService<I, B>> :
|
||||
@ -49,7 +49,7 @@ abstract class BaseRecorderModel<I, B : BatchesFolder, T : IntervalRecorderServi
|
||||
|
||||
// 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: (cleanupOldFiles: Boolean) -> Job = {
|
||||
var onRecordingSave: (cleanupOldFiles: Boolean) -> CompletableDeferred<Unit> = {
|
||||
throw NotImplementedError("onRecordingSave not implemented")
|
||||
}
|
||||
var onRecordingStart: () -> Unit = {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user