Skip to content
This repository has been archived by the owner on Aug 12, 2024. It is now read-only.

新增get_file方法(算是补全下功能) #301

Merged
merged 10 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.2.0" apply false
id("com.android.application") version "8.2.1" apply false
id("org.jetbrains.kotlin.android") version "1.9.22" apply false
id("com.android.library") version "8.2.0" apply false
id("com.android.library") version "8.2.1" apply false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package moe.fuqiuluo.shamrock.remote.action.handlers

import kotlinx.serialization.json.JsonElement
import moe.fuqiuluo.shamrock.remote.action.ActionSession
import moe.fuqiuluo.shamrock.remote.action.IActionHandler
import moe.fuqiuluo.shamrock.remote.service.data.OutResourceByBase64
import moe.fuqiuluo.shamrock.tools.EmptyJsonString
import moe.fuqiuluo.shamrock.utils.FileUtils
import moe.fuqiuluo.symbols.OneBotHandler
import java.util.Base64

@OneBotHandler("get_file")
internal object GetFile : IActionHandler() {
override suspend fun internalHandle(session: ActionSession): String {
val file = session.getString("file")
.replace(regex = "[{}\\-]".toRegex(), replacement = "")
.replace(" ", "")
.split(".")[0].lowercase()
val fileType = session.getStringOrNull("file_type") ?: "base64"
return invoke(file, fileType, session.echo)
}

operator fun invoke(file: String, fileType: String = "base64", echo: JsonElement = EmptyJsonString): String {
val targetFile = FileUtils.getFileByMd5(file)
return if (targetFile.exists()) {
when (fileType) {
"base64", "" -> ok(
OutResourceByBase64(
"/res/${targetFile.nameWithoutExtension}",
Base64.getEncoder()
.encodeToString(targetFile.readBytes()),
targetFile.nameWithoutExtension,
), echo
)

else -> error("only support base64", echo)
}

} else {
error("not found record file from md5", echo)
}
}

override val requiredParams: Array<String> = arrayOf("file")
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ import moe.fuqiuluo.shamrock.tools.EmptyJsonString
import moe.fuqiuluo.shamrock.utils.AudioUtils
import moe.fuqiuluo.symbols.OneBotHandler

@OneBotHandler("get_record")
internal object GetRecord: IActionHandler() {
@OneBotHandler("get_record") internal object GetRecord : IActionHandler() {
override suspend fun internalHandle(session: ActionSession): String {
val file = session.getString("file")
.replace(regex = "[{}\\-]".toRegex(), replacement = "")
Expand All @@ -22,17 +21,17 @@ internal object GetRecord: IActionHandler() {

operator fun invoke(file: String, format: String, echo: JsonElement = EmptyJsonString): String {
val pttFile = LocalCacheHelper.getCachePttFile(file)
return if(pttFile.exists()) {
return if (pttFile.exists()) {
val isSilk = AudioUtils.isSilk(pttFile)
val audioFile = when(format) {
val audioFile = when (format) {
"amr" -> AudioUtils.audioToAmr(pttFile, isSilk)
else -> AudioUtils.audioToFormat(pttFile, isSilk, format)
}
ok(
OutResource(
audioFile.toString(),
url = "/res/${audioFile.nameWithoutExtension}"
), echo)
audioFile.toString(), url = "/res/${audioFile.nameWithoutExtension}", md5 = audioFile.nameWithoutExtension
), echo
)
} else {
error("not found record file from cache", echo)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ fun Routing.fetchRes() {
call.respondText(GetRecord(file, format), ContentType.Application.Json)
}

getOrPost("/get_file") {
val file = formatFileName( fetchGetOrThrow("file") )
val fileType = fetchOrThrow("file_type")
call.respondText(GetFile(file, fileType), ContentType.Application.Json)
}

getOrPost("/get_image") {
val file = formatFileName( fetchGetOrThrow("file") )
call.respondText(GetImage(file), ContentType.Application.Json)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
package moe.fuqiuluo.shamrock.remote.service.data

import kotlinx.serialization.Serializable
import java.util.Base64

@Serializable
internal data class OutResource(
@Serializable internal data class OutResource(
val file: String,
val url: String
val url: String,
val md5: String,
)

@Serializable internal data class OutResourceByBase64(
val file: String,
val base64String: String,
val md5: String,
)