Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix empty file #121

Merged
merged 5 commits into from
Sep 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ android {
applicationId "app.myzel394.alibi"
minSdk 24
targetSdk 34
versionCode 15
versionName "0.5.2"
versionCode 16
versionName "0.5.3"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand Down Expand Up @@ -97,7 +97,7 @@ dependencies {
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.8.4'
implementation 'androidx.activity:activity-compose:1.9.1'
implementation 'androidx.activity:activity-ktx:1.9.1'
implementation platform('androidx.compose:compose-bom:2024.06.00')
implementation platform('androidx.compose:compose-bom:2024.09.00')
implementation 'androidx.compose.ui:ui'
implementation 'androidx.compose.ui:ui-graphics'
implementation 'androidx.compose.ui:ui-tooling-preview'
Expand All @@ -110,7 +110,7 @@ dependencies {
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
androidTestImplementation platform('androidx.compose:compose-bom:2024.06.00')
androidTestImplementation platform('androidx.compose:compose-bom:2024.09.00')
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
debugImplementation 'androidx.compose.ui:ui-tooling'
debugImplementation 'androidx.compose.ui:ui-test-manifest'
Expand All @@ -121,7 +121,7 @@ dependencies {
annotationProcessor 'com.google.dagger:hilt-compiler:2.49'
implementation "androidx.hilt:hilt-navigation-compose:1.2.0"

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.1'

implementation 'com.arthenica:ffmpeg-kit-full-gpl:5.1'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,26 +40,25 @@ class AudioBatchesFolder(
override fun getOutputFileForFFmpeg(
date: LocalDateTime,
extension: String,
fileName: String,
): String {
return when (type) {
BatchType.INTERNAL -> asInternalGetOutputFile(date, extension).absolutePath
BatchType.INTERNAL -> asInternalGetOutputFile(fileName).absolutePath

BatchType.CUSTOM -> {
val name = getName(date, extension)

FFmpegKitConfig.getSafParameterForWrite(
context,
(customFolder!!.findFile(name) ?: customFolder.createFile(
(customFolder!!.findFile(fileName) ?: customFolder.createFile(
"audio/${extension}",
getName(date, extension),
fileName,
)!!).uri
)!!
}

BatchType.MEDIA -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val mediaUri = getOrCreateMediaFile(
name = getName(date, extension),
name = fileName,
mimeType = "audio/$extension",
relativePath = BASE_SCOPED_STORAGE_RELATIVE_PATH + "/" + MEDIA_SUBFOLDER_NAME,
)
Expand All @@ -72,7 +71,7 @@ class AudioBatchesFolder(
val path = arrayOf(
Environment.getExternalStoragePublicDirectory(BASE_LEGACY_STORAGE_FOLDER),
MEDIA_SUBFOLDER_NAME,
getName(date, extension)
fileName,
).joinToString("/")
return File(path)
.apply {
Expand Down Expand Up @@ -143,7 +142,7 @@ class AudioBatchesFolder(
}

val BASE_LEGACY_STORAGE_FOLDER = Environment.DIRECTORY_PODCASTS
val MEDIA_RECORDINGS_SUBFOLDER = MEDIA_SUBFOLDER_NAME + "/audio_recordings"
val MEDIA_RECORDINGS_SUBFOLDER = MEDIA_SUBFOLDER_NAME + "/.audio_recordings"
val BASE_SCOPED_STORAGE_RELATIVE_PATH =
(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
Environment.DIRECTORY_RECORDINGS
Expand Down
23 changes: 8 additions & 15 deletions app/src/main/java/app/myzel394/alibi/helpers/BatchesFolder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,8 @@ abstract class BatchesFolder(
return "$name.$extension"
}

fun asInternalGetOutputFile(date: LocalDateTime, extension: String): File {
return File(getInternalFolder(), getName(date, extension))
fun asInternalGetOutputFile(fileName: String): File {
return File(getInternalFolder(), fileName)
}

fun asMediaGetLegacyFile(name: String): File = File(
Expand All @@ -203,16 +203,8 @@ abstract class BatchesFolder(
}

fun checkIfOutputAlreadyExists(
date: LocalDateTime,
extension: String
fileName: String,
): Boolean {
val stem = date
.format(DateTimeFormatter.ISO_DATE_TIME)
.toString()
.replace(":", "-")
.replace(".", "_")
val fileName = "$stem.$extension"

return when (type) {
BatchType.INTERNAL -> File(getInternalFolder(), fileName).exists()

Expand Down Expand Up @@ -245,6 +237,7 @@ abstract class BatchesFolder(
abstract fun getOutputFileForFFmpeg(
date: LocalDateTime,
extension: String,
fileName: String,
): String

abstract fun cleanup()
Expand All @@ -255,18 +248,17 @@ abstract class BatchesFolder(
disableCache: Boolean? = null,
onNextParameterTry: (String) -> Unit = {},
onProgress: (Float?) -> Unit = {},
fileName: String,
): String {
val disableCache = disableCache ?: (type != BatchType.INTERNAL)
val date = recording.getStartDateForFilename(filenameFormat)

if (!disableCache && checkIfOutputAlreadyExists(
recording.recordingStart,
recording.fileExtension
)
if (!disableCache && checkIfOutputAlreadyExists(fileName)
) {
return getOutputFileForFFmpeg(
date = recording.recordingStart,
extension = recording.fileExtension,
fileName = fileName,
)
}

Expand All @@ -282,6 +274,7 @@ abstract class BatchesFolder(
val outputFile = getOutputFileForFFmpeg(
date = date,
extension = recording.fileExtension,
fileName = fileName,
)

concatenationFunction(
Expand Down
20 changes: 11 additions & 9 deletions app/src/main/java/app/myzel394/alibi/helpers/VideoBatchesFolder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,26 +39,28 @@ class VideoBatchesFolder(

private var customParcelFileDescriptor: ParcelFileDescriptor? = null

override fun getOutputFileForFFmpeg(date: LocalDateTime, extension: String): String {
override fun getOutputFileForFFmpeg(
date: LocalDateTime,
extension: String,
fileName: String,
): String {
return when (type) {
BatchType.INTERNAL -> asInternalGetOutputFile(date, extension).absolutePath
BatchType.INTERNAL -> asInternalGetOutputFile(fileName).absolutePath

BatchType.CUSTOM -> {
val name = getName(date, extension)

FFmpegKitConfig.getSafParameterForWrite(
context,
(customFolder!!.findFile(name) ?: customFolder.createFile(
(customFolder!!.findFile(fileName) ?: customFolder.createFile(
"video/${extension}",
getName(date, extension),
fileName,
)!!).uri
)!!
}

BatchType.MEDIA -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val mediaUri = getOrCreateMediaFile(
name = getName(date, extension),
name = fileName,
mimeType = "video/$extension",
relativePath = BASE_SCOPED_STORAGE_RELATIVE_PATH + "/" + MEDIA_SUBFOLDER_NAME,
)
Expand All @@ -71,7 +73,7 @@ class VideoBatchesFolder(
val path = arrayOf(
Environment.getExternalStoragePublicDirectory(BASE_LEGACY_STORAGE_FOLDER),
MEDIA_SUBFOLDER_NAME,
getName(date, extension)
fileName,
).joinToString("/")
return File(path)
.apply {
Expand Down Expand Up @@ -146,7 +148,7 @@ class VideoBatchesFolder(
}

val BASE_LEGACY_STORAGE_FOLDER = Environment.DIRECTORY_DCIM
val MEDIA_RECORDINGS_SUBFOLDER = MEDIA_SUBFOLDER_NAME + "/video_recordings"
val MEDIA_RECORDINGS_SUBFOLDER = MEDIA_SUBFOLDER_NAME + "/.video_recordings"
val BASE_SCOPED_STORAGE_RELATIVE_PATH = Environment.DIRECTORY_DCIM
val SCOPED_STORAGE_RELATIVE_PATH =
BASE_SCOPED_STORAGE_RELATIVE_PATH + "/" + MEDIA_RECORDINGS_SUBFOLDER
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
Expand All @@ -40,8 +40,8 @@ fun BigButton(
val orientation = LocalConfiguration.current.orientation

BoxWithConstraints {
val isLarge = if (isBig == null)
maxWidth > 250.dp && maxHeight > 600.dp && orientation == Configuration.ORIENTATION_PORTRAIT else isBig
val isLarge = isBig
?: (maxWidth > 250.dp && maxHeight > 600.dp && orientation == Configuration.ORIENTATION_PORTRAIT)

Column(
modifier = Modifier
Expand All @@ -52,7 +52,7 @@ fun BigButton(
}
.combinedClickable(
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(color = MaterialTheme.colorScheme.primary),
indication = ripple(color = MaterialTheme.colorScheme.primary),
onClick = onClick,
onLongClick = onLongClick,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
Expand Down Expand Up @@ -39,7 +39,7 @@ fun SaveButton(
}
.combinedClickable(
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(color = MaterialTheme.colorScheme.primary),
indication = ripple(color = MaterialTheme.colorScheme.primary),
onClick = onSave,
onLongClick = onLongClick,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ fun RecordingStatus(
LinearProgressIndicator(
progress = { progress },
modifier = progressModifier,
drawStopIndicator = { },
gapSize = 0.dp,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,38 +177,33 @@ fun RecorderEventsHandler(
else -> throw Exception("Unknown recorder type")
}

val fileName = batchesFolder.getName(
recording.recordingStart,
recording.fileExtension,
)

batchesFolder.concatenate(
recording,
filenameFormat = settings.filenameFormat,
fileName = fileName,
onProgress = { percentage ->
processingProgress = percentage
}
)

// Save file
val name = batchesFolder.getName(
recording.recordingStart,
recording.fileExtension,
)

when (batchesFolder.type) {
BatchesFolder.BatchType.INTERNAL -> {
when (batchesFolder) {
is AudioBatchesFolder -> {
saveAudioFile(
batchesFolder.asInternalGetOutputFile(
recording.recordingStart,
recording.fileExtension,
), name
batchesFolder.asInternalGetOutputFile(fileName), fileName
)
}

is VideoBatchesFolder -> {
saveVideoFile(
batchesFolder.asInternalGetOutputFile(
recording.recordingStart,
recording.fileExtension,
), name
batchesFolder.asInternalGetOutputFile(fileName), fileName
)
}
}
Expand Down