/* * Created by sweetbread * Copyright (c) 2025. All rights reserved. * Last modified 03.03.2025, 18:28 */ package ru.risdeveau.pixeldragon.api import io.ktor.client.request.bearerAuth import io.ktor.client.request.get import io.ktor.client.statement.bodyAsText import io.ktor.http.HttpStatusCode import org.json.JSONObject import ru.risdeveau.pixeldragon.baseUrl import ru.risdeveau.pixeldragon.client import ru.risdeveau.pixeldragon.db import ru.risdeveau.pixeldragon.db.Room import ru.risdeveau.pixeldragon.token //fun getRooms(): List { // return db.roomDoa().getAllJoined() //} // //fun updateRooms(): List { // //} suspend fun getRooms(): List { val r = client.get("$baseUrl/joined_rooms") { bearerAuth(token) } val rooms = JSONObject(r.bodyAsText()).getJSONArray("joined_rooms") return List( rooms.length() ) { i -> rooms.getString(i) } } suspend fun getRoom(rid: String): Room { var room = db.roomDoa().getById(rid) 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) db.roomDoa().insert(room) } return room } private suspend fun getState(rid: String, state: String, key: String): String? { val r = client.get("$baseUrl/rooms/$rid/state/$state") { bearerAuth(token) } if (r.status != HttpStatusCode.OK) return null val json = JSONObject(r.bodyAsText()) if (!json.has(key)) return null return json.getString(key) } suspend fun getAccountData(user: String, room: String, state: String): JSONObject? { val r = client.get("$baseUrl/user/$user/rooms/$room/account_data/$state") { bearerAuth(token) } if (r.status != HttpStatusCode.OK) return null return JSONObject(r.bodyAsText()) }