wip
This commit is contained in:
+3
@@ -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" />
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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" }
|
||||||
|
|||||||
Reference in New Issue
Block a user