mirror of
https://github.com/ankidroid/Anki-Android.git
synced 2024-09-20 12:02:16 +02:00
refactor: Convert Media to Kotlin
com.ichi2.libanki.Media This adds functionality to allow nulls to be passed to DB's methods
This commit is contained in:
parent
1dfde93ccc
commit
2cadb48133
@ -43,7 +43,7 @@ permission notice:
|
||||
// Example of class name: "/com/ichi2/anki/UIUtils.kt"
|
||||
// Ensure that it starts with '/' (slash)
|
||||
def source = Source.MAIN
|
||||
def className = "/com/ichi2/libanki/Media.kt"
|
||||
def className = ""
|
||||
|
||||
enum Source {
|
||||
MAIN("/src/main/java"),
|
||||
|
@ -104,43 +104,43 @@ class MediaTest : InstrumentedTest() {
|
||||
val mid = mTestCol!!.models.getModels().entries.iterator().next().key
|
||||
|
||||
var expected: List<String?> = emptyList<String>()
|
||||
var actual = mTestCol!!.media.filesInStr(mid, "aoeu")
|
||||
var actual = mTestCol!!.media.filesInStr(mid, "aoeu").toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
|
||||
expected = listOf("foo.jpg")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aoeu<img src='foo.jpg'>ao")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aoeu<img src='foo.jpg'>ao").toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
|
||||
expected = listOf("foo.jpg", "bar.jpg")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aoeu<img src='foo.jpg'><img src=\"bar.jpg\">ao")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aoeu<img src='foo.jpg'><img src=\"bar.jpg\">ao").toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
|
||||
expected = listOf("foo.jpg")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aoeu<img src=foo.jpg style=bar>ao")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aoeu<img src=foo.jpg style=bar>ao").toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
|
||||
expected = listOf("one", "two")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "<img src=one><img src=two>")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "<img src=one><img src=two>").toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
|
||||
expected = listOf("foo.jpg")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aoeu<img src=\"foo.jpg\">ao")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aoeu<img src=\"foo.jpg\">ao").toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
|
||||
expected = listOf("foo.jpg", "fo")
|
||||
actual =
|
||||
mTestCol!!.media.filesInStr(mid, "aoeu<img src=\"foo.jpg\"><img class=yo src=fo>ao")
|
||||
mTestCol!!.media.filesInStr(mid, "aoeu<img src=\"foo.jpg\"><img class=yo src=fo>ao").toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
|
||||
expected = listOf("foo.mp3")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aou[sound:foo.mp3]aou")
|
||||
actual = mTestCol!!.media.filesInStr(mid, "aou[sound:foo.mp3]aou").toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
|
||||
@ -183,11 +183,11 @@ class MediaTest : InstrumentedTest() {
|
||||
// check media
|
||||
val ret = mTestCol!!.media.check()
|
||||
var expected = listOf("fake2.png")
|
||||
var actual = ret[0]
|
||||
var actual = ret[0].toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
expected = listOf("foo.jpg")
|
||||
actual = ret[1]
|
||||
actual = ret[1].toMutableList()
|
||||
actual.retainAll(expected)
|
||||
assertEquals(expected.size, actual.size)
|
||||
}
|
||||
@ -209,11 +209,11 @@ class MediaTest : InstrumentedTest() {
|
||||
}
|
||||
|
||||
private fun added(d: Collection?): List<String> {
|
||||
return d!!.media.db.queryStringList("select fname from media where csum is not null")
|
||||
return d!!.media.db!!.queryStringList("select fname from media where csum is not null")
|
||||
}
|
||||
|
||||
private fun removed(d: Collection?): List<String> {
|
||||
return d!!.media.db.queryStringList("select fname from media where csum is null")
|
||||
return d!!.media.db!!.queryStringList("select fname from media where csum is null")
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -186,7 +186,7 @@ class DB(db: SupportSQLiteDatabase) {
|
||||
return results
|
||||
}
|
||||
|
||||
fun execute(@Language("SQL") sql: String, vararg `object`: Any) {
|
||||
fun execute(@Language("SQL") sql: String, vararg `object`: Any?) {
|
||||
val s = sql.trim { it <= ' ' }.lowercase()
|
||||
// mark modified?
|
||||
for (mo in MOD_SQLS) {
|
||||
@ -230,7 +230,7 @@ class DB(db: SupportSQLiteDatabase) {
|
||||
return database.insert(table, SQLiteDatabase.CONFLICT_NONE, values)
|
||||
}
|
||||
|
||||
fun executeMany(@Language("SQL") sql: String, list: List<Array<out Any>>) {
|
||||
fun executeMany(@Language("SQL") sql: String, list: List<Array<out Any?>>) {
|
||||
mod = true
|
||||
if (BuildConfig.DEBUG) {
|
||||
if (list.size <= 1) {
|
||||
@ -245,7 +245,7 @@ class DB(db: SupportSQLiteDatabase) {
|
||||
|
||||
/** Use this executeMany version with external transaction management */
|
||||
@KotlinCleanup("Use forEach")
|
||||
fun executeManyNoTransaction(@Language("SQL") sql: String, list: List<Array<out Any>>) {
|
||||
fun executeManyNoTransaction(@Language("SQL") sql: String, list: List<Array<out Any?>>) {
|
||||
mod = true
|
||||
for (o in list) {
|
||||
database.execSQL(sql, o)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -104,7 +104,7 @@ open class Anki2Importer(col: Collection?, file: String) : Importer(col!!, file)
|
||||
try {
|
||||
// Use transactions for performance and rollbacks in case of error
|
||||
dst.db.database.beginTransaction()
|
||||
dst.media.db.database.beginTransaction()
|
||||
dst.media.db!!.database.beginTransaction()
|
||||
if (!TextUtils.isEmpty(mDeckPrefix)) {
|
||||
val id = dst.decks.id_safe(mDeckPrefix!!)
|
||||
dst.decks.select(id)
|
||||
@ -123,14 +123,14 @@ open class Anki2Importer(col: Collection?, file: String) : Importer(col!!, file)
|
||||
_postImport()
|
||||
publishProgress(100, 100, 50)
|
||||
dst.db.database.setTransactionSuccessful()
|
||||
dst.media.db.database.setTransactionSuccessful()
|
||||
dst.media.db!!.database.setTransactionSuccessful()
|
||||
} catch (err: Exception) {
|
||||
Timber.e(err, "_import() exception")
|
||||
throw err
|
||||
} finally {
|
||||
// endTransaction throws about invalid transaction even when you check first!
|
||||
DB.safeEndInTransaction(dst.db)
|
||||
DB.safeEndInTransaction(dst.media.db)
|
||||
DB.safeEndInTransaction(dst.media.db!!)
|
||||
}
|
||||
Timber.i("Performing vacuum/analyze")
|
||||
try {
|
||||
|
@ -129,7 +129,7 @@ class MediaSyncer(
|
||||
String.format(
|
||||
Locale.US,
|
||||
"check: lsum=%s rsum=%s ldirty=%d rusn=%d fname=%s",
|
||||
if (TextUtils.isEmpty(lsum)) "" else lsum.subSequence(0, 4),
|
||||
if (TextUtils.isEmpty(lsum)) "" else lsum!!.subSequence(0, 4),
|
||||
if (TextUtils.isEmpty(rsum)) "" else rsum!!.subSequence(0, 4),
|
||||
ldirty,
|
||||
rusn,
|
||||
@ -202,7 +202,7 @@ class MediaSyncer(
|
||||
} else {
|
||||
col.log("concurrent update, skipping usn update")
|
||||
// commit for markClean
|
||||
col.media.db.commit()
|
||||
col.media.db!!.commit()
|
||||
updateConflict = true
|
||||
}
|
||||
toSend -= processedCnt
|
||||
|
@ -44,16 +44,16 @@ class CheckMediaTest : RobolectricTest() {
|
||||
return
|
||||
}
|
||||
// 7421
|
||||
col.media.db.database.execSQL("drop table meta")
|
||||
col.media.db!!.database.execSQL("drop table meta")
|
||||
assertThat(
|
||||
col.media.db.queryScalar("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='meta';"),
|
||||
col.media.db!!.queryScalar("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='meta';"),
|
||||
equalTo(0)
|
||||
)
|
||||
val task =
|
||||
TaskManager.launchCollectionTask(CheckMedia()) as CollectionTask<*, *>
|
||||
task.get()
|
||||
assertThat(
|
||||
col.media.db.queryScalar("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='meta';"),
|
||||
col.media.db!!.queryScalar("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='meta';"),
|
||||
equalTo(1)
|
||||
)
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ import org.junit.runner.RunWith
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class LaTeXTest : RobolectricTest() {
|
||||
class MockMedia(col: Collection?) : Media(col, false) {
|
||||
class MockMedia(col: Collection) : Media(col, false) {
|
||||
/**
|
||||
* @param fname A field name
|
||||
* @return Always true, given that we want to assume the field exists in test
|
||||
|
Loading…
Reference in New Issue
Block a user