Skip to content

Commit 9ae83e0

Browse files
author
Tuomas Airaksinen
committed
Fix #3137 (Epub Search: crash (code 14): Could not open database)
1 parent dabc5ab commit 9ae83e0

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

app/src/main/java/net/bible/service/sword/epub/EpubSearch.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
package net.bible.service.sword.epub
1919

2020
import android.content.ContentValues
21+
import android.database.sqlite.SQLiteCantOpenDatabaseException
22+
import android.util.Log
2123
import io.requery.android.database.sqlite.SQLiteDatabase
2224
import io.requery.android.database.sqlite.SQLiteDatabase.CONFLICT_IGNORE
2325
import java.io.File
@@ -26,30 +28,35 @@ import java.io.File
2628
data class EpubSearchResult(val fragId: Long, val ordinal: Int, val text: String)
2729

2830
class EpubSearch(val file: File) {
29-
private val db = SQLiteDatabase.openDatabase(file.path, null, SQLiteDatabase.OPEN_READWRITE or SQLiteDatabase.CREATE_IF_NECESSARY)
30-
val isIndexed: Boolean get() = db.run {
31-
!query("SELECT name FROM sqlite_master WHERE type='table' AND name=?", arrayOf("SearchIndex")).isAfterLast
31+
private val db = try {
32+
SQLiteDatabase.openDatabase(file.path, null, SQLiteDatabase.OPEN_READWRITE or SQLiteDatabase.CREATE_IF_NECESSARY)
33+
} catch (e: SQLiteCantOpenDatabaseException) {
34+
Log.e("EpubSearch", "Could not open database ${file.path}")
35+
null
3236
}
37+
val isIndexed: Boolean get() = db?.run {
38+
!query("SELECT name FROM sqlite_master WHERE type='table' AND name=?", arrayOf("SearchIndex")).isAfterLast
39+
}?: false
3340

34-
fun deleteIndex() = db.run {
41+
fun deleteIndex() = db?.run {
3542
execSQL("""DROP TABLE IF EXISTS SearchIndex""")
3643
}
3744

38-
fun createTable() = db.run {
45+
fun createTable() = db?.run {
3946
execSQL("""
4047
CREATE VIRTUAL TABLE SearchIndex USING FTS5(contentText, frag_id UNINDEXED, ordinal UNINDEXED);
4148
""".trimIndent())
4249
}
4350

44-
fun addContent(content: String, fragId:Long, ordinal: Int) = db.run {
51+
fun addContent(content: String, fragId:Long, ordinal: Int) = db?.run {
4552
insert("SearchIndex", CONFLICT_IGNORE, ContentValues().apply {
4653
put("contentText", content)
4754
put("frag_id", fragId)
4855
put("ordinal", ordinal)
4956
})
5057
}
5158

52-
fun search(text: String): List<EpubSearchResult> = db.run {
59+
fun search(text: String): List<EpubSearchResult> = db?.run {
5360
query("SELECT frag_id, ordinal, highlight(SearchIndex, 0, '<b>', '</b>') FROM SearchIndex WHERE contentText MATCH ?", bindArgs = arrayOf(text)).let { c ->
5461
c.moveToFirst()
5562
val list = mutableListOf<EpubSearchResult>()
@@ -62,5 +69,5 @@ class EpubSearch(val file: File) {
6269
}
6370
list
6471
}
65-
}
72+
}?: emptyList()
6673
}

0 commit comments

Comments
 (0)