Merge remote-tracking branch 'origin/master'

This commit is contained in:
kunfei 2023-03-13 12:24:03 +08:00
commit a28952d6d6
7 changed files with 34 additions and 76 deletions

View File

@ -124,9 +124,14 @@ eval(String(java.cacheFile(url)))
删除缓存文件
cache.delete(java.md5Encode16(url))
```
* 获取网络zip文件里面的数据
* 获取网络压缩文件里面指定路径的数据 *可替换Zip Rar 7Z Archive
```
java.getZipStringContent(url: String, path: String)
java.get*StringContent(url: String, path: String): String
java.get*StringContent(url: String, path: String, charsetName: String): String
java.get*ByteArrayContent(url: String, path: String): ByteArray?
```
* base64
> flags参数可省略默认Base64.NO_WRAP查看[flags参数说明](https://blog.csdn.net/zcmain/article/details/97051870)
@ -159,8 +164,12 @@ java.hexEncodeToString(utf8: String)
```
//文件下载,content为十六进制字符串,url用于生成文件名返回文件路径
downloadFile(content: String, url: String): String
downloadFile(url: String): String
//文件解压,zipPath为压缩文件路径返回解压路径
unArchiveFile(zipPath: String): String
unzipFile(zipPath: String): String
unrarFile(zipPath: String): String
un7zFile(zipPath: String): String
//文件夹内所有文件读取
getTxtInFolder(unzipPath: String): String
//读取文本文件

View File

@ -497,16 +497,7 @@ interface JsExtensions : JsEncodeUtils {
* @return 相对路径
*/
fun unzipFile(zipPath: String): String {
if (zipPath.isEmpty()) return ""
val unzipPath = FileUtils.getPath(
FileUtils.createFolderIfNotExist(FileUtils.getCachePath()),
FileUtils.getNameExcludeExtension(zipPath)
)
val unzipFolder = File(unzipPath).createFolderReplace()
val zipFile = getFile(zipPath)
ZipUtils.unzipFile(zipFile, unzipFolder)
FileUtils.delete(zipFile.absolutePath)
return unzipPath.substring(FileUtils.getCachePath().length)
return unArchiveFile(zipPath)
}
/**
* js实现7Zip压缩文件解压
@ -514,16 +505,7 @@ interface JsExtensions : JsEncodeUtils {
* @return 相对路径
*/
fun un7zFile(zipPath: String): String {
if (zipPath.isEmpty()) return ""
val unzipPath = FileUtils.getPath(
FileUtils.createFolderIfNotExist(FileUtils.getCachePath()),
FileUtils.getNameExcludeExtension(zipPath)
)
val unzipFolder = File(unzipPath).createFolderReplace()
val zipFile = getFile(zipPath)
SevenZipUtils.un7zToPath(zipFile, unzipFolder)
FileUtils.delete(zipFile.absolutePath)
return unzipPath.substring(FileUtils.getCachePath().length)
return unArchiveFile(zipPath)
}
/**
* js实现Rar压缩文件解压
@ -531,16 +513,7 @@ interface JsExtensions : JsEncodeUtils {
* @return 相对路径
*/
fun unrarFile(zipPath: String): String {
if (zipPath.isEmpty()) return ""
val unzipPath = FileUtils.getPath(
FileUtils.createFolderIfNotExist(FileUtils.getCachePath()),
FileUtils.getNameExcludeExtension(zipPath)
)
val unzipFolder = File(unzipPath).createFolderReplace()
val zipFile = getFile(zipPath)
RarUtils.unRarToPath(zipFile, unzipFolder)
FileUtils.delete(zipFile.absolutePath)
return unzipPath.substring(FileUtils.getCachePath().length)
return unArchiveFile(zipPath)
}
/**
* js实现压缩文件解压
@ -549,29 +522,8 @@ interface JsExtensions : JsEncodeUtils {
*/
fun unArchiveFile(zipPath: String): String {
if (zipPath.isEmpty()) return ""
val unzipPath = FileUtils.getPath(
FileUtils.createFolderIfNotExist(FileUtils.getCachePath()),
FileUtils.getNameExcludeExtension(zipPath)
)
val unzipFolder = File(unzipPath).createFolderReplace()
val zipFile = getFile(zipPath)
when {
zipPath.endsWith(".zip", ignoreCase = true) -> {
ZipUtils.unzipFile(zipFile, unzipFolder)
}
zipPath.endsWith(".rar", ignoreCase = true) -> {
RarUtils.unRarToPath(zipFile, unzipFolder)
}
zipPath.endsWith(".7z", ignoreCase = true) -> {
SevenZipUtils.un7zToPath(zipFile, unzipFolder)
}
else -> {
log("自动解压未识别类型${zipPath}")
}
}
FileUtils.delete(zipFile.absolutePath)
return unzipPath.substring(FileUtils.getCachePath().length)
return ArchiveUtils.deCompress(zipPath).toString()
.substring(FileUtils.getCachePath().length)
}
/**

View File

@ -178,13 +178,7 @@ object BookHelp {
}
fun getImageSuffix(src: String): String {
var suffix = src.substringAfterLast(".").substringBefore(",")
//检查截取的后缀字符是否合法 [a-zA-Z0-9]
val fileSuffixRegex = Regex("^[a-z0-9]+$", RegexOption.IGNORE_CASE)
if (suffix.length > 5 || !suffix.matches(fileSuffixRegex)) {
suffix = "jpg"
}
return suffix
return UrlUtil.getSuffix(src, "jpg")
}
@Throws(IOException::class, FileNotFoundException::class)

View File

@ -2,7 +2,6 @@ package io.legado.app.lib.webdav
import io.legado.app.data.appDb
import io.legado.app.data.entities.Server.WebDavConfig
import io.legado.app.exception.NoStackTraceException
import okhttp3.Credentials
import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
@ -24,7 +23,7 @@ data class Authorization(
}
constructor(serverID: Long?): this("","") {
serverID ?: throw NoStackTraceException("Unexpected server ID")
serverID ?: throw WebDavException("Unexpected server ID")
appDb.serverDao.get(serverID)?.getWebDavConfig()?.run {
data = Credentials.basic(username, password, charset)
} ?: throw WebDavException("Unexpected WebDav Authorization")

View File

@ -266,16 +266,9 @@ object LocalBook {
/**
* 分析下载文件类书源的下载链接的文件后缀
* https://www.example.com/download/{fileName}.{type} 含有文件名和后缀
* https://www.example.com/download/?fileid=1234, {type: "txt"} 规则设置
*/
fun parseFileSuffix(url: String): String {
val analyzeUrl = AnalyzeUrl(url)
val urlNoOption = analyzeUrl.url
val lastPath = urlNoOption.substringAfterLast("/")
val fileType = lastPath.substringAfterLast(".")
val type = analyzeUrl.type
return type ?: fileType
return UrlUtil.getSuffix(url, "ext")
}
fun saveBookFile(
@ -336,10 +329,10 @@ object LocalBook {
// 兼容旧版链接
val webdav: WebDav = kotlin.runCatching {
WebDav.fromPath(webDavUrl)
}.onFailure {
}.getOrElse {
AppWebDav.defaultBookWebDav
?: throw WebDavException("Unexpected defaultBookWebDav")
}.getOrThrow()
}
val uri = runBlocking {
saveBookFile(webdav.downloadInputStream(), localBook.originName)
}

View File

@ -17,8 +17,7 @@ fun File.exists(vararg subDirFiles: String): Boolean {
@Throws(Exception::class)
fun File.listFileDocs(filter: FileDocFilter? = null): ArrayList<FileDoc> {
val docList = arrayListOf<FileDoc>()
listFiles()
listFiles()?.forEach {
listFiles {
val item = FileDoc(
it.name,
it.isDirectory,

View File

@ -1,5 +1,7 @@
package io.legado.app.utils
import java.util.regex.Pattern
object UrlUtil {
fun replaceReservedChar(text: String): String {
@ -24,5 +26,15 @@ object UrlUtil {
.replace("|", "%7C")
}
fun getSuffix(url: String, default: String): String {
val suffix = url.ubstringAfterLast(".").substringBeforeLast(",")
//检查截取的后缀字符是否合法 [a-zA-Z0-9]
val fileSuffixRegex = Regex("^[a-z0-9]+$", RegexOption.IGNORE_CASE)
return if (suffix.length > 5 || !suffix.matches(fileSuffixRegex)) {
default
} else {
suffix
}
}
}