feat: show room avatar when is DM
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
/*
|
||||
* Created by sweetbread
|
||||
* Copyright (c) 2025. All rights reserved.
|
||||
* Last modified 03.03.2025, 18:28
|
||||
*/
|
||||
|
||||
package ru.risdeveau.pixeldragon.api
|
||||
@@ -36,12 +35,28 @@ suspend fun getRooms(): List<String> {
|
||||
|
||||
suspend fun getRoom(rid: String): Room {
|
||||
var room = db.roomDoa().getById(rid)
|
||||
|
||||
val direct = getAccountData(getMe()!!.userId, "m.direct")
|
||||
var directWith = ""
|
||||
direct?.let {
|
||||
for (user in direct.keys()) {
|
||||
val roomsWithUser = direct.getJSONArray(user)
|
||||
for (i in 0 until roomsWithUser.length()) {
|
||||
if (rid == roomsWithUser.getString(i)) {
|
||||
directWith = user
|
||||
break
|
||||
}
|
||||
}
|
||||
if (directWith.isNotEmpty()) break
|
||||
}
|
||||
}
|
||||
|
||||
if (room == null) {
|
||||
val name = getState(rid, "m.room.name", "name")
|
||||
val type = getState(rid, "m.room.create", "type") ?: "m.room"
|
||||
val creator = getState(rid, "m.room.create", "creator")
|
||||
val avatar = getState(rid, "m.room.avatar", "url")
|
||||
room = Room(rid, name, type, creator, null, avatar, null, true)
|
||||
room = Room(rid, name, type, creator, null, avatar, null, true, if (directWith.isNotEmpty()) directWith else null)
|
||||
db.roomDoa().insert(room)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*
|
||||
* Created by sweetbread
|
||||
* Copyright (c) 2025. All rights reserved.
|
||||
* Last modified 03.03.2025, 15:40
|
||||
*/
|
||||
|
||||
package ru.risdeveau.pixeldragon.api
|
||||
@@ -28,9 +27,11 @@ suspend fun getHomeserver(url: String): String? {
|
||||
return homeserver
|
||||
}
|
||||
|
||||
fun mxcToUrl(mxc: String): String {
|
||||
val pattern = Regex("mxc://([-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6})/([a-zA-Z]+)")
|
||||
fun mxcToUrl(mxc: String): String? {
|
||||
val pattern = Regex("mxc://([-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6})/([a-zA-Z0-9]+)")
|
||||
val match = pattern.find(mxc)
|
||||
|
||||
if ((match?.groupValues[1] == null) or (match?.groupValues[2] == null)) return null
|
||||
|
||||
return "$homeserver/_matrix/client/v1/media/download/${match?.groupValues[1]}/${match?.groupValues[2]}"
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import splitties.init.appCtx
|
||||
import splitties.preferences.edit
|
||||
|
||||
data class Me (val userId: String, val deviceId: String)
|
||||
data class UserProfile (val displayName: String, val avatarUrl: String, val other: JSONObject)
|
||||
|
||||
/**
|
||||
* This func is to validate the token
|
||||
@@ -82,3 +83,18 @@ suspend fun login(server: String, login: String, pass: String): Boolean {
|
||||
|
||||
return initCheck()
|
||||
}
|
||||
|
||||
suspend fun getAccountData(user: String, state: String): JSONObject? {
|
||||
val r = client.get("$baseUrl/user/$user/account_data/$state") { bearerAuth(token) }
|
||||
if (r.status != HttpStatusCode.OK) return null
|
||||
return JSONObject(r.bodyAsText())
|
||||
}
|
||||
|
||||
suspend fun getUserProfile(userId: String): UserProfile? {
|
||||
val r = client.get("$baseUrl/profile/$userId") { bearerAuth(token) }
|
||||
if (r.status != HttpStatusCode.OK) return null
|
||||
val json = JSONObject(r.bodyAsText())
|
||||
val name = json.optString("displayname", ""); json.remove("displayname")
|
||||
val avatar = json.optString("avatar_url", ""); json.remove("avatar_url")
|
||||
return UserProfile(name, avatar, json)
|
||||
}
|
||||
Reference in New Issue
Block a user