Merge pull request #2462 from qianfanguojin/master

docs: 添加对 WebDav 书籍使用的简明教程
pull/2468/head
Xwite 2 years ago committed by GitHub
commit 6bdcd057c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      app/src/main/assets/help/appHelp.md
  2. 60
      app/src/main/assets/help/webDavBookHelp.md
  3. 3
      app/src/main/java/io/legado/app/help/config/LocalConfig.kt
  4. 13
      app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt
  5. 5
      app/src/main/res/menu/book_remote.xml

@ -74,24 +74,31 @@
### 8. 为什么书源这么多,“发现”里却只有一点点?
书源想要在发现界面里显示需要在书源里添加发现规则,并不是所有书源都有发现规则。
## 本地书籍相关
## 本地/WebDav远程书籍相关
### 1. 目前阅读支持哪些格式的本地书籍?
目前支持 TXT 和 EPUB 格式。
### 2. 如何导入本地书籍?
在书架页面点击右上角“**⁝**”,选择“**添加本地**”,授予相关权限后即可导入本地书籍。也可在文件管理器中使用【阅读】打开相关书籍。
### 2. 如何导入本地/WebDav远程书籍?
本地:在书架页面点击右上角“**⁝**”,选择“**添加本地**”,授予相关权限后即可导入本地书籍。也可在文件管理器中使用【阅读】打开相关书籍。
### 3. 导入 TXT 文件提示“LoadTocError”或“List is empty”是怎么回事?
远程:在主页面点击右上角 “**⁝**”,选择 **WebDav书籍**,正确配置好后即可看到上传的远程书籍,点击 **加入书架** 按钮导入即可。
### 3. 如何上传本地书籍到 WebDav 远程?
长按本地书籍,进入书籍详情页,点击右上角 “**⁝**”,选择 **上传WebDav**,等待几秒后即可上传到远程。
或进入书籍缓存页面,点击右上角 “**⁝**”,选择 **导出到 WebDav**,在书籍导出时便可同时上传到远程。
### 4. 导入 TXT 文件提示“LoadTocError”或“List is empty”是怎么回事?
* 请先去应用详情中确认是否授予了【阅读】“读写手机存储”的权限。
* 自动识别目录失败,可能是相关目录规则未开启,请点击右上角的换源按钮手动更换目录规则。
如果尝试所有规则均无法识别,请在 GitHub 上提交 Issue 并附上相关 TXT 文件,也可以发送邮件至 i@qnmlgb.trade(标题:legado 本地文件章节无法识别;内容对其具体情况进行简要说明,附件上传相关 TXT 文件)。
### 4. 如何下载书籍到本地?
### 5. 如何下载书籍到本地?
把在线书籍加入到书架后,在书架页面点击右上角,选择“**离线缓存**”即可。
### 5. 如何自定义导出的 TXT 或 EPUB 文件名称?
### 6. 如何自定义导出的 TXT 或 EPUB 文件名称?
* 点击“**离线缓存**“——”**导出文件名**“
* 使用方法:
- 导出文件名支持 js 语法
@ -103,10 +110,10 @@
**【注】** *name、author 等变量与字符串的拼接都需要在 JSON 上下文环境中进行,即必须使用 `{}` 将变量与字符串包裹起来。*
### 6. 为什么我打开本地的 TXT 文件,显示内容却是乱码?
### 7. 为什么我打开本地的 TXT 文件,显示内容却是乱码?
部分编码在阅读上会识别错误,建议先用文本编辑器转换为常用的 UTF-8 格式。
### 7. 阅读对部分把正文(如所有含引号的句子)识别成标题,如何解决?
### 8. 阅读对部分把正文(如所有含引号的句子)识别成标题,如何解决?
点击右上角更换目录规则即可。
## 书籍界面相关

@ -0,0 +1,60 @@
# WebDav 书籍简明使用教程
> 本帮助页会在第一次进入时弹出,后续则不再出现,如想查看,请点击右上角 “**⁝**” > 帮助 查看此页。
虽然阅读主要是用来看网络小说的工具,但为了方便书友,也提供了一些本地书籍阅读的简单支持(epub、txt)
但阅读本地书籍的一个难题就是如何在多设备上同步阅读进度以及书籍,假如换了设备之后,原来设备上的本地书籍也要再次手动导入,不太方便。
阅读本身没有自己的服务器,没有类似多看、微信读书那种服务器存储的可能性,但是,阅读支持 WebDav 备份,那么我们也可以利用 WebDav 来同步书籍。
### 前提条件
1. 配置好书籍存储位置(WebDav书籍下载存储到的位置):依次点击我的/其他设置/书籍存储位置,选择书籍保存位置即可。
2. 配置好 WebDav 备份(WebDav书籍的保存位置):我的/备份与恢复/WebDav设置。这里需要配置 WebDav 备份的服务器地址、账号、密码。详细的配置方案这里不赘述,请看这篇文章:[坚果云注册与配置 · 语雀 (yuque.com)](https://www.yuque.com/legado/wiki/fkx510) 或点击该页面右上角的帮助按钮,查看配置方法。
### 上传书籍到 WebDav
配置好 WebDav 后,从主界面进入 WebDav 书籍页没有任何书籍显示,这是很正常的,因为我们WebDav的服务器上还没有任何书籍。
目前将书籍上传到 WebDav 的方式有三种:
1. App 上传已导入的本地书籍。
长按已导入的本地书籍进入书籍详情 > 右上角 “**⁝**” 找到 **上传 WebDav** ,点击,等待几秒后即可上传成功。
2. App 上传已缓存的网络书籍。
主界面右上角点击更多设置 > 点击缓存/导出,在此页面右上角 “**⁝**” 找到 **导出到 WebDav** 并勾选。那么在书籍导出的时候便会自动上传一份到 WebDav 服务器中。
3. 使用坚果云客户端/自建WebDav服务客户端上传。
对于大部分用户来说,App上传足够了,但有些用户书籍数量可能比较大,那么我们不建议您一本一本通过 App 上传,更好的方式是使用您所使用的 WebDav 服务的客户端批量上传。
假设我们使用的坚果云的 WebDav 服务,进入 [坚果云官网](https://www.jianguoyun.com/d/home#/) ,下载对应平台的客户端安装运行,找到文件夹目录 legado/books ,这里就是存放书籍的位置,您可以批量将书籍上传到该文件夹下。
**不管是使用上述的任何一种方式上传的书籍,为了确保上传无误,请您最好在上传书籍后进入 WebDav 书籍页 检查是否能看到已经上传的书籍。**
### 下载 WebDav 书籍到本地
与上传方式的多种多样不同,下载书籍到本地的方式比较朴素。
**WebDav 书籍页** 浏览已经上传的书籍,找到自己要下载的书籍,点击 **加入书架** 按钮,软件则会自动下载该书籍到本地并加入到书架中。
### 注意事项
- 如果使用的是坚果云的 WebDav 服务,免费流量限额对于同步App设置等以及 **少量的书籍** 足够了。但是如果是频繁需要上传/下载书籍的用户流量可能就不太够用了,请注意个人的用量,避免出现超出限额影响 App 设置等的同步。
### 常见问题
- 进入 **WebDav书籍页** 提示 "获取WebDav书籍出错 webDav 没有配置"。
> 这是因为没有配置 WebDav 同步服务,按照上文 前提条件 中提到的配置 Webdav 同步的方法配置好就行了。
- A 设备上传的本地书籍能否在 B 设备上看到,是否能够自动加到书架?
> 如果 A 设备和 B 设备配置了相同的 WebDav 服务,那么 B 在 **WebDav 书籍页** 就能看到 A 上传的书籍。但是无法直接在书架上看到该书籍,这个可能后续会想方案来做,目前必须自己在 **WebDav 书籍页** 找到该书籍手动点击 **加入书架** 导入才行。
- 本地书籍的阅读进度/书签等是否同步?
> 可以同步。

@ -36,6 +36,9 @@ object LocalConfig :
val bookSourcesHelpVersionIsLast: Boolean
get() = isLastVersion(1, "bookSourceHelpVersion", "firstOpenBookSources")
val webDavBookHelpVersionIsLast: Boolean
get() = isLastVersion(1, "webDavBookHelpVersion", "firstOpenWebDavBook")
val ruleHelpVersionIsLast: Boolean
get() = isLastVersion(1, "ruleHelpVersion")

@ -10,11 +10,13 @@ import androidx.core.view.isGone
import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R
import io.legado.app.databinding.ActivityImportBookBinding
import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.theme.backgroundColor
import io.legado.app.model.remote.RemoteBook
import io.legado.app.ui.about.AppLogDialog
import io.legado.app.ui.book.import.BaseImportBookActivity
import io.legado.app.ui.widget.SelectActionBar
import io.legado.app.ui.widget.dialog.TextDialog
import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.viewbindingdelegate.viewBinding
@ -55,6 +57,9 @@ class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Rem
binding.recyclerView.adapter = adapter
binding.selectActionBar.setMainActionText(R.string.add_to_shelf)
binding.selectActionBar.setCallBack(this)
if (!LocalConfig.webDavBookHelpVersionIsLast) {
showHelp("webDavBookHelp")
}
}
private fun sortCheck(sortKey: RemoteBookSort) {
@ -85,6 +90,7 @@ class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Rem
}
}
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.book_remote, menu)
return super.onCompatCreateOptionsMenu(menu)
@ -94,6 +100,7 @@ class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Rem
when (item.itemId) {
R.id.menu_refresh -> upPath()
R.id.menu_log -> showDialogFragment<AppLogDialog>()
R.id.menu_help -> showHelp("webDavBookHelp")
R.id.menu_sort_name -> {
item.isChecked = true
sortCheck(RemoteBookSort.Name)
@ -181,5 +188,9 @@ class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Rem
override fun upCountView() {
binding.selectActionBar.upCountView(adapter.selected.size, adapter.checkableCount)
}
private fun showHelp(fileName: String) {
//显示目录help下的帮助文档
val mdText = String(assets.open("help/${fileName}.md").readBytes())
showDialogFragment(TextDialog(mdText, TextDialog.Mode.MD))
}
}

@ -36,6 +36,11 @@
</item>
<item
android:id="@+id/menu_help"
android:icon="@drawable/ic_help"
android:title="@string/help"
app:showAsAction="never" />
<item
android:id="@+id/menu_log"
android:icon="@drawable/ic_cfg_about"

Loading…
Cancel
Save