diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/DownloadFile.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/DownloadFile.kt index d35fe7a..4a5c085 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/DownloadFile.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/DownloadFile.kt @@ -15,6 +15,7 @@ import moe.fuqiuluo.shamrock.utils.MD5 internal object DownloadFile: IActionHandler() { override suspend fun internalHandle(session: ActionSession): String { val url = session.getStringOrNull("url") + val name = session.getStringOrNull("name") val b64 = session.getStringOrNull("base64") val threadCnt = session.getIntOrNull("thread_cnt") ?: 3 val headers = if (session.has("headers")) (if (session.isArray("headers")) { @@ -24,7 +25,7 @@ internal object DownloadFile: IActionHandler() { } else { session.getString("headers").split("\r\n") }) else emptyList() - return invoke(url, b64, threadCnt, headers, session.echo) + return invoke(url, b64, threadCnt, headers, name, session.echo) } suspend operator fun invoke( @@ -32,6 +33,7 @@ internal object DownloadFile: IActionHandler() { base64: String?, threadCnt: Int, headers: List, + name: String?, echo: JsonElement = EmptyJsonString ): String { if (url != null) { @@ -47,7 +49,7 @@ internal object DownloadFile: IActionHandler() { } return invoke(url, threadCnt, headerMap, echo) } else if (base64 != null) { - return invoke(base64, echo) + return invoke(base64, name, echo) } else { return noParam("url/base64", echo) } @@ -55,6 +57,7 @@ internal object DownloadFile: IActionHandler() { operator fun invoke( base64: String, + name: String?, echo: JsonElement ): String { kotlin.runCatching { @@ -63,7 +66,12 @@ internal object DownloadFile: IActionHandler() { it.writeBytes(bytes) } }.onSuccess { - val tmp = FileUtils.renameByMd5(it) + val tmp = if (name == null) + FileUtils.renameByMd5(it) + else it.parentFile!!.resolve(name).also { target -> + it.renameTo(target) + it.delete() + } return ok(data = DownloadResult( file = tmp.absolutePath, md5 = MD5.genFileMd5Hex(tmp.absolutePath) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt index f743536..09c1d2e 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt @@ -43,9 +43,10 @@ fun Routing.otherAction() { getOrPost("/download_file") { val url = fetchOrNull("url") val b64 = fetchOrNull("base64") + val name = fetchOrNull("name") val threadCnt = fetchOrNull("thread_cnt")?.toInt() ?: 0 val headers = fetchOrNull("headers") ?: "" - call.respondText(DownloadFile(url, b64, threadCnt, headers.split("\r\n"))) + call.respondText(DownloadFile(url, b64, threadCnt, headers.split("\r\n"), name)) } post("/upload_file") {