Bläddra i källkod

Added separate key repository (refactoring)

Vadik Sirekanyan 2 år sedan
förälder
incheckning
4dafa147dc

+ 1 - 1
app/src/main/java/org/sirekanyan/outline/MainContent.kt

@@ -79,7 +79,7 @@ fun MainContent(state: MainState) {
             is SelectedPage -> {
                 val serverEntity = page.server
                 val keys by rememberFlowAsState(listOf(), serverEntity.id) {
-                    state.servers.observeKeys(serverEntity)
+                    state.keys.observeKeys(serverEntity)
                 }
                 KeysContent(insets, state, keys, sorting)
                 val hasKeys = keys.isNotEmpty()

+ 4 - 2
app/src/main/java/org/sirekanyan/outline/MainState.kt

@@ -34,6 +34,7 @@ import org.sirekanyan.outline.feature.keys.KeysIdleState
 import org.sirekanyan.outline.feature.keys.KeysLoadingState
 import org.sirekanyan.outline.feature.keys.KeysState
 import org.sirekanyan.outline.feature.sort.Sorting
+import org.sirekanyan.outline.repository.KeyRepository
 import org.sirekanyan.outline.repository.ServerRepository
 import java.net.ConnectException
 import java.net.UnknownHostException
@@ -74,7 +75,8 @@ class MainState(
     cache: KeyDao,
 ) {
 
-    val servers = ServerRepository(api, cache)
+    val servers = ServerRepository(api)
+    val keys = KeyRepository(api, cache)
     val drawer = DrawerState(DrawerValue.Closed)
     var page by mutableStateOf<Page>(HelloPage)
     var dialog by mutableStateOf<Dialog?>(null)
@@ -114,7 +116,7 @@ class MainState(
                 page.keys = KeysLoadingState
             }
             page.keys = try {
-                servers.updateKeys(page.server)
+                keys.updateKeys(page.server)
                 KeysIdleState
             } catch (exception: Exception) {
                 exception.printStackTrace()

+ 23 - 0
app/src/main/java/org/sirekanyan/outline/repository/KeyRepository.kt

@@ -0,0 +1,23 @@
+package org.sirekanyan.outline.repository
+
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
+import org.sirekanyan.outline.api.OutlineApi
+import org.sirekanyan.outline.api.model.Key
+import org.sirekanyan.outline.api.model.fromEntities
+import org.sirekanyan.outline.api.model.toEntities
+import org.sirekanyan.outline.db.KeyDao
+import org.sirekanyan.outline.db.model.KeyEntity
+import org.sirekanyan.outline.db.model.ServerEntity
+
+class KeyRepository(private val api: OutlineApi, private val keyDao: KeyDao) {
+
+    fun observeKeys(server: ServerEntity): Flow<List<Key>> =
+        keyDao.observe(server).map(List<KeyEntity>::fromEntities)
+
+    suspend fun updateKeys(server: ServerEntity) {
+        val keys = api.getKeys(server)
+        keyDao.update(server, keys.toEntities(server))
+    }
+
+}

+ 1 - 16
app/src/main/java/org/sirekanyan/outline/repository/ServerRepository.kt

@@ -1,20 +1,13 @@
 package org.sirekanyan.outline.repository
 
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.map
 import org.sirekanyan.outline.api.OutlineApi
-import org.sirekanyan.outline.api.model.Key
 import org.sirekanyan.outline.api.model.Server
-import org.sirekanyan.outline.api.model.fromEntities
 import org.sirekanyan.outline.api.model.getHost
-import org.sirekanyan.outline.api.model.toEntities
-import org.sirekanyan.outline.db.KeyDao
-import org.sirekanyan.outline.db.model.KeyEntity
 import org.sirekanyan.outline.db.model.ServerEntity
 import org.sirekanyan.outline.ext.logDebug
 import java.util.concurrent.ConcurrentHashMap
 
-class ServerRepository(private val api: OutlineApi, private val keyDao: KeyDao) {
+class ServerRepository(private val api: OutlineApi) {
 
     private val cache: MutableMap<String, Server> = ConcurrentHashMap()
 
@@ -37,14 +30,6 @@ class ServerRepository(private val api: OutlineApi, private val keyDao: KeyDao)
         return getCachedServer(server)
     }
 
-    fun observeKeys(server: ServerEntity): Flow<List<Key>> =
-        keyDao.observe(server).map(List<KeyEntity>::fromEntities)
-
-    suspend fun updateKeys(server: ServerEntity) {
-        val keys = api.getKeys(server)
-        keyDao.update(server, keys.toEntities(server))
-    }
-
     fun clearCache() {
         cache.clear()
     }