From d4ff2d8fcbfb78e312bfc0f5590eec8a5957f986 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 31 Mar 2022 10:48:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/model/localBook/LocalBook.kt | 66 +++++++++---------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt index 0c46586eb..972e6fc24 100644 --- a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt +++ b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt @@ -16,12 +16,17 @@ import java.io.File import java.io.FileInputStream import java.io.FileNotFoundException import java.io.InputStream -import java.util.regex.Matcher import java.util.regex.Pattern import javax.script.SimpleBindings object LocalBook { + private val nameAuthorPatterns = arrayOf( + Pattern.compile("(.*?)《([^《》]+)》(.*)"), + Pattern.compile("(^)(.+) 作者:(.+)$"), + Pattern.compile("(^)(.+) by (.+)$") + ) + @Throws(FileNotFoundException::class, SecurityException::class) fun getBookInputStream(book: Book): InputStream { val uri = Uri.parse(book.bookUrl) @@ -117,44 +122,37 @@ object LocalBook { val tempFileName = fileName.substringBeforeLast(".") var name: String var author: String - //匹配(知轩藏书常用格式) 《书名》其它信息作者:作者名.txt - val m1 = Pattern - .compile("(.*?)《([^《》]+)》(.*)") - .matcher(tempFileName) - //匹配 书名 作者:作者名.txt - val m2 = Pattern - .compile("(^)(.+) 作者:(.+)$") - .matcher(tempFileName) - - (m1.takeIf { m1.find() } ?: m2.takeIf { m2.find() }).run { - if (this is Matcher) { - //按默认格式将文件名分解成书名、作者名 + for (pattern in nameAuthorPatterns) { + pattern.matcher(tempFileName).takeIf { it.find() }?.run { name = group(2)!! - author = BookHelp.formatBookAuthor((group(1) ?: "") + (group(3) ?: "")) - } else if (!AppConfig.bookImportFileName.isNullOrBlank()) { - try { - //在脚本中定义如何分解文件名成书名、作者名 - val jsonStr = AppConst.SCRIPT_ENGINE.eval( - //在用户脚本后添加捕获author、name的代码,只要脚本中author、name有值就会被捕获 - AppConfig.bookImportFileName + "\nJSON.stringify({author:author,name:name})", - //将文件名注入到脚步的src变量中 - SimpleBindings().also { it["src"] = tempFileName } - ).toString() - val bookMess = GSON.fromJsonObject>(jsonStr) - .getOrThrow() ?: HashMap() - name = bookMess["name"] ?: tempFileName - author = bookMess["author"]?.takeIf { it.length != tempFileName.length } ?: "" - } catch (e: Exception) { - name = BookHelp.formatBookName(tempFileName) - author = BookHelp.formatBookAuthor(tempFileName.replace(name, "")) - .takeIf { it.length != tempFileName.length } ?: "" - } - } else { + val group1 = group(1) ?: "" + val group3 = group(3) ?: "" + author = BookHelp.formatBookAuthor(group1 + group3) + return Pair(name, author) + } + } + if (!AppConfig.bookImportFileName.isNullOrBlank()) { + try { + //在脚本中定义如何分解文件名成书名、作者名 + val jsonStr = AppConst.SCRIPT_ENGINE.eval( + //在用户脚本后添加捕获author、name的代码,只要脚本中author、name有值就会被捕获 + AppConfig.bookImportFileName + "\nJSON.stringify({author:author,name:name})", + //将文件名注入到脚步的src变量中 + SimpleBindings().also { it["src"] = tempFileName } + ).toString() + val bookMess = GSON.fromJsonObject>(jsonStr) + .getOrThrow() ?: HashMap() + name = bookMess["name"] ?: tempFileName + author = bookMess["author"]?.takeIf { it.length != tempFileName.length } ?: "" + } catch (e: Exception) { name = BookHelp.formatBookName(tempFileName) author = BookHelp.formatBookAuthor(tempFileName.replace(name, "")) .takeIf { it.length != tempFileName.length } ?: "" } - + } else { + name = BookHelp.formatBookName(tempFileName) + author = BookHelp.formatBookAuthor(tempFileName.replace(name, "")) + .takeIf { it.length != tempFileName.length } ?: "" } return Pair(name, author) }