package io.legato.kazusa.api.controller import android.text.TextUtils import io.legato.kazusa.api.ReturnData import io.legato.kazusa.data.appDb import io.legato.kazusa.data.entities.BookSource import io.legato.kazusa.help.source.SourceHelp import io.legato.kazusa.utils.GSON import io.legato.kazusa.utils.fromJsonArray import io.legato.kazusa.utils.fromJsonObject object BookSourceController { val sources: ReturnData get() { val bookSources = appDb.bookSourceDao.all val returnData = ReturnData() return if (bookSources.isEmpty()) { returnData.setErrorMsg("设备源列表为空") } else returnData.setData(bookSources) } fun saveSource(postData: String?): ReturnData { val returnData = ReturnData() postData ?: return returnData.setErrorMsg("数据不能为空") val bookSource = GSON.fromJsonObject(postData).getOrNull() if (bookSource != null) { if (TextUtils.isEmpty(bookSource.bookSourceName) || TextUtils.isEmpty(bookSource.bookSourceUrl)) { returnData.setErrorMsg("源名称和URL不能为空") } else { appDb.bookSourceDao.insert(bookSource) returnData.setData("") } } else { returnData.setErrorMsg("转换源失败") } return returnData } fun saveSources(postData: String?): ReturnData { postData ?: return ReturnData().setErrorMsg("数据为空") val okSources = arrayListOf() val bookSources = GSON.fromJsonArray(postData).getOrNull() if (bookSources.isNullOrEmpty()) { return ReturnData().setErrorMsg("转换源失败") } bookSources.forEach { bookSource -> if (bookSource.bookSourceName.isNotBlank() && bookSource.bookSourceUrl.isNotBlank() ) { appDb.bookSourceDao.insert(bookSource) okSources.add(bookSource) } } return ReturnData().setData(okSources) } fun getSource(parameters: Map>): ReturnData { val url = parameters["url"]?.firstOrNull() val returnData = ReturnData() if (url.isNullOrEmpty()) { return returnData.setErrorMsg("参数url不能为空,请指定源地址") } val bookSource = appDb.bookSourceDao.getBookSource(url) ?: return returnData.setErrorMsg("未找到源,请检查书源地址") return returnData.setData(bookSource) } fun deleteSources(postData: String?): ReturnData { kotlin.runCatching { GSON.fromJsonArray(postData).getOrThrow().let { SourceHelp.deleteBookSources(it) } }.onFailure { return ReturnData().setErrorMsg(it.localizedMessage ?: "数据格式错误") } return ReturnData().setData("已执行"/*okSources*/) } }