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
|
||||
|
||||
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>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
app/src/main/assets/web/bookshelf/js/detail.fdc516bb.js
Normal file
1
app/src/main/assets/web/bookshelf/js/detail.fdc516bb.js
Normal file
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 {
|
||||
|
||||
10
app/src/main/res/drawable/ic_sort.xml
Normal file
10
app/src/main/res/drawable/ic_sort.xml
Normal file
@@ -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