feat: Add save last recording functionality again

This commit is contained in:
Myzel394 2023-12-15 21:24:28 +01:00
parent 1791c67518
commit c2a9791680
No known key found for this signature in database
GPG Key ID: 79CC92F37B3E1A2B
6 changed files with 83 additions and 54 deletions

View File

@ -126,7 +126,10 @@ abstract class BatchesFolder(
extension = extension,
)
if (disableCache || !checkIfOutputAlreadyExists(recordingStart, extension)) {
if (!disableCache && checkIfOutputAlreadyExists(recordingStart, extension)) {
return outputFile
}
val filePaths = getBatchesForFFmpeg()
for (parameter in ffmpegParameters) {
@ -144,7 +147,6 @@ abstract class BatchesFolder(
continue
}
}
}
throw MediaConverter.FFmpegException("Failed to concatenate")
}

View File

@ -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,14 +159,17 @@ fun RecorderEventsHandler(
when (batchesFolder.type) {
BatchesFolder.BatchType.INTERNAL -> {
if (batchesFolder is AudioBatchesFolder) {
when (batchesFolder) {
is AudioBatchesFolder -> {
saveAudioFile(
batchesFolder.asInternalGetOutputFile(
recording.recordingStart,
recording.fileExtension,
), name
)
} else if (batchesFolder is VideoBatchesFolder) {
}
is VideoBatchesFolder -> {
saveVideoFile(
batchesFolder.asInternalGetOutputFile(
recording.recordingStart,
@ -167,6 +178,7 @@ fun RecorderEventsHandler(
)
}
}
}
BatchesFolder.BatchType.CUSTOM -> {
showSnackbar(batchesFolder.customFolder!!.uri)
@ -186,11 +198,14 @@ fun RecorderEventsHandler(
// Register audio recorder events
DisposableEffect(key1 = audioRecorder, key2 = settings) {
audioRecorder.onRecordingSave = {
audioRecorder.onRecordingSave = { justSave ->
scope.launch {
if (justSave) {
saveRecording(audioRecorder as RecorderModel)
} else {
audioRecorder.stopRecording(context)
kotlin.runCatching {
runCatching {
saveAsLastRecording(audioRecorder as RecorderModel)
saveRecording(audioRecorder)
@ -199,6 +214,7 @@ fun RecorderEventsHandler(
audioRecorder.destroyService(context)
}
}
}
audioRecorder.onError = {
scope.launch {
saveAsLastRecording(audioRecorder as RecorderModel)
@ -215,11 +231,14 @@ fun RecorderEventsHandler(
// Register video recorder events
DisposableEffect(key1 = videoRecorder, key2 = settings) {
videoRecorder.onRecordingSave = {
videoRecorder.onRecordingSave = { justSave ->
scope.launch {
if (justSave) {
saveRecording(videoRecorder as RecorderModel)
} else {
videoRecorder.stopRecording(context)
kotlin.runCatching {
runCatching {
saveAsLastRecording(videoRecorder as RecorderModel)
saveRecording(videoRecorder)
@ -228,6 +247,7 @@ fun RecorderEventsHandler(
videoRecorder.destroyService(context)
}
}
}
videoRecorder.onError = {
scope.launch {
saveAsLastRecording(videoRecorder as RecorderModel)

View File

@ -92,7 +92,7 @@ fun AudioRecordingStatus(
}
},
onSave = {
audioRecorder.onRecordingSave()
audioRecorder.onRecordingSave(false)
}
)

View File

@ -169,7 +169,7 @@ fun VideoRecordingStatus(
}
},
onSave = {
videoRecorder.onRecordingSave()
videoRecorder.onRecordingSave(false)
}
)
}

View File

@ -40,7 +40,9 @@ abstract class BaseRecorderModel<S : IntervalRecorderService.Settings, I, T : In
var recorderService by mutableStateOf<T?>(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<S : IntervalRecorderService.Settings, I, T : In
}
suspend fun stopRecording(context: Context) {
// TODO: Make modal on video only appear on long press and by default use back camera
// TODO: Also show what camera is in use while recording
recorderService!!.stopRecording()
runCatching {

View File

@ -27,6 +27,7 @@ import app.myzel394.alibi.ui.enums.Screen
import app.myzel394.alibi.R
import app.myzel394.alibi.dataStore
import app.myzel394.alibi.db.AppSettings
import app.myzel394.alibi.db.RecordingInformation
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.RecorderEventsHandler
import app.myzel394.alibi.ui.components.RecorderScreen.organisms.VideoRecordingStatus
import app.myzel394.alibi.ui.effects.rememberSettings
@ -113,7 +114,13 @@ fun RecorderScreen(
videoRecorder = videoRecorder,
appSettings = appSettings,
onSaveLastRecording = {
// TODO: Improve onSave!
when (settings.lastRecording!!.type) {
RecordingInformation.Type.AUDIO ->
audioRecorder.onRecordingSave(true)
RecordingInformation.Type.VIDEO ->
videoRecorder.onRecordingSave(true)
}
},
showAudioRecorder = topBarVisible,
onHideTopBar = {