NekoX/TMessagesProj/src/main/java/tw/nekomimi/nekogram/transtale/TranslateDb.kt

98 lines
2.5 KiB
Kotlin
Raw Normal View History

2020-06-25 17:28:44 +02:00
package tw.nekomimi.nekogram.transtale
2020-12-24 14:56:50 +01:00
import org.dizitart.no2.filters.FluentFilter.where
import org.dizitart.no2.repository.ObjectRepository
2020-06-25 17:28:44 +02:00
import org.telegram.messenger.LocaleController
import tw.nekomimi.nekogram.NekoConfig
import tw.nekomimi.nekogram.database.mkDatabase
import tw.nekomimi.nekogram.utils.UIUtil
import java.util.*
import kotlin.collections.HashMap
class TranslateDb(val code: String) {
2020-12-24 14:56:50 +01:00
var conn: ObjectRepository<TransItem> = db.getRepository(TransItem::class.java, code)
2020-06-25 17:28:44 +02:00
companion object {
val db = mkDatabase("translate_caches")
val repo = HashMap<Locale, TranslateDb>()
2020-12-24 14:56:50 +01:00
val chat = db.getRepository(ChatLanguage::class.java, "chat")
val ccTarget = db.getRepository(ChatCCTarget::class.java, "cc")
2020-06-25 17:28:44 +02:00
2020-12-24 14:56:50 +01:00
@JvmStatic
fun getChatLanguage(chatId: Int, default: Locale): Locale {
2020-06-25 17:28:44 +02:00
2020-12-24 14:56:50 +01:00
return chat.find(where("chatId").eq(chatId)).firstOrNull()?.language?.code2Locale
2020-12-17 18:32:45 +01:00
?: default
2020-06-25 17:28:44 +02:00
}
2020-12-17 18:32:45 +01:00
@JvmStatic
fun saveChatLanguage(chatId: Int, locale: Locale) = UIUtil.runOnIoDispatcher {
2020-06-25 17:28:44 +02:00
chat.update(ChatLanguage(chatId, locale.locale2code), true)
}
2020-12-17 18:32:45 +01:00
@JvmStatic
fun getChatCCTarget(chatId: Int, default: String?): String? {
2020-06-25 17:28:44 +02:00
2020-12-24 14:56:50 +01:00
return ccTarget.find(where("chatId").eq(chatId)).firstOrNull()?.ccTarget
2020-12-17 18:32:45 +01:00
?: default
2020-06-25 17:28:44 +02:00
2020-12-17 18:32:45 +01:00
}
@JvmStatic
fun saveChatCCTarget(chatId: Int, target: String) = UIUtil.runOnIoDispatcher {
ccTarget.update(ChatCCTarget(chatId, target), true)
}
@JvmStatic
fun currentTarget() = NekoConfig.translateToLang?.transDbByCode
?: LocaleController.getInstance().currentLocale.transDb
@JvmStatic
fun forLocale(locale: Locale) = locale.transDb
@JvmStatic
fun currentInputTarget() = NekoConfig.translateInputLang.transDbByCode
2020-06-25 17:28:44 +02:00
2020-12-17 18:32:45 +01:00
@JvmStatic
fun clearAll() {
2020-06-25 17:28:44 +02:00
2020-10-21 13:07:30 +02:00
db.listRepositories()
2020-12-24 14:56:50 +01:00
.filter { it != "chat" }
2020-10-21 13:07:30 +02:00
.map { db.getCollection(it) }
.forEach { it.drop() }
2020-06-25 17:28:44 +02:00
repo.clear()
}
}
fun clear() = synchronized(this) {
conn.drop()
}
2020-12-24 14:56:50 +01:00
fun contains(text: String) = synchronized(this) { conn.find(where("text").eq(text)).count() > 0 }
2020-06-25 17:28:44 +02:00
fun save(text: String, trans: String) = synchronized<Unit>(this) {
conn.update(TransItem(text, trans), true)
}
fun query(text: String) = synchronized(this) {
2020-12-24 14:56:50 +01:00
conn.find(where("text").eq(text)).firstOrNull()?.trans
2020-06-25 17:28:44 +02:00
}
}