Skip to content

Commit f62163d

Browse files
committed
Abstract away platform sqlite api
1 parent 0f05829 commit f62163d

File tree

6 files changed

+596
-400
lines changed

6 files changed

+596
-400
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ dependencies {
8383

8484
// AndroidX
8585
implementation(libs.androidx.fragment)
86+
implementation(libs.androidx.sqlite)
87+
implementation(libs.androidx.sqlite.framework)
8688
debugImplementation(libs.androidx.fragment.testing)
8789
implementation(libs.androidx.work)
8890
androidTestImplementation(libs.androidx.work.testing)

app/src/main/kotlin/api/HotSwapApi.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package api
22

3+
import androidx.sqlite.SQLiteConnection
34
import api.miniflux.MinifluxApiAdapter
45
import api.miniflux.MinifluxApiBuilder
56
import api.nextcloud.NextcloudApiAdapter

app/src/main/kotlin/api/standalone/StandaloneApi.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package api.standalone
22

33
import android.util.Base64
44
import android.util.Log
5+
import androidx.sqlite.SQLiteConnection
56
import api.Api
67
import co.appreactor.feedk.AtomEntry
78
import co.appreactor.feedk.AtomFeed

app/src/main/kotlin/conf/ConfRepo.kt

Lines changed: 91 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package conf
22

3-
import android.content.ContentValues
4-
import android.database.Cursor
3+
import androidx.sqlite.execSQL
54
import db.Conf
65
import db.Db
76
import kotlinx.coroutines.Dispatchers
@@ -19,7 +18,7 @@ class ConfRepo(
1918
private val db: Db,
2019
) {
2120

22-
private val database = db.getDatabase()
21+
private val conn = db.getConnection()
2322

2423
private val _conf: MutableStateFlow<Conf> = MutableStateFlow(
2524
runBlocking { select() ?: DEFAULT_CONF })
@@ -42,98 +41,103 @@ class ConfRepo(
4241
}
4342

4443
fun insert(conf: Conf) {
45-
val values = ContentValues().apply {
46-
put("backend", conf.backend)
47-
put("miniflux_server_url", conf.minifluxServerUrl)
48-
put("miniflux_server_trust_self_signed_certs", conf.minifluxServerTrustSelfSignedCerts)
49-
put("miniflux_server_username", conf.minifluxServerUsername)
50-
put("miniflux_server_password", conf.minifluxServerPassword)
51-
put("nextcloud_server_url", conf.nextcloudServerUrl)
52-
put(
53-
"nextcloud_server_trust_self_signed_certs", conf.nextcloudServerTrustSelfSignedCerts
54-
)
55-
put("nextcloud_server_username", conf.nextcloudServerUsername)
56-
put("nextcloud_server_password", conf.nextcloudServerPassword)
57-
put("initial_sync_completed", conf.initialSyncCompleted)
58-
put("last_entries_sync_datetime", conf.lastEntriesSyncDatetime)
59-
put("show_read_entries", conf.showReadEntries)
60-
put("sort_order", conf.sortOrder)
61-
put("show_preview_images", conf.showPreviewImages)
62-
put("crop_preview_images", conf.cropPreviewImages)
63-
put("mark_scrolled_entries_as_read", conf.markScrolledEntriesAsRead)
64-
put("sync_on_startup", conf.syncOnStartup)
65-
put("sync_in_background", conf.syncInBackground)
66-
put("background_sync_interval_millis", conf.backgroundSyncIntervalMillis)
67-
put("use_built_in_browser", conf.useBuiltInBrowser)
68-
put("show_preview_text", conf.showPreviewText)
69-
put("synced_on_startup", conf.syncedOnStartup)
70-
}
71-
database.insert("conf", null, values)
44+
val stmt = conn.prepare("""
45+
INSERT OR REPLACE INTO conf (
46+
backend, miniflux_server_url, miniflux_server_trust_self_signed_certs,
47+
miniflux_server_username, miniflux_server_password, nextcloud_server_url,
48+
nextcloud_server_trust_self_signed_certs, nextcloud_server_username,
49+
nextcloud_server_password, initial_sync_completed, last_entries_sync_datetime,
50+
show_read_entries, sort_order, show_preview_images, crop_preview_images,
51+
mark_scrolled_entries_as_read, sync_on_startup, sync_in_background,
52+
background_sync_interval_millis, use_built_in_browser, show_preview_text,
53+
synced_on_startup
54+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
55+
""")
56+
stmt.bindText(1, conf.backend)
57+
stmt.bindText(2, conf.minifluxServerUrl)
58+
stmt.bindInt(3, if (conf.minifluxServerTrustSelfSignedCerts) 1 else 0)
59+
stmt.bindText(4, conf.minifluxServerUsername)
60+
stmt.bindText(5, conf.minifluxServerPassword)
61+
stmt.bindText(6, conf.nextcloudServerUrl)
62+
stmt.bindInt(7, if (conf.nextcloudServerTrustSelfSignedCerts) 1 else 0)
63+
stmt.bindText(8, conf.nextcloudServerUsername)
64+
stmt.bindText(9, conf.nextcloudServerPassword)
65+
stmt.bindInt(10, if (conf.initialSyncCompleted) 1 else 0)
66+
stmt.bindText(11, conf.lastEntriesSyncDatetime)
67+
stmt.bindInt(12, if (conf.showReadEntries) 1 else 0)
68+
stmt.bindText(13, conf.sortOrder)
69+
stmt.bindInt(14, if (conf.showPreviewImages) 1 else 0)
70+
stmt.bindInt(15, if (conf.cropPreviewImages) 1 else 0)
71+
stmt.bindInt(16, if (conf.markScrolledEntriesAsRead) 1 else 0)
72+
stmt.bindInt(17, if (conf.syncOnStartup) 1 else 0)
73+
stmt.bindInt(18, if (conf.syncInBackground) 1 else 0)
74+
stmt.bindLong(19, conf.backgroundSyncIntervalMillis)
75+
stmt.bindInt(20, if (conf.useBuiltInBrowser) 1 else 0)
76+
stmt.bindInt(21, if (conf.showPreviewText) 1 else 0)
77+
stmt.bindInt(22, if (conf.syncedOnStartup) 1 else 0)
78+
stmt.step()
79+
stmt.close()
7280
}
7381

7482
fun select(): Conf? {
75-
val cursor = database.query(
76-
"conf", arrayOf(
77-
"backend",
78-
"miniflux_server_url",
79-
"miniflux_server_trust_self_signed_certs",
80-
"miniflux_server_username",
81-
"miniflux_server_password",
82-
"nextcloud_server_url",
83-
"nextcloud_server_trust_self_signed_certs",
84-
"nextcloud_server_username",
85-
"nextcloud_server_password",
86-
"initial_sync_completed",
87-
"last_entries_sync_datetime",
88-
"show_read_entries",
89-
"sort_order",
90-
"show_preview_images",
91-
"crop_preview_images",
92-
"mark_scrolled_entries_as_read",
93-
"sync_on_startup",
94-
"sync_in_background",
95-
"background_sync_interval_millis",
96-
"use_built_in_browser",
97-
"show_preview_text",
98-
"synced_on_startup",
99-
), "", emptyArray(), "", "", ""
100-
)
101-
if (!cursor.moveToNext()) {
83+
val stmt = conn.prepare("""
84+
SELECT
85+
backend,
86+
miniflux_server_url,
87+
miniflux_server_trust_self_signed_certs,
88+
miniflux_server_username,
89+
miniflux_server_password,
90+
nextcloud_server_url,
91+
nextcloud_server_trust_self_signed_certs,
92+
nextcloud_server_username,
93+
nextcloud_server_password,
94+
initial_sync_completed,
95+
last_entries_sync_datetime,
96+
show_read_entries,
97+
sort_order,
98+
show_preview_images,
99+
crop_preview_images,
100+
mark_scrolled_entries_as_read,
101+
sync_on_startup,
102+
sync_in_background,
103+
background_sync_interval_millis,
104+
use_built_in_browser,
105+
show_preview_text,
106+
synced_on_startup
107+
FROM conf
108+
""")
109+
if (!stmt.step()) {
110+
stmt.close()
102111
return null
103-
} else {
104-
return Conf(
105-
backend = cursor.getString(0),
106-
minifluxServerUrl = cursor.getString(1),
107-
minifluxServerTrustSelfSignedCerts = cursor.getBoolean(2),
108-
minifluxServerUsername = cursor.getString(3),
109-
minifluxServerPassword = cursor.getString(4),
110-
nextcloudServerUrl = cursor.getString(5),
111-
nextcloudServerTrustSelfSignedCerts = cursor.getBoolean(6),
112-
nextcloudServerUsername = cursor.getString(7),
113-
nextcloudServerPassword = cursor.getString(8),
114-
initialSyncCompleted = cursor.getBoolean(9),
115-
lastEntriesSyncDatetime = cursor.getString(10),
116-
showReadEntries = cursor.getBoolean(11),
117-
sortOrder = cursor.getString(12),
118-
showPreviewImages = cursor.getBoolean(13),
119-
cropPreviewImages = cursor.getBoolean(14),
120-
markScrolledEntriesAsRead = cursor.getBoolean(15),
121-
syncOnStartup = cursor.getBoolean(16),
122-
syncInBackground = cursor.getBoolean(17),
123-
backgroundSyncIntervalMillis = cursor.getLong(18),
124-
useBuiltInBrowser = cursor.getBoolean(19),
125-
showPreviewText = cursor.getBoolean(20),
126-
syncedOnStartup = cursor.getBoolean(21),
127-
)
128112
}
129-
}
130-
131-
fun Cursor.getBoolean(columnIndex: Int): Boolean {
132-
return getInt(columnIndex) == 1
113+
return Conf(
114+
backend = stmt.getText(0),
115+
minifluxServerUrl = stmt.getText(1),
116+
minifluxServerTrustSelfSignedCerts = stmt.getInt(2) == 1,
117+
minifluxServerUsername = stmt.getText(3),
118+
minifluxServerPassword = stmt.getText(4),
119+
nextcloudServerUrl = stmt.getText(5),
120+
nextcloudServerTrustSelfSignedCerts = stmt.getInt(6) == 1,
121+
nextcloudServerUsername = stmt.getText(7),
122+
nextcloudServerPassword = stmt.getText(8),
123+
initialSyncCompleted = stmt.getInt(9) == 1,
124+
lastEntriesSyncDatetime = stmt.getText(10),
125+
showReadEntries = stmt.getInt(11) == 1,
126+
sortOrder = stmt.getText(12),
127+
showPreviewImages = stmt.getInt(13) == 1,
128+
cropPreviewImages = stmt.getInt(14) == 1,
129+
markScrolledEntriesAsRead = stmt.getInt(15) == 1,
130+
syncOnStartup = stmt.getInt(16) == 1,
131+
syncInBackground = stmt.getInt(17) == 1,
132+
backgroundSyncIntervalMillis = stmt.getLong(18),
133+
useBuiltInBrowser = stmt.getInt(19) == 1,
134+
showPreviewText = stmt.getInt(20) == 1,
135+
syncedOnStartup = stmt.getInt(21) == 1,
136+
)
133137
}
134138

135139
fun delete() {
136-
database.delete("conf", "", emptyArray())
140+
conn.execSQL("DELETE FROM conf")
137141
}
138142

139143
companion object {

0 commit comments

Comments
 (0)