Forráskód Böngészése

Added parcelable server class (refactoring)

Vadik Sirekanyan 2 éve
szülő
commit
36d4e2b1ee

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

@@ -23,7 +23,6 @@ import org.sirekanyan.outline.api.model.Key
 import org.sirekanyan.outline.db.KeyDao
 import org.sirekanyan.outline.db.KeyValueDao
 import org.sirekanyan.outline.db.ServerDao
-import org.sirekanyan.outline.db.model.ServerEntity
 import org.sirekanyan.outline.db.rememberKeyDao
 import org.sirekanyan.outline.db.rememberKeyValueDao
 import org.sirekanyan.outline.db.rememberServerDao
@@ -40,6 +39,7 @@ import org.sirekanyan.outline.ui.SearchState
 import org.sirekanyan.outline.ui.rememberSearchState
 import java.net.ConnectException
 import java.net.UnknownHostException
+import org.sirekanyan.outline.api.model.Server as ServerEntity
 
 @Composable
 fun rememberMainState(): MainState {

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

@@ -20,10 +20,10 @@ import org.sirekanyan.outline.api.model.Key
 import org.sirekanyan.outline.api.model.RenameRequest
 import org.sirekanyan.outline.api.model.ServerNameResponse
 import org.sirekanyan.outline.api.model.TransferMetricsResponse
-import org.sirekanyan.outline.db.model.ServerEntity
 import org.sirekanyan.outline.ext.logDebug
 import java.security.SecureRandom
 import javax.net.ssl.SSLContext
+import org.sirekanyan.outline.api.model.Server as ServerEntity
 
 private fun createOkHttpClient(block: OkHttpConfig.() -> Unit = {}): HttpClient =
     HttpClient(OkHttp) {

+ 1 - 1
app/src/main/java/org/sirekanyan/outline/api/model/Key.kt

@@ -2,7 +2,7 @@ package org.sirekanyan.outline.api.model
 
 import org.sirekanyan.outline.db.model.KeyEntity
 import org.sirekanyan.outline.db.model.KeyWithServerEntity
-import org.sirekanyan.outline.db.model.ServerEntity
+import org.sirekanyan.outline.api.model.Server as ServerEntity
 
 fun List<Key>.toEntities(): List<KeyEntity> =
     map { key ->

+ 28 - 4
app/src/main/java/org/sirekanyan/outline/api/model/Server.kt

@@ -1,10 +1,34 @@
 package org.sirekanyan.outline.api.model
 
 import android.net.Uri
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
 import org.sirekanyan.outline.db.model.ServerEntity
 
-fun createServerEntity(url: String, insecure: Boolean): ServerEntity =
-    ServerEntity(url, insecure, name = "", traffic = null)
+fun createServerEntity(url: String, insecure: Boolean): Server =
+    Server(url, insecure, name = "", traffic = null)
 
-fun ServerEntity.getHost(): String =
-    Uri.parse(id).host.orEmpty()
+fun ServerEntity.fromEntity(): Server =
+    Server(id, insecure, name, traffic)
+
+fun List<ServerEntity>.fromEntities(): List<Server> =
+    map(ServerEntity::fromEntity)
+
+fun Server.toEntity(): ServerEntity =
+    ServerEntity(id, insecure, name, traffic)
+
+fun List<Server>.toEntities(): List<ServerEntity> =
+    map(Server::toEntity)
+
+@Parcelize
+class Server(
+    val id: String,
+    val insecure: Boolean,
+    val name: String,
+    val traffic: Long?,
+) : Parcelable {
+
+    fun getHost(): String =
+        Uri.parse(id).host.orEmpty()
+
+}

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

@@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.Flow
 import org.sirekanyan.outline.app
 import org.sirekanyan.outline.db.model.KeyEntity
 import org.sirekanyan.outline.db.model.KeyWithServerEntity
-import org.sirekanyan.outline.db.model.ServerEntity
+import org.sirekanyan.outline.api.model.Server as ServerEntity
 
 @Composable
 fun rememberKeyDao(): KeyDao {

+ 0 - 1
app/src/main/java/org/sirekanyan/outline/feature/keys/KeyContent.kt

@@ -15,7 +15,6 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.text.style.TextOverflow.Companion.Ellipsis
 import androidx.compose.ui.unit.dp
 import org.sirekanyan.outline.api.model.Key
-import org.sirekanyan.outline.api.model.getHost
 import org.sirekanyan.outline.text.formatTraffic
 
 @Composable

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

@@ -12,7 +12,7 @@ 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.KeyWithServerEntity
-import org.sirekanyan.outline.db.model.ServerEntity
+import org.sirekanyan.outline.api.model.Server as ServerEntity
 
 class KeyRepository(private val api: OutlineApi, private val keyDao: KeyDao) {
 

+ 8 - 4
app/src/main/java/org/sirekanyan/outline/repository/ServerRepository.kt

@@ -5,16 +5,20 @@ import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.async
 import kotlinx.coroutines.awaitAll
 import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.withContext
 import org.sirekanyan.outline.api.OutlineApi
+import org.sirekanyan.outline.api.model.fromEntities
+import org.sirekanyan.outline.api.model.toEntities
+import org.sirekanyan.outline.api.model.toEntity
 import org.sirekanyan.outline.db.ServerDao
-import org.sirekanyan.outline.db.model.ServerEntity
 import org.sirekanyan.outline.ext.logDebug
+import org.sirekanyan.outline.api.model.Server as ServerEntity
 
 class ServerRepository(private val api: OutlineApi, private val serverDao: ServerDao) {
 
     fun observeServers(): Flow<List<ServerEntity>> =
-        serverDao.observeAll().mapToList(IO)
+        serverDao.observeAll().mapToList(IO).map { it.fromEntities() }
 
     suspend fun updateServers(servers: List<ServerEntity>) {
         withContext(IO) {
@@ -28,7 +32,7 @@ class ServerRepository(private val api: OutlineApi, private val serverDao: Serve
                     }
                 }
             }
-            serverDao.insertAll(deferredServers.awaitAll().filterNotNull())
+            serverDao.insertAll(deferredServers.awaitAll().filterNotNull().toEntities())
         }
     }
 
@@ -46,7 +50,7 @@ class ServerRepository(private val api: OutlineApi, private val serverDao: Serve
 
     private suspend fun refreshServer(server: ServerEntity): ServerEntity =
         api.getServer(server).also { newServer ->
-            serverDao.insert(newServer)
+            serverDao.insert(newServer.toEntity())
         }
 
 }

+ 0 - 1
app/src/main/java/org/sirekanyan/outline/ui/RenameServerContent.kt

@@ -3,7 +3,6 @@ package org.sirekanyan.outline.ui
 import androidx.compose.runtime.Composable
 import org.sirekanyan.outline.MainState
 import org.sirekanyan.outline.RenameServerDialog
-import org.sirekanyan.outline.api.model.getHost
 
 @Composable
 fun RenameServerContent(state: MainState, dialog: RenameServerDialog) {