mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
Merge branch 'master' into master
This commit is contained in:
@@ -1 +1 @@
|
||||
{"x86":"1fdeb6068adf33655ba73e703b744b36","armeabi-v7a":"ac543f4218fe1a679e09c510583d93fa","x86_64":"4c12de088cf2c51b754ceea224bb5cc9","arm64-v8a":"99784a12b0ff18d6b7752c7488626f5b","version":"99.0.4844.48"}
|
||||
{"x86":"1fdeb6068adf33655ba73e703b744b36","armeabi-v7a":"ac543f4218fe1a679e09c510583d93fa","x86_64":"4c12de088cf2c51b754ceea224bb5cc9","arm64-v8a":"99784a12b0ff18d6b7752c7488626f5b","version":"99.0.4844.48"}
|
||||
|
||||
@@ -26,8 +26,6 @@
|
||||
"paddingLeft": 22,
|
||||
"paddingRight": 22,
|
||||
"paddingTop": 5,
|
||||
"pageAnim": 3,
|
||||
"pageAnimEInk": 3,
|
||||
"paragraphIndent": " ",
|
||||
"paragraphSpacing": 6,
|
||||
"showFooterLine": true,
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
|
||||
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
|
||||
|
||||
**2022/03/06**
|
||||
|
||||
* 导入本地书籍界面添加排序功能
|
||||
* 修复txt最后一句不显示的bug
|
||||
|
||||
**2022/03/04**
|
||||
|
||||
* 更新cronet: 99.0.4844.48
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -1,3 +1,3 @@
|
||||
<!DOCTYPE html><html lang="en" style="padding: 0;height:100%"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="../favicon.ico" type="image/x-icon"><link rel="shortcut icon" href="../favicon.ico" type="image/x-icon"><title>Legado Bookshelf</title><link href="css/about.af6c5045.css" rel="prefetch"><link href="css/detail.f410d97f.css" rel="prefetch"><link href="js/about.ee7b2200.js" rel="prefetch"><link href="js/detail.4e45d3b6.js" rel="prefetch"><link href="css/app.e4c919b7.css" rel="preload" as="style"><link href="css/chunk-vendors.5f0f4fba.css" rel="preload" as="style"><link href="js/app.ff27f6a9.js" rel="preload" as="script"><link href="js/chunk-vendors.d2b07f8f.js" rel="preload" as="script"><link href="css/chunk-vendors.5f0f4fba.css" rel="stylesheet"><link href="css/app.e4c919b7.css" rel="stylesheet"></head><style>body::-webkit-scrollbar {
|
||||
<!DOCTYPE html><html lang="en" style="padding: 0;height:100%"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="../favicon.ico" type="image/x-icon"><link rel="shortcut icon" href="../favicon.ico" type="image/x-icon"><title>Legado Bookshelf</title><link href="css/about.af6c5045.css" rel="prefetch"><link href="css/detail.508547d2.css" rel="prefetch"><link href="js/about.3de69a08.js" rel="prefetch"><link href="js/detail.fdc516bb.js" rel="prefetch"><link href="css/app.e4c919b7.css" rel="preload" as="style"><link href="css/chunk-vendors.5f0f4fba.css" rel="preload" as="style"><link href="js/app.cf266357.js" rel="preload" as="script"><link href="js/chunk-vendors.d2b07f8f.js" rel="preload" as="script"><link href="css/chunk-vendors.5f0f4fba.css" rel="stylesheet"><link href="css/app.e4c919b7.css" rel="stylesheet"></head><style>body::-webkit-scrollbar {
|
||||
display: none;
|
||||
}</style><body style="margin: 0;height:100%"><noscript><strong>We're sorry but yd-web-tool doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.d2b07f8f.js"></script><script src="js/app.ff27f6a9.js"></script></body></html>
|
||||
}</style><body style="margin: 0;height:100%"><noscript><strong>We're sorry but yd-web-tool doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.d2b07f8f.js"></script><script src="js/app.cf266357.js"></script></body></html>
|
||||
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -10,7 +10,7 @@ object RuleComplete {
|
||||
private val notComplete = Regex("""^:|^##|\{\{|@js:|<js>|@Json:|\$\.""")
|
||||
|
||||
// 修正从图片获取信息
|
||||
private val fixImgInfo = Regex("""(?<=(^|tag\.|[\+/@>~| &]))img(?<at>\[@?.+\]|\.[-\w]+)?[@/]+text(\(\))?(?<seq>\&{2}|%%|\|{2}|$)""")
|
||||
private val fixImgInfo = Regex("""(?<=(^|tag\.|[\+/@>~| &]))img(?<at>(\[@?.+\]|\.[-\w]+)?)[@/]+text(\(\))?(?<seq>\&{2}|%%|\|{2}|$)""")
|
||||
|
||||
private val isXpath= Regex("^//|^@Xpath:")
|
||||
|
||||
@@ -34,15 +34,29 @@ object RuleComplete {
|
||||
if (rules.isNullOrEmpty()||rules.contains(notComplete) || preRule?.contains(notComplete) ?: false){
|
||||
return rules
|
||||
}
|
||||
// 分离正则
|
||||
val regexSplit=rules.split("##".toRegex(),2)
|
||||
val cleanedRule=regexSplit[0]
|
||||
val regexRule=if (regexSplit.size>1) "##"+regexSplit[1] else ""
|
||||
|
||||
/** 尾部##分割的正则或由,分割的参数 */
|
||||
val tailStr: String
|
||||
/** 分割字符 */
|
||||
val splitStr:String
|
||||
/** 用于获取文字时添加的规则 */
|
||||
val textRule: String
|
||||
/** 用于获取链接时添加的规则 */
|
||||
val linkRule: String
|
||||
/** 用于获取图片时添加的规则 */
|
||||
val imgRule: String
|
||||
/** 用于获取图片alt属性时添加的规则 */
|
||||
val imgText: String
|
||||
|
||||
// 分离尾部规则
|
||||
val regexSplit=rules.split("""##|,\{""".toRegex(),2)
|
||||
val cleanedRule=regexSplit[0]
|
||||
if (regexSplit.size>1){
|
||||
splitStr="""##|,\{""".toRegex().find(rules)?.value ?: ""
|
||||
tailStr = splitStr + regexSplit[1]
|
||||
}else{
|
||||
tailStr = ""
|
||||
}
|
||||
if (cleanedRule.contains(isXpath)){
|
||||
textRule = "//text()\${seq}"
|
||||
linkRule = "//@href\${seq}"
|
||||
@@ -55,9 +69,9 @@ object RuleComplete {
|
||||
imgText = "img\${at}@alt\${seq}"
|
||||
}
|
||||
return when (type) {
|
||||
1 -> needComplete.replace(cleanedRule, textRule).replace(fixImgInfo, imgText) + regexRule
|
||||
2 -> needComplete.replace(cleanedRule, linkRule) + regexRule
|
||||
3 -> needComplete.replace(cleanedRule, imgRule) + regexRule
|
||||
1 -> needComplete.replace(cleanedRule, textRule).replace(fixImgInfo, imgText) + tailStr
|
||||
2 -> needComplete.replace(cleanedRule, linkRule) + tailStr
|
||||
3 -> needComplete.replace(cleanedRule, imgRule) + tailStr
|
||||
else -> rules
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,10 +114,12 @@ class TextFile(private val book: Book) {
|
||||
).also { length = it } > 0
|
||||
) {
|
||||
var end = bufferStart + length
|
||||
for (i in bufferStart + length - 1 downTo 0) {
|
||||
if (buffer[i] == blank) {
|
||||
end = i
|
||||
break
|
||||
if (end == bufferSize) {
|
||||
for (i in bufferStart + length - 1 downTo 0) {
|
||||
if (buffer[i] == blank) {
|
||||
end = i
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
//将数据转换成String, 不能超过length
|
||||
|
||||
@@ -70,11 +70,30 @@ class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookV
|
||||
return super.onCompatCreateOptionsMenu(menu)
|
||||
}
|
||||
|
||||
override fun onMenuOpened(featureId: Int, menu: Menu): Boolean {
|
||||
menu.findItem(R.id.menu_sort_name)?.isChecked = viewModel.sort == 0
|
||||
menu.findItem(R.id.menu_sort_size)?.isChecked = viewModel.sort == 1
|
||||
menu.findItem(R.id.menu_sort_time)?.isChecked = viewModel.sort == 2
|
||||
return super.onMenuOpened(featureId, menu)
|
||||
}
|
||||
|
||||
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.menu_select_folder -> selectFolder.launch()
|
||||
R.id.menu_scan_folder -> scanFolder()
|
||||
R.id.menu_import_file_name -> alertImportFileName()
|
||||
R.id.menu_sort_name -> {
|
||||
viewModel.sort = 0
|
||||
upPath()
|
||||
}
|
||||
R.id.menu_sort_size -> {
|
||||
viewModel.sort = 1
|
||||
upPath()
|
||||
}
|
||||
R.id.menu_sort_time -> {
|
||||
viewModel.sort = 2
|
||||
upPath()
|
||||
}
|
||||
}
|
||||
return super.onCompatOptionsItemSelected(item)
|
||||
}
|
||||
@@ -205,7 +224,28 @@ class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookV
|
||||
else -> item.name.matches(bookFileRegex)
|
||||
}
|
||||
}
|
||||
docList.sortWith(compareBy({ !it.isDir }, { it.name }))
|
||||
when (viewModel.sort) {
|
||||
2 -> docList.sortWith(
|
||||
compareBy(
|
||||
{ !it.isDir },
|
||||
{ it.date },
|
||||
{ it.name }
|
||||
)
|
||||
)
|
||||
1 -> docList.sortWith(
|
||||
compareBy(
|
||||
{ !it.isDir },
|
||||
{ it.size },
|
||||
{ it.name }
|
||||
)
|
||||
)
|
||||
else -> docList.sortWith(
|
||||
compareBy(
|
||||
{ !it.isDir },
|
||||
{ it.name }
|
||||
)
|
||||
)
|
||||
}
|
||||
withContext(Main) {
|
||||
adapter.setItems(docList)
|
||||
}
|
||||
|
||||
@@ -14,6 +14,8 @@ import java.io.File
|
||||
|
||||
class ImportBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
|
||||
var sort = 0
|
||||
|
||||
fun addToBookshelf(uriList: HashSet<String>, finally: () -> Unit) {
|
||||
execute {
|
||||
uriList.forEach {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M14.94,4.66h-4.72l2.36,-2.36zM10.25,19.37h4.66l-2.33,2.33zM6.1,6.27L1.6,17.73h1.84l0.92,-2.45h5.11l0.92,2.45h1.84L7.74,6.27L6.1,6.27zM4.97,13.64l1.94,-5.18 1.94,5.18L4.97,13.64zM15.73,16.14h6.12v1.59h-8.53v-1.29l5.92,-8.56h-5.88v-1.6h8.3v1.26l-5.93,8.6z" />
|
||||
</vector>
|
||||
@@ -1,12 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:ignore="AlwaysShowAction">
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_select_folder"
|
||||
android:title="@string/select_folder"
|
||||
android:icon="@drawable/ic_folder_open"
|
||||
app:showAsAction="ifRoom" />
|
||||
android:title="@string/select_folder"
|
||||
app:showAsAction="always" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_sort"
|
||||
android:title="@string/sort"
|
||||
android:icon="@drawable/ic_sort"
|
||||
app:showAsAction="always">
|
||||
|
||||
<menu>
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_sort_name"
|
||||
android:checkable="true"
|
||||
android:title="@string/sort_by_name"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_sort_size"
|
||||
android:checkable="true"
|
||||
android:title="@string/sort_by_size"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_sort_time"
|
||||
android:checkable="true"
|
||||
android:title="@string/sort_by_time"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_scan_folder"
|
||||
|
||||
@@ -945,5 +945,6 @@
|
||||
<string name="enable_record">开启记录</string>
|
||||
<string name="copy_all">拷贝所有</string>
|
||||
<string name="auto_complete">自动补全</string>
|
||||
<string name="sort_by_size">大小排序</string>
|
||||
<!-- string end -->
|
||||
</resources>
|
||||
|
||||
@@ -948,5 +948,6 @@
|
||||
<string name="enable_record">开启记录</string>
|
||||
<string name="copy_all">拷贝所有</string>
|
||||
<string name="auto_complete">自动补全</string>
|
||||
<string name="sort_by_size">大小排序</string>
|
||||
<!-- string end -->
|
||||
</resources>
|
||||
|
||||
@@ -948,5 +948,6 @@
|
||||
<string name="enable_record">开启记录</string>
|
||||
<string name="copy_all">拷贝所有</string>
|
||||
<string name="auto_complete">自动补全</string>
|
||||
<string name="sort_by_size">大小排序</string>
|
||||
<!-- string end -->
|
||||
</resources>
|
||||
|
||||
@@ -941,9 +941,10 @@
|
||||
<string name="edit_content">编辑内容</string>
|
||||
<string name="chapter_change_source">单章换源</string>
|
||||
<string name="book_change_source">整书换源</string>
|
||||
<string name="sort_by_time">时间排序</string>
|
||||
<string name="sort_by_time">按时间排序</string>
|
||||
<string name="enable_record">开启记录</string>
|
||||
<string name="copy_all">拷贝所有</string>
|
||||
<string name="auto_complete">自动补全</string>
|
||||
<string name="sort_by_size">大小排序</string>
|
||||
<!-- string end -->
|
||||
</resources>
|
||||
|
||||
@@ -947,5 +947,6 @@
|
||||
<string name="enable_record">开启记录</string>
|
||||
<string name="copy_all">拷贝所有</string>
|
||||
<string name="auto_complete">自动补全</string>
|
||||
<string name="sort_by_size">大小排序</string>
|
||||
<!-- string end -->
|
||||
</resources>
|
||||
|
||||
@@ -947,5 +947,6 @@
|
||||
<string name="enable_record">开启记录</string>
|
||||
<string name="copy_all">拷贝所有</string>
|
||||
<string name="auto_complete">自动补全</string>
|
||||
<string name="sort_by_size">大小排序</string>
|
||||
<!-- string end -->
|
||||
</resources>
|
||||
|
||||
@@ -944,9 +944,10 @@
|
||||
<string name="edit_content">Edit Content</string>
|
||||
<string name="chapter_change_source">单章换源</string>
|
||||
<string name="book_change_source">整书换源</string>
|
||||
<string name="sort_by_time">时间排序</string>
|
||||
<string name="sort_by_time">Sort by time</string>
|
||||
<string name="enable_record">开启记录</string>
|
||||
<string name="copy_all">拷贝所有</string>
|
||||
<string name="auto_complete">自动补全</string>
|
||||
<string name="sort_by_size">Sort by size</string>
|
||||
<!-- string end -->
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user