This commit is contained in:
2026-03-13 17:35:34 +03:00
parent a090ff614a
commit f8b10ebb34
10 changed files with 62 additions and 43 deletions
+3
View File
@@ -49,6 +49,9 @@
<option name="composableFile" value="true" /> <option name="composableFile" value="true" />
<option name="previewFile" value="true" /> <option name="previewFile" value="true" />
</inspection_tool> </inspection_tool>
<inspection_tool class="PreviewParameterProviderOnFirstParameter" enabled="true" level="ERROR" enabled_by_default="true">
<option name="composableFile" value="true" />
</inspection_tool>
<inspection_tool class="PreviewPickerAnnotation" enabled="true" level="ERROR" enabled_by_default="true"> <inspection_tool class="PreviewPickerAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
<option name="composableFile" value="true" /> <option name="composableFile" value="true" />
<option name="previewFile" value="true" /> <option name="previewFile" value="true" />
+1
View File
@@ -66,6 +66,7 @@ dependencies {
implementation(libs.trixnity.client) implementation(libs.trixnity.client)
implementation(libs.trixnity.client.media.okio) implementation(libs.trixnity.client.media.okio)
implementation(libs.trixnity.client.repository.room) implementation(libs.trixnity.client.repository.room)
implementation(libs.trixnity.client.cryptodriver.vodozemac)
// implementation(libs.trixnity.messenger) // implementation(libs.trixnity.messenger)
// Ktor - web client // Ktor - web client
@@ -6,12 +6,12 @@
package ru.risdeveau.pixeldragon package ru.risdeveau.pixeldragon
import android.util.Log import android.util.Log
import de.connect2x.trixnity.client.MatrixClient
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.client.plugins.cache.HttpCache import io.ktor.client.plugins.cache.HttpCache
import io.ktor.client.plugins.logging.LogLevel import io.ktor.client.plugins.logging.LogLevel
import io.ktor.client.plugins.logging.Logger import io.ktor.client.plugins.logging.Logger
import io.ktor.client.plugins.logging.Logging import io.ktor.client.plugins.logging.Logging
import net.folivo.trixnity.client.MatrixClient
val webClient = HttpClient { val webClient = HttpClient {
install(Logging) { install(Logging) {
@@ -5,6 +5,7 @@
package ru.risdeveau.pixeldragon.api package ru.risdeveau.pixeldragon.api
import android.util.Log
import io.ktor.client.request.get import io.ktor.client.request.get
import io.ktor.client.statement.bodyAsText import io.ktor.client.statement.bodyAsText
import org.json.JSONException import org.json.JSONException
@@ -14,10 +15,16 @@ import ru.risdeveau.pixeldragon.webClient
suspend fun getHomeserver(url: String): String? { suspend fun getHomeserver(url: String): String? {
val r = try { webClient.get("https://$url/.well-known/matrix/client") } val r = try { webClient.get("https://$url/.well-known/matrix/client") }
catch (_: Exception) { return null } catch (e: Exception) {
Log.w("getHomeserver", "Fail sending the request", e)
return null
}
val json = try { JSONObject(r.bodyAsText()) } val json = try { JSONObject(r.bodyAsText()) }
catch (_: JSONException) { return null } catch (e: JSONException) {
Log.w("getHomeserver", "Fail parsing the JSON", e)
return null
}
if (!json.has("m.homeserver")) return null if (!json.has("m.homeserver")) return null
@@ -6,10 +6,14 @@
package ru.risdeveau.pixeldragon.api package ru.risdeveau.pixeldragon.api
import android.util.Log import android.util.Log
import de.connect2x.trixnity.client.CryptoDriverModule
import io.ktor.http.Url import io.ktor.http.Url
import net.folivo.trixnity.client.MatrixClient import de.connect2x.trixnity.client.MatrixClient
import net.folivo.trixnity.client.login import de.connect2x.trixnity.client.create
import net.folivo.trixnity.clientserverapi.model.authentication.IdentifierType import de.connect2x.trixnity.client.cryptodriver.vodozemac.vodozemac
import de.connect2x.trixnity.clientserverapi.client.MatrixClientAuthProviderData
import de.connect2x.trixnity.clientserverapi.client.classicLogin
import de.connect2x.trixnity.clientserverapi.model.authentication.IdentifierType
import ru.risdeveau.pixeldragon.client import ru.risdeveau.pixeldragon.client
import ru.risdeveau.pixeldragon.util.getMediaStore import ru.risdeveau.pixeldragon.util.getMediaStore
import ru.risdeveau.pixeldragon.util.getRoomStore import ru.risdeveau.pixeldragon.util.getRoomStore
@@ -24,13 +28,16 @@ suspend fun login(server: String, login: String, pass: String): Boolean {
val pinfo = appCtx.packageManager.getPackageInfo(appCtx.packageName, 0) val pinfo = appCtx.packageManager.getPackageInfo(appCtx.packageName, 0)
try { try {
client = MatrixClient.login( client = MatrixClient.create(
repositoriesModule = getRoomStore(appCtx),
mediaStoreModule = getMediaStore(),
cryptoDriverModule = CryptoDriverModule.vodozemac(),
authProviderData = MatrixClientAuthProviderData.classicLogin(
baseUrl = hs, baseUrl = hs,
identifier = IdentifierType.User(login), identifier = IdentifierType.User(login),
password = pass, password = pass,
initialDeviceDisplayName = "PixelDragon Android v${pinfo.versionName}", initialDeviceDisplayName = "PixelDragon Android v${pinfo.versionName}",
repositoriesModule = getRoomStore(appCtx), ).getOrThrow()
mediaStore = getMediaStore()
).getOrThrow() ).getOrThrow()
return true return true
@@ -30,12 +30,14 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument import androidx.navigation.navArgument
import de.connect2x.trixnity.client.CryptoDriverModule
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import net.folivo.trixnity.client.MatrixClient import de.connect2x.trixnity.client.MatrixClient
import net.folivo.trixnity.client.fromStore import de.connect2x.trixnity.client.create
import net.folivo.trixnity.clientserverapi.client.SyncState import de.connect2x.trixnity.client.cryptodriver.vodozemac.vodozemac
import de.connect2x.trixnity.clientserverapi.client.SyncState
import ru.risdeveau.pixeldragon.R import ru.risdeveau.pixeldragon.R
import ru.risdeveau.pixeldragon.client import ru.risdeveau.pixeldragon.client
import ru.risdeveau.pixeldragon.ui.layout.RoomList import ru.risdeveau.pixeldragon.ui.layout.RoomList
@@ -111,9 +113,10 @@ class MainActivity : ComponentActivity() {
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
if (client == null) { if (client == null) {
client = MatrixClient.fromStore( client = MatrixClient.create(
getRoomStore(appCtx), repositoriesModule = getRoomStore(appCtx),
getMediaStore() mediaStoreModule = getMediaStore(),
cryptoDriverModule = CryptoDriverModule.vodozemac()
).getOrNull() ).getOrNull()
if (client == null) { if (client == null) {
@@ -26,8 +26,8 @@ import androidx.compose.ui.platform.LocalContext
import coil3.compose.rememberAsyncImagePainter import coil3.compose.rememberAsyncImagePainter
import coil3.request.ImageRequest import coil3.request.ImageRequest
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import net.folivo.trixnity.client.media import de.connect2x.trixnity.client.media
import net.folivo.trixnity.clientserverapi.model.media.FileTransferProgress import de.connect2x.trixnity.clientserverapi.model.media.FileTransferProgress
import ru.risdeveau.pixeldragon.client import ru.risdeveau.pixeldragon.client
enum class ImageLoadState { enum class ImageLoadState {
@@ -31,11 +31,11 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.navigation.NavController import androidx.navigation.NavController
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import net.folivo.trixnity.client.flattenValues import de.connect2x.trixnity.client.flattenValues
import net.folivo.trixnity.client.room import de.connect2x.trixnity.client.room
import net.folivo.trixnity.client.store.Room import de.connect2x.trixnity.client.store.Room
import net.folivo.trixnity.client.store.type import de.connect2x.trixnity.client.store.type
import net.folivo.trixnity.core.model.events.m.room.CreateEventContent import de.connect2x.trixnity.core.model.events.m.room.CreateEventContent
import ru.risdeveau.pixeldragon.client import ru.risdeveau.pixeldragon.client
import ru.risdeveau.pixeldragon.ui.item.MXCImage import ru.risdeveau.pixeldragon.ui.item.MXCImage
@@ -7,21 +7,18 @@ package ru.risdeveau.pixeldragon.util
import android.content.Context import android.content.Context
import androidx.room.Room import androidx.room.Room
import net.folivo.trixnity.client.media.okio.OkioMediaStore import de.connect2x.trixnity.client.MediaStoreModule
import net.folivo.trixnity.client.store.repository.room.TrixnityRoomDatabase import de.connect2x.trixnity.client.RepositoriesModule
import net.folivo.trixnity.client.store.repository.room.createRoomRepositoriesModule import de.connect2x.trixnity.client.media.okio.okio
import de.connect2x.trixnity.client.store.repository.room.TrixnityRoomDatabase
import de.connect2x.trixnity.client.store.repository.room.room
import okio.Path.Companion.toPath import okio.Path.Companion.toPath
import org.koin.dsl.module
import splitties.init.appCtx import splitties.init.appCtx
fun getMediaStore() = OkioMediaStore(appCtx.filesDir.resolve("media").absolutePath.toPath()) fun getMediaStore() = MediaStoreModule.okio(appCtx.filesDir.resolve("media").absolutePath.toPath())
fun getRoomStore(context: Context) = module { fun getRoomStore(context: Context) = RepositoriesModule.room(
includes( databaseBuilder = Room.databaseBuilder<TrixnityRoomDatabase>(
createRoomRepositoriesModule(
Room.databaseBuilder<TrixnityRoomDatabase>(
context, context,
"trixnity.db" "trixnity.db"
) )
) )
)
}
+5 -4
View File
@@ -15,7 +15,7 @@ composeBom = "2025.02.00"
navigationCompose = "2.8.8" navigationCompose = "2.8.8"
room = "2.6.1" room = "2.6.1"
splittiesFunPackAndroidBase = "3.0.0" splittiesFunPackAndroidBase = "3.0.0"
trixnityClient = "4.22.7" trixnityClient = "5.2.0"
[libraries] [libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@@ -47,9 +47,10 @@ ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "kto
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" }
splitties-base = { module = "com.louiscad.splitties:splitties-fun-pack-android-base", version.ref = "splittiesFunPackAndroidBase" } splitties-base = { module = "com.louiscad.splitties:splitties-fun-pack-android-base", version.ref = "splittiesFunPackAndroidBase" }
trixnity-client = { module = "net.folivo:trixnity-client", version.ref = "trixnityClient" } trixnity-client = { module = "de.connect2x.trixnity:trixnity-client", version.ref = "trixnityClient" }
trixnity-client-media-okio = { module = "net.folivo:trixnity-client-media-okio", version.ref = "trixnityClient" } trixnity-client-media-okio = { module = "de.connect2x.trixnity:trixnity-client-media-okio", version.ref = "trixnityClient" }
trixnity-client-repository-room = { module = "net.folivo:trixnity-client-repository-room", version.ref = "trixnityClient" } trixnity-client-repository-room = { module = "de.connect2x.trixnity:trixnity-client-repository-room", version.ref = "trixnityClient" }
trixnity-client-cryptodriver-vodozemac = { module = "de.connect2x.trixnity:trixnity-client-cryptodriver-vodozemac", version.ref = "trixnityClient" }
[plugins] [plugins]
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" }