1
1
package conf
2
2
3
+ import android.content.ContentValues
4
+ import android.database.Cursor
5
+ import android.database.sqlite.SQLiteDatabase
6
+ import androidx.core.database.sqlite.transaction
3
7
import db.Conf
4
- import db.Db
5
8
import kotlinx.coroutines.Dispatchers
6
9
import kotlinx.coroutines.GlobalScope
7
10
import kotlinx.coroutines.flow.MutableStateFlow
@@ -16,21 +19,20 @@ import org.koin.core.annotation.Single
16
19
17
20
@Single
18
21
class ConfRepo (
19
- private val db : Db ,
22
+ private val db : SQLiteDatabase ,
20
23
) {
21
24
22
25
private val _conf : MutableStateFlow <Conf > = MutableStateFlow (
23
- runBlocking { db.confQueries.select().executeAsOneOrNull() ? : DEFAULT_CONF }
24
- )
26
+ runBlocking { select() ? : DEFAULT_CONF })
25
27
26
28
val conf: StateFlow <Conf > = _conf .asStateFlow()
27
29
28
30
init {
29
31
conf.onEach {
30
32
withContext(Dispatchers .IO ) {
31
33
db.transaction {
32
- db.confQueries. delete()
33
- db.confQueries. insert(it)
34
+ delete()
35
+ insert(it)
34
36
}
35
37
}
36
38
}.launchIn(GlobalScope )
@@ -40,6 +42,101 @@ class ConfRepo(
40
42
_conf .update { newConf(conf.value) }
41
43
}
42
44
45
+ fun insert (conf : Conf ) {
46
+ val values = ContentValues ().apply {
47
+ put(" backend" , conf.backend)
48
+ put(" miniflux_server_url" , conf.minifluxServerUrl)
49
+ put(" miniflux_server_trust_self_signed_certs" , conf.minifluxServerTrustSelfSignedCerts)
50
+ put(" miniflux_server_username" , conf.minifluxServerUsername)
51
+ put(" miniflux_server_password" , conf.minifluxServerPassword)
52
+ put(" nextcloud_server_url" , conf.nextcloudServerUrl)
53
+ put(
54
+ " nextcloud_server_trust_self_signed_certs" , conf.nextcloudServerTrustSelfSignedCerts
55
+ )
56
+ put(" nextcloud_server_username" , conf.nextcloudServerUsername)
57
+ put(" nextcloud_server_password" , conf.nextcloudServerPassword)
58
+ put(" initial_sync_completed" , conf.initialSyncCompleted)
59
+ put(" last_entries_sync_datetime" , conf.lastEntriesSyncDatetime)
60
+ put(" show_read_entries" , conf.showReadEntries)
61
+ put(" sort_order" , conf.sortOrder)
62
+ put(" show_preview_images" , conf.showPreviewImages)
63
+ put(" crop_preview_images" , conf.cropPreviewImages)
64
+ put(" mark_scrolled_entries_as_read" , conf.markScrolledEntriesAsRead)
65
+ put(" sync_on_startup" , conf.syncOnStartup)
66
+ put(" sync_in_background" , conf.syncInBackground)
67
+ put(" background_sync_interval_millis" , conf.backgroundSyncIntervalMillis)
68
+ put(" use_built_in_browser" , conf.useBuiltInBrowser)
69
+ put(" show_preview_text" , conf.showPreviewText)
70
+ put(" synced_on_startup" , conf.syncedOnStartup)
71
+ }
72
+ db.insert(" conf" , null , values)
73
+ }
74
+
75
+ fun select (): Conf ? {
76
+ val cursor = db.query(
77
+ " conf" , arrayOf(
78
+ " backend" ,
79
+ " miniflux_server_url" ,
80
+ " miniflux_server_trust_self_signed_certs" ,
81
+ " miniflux_server_username" ,
82
+ " miniflux_server_password" ,
83
+ " nextcloud_server_url" ,
84
+ " nextcloud_server_trust_self_signed_certs" ,
85
+ " nextcloud_server_username" ,
86
+ " nextcloud_server_password" ,
87
+ " initial_sync_completed" ,
88
+ " last_entries_sync_datetime" ,
89
+ " show_read_entries" ,
90
+ " sort_order" ,
91
+ " show_preview_images" ,
92
+ " crop_preview_images" ,
93
+ " mark_scrolled_entries_as_read" ,
94
+ " sync_on_startup" ,
95
+ " sync_in_background" ,
96
+ " background_sync_interval_millis" ,
97
+ " use_built_in_browser" ,
98
+ " show_preview_text" ,
99
+ " synced_on_startup" ,
100
+ ), " " , emptyArray(), " " , " " , " "
101
+ )
102
+ if (! cursor.moveToNext()) {
103
+ return null
104
+ } else {
105
+ return Conf (
106
+ backend = cursor.getString(0 ),
107
+ minifluxServerUrl = cursor.getString(1 ),
108
+ minifluxServerTrustSelfSignedCerts = cursor.getBoolean(2 ),
109
+ minifluxServerUsername = cursor.getString(3 ),
110
+ minifluxServerPassword = cursor.getString(4 ),
111
+ nextcloudServerUrl = cursor.getString(5 ),
112
+ nextcloudServerTrustSelfSignedCerts = cursor.getBoolean(6 ),
113
+ nextcloudServerUsername = cursor.getString(7 ),
114
+ nextcloudServerPassword = cursor.getString(8 ),
115
+ initialSyncCompleted = cursor.getBoolean(9 ),
116
+ lastEntriesSyncDatetime = cursor.getString(10 ),
117
+ showReadEntries = cursor.getBoolean(11 ),
118
+ sortOrder = cursor.getString(12 ),
119
+ showPreviewImages = cursor.getBoolean(13 ),
120
+ cropPreviewImages = cursor.getBoolean(14 ),
121
+ markScrolledEntriesAsRead = cursor.getBoolean(15 ),
122
+ syncOnStartup = cursor.getBoolean(16 ),
123
+ syncInBackground = cursor.getBoolean(17 ),
124
+ backgroundSyncIntervalMillis = cursor.getLong(18 ),
125
+ useBuiltInBrowser = cursor.getBoolean(19 ),
126
+ showPreviewText = cursor.getBoolean(20 ),
127
+ syncedOnStartup = cursor.getBoolean(21 ),
128
+ )
129
+ }
130
+ }
131
+
132
+ fun Cursor.getBoolean (columnIndex : Int ): Boolean {
133
+ return getInt(columnIndex) == 1
134
+ }
135
+
136
+ fun delete () {
137
+ db.delete(" conf" , " " , emptyArray())
138
+ }
139
+
43
140
companion object {
44
141
const val BACKEND_STANDALONE = " standalone"
45
142
const val BACKEND_MINIFLUX = " miniflux"
@@ -50,27 +147,27 @@ class ConfRepo(
50
147
51
148
val DEFAULT_CONF = Conf (
52
149
backend = " " ,
53
- miniflux_server_url = " " ,
54
- miniflux_server_trust_self_signed_certs = false ,
55
- miniflux_server_username = " " ,
56
- miniflux_server_password = " " ,
57
- nextcloud_server_url = " " ,
58
- nextcloud_server_trust_self_signed_certs = false ,
59
- nextcloud_server_username = " " ,
60
- nextcloud_server_password = " " ,
61
- initial_sync_completed = false ,
62
- last_entries_sync_datetime = " " ,
63
- show_read_entries = false ,
64
- sort_order = SORT_ORDER_DESCENDING ,
65
- show_preview_images = true ,
66
- crop_preview_images = true ,
67
- mark_scrolled_entries_as_read = false ,
68
- sync_on_startup = true ,
69
- sync_in_background = true ,
70
- background_sync_interval_millis = 10800000 ,
71
- use_built_in_browser = true ,
72
- show_preview_text = true ,
73
- synced_on_startup = false ,
150
+ minifluxServerUrl = " " ,
151
+ minifluxServerTrustSelfSignedCerts = false ,
152
+ minifluxServerUsername = " " ,
153
+ minifluxServerPassword = " " ,
154
+ nextcloudServerUrl = " " ,
155
+ nextcloudServerTrustSelfSignedCerts = false ,
156
+ nextcloudServerUsername = " " ,
157
+ nextcloudServerPassword = " " ,
158
+ initialSyncCompleted = false ,
159
+ lastEntriesSyncDatetime = " " ,
160
+ showReadEntries = false ,
161
+ sortOrder = SORT_ORDER_DESCENDING ,
162
+ showPreviewImages = true ,
163
+ cropPreviewImages = true ,
164
+ markScrolledEntriesAsRead = false ,
165
+ syncOnStartup = true ,
166
+ syncInBackground = true ,
167
+ backgroundSyncIntervalMillis = 10800000 ,
168
+ useBuiltInBrowser = true ,
169
+ showPreviewText = true ,
170
+ syncedOnStartup = false ,
74
171
)
75
172
}
76
173
}
0 commit comments