2020-06-25 17:28:44 +02:00
|
|
|
package tw.nekomimi.nekogram.transtale
|
|
|
|
|
2020-12-29 14:41:11 +01:00
|
|
|
import org.dizitart.no2.objects.ObjectRepository
|
|
|
|
import org.dizitart.no2.objects.filters.ObjectFilters
|
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-29 14:41:11 +01:00
|
|
|
var conn: ObjectRepository<TransItem> = db.getRepository(code, TransItem::class.java)
|
2020-06-25 17:28:44 +02:00
|
|
|
|
|
|
|
companion object {
|
|
|
|
|
|
|
|
val db = mkDatabase("translate_caches")
|
|
|
|
|
|
|
|
val repo = HashMap<Locale, TranslateDb>()
|
2020-12-29 14:41:11 +01:00
|
|
|
val chat = db.getRepository("chat", ChatLanguage::class.java)
|
|
|
|
val ccTarget = db.getRepository("opencc", ChatCCTarget::class.java)
|
2020-06-25 17:28:44 +02:00
|
|
|
|
2021-09-20 11:14:20 +02:00
|
|
|
@JvmStatic fun getChatLanguage(chatId: Long, default: Locale): Locale {
|
2020-06-25 17:28:44 +02:00
|
|
|
|
2020-12-29 14:41:11 +01:00
|
|
|
return chat.find(ObjectFilters.eq("chatId", chatId)).firstOrDefault()?.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
|
2021-09-20 11:14:20 +02:00
|
|
|
fun saveChatLanguage(chatId: Long, 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
|
2021-09-20 11:14:20 +02:00
|
|
|
fun getChatCCTarget(chatId: Long, default: String?): String? {
|
2020-06-25 17:28:44 +02:00
|
|
|
|
2020-12-29 14:41:11 +01:00
|
|
|
return ccTarget.find(ObjectFilters.eq("chatId", chatId)).firstOrDefault()?.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
|
2021-09-20 11:14:20 +02:00
|
|
|
fun saveChatCCTarget(chatId: Long, target: String) = UIUtil.runOnIoDispatcher {
|
2020-12-17 18:32:45 +01:00
|
|
|
|
|
|
|
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-29 14:41:11 +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-29 14:41:11 +01:00
|
|
|
fun contains(text: String) = synchronized(this) { conn.find(ObjectFilters.eq("text", 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-29 14:41:11 +01:00
|
|
|
conn.find(ObjectFilters.eq("text", text)).firstOrDefault()?.trans
|
2020-06-25 17:28:44 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|