Skip to content

Commit 3c180cb

Browse files
committed
Check the TTS file before putting and after getting
1 parent da6f2a0 commit 3c180cb

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

app-tts/src/main/java/com/github/deweyreed/timer/app/tts/TtsBakeryDiskCache.kt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.deweyreed.timer.app.tts
22

33
import android.content.Context
4+
import android.media.MediaMetadataRetriever
45
import com.bumptech.glide.disklrucache.DiskLruCache
56
import timber.log.Timber
67
import java.io.File
@@ -30,10 +31,29 @@ internal object TtsBakeryDiskCache {
3031
} catch (e: IOException) {
3132
Timber.e(e)
3233
}
34+
if (result != null && !isValidTtsFile(result)) {
35+
delete(context, text)
36+
result = null
37+
}
3338
return result
3439
}
3540

41+
private fun isValidTtsFile(file: File): Boolean {
42+
return try {
43+
val retriever = MediaMetadataRetriever()
44+
retriever.setDataSource(file.canonicalPath)
45+
retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO) != null
46+
} catch (_: Exception) {
47+
false
48+
}
49+
}
50+
3651
fun put(context: Context, text: String, file: File): Unit = synchronized(this) {
52+
if (!isValidTtsFile(file)) {
53+
file.delete()
54+
error("Invalid TTS file")
55+
}
56+
3757
val key = getSpeechKey(text)
3858
try {
3959
val editor = getDiskLruCache(context).edit(key)
@@ -46,12 +66,21 @@ internal object TtsBakeryDiskCache {
4666
editor.abortUnlessCommitted()
4767
}
4868
} catch (e: IOException) {
49-
e.printStackTrace()
69+
Timber.e(e)
5070
} finally {
5171
file.delete()
5272
}
5373
}
5474

75+
private fun delete(context: Context, text: String) {
76+
val key = getSpeechKey(text)
77+
try {
78+
getDiskLruCache(context).remove(key)
79+
} catch (e: IOException) {
80+
Timber.e(e)
81+
}
82+
}
83+
5584
// From Glide SafeKeyGenerator
5685
private fun getSpeechKey(text: String): String {
5786
val messageDigest = MessageDigest.getInstance("SHA-256")

app-tts/src/main/java/com/github/deweyreed/timer/app/tts/TtsBakeryWorker.kt

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.github.deweyreed.timer.app.tts
22

33
import android.content.Context
4-
import android.media.MediaMetadataRetriever
54
import android.os.Bundle
65
import android.speech.tts.TextToSpeech
76
import android.speech.tts.UtteranceProgressListener
@@ -79,26 +78,9 @@ internal class TtsBakeryWorker @AssistedInject constructor(
7978
}
8079
val file = File(folder, UUID.randomUUID().toString())
8180
textToSpeech.synthesizeToFile(text, file)
82-
83-
if (!isValidTtsFile(file)) {
84-
if (file.exists()) {
85-
file.delete()
86-
}
87-
error("Invalid speech file")
88-
}
8981
TtsBakeryDiskCache.put(applicationContext, text, file)
9082
}
9183

92-
private fun isValidTtsFile(file: File): Boolean {
93-
return try {
94-
val retriever = MediaMetadataRetriever()
95-
retriever.setDataSource(file.canonicalPath)
96-
retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO) != null
97-
} catch (_: Exception) {
98-
false
99-
}
100-
}
101-
10284
companion object {
10385
private const val EXTRA_TEXT = "text"
10486

0 commit comments

Comments
 (0)