mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-18 23:05:26 +02:00
feat: Add save last recording functionality again
This commit is contained in:
parent
1791c67518
commit
c2a9791680
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 = {
|
||||
|
@ -92,7 +92,7 @@ fun AudioRecordingStatus(
|
||||
}
|
||||
},
|
||||
onSave = {
|
||||
audioRecorder.onRecordingSave()
|
||||
audioRecorder.onRecordingSave(false)
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -169,7 +169,7 @@ fun VideoRecordingStatus(
|
||||
}
|
||||
},
|
||||
onSave = {
|
||||
videoRecorder.onRecordingSave()
|
||||
videoRecorder.onRecordingSave(false)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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 = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user