mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-19 07:15:25 +02:00
feat: Add save last recording functionality again
This commit is contained in:
parent
1791c67518
commit
c2a9791680
@ -126,7 +126,10 @@ abstract class BatchesFolder(
|
|||||||
extension = extension,
|
extension = extension,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (disableCache || !checkIfOutputAlreadyExists(recordingStart, extension)) {
|
if (!disableCache && checkIfOutputAlreadyExists(recordingStart, extension)) {
|
||||||
|
return outputFile
|
||||||
|
}
|
||||||
|
|
||||||
val filePaths = getBatchesForFFmpeg()
|
val filePaths = getBatchesForFFmpeg()
|
||||||
|
|
||||||
for (parameter in ffmpegParameters) {
|
for (parameter in ffmpegParameters) {
|
||||||
@ -144,7 +147,6 @@ abstract class BatchesFolder(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
throw MediaConverter.FFmpegException("Failed to concatenate")
|
throw MediaConverter.FFmpegException("Failed to concatenate")
|
||||||
}
|
}
|
||||||
|
@ -132,11 +132,19 @@ fun RecorderEventsHandler(
|
|||||||
// When recording is loaded from lastRecording
|
// When recording is loaded from lastRecording
|
||||||
?: settings.lastRecording
|
?: settings.lastRecording
|
||||||
?: throw Exception("No recording information available")
|
?: throw Exception("No recording information available")
|
||||||
val batchesFolder =
|
val batchesFolder = when (recorder.javaClass) {
|
||||||
if (recorder.javaClass == AudioRecorderModel::class.java)
|
AudioRecorderModel::class.java -> AudioBatchesFolder.importFromFolder(
|
||||||
AudioBatchesFolder.importFromFolder(recording.folderPath, context)
|
recording.folderPath,
|
||||||
else
|
context
|
||||||
VideoBatchesFolder.importFromFolder(recording.folderPath, context)
|
)
|
||||||
|
|
||||||
|
VideoRecorderModel::class.java -> VideoBatchesFolder.importFromFolder(
|
||||||
|
recording.folderPath,
|
||||||
|
context
|
||||||
|
)
|
||||||
|
|
||||||
|
else -> throw Exception("Unknown recorder type")
|
||||||
|
}
|
||||||
|
|
||||||
batchesFolder.concatenate(
|
batchesFolder.concatenate(
|
||||||
recording.recordingStart,
|
recording.recordingStart,
|
||||||
@ -151,14 +159,17 @@ fun RecorderEventsHandler(
|
|||||||
|
|
||||||
when (batchesFolder.type) {
|
when (batchesFolder.type) {
|
||||||
BatchesFolder.BatchType.INTERNAL -> {
|
BatchesFolder.BatchType.INTERNAL -> {
|
||||||
if (batchesFolder is AudioBatchesFolder) {
|
when (batchesFolder) {
|
||||||
|
is AudioBatchesFolder -> {
|
||||||
saveAudioFile(
|
saveAudioFile(
|
||||||
batchesFolder.asInternalGetOutputFile(
|
batchesFolder.asInternalGetOutputFile(
|
||||||
recording.recordingStart,
|
recording.recordingStart,
|
||||||
recording.fileExtension,
|
recording.fileExtension,
|
||||||
), name
|
), name
|
||||||
)
|
)
|
||||||
} else if (batchesFolder is VideoBatchesFolder) {
|
}
|
||||||
|
|
||||||
|
is VideoBatchesFolder -> {
|
||||||
saveVideoFile(
|
saveVideoFile(
|
||||||
batchesFolder.asInternalGetOutputFile(
|
batchesFolder.asInternalGetOutputFile(
|
||||||
recording.recordingStart,
|
recording.recordingStart,
|
||||||
@ -167,6 +178,7 @@ fun RecorderEventsHandler(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BatchesFolder.BatchType.CUSTOM -> {
|
BatchesFolder.BatchType.CUSTOM -> {
|
||||||
showSnackbar(batchesFolder.customFolder!!.uri)
|
showSnackbar(batchesFolder.customFolder!!.uri)
|
||||||
@ -186,11 +198,14 @@ fun RecorderEventsHandler(
|
|||||||
|
|
||||||
// Register audio recorder events
|
// Register audio recorder events
|
||||||
DisposableEffect(key1 = audioRecorder, key2 = settings) {
|
DisposableEffect(key1 = audioRecorder, key2 = settings) {
|
||||||
audioRecorder.onRecordingSave = {
|
audioRecorder.onRecordingSave = { justSave ->
|
||||||
scope.launch {
|
scope.launch {
|
||||||
|
if (justSave) {
|
||||||
|
saveRecording(audioRecorder as RecorderModel)
|
||||||
|
} else {
|
||||||
audioRecorder.stopRecording(context)
|
audioRecorder.stopRecording(context)
|
||||||
|
|
||||||
kotlin.runCatching {
|
runCatching {
|
||||||
saveAsLastRecording(audioRecorder as RecorderModel)
|
saveAsLastRecording(audioRecorder as RecorderModel)
|
||||||
|
|
||||||
saveRecording(audioRecorder)
|
saveRecording(audioRecorder)
|
||||||
@ -199,6 +214,7 @@ fun RecorderEventsHandler(
|
|||||||
audioRecorder.destroyService(context)
|
audioRecorder.destroyService(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
audioRecorder.onError = {
|
audioRecorder.onError = {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
saveAsLastRecording(audioRecorder as RecorderModel)
|
saveAsLastRecording(audioRecorder as RecorderModel)
|
||||||
@ -215,11 +231,14 @@ fun RecorderEventsHandler(
|
|||||||
|
|
||||||
// Register video recorder events
|
// Register video recorder events
|
||||||
DisposableEffect(key1 = videoRecorder, key2 = settings) {
|
DisposableEffect(key1 = videoRecorder, key2 = settings) {
|
||||||
videoRecorder.onRecordingSave = {
|
videoRecorder.onRecordingSave = { justSave ->
|
||||||
scope.launch {
|
scope.launch {
|
||||||
|
if (justSave) {
|
||||||
|
saveRecording(videoRecorder as RecorderModel)
|
||||||
|
} else {
|
||||||
videoRecorder.stopRecording(context)
|
videoRecorder.stopRecording(context)
|
||||||
|
|
||||||
kotlin.runCatching {
|
runCatching {
|
||||||
saveAsLastRecording(videoRecorder as RecorderModel)
|
saveAsLastRecording(videoRecorder as RecorderModel)
|
||||||
|
|
||||||
saveRecording(videoRecorder)
|
saveRecording(videoRecorder)
|
||||||
@ -228,6 +247,7 @@ fun RecorderEventsHandler(
|
|||||||
videoRecorder.destroyService(context)
|
videoRecorder.destroyService(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
videoRecorder.onError = {
|
videoRecorder.onError = {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
saveAsLastRecording(videoRecorder as RecorderModel)
|
saveAsLastRecording(videoRecorder as RecorderModel)
|
||||||
|
@ -92,7 +92,7 @@ fun AudioRecordingStatus(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSave = {
|
onSave = {
|
||||||
audioRecorder.onRecordingSave()
|
audioRecorder.onRecordingSave(false)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ fun VideoRecordingStatus(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSave = {
|
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)
|
var recorderService by mutableStateOf<T?>(null)
|
||||||
protected set
|
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 = {}
|
var onError: () -> Unit = {}
|
||||||
abstract var batchesFolder: B
|
abstract var batchesFolder: B
|
||||||
|
|
||||||
@ -132,8 +134,6 @@ abstract class BaseRecorderModel<S : IntervalRecorderService.Settings, I, T : In
|
|||||||
}
|
}
|
||||||
|
|
||||||
suspend fun stopRecording(context: Context) {
|
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()
|
recorderService!!.stopRecording()
|
||||||
|
|
||||||
runCatching {
|
runCatching {
|
||||||
|
@ -27,6 +27,7 @@ import app.myzel394.alibi.ui.enums.Screen
|
|||||||
import app.myzel394.alibi.R
|
import app.myzel394.alibi.R
|
||||||
import app.myzel394.alibi.dataStore
|
import app.myzel394.alibi.dataStore
|
||||||
import app.myzel394.alibi.db.AppSettings
|
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.atoms.RecorderEventsHandler
|
||||||
import app.myzel394.alibi.ui.components.RecorderScreen.organisms.VideoRecordingStatus
|
import app.myzel394.alibi.ui.components.RecorderScreen.organisms.VideoRecordingStatus
|
||||||
import app.myzel394.alibi.ui.effects.rememberSettings
|
import app.myzel394.alibi.ui.effects.rememberSettings
|
||||||
@ -113,7 +114,13 @@ fun RecorderScreen(
|
|||||||
videoRecorder = videoRecorder,
|
videoRecorder = videoRecorder,
|
||||||
appSettings = appSettings,
|
appSettings = appSettings,
|
||||||
onSaveLastRecording = {
|
onSaveLastRecording = {
|
||||||
// TODO: Improve onSave!
|
when (settings.lastRecording!!.type) {
|
||||||
|
RecordingInformation.Type.AUDIO ->
|
||||||
|
audioRecorder.onRecordingSave(true)
|
||||||
|
|
||||||
|
RecordingInformation.Type.VIDEO ->
|
||||||
|
videoRecorder.onRecordingSave(true)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
showAudioRecorder = topBarVisible,
|
showAudioRecorder = topBarVisible,
|
||||||
onHideTopBar = {
|
onHideTopBar = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user