Files
Nekosu/app/src/main/java/ru/risdeveau/pixeldragon/repo/Room.kt
T

62 lines
2.0 KiB
Kotlin
Raw Normal View History

2025-11-04 20:30:22 +03:00
/*
* Created by sweetbread
* Copyright (c) 2025. All rights reserved.
*/
package ru.risdeveau.pixeldragon.repo
2025-11-05 01:23:35 +03:00
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
2025-11-04 23:24:20 +03:00
import ru.risdeveau.pixeldragon.api.getJoinedRooms
2025-11-04 20:30:22 +03:00
import ru.risdeveau.pixeldragon.api.getRoom
import ru.risdeveau.pixeldragon.db.cacheDb
import ru.risdeveau.pixeldragon.db.isConnected
2025-11-04 20:30:22 +03:00
import ru.risdeveau.pixeldragon.db.isExpired
import ru.risdeveau.pixeldragon.db.toDomain
import ru.risdeveau.pixeldragon.db.toEntity
class Room (
val id: String,
val name: String?,
val type: String,
val creatorId: String?,
val createTime: Long?,
val avatarUrl: String?,
val members: Int?,
val joined: Boolean,
val direct: User?,
) {
companion object {
suspend fun getById(id: String, cached: Boolean = true): Room {
val cachedRoom = cacheDb.roomDoa().getById(id)
if (!isConnected() and
(!cached or (cachedRoom == null) or (cachedRoom?.isExpired() == true))
) {
2025-11-04 20:30:22 +03:00
val room = getRoom(id)
2025-11-05 01:23:35 +03:00
CoroutineScope(Dispatchers.IO).launch {
val cacheRoom = room.toEntity()
cacheDb.roomDoa().insert(cacheRoom)
}
2025-11-04 20:30:22 +03:00
return room
}
return cachedRoom!!.toDomain()
}
2025-11-04 23:24:20 +03:00
suspend fun getJoined(cached: Boolean = true): List<Room> {
val cacheJoined = cacheDb.roomDoa().getAllJoined()
2025-11-05 01:23:35 +03:00
if (isConnected() and
(!cached or cacheJoined.isEmpty() or (cacheJoined.any { it.isExpired() }))
) {
val rooms = getJoinedRooms()
CoroutineScope(Dispatchers.IO).launch {
val roomsDb = List(rooms.size) { i -> rooms[i].toEntity() }
cacheDb.roomDoa().insert(*roomsDb.toTypedArray())
}
return rooms
2025-11-04 23:24:20 +03:00
}
return List(cacheJoined.size) { i -> cacheJoined[i].toDomain() }
}
2025-11-04 20:30:22 +03:00
}
}