This commit is contained in:
kunfei 2023-06-17 21:40:22 +08:00
parent 563f7d4ed0
commit 93e40d49f6
13 changed files with 65 additions and 12 deletions

View File

@ -21,8 +21,12 @@ object DirectLinkUpload {
const val ruleFileName = "directLinkUploadRule.json" const val ruleFileName = "directLinkUploadRule.json"
@Throws(NoStackTraceException::class) @Throws(NoStackTraceException::class)
suspend fun upLoad(fileName: String, file: Any, contentType: String): String { suspend fun upLoad(
val rule = getRule() fileName: String,
file: Any,
contentType: String,
rule: Rule = getRule()
): String {
val url = rule.uploadUrl val url = rule.uploadUrl
if (url.isBlank()) { if (url.isBlank()) {
throw NoStackTraceException("上传url未配置") throw NoStackTraceException("上传url未配置")

View File

@ -18,7 +18,9 @@ import okhttp3.Response
import okhttp3.ResponseBody import okhttp3.ResponseBody
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.io.InputStream
import java.nio.charset.Charset import java.nio.charset.Charset
import java.util.zip.ZipInputStream
import kotlin.coroutines.resume import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException import kotlin.coroutines.resumeWithException
@ -92,6 +94,19 @@ fun ResponseBody.text(encode: String? = null): String {
return String(responseBytes, Charset.forName(charsetName)) return String(responseBytes, Charset.forName(charsetName))
} }
fun ResponseBody.unCompress(success: (inputStream: InputStream) -> Unit) {
if (contentType() == "application/zip".toMediaType()) {
byteStream().use { byteStream ->
ZipInputStream(byteStream).use {
it.nextEntry
success.invoke(it)
}
}
} else {
byteStream().use(success)
}
}
fun Request.Builder.addHeaders(headers: Map<String, String>) { fun Request.Builder.addHeaders(headers: Map<String, String>) {
headers.forEach { headers.forEach {
addHeader(it.key, it.value) addHeader(it.key, it.value)

View File

@ -17,7 +17,15 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.help.http.newCallResponseBody import io.legado.app.help.http.newCallResponseBody
import io.legado.app.help.http.okHttpClient import io.legado.app.help.http.okHttpClient
import io.legado.app.help.source.SourceHelp import io.legado.app.help.source.SourceHelp
import io.legado.app.utils.* import io.legado.app.utils.GSON
import io.legado.app.utils.fromJsonArray
import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.inputStream
import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.isJsonArray
import io.legado.app.utils.isJsonObject
import io.legado.app.utils.isUri
import io.legado.app.utils.splitNotBlank
class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) { class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) {
@ -179,13 +187,13 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) {
} else { } else {
url(url) url(url)
} }
}.byteStream().use { body -> }.byteStream().use {
GSON.fromJsonArray<BookSource>(body).getOrThrow().let { GSON.fromJsonArray<BookSource>(it).getOrThrow().let { list ->
val source = it.firstOrNull() ?: return@let val source = list.firstOrNull() ?: return@let
if (source.bookSourceUrl.isEmpty()) { if (source.bookSourceUrl.isEmpty()) {
throw NoStackTraceException("不是书源") throw NoStackTraceException("不是书源")
} }
allSources.addAll(it) allSources.addAll(list)
} }
} }
} }

View File

@ -15,7 +15,14 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.help.http.newCallResponseBody import io.legado.app.help.http.newCallResponseBody
import io.legado.app.help.http.okHttpClient import io.legado.app.help.http.okHttpClient
import io.legado.app.help.source.SourceHelp import io.legado.app.help.source.SourceHelp
import io.legado.app.utils.* import io.legado.app.utils.GSON
import io.legado.app.utils.fromJsonArray
import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.isJsonArray
import io.legado.app.utils.isJsonObject
import io.legado.app.utils.jsonPath
import io.legado.app.utils.splitNotBlank
class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) { class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) {
var isAddGroup = false var isAddGroup = false
@ -141,7 +148,7 @@ class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) {
} else { } else {
url(url) url(url)
} }
}.byteStream().let { body -> }.byteStream().use { body ->
val items: List<Map<String, Any>> = jsonPath.parse(body).read("$") val items: List<Map<String, Any>> = jsonPath.parse(body).read("$")
for (item in items) { for (item in items) {
if (!item.containsKey("sourceUrl")) { if (!item.containsKey("sourceUrl")) {

View File

@ -15,6 +15,7 @@ import io.legado.app.utils.GSON
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.fromJsonObject import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.getClipText import io.legado.app.utils.getClipText
import io.legado.app.utils.longToast
import io.legado.app.utils.sendToClip import io.legado.app.utils.sendToClip
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
@ -41,8 +42,7 @@ class DirectLinkUploadConfig : BaseDialogFragment(R.layout.dialog_direct_link_up
dismiss() dismiss()
} }
binding.tvFooterLeft.onClick { binding.tvFooterLeft.onClick {
DirectLinkUpload.delConfig() test()
dismiss()
} }
binding.tvOk.onClick { binding.tvOk.onClick {
getRule()?.let { rule -> getRule()?.let { rule ->
@ -58,6 +58,7 @@ class DirectLinkUploadConfig : BaseDialogFragment(R.layout.dialog_direct_link_up
R.id.menu_copy_rule -> getRule()?.let { rule -> R.id.menu_copy_rule -> getRule()?.let { rule ->
requireContext().sendToClip(GSON.toJson(rule)) requireContext().sendToClip(GSON.toJson(rule))
} }
R.id.menu_paste_rule -> runCatching { R.id.menu_paste_rule -> runCatching {
requireContext().getClipText()!!.let { requireContext().getClipText()!!.let {
val rule = GSON.fromJsonObject<DirectLinkUpload.Rule>(it).getOrThrow() val rule = GSON.fromJsonObject<DirectLinkUpload.Rule>(it).getOrThrow()
@ -103,4 +104,15 @@ class DirectLinkUploadConfig : BaseDialogFragment(R.layout.dialog_direct_link_up
} }
} }
private fun test() {
val rule = getRule() ?: return
execute {
DirectLinkUpload.upLoad("test.json", "{}", "application/json", rule)
}.onError {
longToast(it.localizedMessage!!)
}.onSuccess {
longToast(it)
}
}
} }

View File

@ -92,7 +92,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="12dp" android:padding="12dp"
android:text="@string/btn_default_s" android:text="@string/test"
tools:ignore="RtlHardcoded" /> tools:ignore="RtlHardcoded" />
<LinearLayout <LinearLayout

View File

@ -1114,4 +1114,5 @@
<string name="shrink_database_summary">减小数据库文件的大小</string> <string name="shrink_database_summary">减小数据库文件的大小</string>
<string name="is_compress">是否压缩</string> <string name="is_compress">是否压缩</string>
<string name="sort_desc">反序</string> <string name="sort_desc">反序</string>
<string name="test">测试</string>
</resources> </resources>

View File

@ -1117,4 +1117,5 @@
<string name="shrink_database_summary">减小数据库文件的大小</string> <string name="shrink_database_summary">减小数据库文件的大小</string>
<string name="is_compress">是否压缩</string> <string name="is_compress">是否压缩</string>
<string name="sort_desc">反序</string> <string name="sort_desc">反序</string>
<string name="test">测试</string>
</resources> </resources>

View File

@ -1117,4 +1117,5 @@
<string name="shrink_database_summary">减小数据库文件的大小</string> <string name="shrink_database_summary">减小数据库文件的大小</string>
<string name="is_compress">是否压缩</string> <string name="is_compress">是否压缩</string>
<string name="sort_desc">反序</string> <string name="sort_desc">反序</string>
<string name="test">测试</string>
</resources> </resources>

View File

@ -1114,4 +1114,5 @@
<string name="shrink_database_summary">减小数据库文件的大小</string> <string name="shrink_database_summary">减小数据库文件的大小</string>
<string name="is_compress">是否压缩</string> <string name="is_compress">是否压缩</string>
<string name="sort_desc">反序</string> <string name="sort_desc">反序</string>
<string name="test">测试</string>
</resources> </resources>

View File

@ -1116,4 +1116,5 @@
<string name="shrink_database_summary">减小数据库文件的大小</string> <string name="shrink_database_summary">减小数据库文件的大小</string>
<string name="is_compress">是否压缩</string> <string name="is_compress">是否压缩</string>
<string name="sort_desc">反序</string> <string name="sort_desc">反序</string>
<string name="test">测试</string>
</resources> </resources>

View File

@ -1116,4 +1116,5 @@
<string name="shrink_database_summary">减小数据库文件的大小</string> <string name="shrink_database_summary">减小数据库文件的大小</string>
<string name="is_compress">是否压缩</string> <string name="is_compress">是否压缩</string>
<string name="sort_desc">反序</string> <string name="sort_desc">反序</string>
<string name="test">测试</string>
</resources> </resources>

View File

@ -1117,4 +1117,5 @@
<string name="shrink_database_summary">减小数据库文件的大小</string> <string name="shrink_database_summary">减小数据库文件的大小</string>
<string name="is_compress">是否压缩</string> <string name="is_compress">是否压缩</string>
<string name="sort_desc">反序</string> <string name="sort_desc">反序</string>
<string name="test">测试</string>
</resources> </resources>