From 22501e74da10fd4ba1052f443d5e7154a6bcd38e Mon Sep 17 00:00:00 2001
From: SplitGemini <764402868@qq.com>
Date: Thu, 24 Dec 2020 23:38:46 +0800
Subject: [PATCH 01/68] =?UTF-8?q?=E5=87=80=E5=8C=96=E6=9B=BF=E6=8D=A2?=
=?UTF-8?q?=E5=B8=AE=E5=8A=A9markdown=E6=98=BE=E7=A4=BA=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 3 +
app/src/main/assets/help/regexHelp.md | 175 +++---------------
.../legado/app/ui/widget/dialog/TextDialog.kt | 4 +
3 files changed, 33 insertions(+), 149 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 46101a548..7e1977da9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -97,6 +97,7 @@ android {
kotlinOptions {
jvmTarget = "1.8"
}
+ buildToolsVersion '30.0.3'
}
resourcePlaceholders {
@@ -195,6 +196,8 @@ dependencies {
//MarkDown
implementation 'io.noties.markwon:core:4.6.0'
implementation 'io.noties.markwon:image-glide:4.6.0'
+ implementation 'io.noties.markwon:ext-tables:4.6.0'
+ implementation 'io.noties.markwon:html:4.6.0'
//转换繁体
implementation 'com.hankcs:hanlp:portable-1.7.8'
diff --git a/app/src/main/assets/help/regexHelp.md b/app/src/main/assets/help/regexHelp.md
index a2e9b2502..8598c718a 100644
--- a/app/src/main/assets/help/regexHelp.md
+++ b/app/src/main/assets/help/regexHelp.md
@@ -30,18 +30,10 @@
## 1. 基本匹配
-正则表达式只是我们用于在文本中检索字母和数字的模式。例如正则表达式 `cat`,表示: 字母 `c` 后面跟着一个字母 `a`,再后面跟着一个字母 `t`。
-
-
-"cat" => The cat sat on the mat
-
+正则表达式只是我们用于在文本中检索字母和数字的模式。例如正则表达式 `cat`,表示: 字母 `c` 后面跟着一个字母 `a`,再后面跟着一个字母 `t`。"cat" => The cat sat on the mat
正则表达式 `123` 会匹配字符串 "123"。通过将正则表达式中的每个字符逐个与要匹配的字符串中的每个字符进行比较,来完成正则匹配。
-正则表达式通常区分大小写,因此正则表达式 `Cat` 与字符串 "cat" 不匹配。
-
-
-"Cat" => The cat sat on the Cat
-
+正则表达式通常区分大小写,因此正则表达式 `Cat` 与字符串 "cat" 不匹配。"Cat" => The cat sat on the Cat
## 2. 元字符
@@ -66,35 +58,19 @@
## 2.1 英文句号
英文句号 `.` 是元字符的最简单的例子。元字符 `.` 可以匹配任意单个字符。它不会匹配换行符和新行的字符。例如正则表达式 `.ar`,表示: 任意字符后面跟着一个字母 `a`,
-再后面跟着一个字母 `r`。
-
-
-".ar" => The car parked in the garage.
-
+再后面跟着一个字母 `r`。".ar" => The car parked in the garage.
## 2.2 字符集
字符集也称为字符类。方括号被用于指定字符集。使用字符集内的连字符来指定字符范围。方括号内的字符范围的顺序并不重要。
-例如正则表达式 `[Tt]he`,表示: 大写 `T` 或小写 `t` ,后跟字母 `h`,再后跟字母 `e`。
-
-
-"[Tt]he" => The car parked in the garage.
-
+例如正则表达式 `[Tt]he`,表示: 大写 `T` 或小写 `t` ,后跟字母 `h`,再后跟字母 `e`。"[Tt]he" => The car parked in the garage.
-然而,字符集中的英文句号表示它字面的含义。正则表达式 `ar[.]`,表示小写字母 `a`,后面跟着一个字母 `r`,再后面跟着一个英文句号 `.` 字符。
-
-
-"ar[.]" => A garage is a good place to park a car.
-
+然而,字符集中的英文句号表示它字面的含义。正则表达式 `ar[.]`,表示小写字母 `a`,后面跟着一个字母 `r`,再后面跟着一个英文句号 `.` 字符。"ar[.]" => A garage is a good place to park a car.
### 2.2.1 否定字符集
一般来说插入字符 `^` 表示一个字符串的开始,但是当它在方括号内出现时,它会取消字符集。例如正则表达式 `[^c]ar`,表示: 除了字母 `c` 以外的任意字符,后面跟着字符 `a`,
-再后面跟着一个字母 `r`。
-
-
-"[^c]ar" => The car parked in the garage.
-
+再后面跟着一个字母 `r`。"[^c]ar" => The car parked in the garage.
## 2.3 重复
@@ -103,85 +79,42 @@
### 2.3.1 星号
该符号 `*` 表示匹配上一个匹配规则的零次或多次。正则表达式 `a*` 表示小写字母 `a` 可以重复零次或者多次。但是它如果出现在字符集或者字符类之后,它表示整个字符集的重复。
-例如正则表达式 `[a-z]*`,表示: 一行中可以包含任意数量的小写字母。
-
-
-"[a-z]*" => The car parked in the garage #21.
-
+例如正则表达式 `[a-z]*`,表示: 一行中可以包含任意数量的小写字母。"[a-z]*" => The car parked in the garage #21.
该 `*` 符号可以与元符号 `.` 用在一起,用来匹配任意字符串 `.*`。该 `*` 符号可以与空格符 `\s` 一起使用,用来匹配一串空格字符。
-例如正则表达式 `\s*cat\s*`,表示: 零个或多个空格,后面跟小写字母 `c`,再后面跟小写字母 `a`,再再后面跟小写字母 `t`,后面再跟零个或多个空格。
-
-
-"\s*cat\s*" => The fat cat sat on the cat.
-
+例如正则表达式 `\s*cat\s*`,表示: 零个或多个空格,后面跟小写字母 `c`,再后面跟小写字母 `a`,再再后面跟小写字母 `t`,后面再跟零个或多个空格。"\s*cat\s*" => The fat cat sat on the cat.
### 2.3.2 加号
-该符号 `+` 匹配上一个字符的一次或多次。例如正则表达式 `c.+t`,表示: 一个小写字母 `c`,后跟任意数量的字符,后跟小写字母 `t`。
-
-
-"c.+t" => The fat cat sat on the mat.
-
+该符号 `+` 匹配上一个字符的一次或多次。例如正则表达式 `c.+t`,表示: 一个小写字母 `c`,后跟任意数量的字符,后跟小写字母 `t`。"c.+t" => The fat cat sat on the mat.
### 2.3.3 问号
在正则表达式中,元字符 `?` 用来表示前一个字符是可选的。该符号匹配前一个字符的零次或一次。
-例如正则表达式 `[T]?he`,表示: 可选的大写字母 `T`,后面跟小写字母 `h`,后跟小写字母 `e`。
-
-
-"[T]he" => The car is parked in the garage.
-
-
-"[T]?he" => The car is parked in the garage.
-
+例如正则表达式 `[T]?he`,表示: 可选的大写字母 `T`,后面跟小写字母 `h`,后跟小写字母 `e`。"[T]he" => The car is parked in the garage.
"[T]?he" => The car is parked in the garage.
## 2.4 花括号
-在正则表达式中花括号(也被称为量词 ?)用于指定字符或一组字符可以重复的次数。例如正则表达式 `[0-9]{2,3}`,表示: 匹配至少2位数字但不超过3位(0到9范围内的字符)。
-
-
-"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
-
-
-我们可以省略第二个数字。例如正则表达式 `[0-9]{2,}`,表示: 匹配2个或更多个数字。如果我们也删除逗号,则正则表达式 `[0-9]{2}`,表示: 匹配正好为2位数的数字。
+在正则表达式中花括号(也被称为量词 ?)用于指定字符或一组字符可以重复的次数。例如正则表达式 `[0-9]{2,3}`,表示: 匹配至少2位数字但不超过3位(0到9范围内的字符)。"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
-
-"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
-
-
-
-"[0-9]{2}" => The number was 9.9997 but we rounded it off to 10.0.
-
+我们可以省略第二个数字。例如正则表达式 `[0-9]{2,}`,表示: 匹配2个或更多个数字。如果我们也删除逗号,则正则表达式 `[0-9]{2}`,表示: 匹配正好为2位数的数字。"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
"[0-9]{2}" => The number was 9.9997 but we rounded it off to 10.0.
## 2.5 字符组
字符组是一组写在圆括号内的子模式 `(...)`。正如我们在正则表达式中讨论的那样,如果我们把一个量词放在一个字符之后,它会重复前一个字符。
但是,如果我们把量词放在一个字符组之后,它会重复整个字符组。
-例如正则表达式 `(ab)*` 表示匹配零个或多个的字符串 "ab"。我们还可以在字符组中使用元字符 `|`。例如正则表达式 `(c|g|p)ar`,表示: 小写字母 `c`、`g` 或 `p` 后面跟字母 `a`,后跟字母 `r`。
-
-
-"(c|g|p)ar" => The car is parked in the garage.
-
+例如正则表达式 `(ab)*` 表示匹配零个或多个的字符串 "ab"。我们还可以在字符组中使用元字符 `|`。例如正则表达式 `(c|g|p)ar`,表示: 小写字母 `c`、`g` 或 `p` 后面跟字母 `a`,后跟字母 `r`。"(c|g|p)ar" => The car is parked in the garage.
## 2.6 分支结构
在正则表达式中垂直条 `|` 用来定义分支结构,分支结构就像多个表达式之间的条件。现在你可能认为这个字符集和分支机构的工作方式一样。
但是字符集和分支结构巨大的区别是字符集只在字符级别上有作用,然而分支结构在表达式级别上依然可以使用。
-例如正则表达式 `(T|t)he|car`,表示: 大写字母 `T` 或小写字母 `t`,后面跟小写字母 `h`,后跟小写字母 `e` 或小写字母 `c`,后跟小写字母 `a`,后跟小写字母 `r`。
-
-
-"(T|t)he|car" => The car is parked in the garage.
-
+例如正则表达式 `(T|t)he|car`,表示: 大写字母 `T` 或小写字母 `t`,后面跟小写字母 `h`,后跟小写字母 `e` 或小写字母 `c`,后跟小写字母 `a`,后跟小写字母 `r`。"(T|t)he|car" => The car is parked in the garage.
## 2.7 转义特殊字符
正则表达式中使用反斜杠 `\` 来转义下一个字符。这将允许你使用保留字符来作为匹配字符 `{ } [ ] / \ + * . $ ^ | ?`。在特殊字符前面加 `\`,就可以使用它来做匹配字符。
-例如正则表达式 `.` 是用来匹配除了换行符以外的任意字符。现在要在输入字符串中匹配 `.` 字符,正则表达式 `(f|c|m)at\.?`,表示: 小写字母 `f`、`c` 或者 `m` 后跟小写字母 `a`,后跟小写字母 `t`,后跟可选的 `.` 字符。
-
-
-"(f|c|m)at\.?" => The fat cat sat on the mat.
-
+例如正则表达式 `.` 是用来匹配除了换行符以外的任意字符。现在要在输入字符串中匹配 `.` 字符,正则表达式 `(f|c|m)at\.?`,表示: 小写字母 `f`、`c` 或者 `m` 后跟小写字母 `a`,后跟小写字母 `t`,后跟可选的 `.` 字符。"(f|c|m)at\.?" => The fat cat sat on the mat.
## 2.8 定位符
@@ -192,27 +125,11 @@
插入符号 `^` 符号用于检查匹配字符是否是输入字符串的第一个字符。如果我们使用正则表达式 `^a` (如果a是起始符号)匹配字符串 `abc`,它会匹配到 `a`。
但是如果我们使用正则表达式 `^b`,它是匹配不到任何东西的,因为在字符串 `abc` 中 "b" 不是起始字符。
-让我们来看看另一个正则表达式 `^(T|t)he`,这表示: 大写字母 `T` 或小写字母 `t` 是输入字符串的起始符号,后面跟着小写字母 `h`,后跟小写字母 `e`。
-
-
-"(T|t)he" => The car is parked in the garage.
-
-
-
-"^(T|t)he" => The car is parked in the garage.
-
+让我们来看看另一个正则表达式 `^(T|t)he`,这表示: 大写字母 `T` 或小写字母 `t` 是输入字符串的起始符号,后面跟着小写字母 `h`,后跟小写字母 `e`。"(T|t)he" => The car is parked in the garage.
"^(T|t)he" => The car is parked in the garage.
### 2.8.2 美元符号
-美元 `$` 符号用于检查匹配字符是否是输入字符串的最后一个字符。例如正则表达式 `(at\.)$`,表示: 小写字母 `a`,后跟小写字母 `t`,后跟一个 `.` 字符,且这个匹配器必须是字符串的结尾。
-
-
-"(at\.)" => The fat cat. sat. on the mat.
-
-
-
-"(at\.)$" => The fat cat sat on the mat.
-
+美元 `$` 符号用于检查匹配字符是否是输入字符串的最后一个字符。例如正则表达式 `(at\.)$`,表示: 小写字母 `a`,后跟小写字母 `t`,后跟一个 `.` 字符,且这个匹配器必须是字符串的结尾。"(at\.)" => The fat cat. sat. on the mat.
"(at\.)$" => The fat cat sat on the mat.
## 3. 简写字符集
@@ -246,37 +163,21 @@
正向先行断言认为第一部分的表达式必须是先行断言表达式。返回的匹配结果仅包含与第一部分表达式匹配的文本。
要在一个括号内定义一个正向先行断言,在括号中问号和等号是这样使用的 `(?=...)`。先行断言表达式写在括号中的等号后面。
例如正则表达式 `(T|t)he(?=\sfat)`,表示: 匹配大写字母 `T` 或小写字母 `t`,后面跟字母 `h`,后跟字母 `e`。
-在括号中,我们定义了正向先行断言,它会引导正则表达式引擎匹配 `The` 或 `the` 后面跟着 `fat`。
-
-
-"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
-
+在括号中,我们定义了正向先行断言,它会引导正则表达式引擎匹配 `The` 或 `the` 后面跟着 `fat`。"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
### 4.2 负向先行断言
当我们需要从输入字符串中获取不匹配表达式的内容时,使用负向先行断言。负向先行断言的定义跟我们定义的正向先行断言一样,
唯一的区别是不是等号 `=`,我们使用否定符号 `!`,例如 `(?!...)`。
-我们来看看下面的正则表达式 `(T|t)he(?!\sfat)`,表示: 从输入字符串中获取全部 `The` 或者 `the` 且不匹配 `fat` 前面加上一个空格字符。
-
-
-"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
-
+我们来看看下面的正则表达式 `(T|t)he(?!\sfat)`,表示: 从输入字符串中获取全部 `The` 或者 `the` 且不匹配 `fat` 前面加上一个空格字符。"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
### 4.3 正向后行断言
-正向后行断言是用于获取在特定模式之前的所有匹配内容。正向后行断言表示为 `(?<=...)`。例如正则表达式 `(?<=(T|t)he\s)(fat|mat)`,表示: 从输入字符串中获取在单词 `The` 或 `the` 之后的所有 `fat` 和 `mat` 单词。
-
-
-"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
-
+正向后行断言是用于获取在特定模式之前的所有匹配内容。正向后行断言表示为 `(?<=...)`。例如正则表达式 `(?<=(T|t)he\s)(fat|mat)`,表示: 从输入字符串中获取在单词 `The` 或 `the` 之后的所有 `fat` 和 `mat` 单词。"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
### 4.4 负向后行断言
-负向后行断言是用于获取不在特定模式之前的所有匹配的内容。负向后行断言表示为 `(?
-"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
-
+负向后行断言是用于获取不在特定模式之前的所有匹配的内容。负向后行断言表示为 `(?"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
## 5. 标记
@@ -291,46 +192,22 @@
### 5.1 不区分大小写
`i` 修饰符用于执行不区分大小写匹配。例如正则表达式 `/The/gi`,表示: 大写字母 `T`,后跟小写字母 `h`,后跟字母 `e`。
-但是在正则匹配结束时 `i` 标记会告诉正则表达式引擎忽略这种情况。正如你所看到的,我们还使用了 `g` 标记,因为我们要在整个输入字符串中搜索匹配。
-
-
-"The" => The fat cat sat on the mat.
-
-
-
-"/The/gi" => The fat cat sat on the mat.
-
+但是在正则匹配结束时 `i` 标记会告诉正则表达式引擎忽略这种情况。正如你所看到的,我们还使用了 `g` 标记,因为我们要在整个输入字符串中搜索匹配。"The" => The fat cat sat on the mat.
"/The/gi" => The fat cat sat on the mat.
### 5.2 全局搜索
`g` 修饰符用于执行全局匹配 (会查找所有匹配,不会在查找到第一个匹配时就停止)。
例如正则表达式 `/.(at)/g`,表示: 除换行符之外的任意字符,后跟小写字母 `a`,后跟小写字母 `t`。
-因为我们在正则表达式的末尾使用了 `g` 标记,它会从整个输入字符串中找到每个匹配项。
-
-
-".(at)" => The fat cat sat on the mat.
-
-
-
-"/.(at)/g" => The fat cat sat on the mat.
-
+因为我们在正则表达式的末尾使用了 `g` 标记,它会从整个输入字符串中找到每个匹配项。".(at)" => The fat cat sat on the mat.
"/.(at)/g" => The fat cat sat on the mat.
### 5.3 多行匹配
`m` 修饰符被用来执行多行的匹配。正如我们前面讨论过的 `(^, $)`,使用定位符来检查匹配字符是输入字符串开始或者结束。但是我们希望每一行都使用定位符,所以我们就使用 `m` 修饰符。
-例如正则表达式 `/at(.)?$/gm`,表示: 小写字母 `a`,后跟小写字母 `t`,匹配除了换行符以外任意字符零次或一次。而且因为 `m` 标记,现在正则表达式引擎匹配字符串中每一行的末尾。
-
-
-"/.at(.)?$/" => The fat
+例如正则表达式 `/at(.)?$/gm`,表示: 小写字母 `a`,后跟小写字母 `t`,匹配除了换行符以外任意字符零次或一次。而且因为 `m` 标记,现在正则表达式引擎匹配字符串中每一行的末尾。"/.at(.)?$/" => The fat
cat sat
- on the mat.
-
-
-
-"/.at(.)?$/gm" => The fat
+ on the mat.
"/.at(.)?$/gm" => The fat
cat sat
- on the mat.
-
+ on the mat.
## 常用正则表达式
diff --git a/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt b/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt
index ea4330039..3c8133c8a 100644
--- a/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt
+++ b/app/src/main/java/io/legado/app/ui/widget/dialog/TextDialog.kt
@@ -12,6 +12,8 @@ import io.legado.app.utils.getSize
import io.legado.app.utils.viewbindingdelegate.viewBinding
import io.noties.markwon.Markwon
import io.noties.markwon.image.glide.GlideImagesPlugin
+import io.noties.markwon.ext.tables.TablePlugin
+import io.noties.markwon.html.HtmlPlugin
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@@ -66,6 +68,8 @@ class TextDialog : BaseDialogFragment() {
MD -> binding.textView.post {
Markwon.builder(requireContext())
.usePlugin(GlideImagesPlugin.create(requireContext()))
+ .usePlugin(HtmlPlugin.create())
+ .usePlugin(TablePlugin.create(requireContext()))
.build()
.setMarkdown(binding.textView, content)
}
From e549030bfc39b9cd6a1cfa4939cc8be9615d4985 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sat, 26 Dec 2020 17:21:00 +0800
Subject: [PATCH 02/68] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=8A=B6=E6=80=81?=
=?UTF-8?q?=E6=A0=8Fbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/values/styles.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 40ce850fd..2791783b5 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -33,7 +33,6 @@
- @style/Style.PopupMenu
- @color/transparent
- true
- - false
- false
From dae57c41356393aeb50a0b82f623fa101a445f65 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sat, 26 Dec 2020 20:52:39 +0800
Subject: [PATCH 03/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=99=E8=AF=AF?=
=?UTF-8?q?=E6=8F=90=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/io/legado/app/help/JsExtensions.kt | 11 ++++++-----
.../java/io/legado/app/help/http/parser/TextParser.kt | 2 +-
.../io/legado/app/model/analyzeRule/AnalyzeRule.kt | 11 ++++++-----
3 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt
index aa6865aed..971f580e9 100644
--- a/app/src/main/java/io/legado/app/help/JsExtensions.kt
+++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt
@@ -29,13 +29,14 @@ interface JsExtensions {
* 访问网络,返回String
*/
fun ajax(urlStr: String): String? {
- return try {
- val analyzeUrl = AnalyzeUrl(urlStr)
- runBlocking {
+ return runBlocking {
+ try {
+ val analyzeUrl = AnalyzeUrl(urlStr)
analyzeUrl.getStrResponse(urlStr).body
+ } catch (e: Exception) {
+ e.printStackTrace()
+ e.msg
}
- } catch (e: Exception) {
- e.msg
}
}
diff --git a/app/src/main/java/io/legado/app/help/http/parser/TextParser.kt b/app/src/main/java/io/legado/app/help/http/parser/TextParser.kt
index 09891944d..031ad9d33 100644
--- a/app/src/main/java/io/legado/app/help/http/parser/TextParser.kt
+++ b/app/src/main/java/io/legado/app/help/http/parser/TextParser.kt
@@ -8,7 +8,7 @@ import rxhttp.wrapper.exception.HttpStatusCodeException
import java.nio.charset.Charset
@Parser(name = "Text")
-class TextParser(val encode: String? = null) : rxhttp.wrapper.parse.Parser {
+class TextParser(private val encode: String? = null) : rxhttp.wrapper.parse.Parser {
override fun onParse(response: Response): String {
diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt
index 7a778472e..6fc8e2146 100644
--- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt
+++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt
@@ -653,13 +653,14 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
* js实现跨域访问,不能删
*/
override fun ajax(urlStr: String): String? {
- return try {
- val analyzeUrl = AnalyzeUrl(urlStr, book = book)
- runBlocking {
+ return runBlocking {
+ try {
+ val analyzeUrl = AnalyzeUrl(urlStr, book = book)
analyzeUrl.getStrResponse(urlStr).body
+ } catch (e: Exception) {
+ e.printStackTrace()
+ e.msg
}
- } catch (e: Exception) {
- e.localizedMessage
}
}
From 0d42bec7e184b40c56b18bc8ba5f54f249b272ea Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sun, 27 Dec 2020 14:45:18 +0800
Subject: [PATCH 04/68] update updateLog.md
---
app/src/main/assets/updateLog.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md
index f89732b07..61af073cf 100644
--- a/app/src/main/assets/updateLog.md
+++ b/app/src/main/assets/updateLog.md
@@ -3,6 +3,10 @@
* 关注合作公众号 **[小说拾遗]** 获取好看的小说。
* 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。
+**2020/12/27**
+* 订阅添加搜索和分组
+* 修复部分手机状态栏bug
+
**2020/12/19**
* 书签转移到文本菜单里,会记录选择的文本和位置
* 订阅源添加单url选项,直接打开url
From b6ee1cc503da6d770fb2ae1381e187115bb27f90 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sun, 27 Dec 2020 14:53:52 +0800
Subject: [PATCH 05/68] update updateLog.md
---
app/src/main/assets/updateLog.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md
index 61af073cf..75bf8b4ea 100644
--- a/app/src/main/assets/updateLog.md
+++ b/app/src/main/assets/updateLog.md
@@ -6,6 +6,7 @@
**2020/12/27**
* 订阅添加搜索和分组
* 修复部分手机状态栏bug
+* 单url订阅支持内容规则和样式
**2020/12/19**
* 书签转移到文本菜单里,会记录选择的文本和位置
From f259380aaffbde6113fe90c3df75681c8d6d0978 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sun, 27 Dec 2020 15:19:30 +0800
Subject: [PATCH 06/68] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../app/base/adapter/DiffRecyclerAdapter.kt | 24 ++++--
.../app/base/adapter/RecyclerAdapter.kt | 81 ++++++++++++-------
2 files changed, 69 insertions(+), 36 deletions(-)
diff --git a/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt
index 258f93c87..9f9a69dc2 100644
--- a/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt
+++ b/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt
@@ -47,39 +47,46 @@ abstract class DiffRecyclerAdapter- (protected val context
recyclerView.adapter = this
}
+ @Synchronized
fun setItems(items: List
- ?) {
- synchronized(lock) {
+ kotlin.runCatching {
asyncListDiffer.submitList(items)
}
}
+ @Synchronized
fun setItem(position: Int, item: ITEM) {
- synchronized(lock) {
+ kotlin.runCatching {
val list = ArrayList(asyncListDiffer.currentList)
list[position] = item
asyncListDiffer.submitList(list)
}
}
- fun updateItem(item: ITEM) =
- synchronized(lock) {
+ @Synchronized
+ fun updateItem(item: ITEM) {
+ kotlin.runCatching {
val index = asyncListDiffer.currentList.indexOf(item)
if (index >= 0) {
asyncListDiffer.currentList[index] = item
notifyItemChanged(index)
}
}
+ }
- fun updateItem(position: Int, payload: Any) =
- synchronized(lock) {
+ @Synchronized
+ fun updateItem(position: Int, payload: Any) {
+ kotlin.runCatching {
val size = itemCount
if (position in 0 until size) {
notifyItemChanged(position, payload)
}
}
+ }
- fun updateItems(fromPosition: Int, toPosition: Int, payloads: Any) =
- synchronized(lock) {
+ @Synchronized
+ fun updateItems(fromPosition: Int, toPosition: Int, payloads: Any) {
+ kotlin.runCatching {
val size = itemCount
if (fromPosition in 0 until size && toPosition in 0 until size) {
notifyItemRangeChanged(
@@ -89,6 +96,7 @@ abstract class DiffRecyclerAdapter
- (protected val context
)
}
}
+ }
fun isEmpty() = asyncListDiffer.currentList.isEmpty()
diff --git a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
index 7ddbaf581..9815a6516 100644
--- a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
+++ b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
@@ -45,42 +45,49 @@ abstract class RecyclerAdapter
- (protected val context: Co
recyclerView.adapter = this
}
+ @Synchronized
fun addHeaderView(header: ((parent: ViewGroup) -> ViewBinding)) {
- synchronized(lock) {
+ kotlin.runCatching {
val index = headerItems.size()
headerItems.put(TYPE_HEADER_VIEW + headerItems.size(), header)
notifyItemInserted(index)
}
}
- fun addFooterView(footer: ((parent: ViewGroup) -> ViewBinding)) =
- synchronized(lock) {
+ @Synchronized
+ fun addFooterView(footer: ((parent: ViewGroup) -> ViewBinding)) {
+ kotlin.runCatching {
val index = getActualItemCount() + footerItems.size()
footerItems.put(TYPE_FOOTER_VIEW + footerItems.size(), footer)
notifyItemInserted(index)
}
+ }
-
- fun removeHeaderView(header: ((parent: ViewGroup) -> ViewBinding)) =
- synchronized(lock) {
+ @Synchronized
+ fun removeHeaderView(header: ((parent: ViewGroup) -> ViewBinding)) {
+ kotlin.runCatching {
val index = headerItems.indexOfValue(header)
if (index >= 0) {
headerItems.remove(index)
notifyItemRemoved(index)
}
}
+ }
- fun removeFooterView(footer: ((parent: ViewGroup) -> ViewBinding)) =
- synchronized(lock) {
+ @Synchronized
+ fun removeFooterView(footer: ((parent: ViewGroup) -> ViewBinding)) {
+ kotlin.runCatching {
val index = footerItems.indexOfValue(footer)
if (index >= 0) {
footerItems.remove(index)
notifyItemRemoved(getActualItemCount() + index - 2)
}
}
+ }
+ @Synchronized
fun setItems(items: List
- ?) {
- synchronized(lock) {
+ kotlin.runCatching {
if (this.items.isNotEmpty()) {
this.items.clear()
}
@@ -92,8 +99,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun setItems(items: List
- ?, diffResult: DiffUtil.DiffResult) {
- synchronized(lock) {
+ kotlin.runCatching {
if (this.items.isNotEmpty()) {
this.items.clear()
}
@@ -105,8 +113,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun setItem(position: Int, item: ITEM) {
- synchronized(lock) {
+ kotlin.runCatching {
val oldSize = getActualItemCount()
if (position in 0 until oldSize) {
this.items[position] = item
@@ -116,8 +125,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun addItem(item: ITEM) {
- synchronized(lock) {
+ kotlin.runCatching {
val oldSize = getActualItemCount()
if (this.items.add(item)) {
notifyItemInserted(oldSize + getHeaderCount())
@@ -126,8 +136,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun addItems(position: Int, newItems: List
- ) {
- synchronized(lock) {
+ kotlin.runCatching {
if (this.items.addAll(position, newItems)) {
notifyItemRangeInserted(position + getHeaderCount(), newItems.size)
}
@@ -135,8 +146,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun addItems(newItems: List
- ) {
- synchronized(lock) {
+ kotlin.runCatching {
val oldSize = getActualItemCount()
if (this.items.addAll(newItems)) {
if (oldSize == 0 && getHeaderCount() == 0) {
@@ -149,8 +161,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun removeItem(position: Int) {
- synchronized(lock) {
+ kotlin.runCatching {
if (this.items.removeAt(position) != null) {
notifyItemRemoved(position + getHeaderCount())
}
@@ -158,8 +171,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun removeItem(item: ITEM) {
- synchronized(lock) {
+ kotlin.runCatching {
if (this.items.remove(item)) {
notifyItemRemoved(this.items.indexOf(item) + getHeaderCount())
}
@@ -167,8 +181,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun removeItems(items: List
- ) {
- synchronized(lock) {
+ kotlin.runCatching {
if (this.items.removeAll(items)) {
notifyDataSetChanged()
}
@@ -176,8 +191,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
+ @Synchronized
fun swapItem(oldPosition: Int, newPosition: Int) {
- synchronized(lock) {
+ kotlin.runCatching {
val size = getActualItemCount()
if (oldPosition in 0 until size && newPosition in 0 until size) {
val srcPosition = oldPosition + getHeaderCount()
@@ -189,8 +205,9 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
}
- fun updateItem(item: ITEM) =
- synchronized(lock) {
+ @Synchronized
+ fun updateItem(item: ITEM) {
+ kotlin.runCatching {
val index = this.items.indexOf(item)
if (index >= 0) {
this.items[index] = item
@@ -198,17 +215,21 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
onCurrentListChanged()
}
+ }
- fun updateItem(position: Int, payload: Any) =
- synchronized(lock) {
+ @Synchronized
+ fun updateItem(position: Int, payload: Any) {
+ kotlin.runCatching {
val size = getActualItemCount()
if (position in 0 until size) {
notifyItemChanged(position + getHeaderCount(), payload)
}
}
+ }
- fun updateItems(fromPosition: Int, toPosition: Int, payloads: Any) =
- synchronized(lock) {
+ @Synchronized
+ fun updateItems(fromPosition: Int, toPosition: Int, payloads: Any) {
+ kotlin.runCatching {
val size = getActualItemCount()
if (fromPosition in 0 until size && toPosition in 0 until size) {
notifyItemRangeChanged(
@@ -218,11 +239,15 @@ abstract class RecyclerAdapter
- (protected val context: Co
)
}
}
+ }
- fun clearItems() = synchronized(lock) {
- this.items.clear()
- notifyDataSetChanged()
- onCurrentListChanged()
+ @Synchronized
+ fun clearItems() {
+ kotlin.runCatching {
+ this.items.clear()
+ notifyDataSetChanged()
+ onCurrentListChanged()
+ }
}
fun isEmpty() = items.isEmpty()
From 7cbb2038d216a58f39badd67ebae708321072d3a Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sun, 27 Dec 2020 15:30:15 +0800
Subject: [PATCH 07/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt | 2 --
app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt | 2 --
2 files changed, 4 deletions(-)
diff --git a/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt
index 9f9a69dc2..60d3600ed 100644
--- a/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt
+++ b/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt
@@ -26,8 +26,6 @@ abstract class DiffRecyclerAdapter
- (protected val context
}
}
- private val lock = Object()
-
private var itemClickListener: ((holder: ItemViewHolder, item: ITEM) -> Unit)? = null
private var itemLongClickListener: ((holder: ItemViewHolder, item: ITEM) -> Boolean)? = null
diff --git a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
index 9815a6516..1f374acdf 100644
--- a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
+++ b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
@@ -26,8 +26,6 @@ abstract class RecyclerAdapter
- (protected val context: Co
private val items: MutableList
- = mutableListOf()
- private val lock = Object()
-
private var itemClickListener: ((holder: ItemViewHolder, item: ITEM) -> Unit)? = null
private var itemLongClickListener: ((holder: ItemViewHolder, item: ITEM) -> Boolean)? = null
From 26f17a1341a1fb0bf7e74e6aea3eb0da1304cb00 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sun, 27 Dec 2020 15:40:44 +0800
Subject: [PATCH 08/68] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 07232a967..35207bcbc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -200,7 +200,7 @@
+ android:launchMode="standard" />
Date: Sun, 27 Dec 2020 15:48:56 +0800
Subject: [PATCH 09/68] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/io/legado/app/ui/book/search/SearchActivity.kt | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt
index 7aa11f1c5..3f1d377bb 100644
--- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt
@@ -160,6 +160,13 @@ class SearchActivity : VMBaseActivity
Date: Sun, 27 Dec 2020 18:52:43 +0800
Subject: [PATCH 10/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt b/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt
index efad70917..1e417a1a0 100644
--- a/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt
@@ -82,7 +82,7 @@ class CacheActivity : VMBaseActivity()
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
- R.id.menu_download -> launch(IO) {
+ R.id.menu_download -> {
if (adapter.downloadMap.isNullOrEmpty()) {
adapter.getItems().forEach { book ->
CacheBook.start(
From fa72c4e6987ed128ead622aed9fd1ad9fc9a72af Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sun, 27 Dec 2020 20:44:22 +0800
Subject: [PATCH 11/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/io/legado/app/utils/FragmentExtensions.kt | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/io/legado/app/utils/FragmentExtensions.kt b/app/src/main/java/io/legado/app/utils/FragmentExtensions.kt
index 2e812a241..15787e7fe 100644
--- a/app/src/main/java/io/legado/app/utils/FragmentExtensions.kt
+++ b/app/src/main/java/io/legado/app/utils/FragmentExtensions.kt
@@ -69,11 +69,10 @@ inline fun Fragment.startActivity(vararg params: Pair Fragment.startActivityForResult(
requestCode: Int,
vararg params: Pair
-) =
- startActivityForResult(
- AnkoInternals.createIntent(requireActivity(), T::class.java, params),
- requestCode
- )
+) = startActivityForResult(
+ AnkoInternals.createIntent(requireActivity(), T::class.java, params),
+ requestCode
+)
inline fun Fragment.startService(vararg params: Pair) =
AnkoInternals.internalStartService(requireActivity(), T::class.java, params)
From 1adce9267b5b0b27daa445a4d8b413c83bbc9d6e Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sun, 27 Dec 2020 20:46:16 +0800
Subject: [PATCH 12/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/io/legado/app/utils/StringUtils.kt | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/app/src/main/java/io/legado/app/utils/StringUtils.kt b/app/src/main/java/io/legado/app/utils/StringUtils.kt
index a2e2c4388..89d561cbf 100644
--- a/app/src/main/java/io/legado/app/utils/StringUtils.kt
+++ b/app/src/main/java/io/legado/app/utils/StringUtils.kt
@@ -106,11 +106,9 @@ object StringUtils {
if (length <= 0) return "0"
val units = arrayOf("b", "kb", "M", "G", "T")
//计算单位的,原理是利用lg,公式是 lg(1024^n) = nlg(1024),最后 nlg(1024)/lg(1024) = n。
- //计算单位的,原理是利用lg,公式是 lg(1024^n) = nlg(1024),最后 nlg(1024)/lg(1024) = n。
val digitGroups =
(log10(length.toDouble()) / log10(1024.0)).toInt()
//计算原理是,size/单位值。单位值指的是:比如说b = 1024,KB = 1024^2
- //计算原理是,size/单位值。单位值指的是:比如说b = 1024,KB = 1024^2
return DecimalFormat("#,##0.##")
.format(length / 1024.0.pow(digitGroups.toDouble())) + " " + units[digitGroups]
}
@@ -306,7 +304,7 @@ object StringUtils {
return sb.toString()
}
- fun hexStringToByte(hexString: String): ByteArray? {
+ fun hexStringToByte(hexString: String): ByteArray {
val hexStr = hexString.replace(" ", "")
val len = hexStr.length
val bytes = ByteArray(len / 2)
From 83fc64d806d943d79d4496e2e7b441f36f4cb60d Mon Sep 17 00:00:00 2001
From: gedoor
Date: Sun, 27 Dec 2020 23:06:09 +0800
Subject: [PATCH 13/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/io/legado/app/utils/ZipUtils.kt | 40 ++++++-------------
1 file changed, 12 insertions(+), 28 deletions(-)
diff --git a/app/src/main/java/io/legado/app/utils/ZipUtils.kt b/app/src/main/java/io/legado/app/utils/ZipUtils.kt
index 73311729d..b839066af 100644
--- a/app/src/main/java/io/legado/app/utils/ZipUtils.kt
+++ b/app/src/main/java/io/legado/app/utils/ZipUtils.kt
@@ -1,13 +1,15 @@
package io.legado.app.utils
import android.util.Log
+import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.withContext
import java.io.*
import java.util.*
import java.util.zip.ZipEntry
import java.util.zip.ZipFile
import java.util.zip.ZipOutputStream
-@Suppress("unused")
+@Suppress("unused", "BlockingMethodInNonBlockingContext")
object ZipUtils {
/**
@@ -38,20 +40,14 @@ object ZipUtils {
srcFilePaths: Collection?,
zipFilePath: String?,
comment: String?
- ): Boolean {
- if (srcFilePaths == null || zipFilePath == null) return false
- var zos: ZipOutputStream? = null
- try {
- zos = ZipOutputStream(FileOutputStream(zipFilePath))
+ ): Boolean = withContext(IO) {
+ if (srcFilePaths == null || zipFilePath == null) return@withContext false
+ ZipOutputStream(FileOutputStream(zipFilePath)).use {
for (srcFile in srcFilePaths) {
- if (!zipFile(getFileByPath(srcFile)!!, "", zos, comment)) return false
- }
- return true
- } finally {
- zos?.let {
- zos.finish()
- zos.close()
+ if (!zipFile(getFileByPath(srcFile)!!, "", it, comment))
+ return@withContext false
}
+ return@withContext true
}
}
@@ -72,18 +68,11 @@ object ZipUtils {
comment: String? = null
): Boolean {
if (srcFiles == null || zipFile == null) return false
- var zos: ZipOutputStream? = null
- try {
- zos = ZipOutputStream(FileOutputStream(zipFile))
+ ZipOutputStream(FileOutputStream(zipFile)).use {
for (srcFile in srcFiles) {
- if (!zipFile(srcFile, "", zos, comment)) return false
+ if (!zipFile(srcFile, "", it, comment)) return false
}
return true
- } finally {
- zos?.let {
- zos.finish()
- zos.close()
- }
}
}
@@ -139,12 +128,7 @@ object ZipUtils {
): Boolean {
if (srcFile == null || zipFile == null) return false
ZipOutputStream(FileOutputStream(zipFile)).use { zos ->
- return zipFile(
- srcFile,
- "",
- zos,
- comment
- )
+ return zipFile(srcFile, "", zos, comment)
}
}
From 5741c08180b42feb4776bdf41e333bcfc6c64193 Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Mon, 28 Dec 2020 08:56:44 +0800
Subject: [PATCH 14/68] Update README.md
---
README.md | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 82994a452..1327ab258 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,15 @@
-# legado
+
+

+
Legado
+
+
阅读3.0, 阅读是一款可以自定义来源阅读网络内容的工具,为广大网络文学爱好者提供一种方便、快捷舒适的试读体验。
+
-[](http://commitizen.github.io/cz-cli/) [](https://github.com/gedoor/legado/actions)
+[](http://commitizen.github.io/cz-cli/)
+[](https://github.com/gedoor/legado/actions)
+[](https://github.com/gedoor/legado/releases/latest)
+[](https://github.com/gedoor/legado/issues)
+[](https://github.com/gedoor/legado/graphs/contributors)
## 阅读3.0
* [书源规则](https://alanskycn.gitee.io/teachme/)
@@ -8,9 +17,9 @@
* [帮助文档](/app/src/main/assets/help/appHelp.md)
## 下载
-
or
or [Releases](https://github.com/gedoor/legado/releases/latest)
+
or
or [Releases](https://github.com/gedoor/legado/releases/latest)
-### 阅读API
+## 阅读API
阅读3.0 提供了2种方式的API:`Web方式`和`Content Provider方式`。您可以在[这里](api.md)根据需要自行调用。
## 感谢
From d588bfae1fadd04a66b4894129f14dac609355c6 Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Mon, 28 Dec 2020 10:13:16 +0800
Subject: [PATCH 15/68] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/io/legado/app/help/JsExtensions.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt
index 971f580e9..fc2fc92ff 100644
--- a/app/src/main/java/io/legado/app/help/JsExtensions.kt
+++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt
@@ -66,7 +66,7 @@ interface JsExtensions {
FileUtils.deleteFile(zipPath)
val zipFile = FileUtils.createFileIfNotExist(zipPath)
StringUtils.hexStringToByte(content).let {
- if (it != null) {
+ if (it.isNotEmpty()) {
zipFile.writeBytes(it)
}
}
From 670fc03af747f2abef726d2a3a9ae171696a3aa4 Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Mon, 28 Dec 2020 10:13:57 +0800
Subject: [PATCH 16/68] fix bug
---
app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
index c5895a0c0..0a0146874 100644
--- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
+++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
@@ -358,6 +358,7 @@ class AnalyzeUrl(
.setAssemblyEnabled(false)
.setOkClient(HttpHelper.getProxyClient(proxy))
.addAllEncoded(fieldMap)
+ .addAllHeader(headerMap)
.toByteArray().await()
}
}
From 48f114affa16ee8db665caafba5142cc6ff33c04 Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Mon, 28 Dec 2020 10:54:58 +0800
Subject: [PATCH 17/68] =?UTF-8?q?=E6=9B=B4=E6=96=B0JDK?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/legado.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/legado.yml b/.github/workflows/legado.yml
index 4d9940f4d..e49db9726 100644
--- a/.github/workflows/legado.yml
+++ b/.github/workflows/legado.yml
@@ -28,13 +28,13 @@ jobs:
# 蓝奏云里的文件夹名(需手动在蓝奏云创建)
LANZOU_FOLDER: '阅读3测试版'
# 是否上传到artifact
- UPLOAD_ARTIFACT: 'false'
+ UPLOAD_ARTIFACT: 'true'
steps:
- uses: actions/checkout@v2
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
- java-version: 1.8
+ java-version: 14
- name: clear 18PlusList.txt
run: |
echo "清空18PlusList.txt"
@@ -87,4 +87,4 @@ jobs:
if: ${{ env.LANZOU_PSD }}
run: python $GITHUB_WORKSPACE/.github/lzy.py
env:
- UPLOAD_FOLDER: ${{ github.workspace }}/app/build/outputs/apk/app/release/
\ No newline at end of file
+ UPLOAD_FOLDER: ${{ github.workspace }}/app/build/outputs/apk/app/release/
From 52cb0fbc4c06e9a9b3ff757f86259a42589d462b Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Mon, 28 Dec 2020 10:55:22 +0800
Subject: [PATCH 18/68] =?UTF-8?q?=E6=9B=B4=E6=96=B0JDK?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/legado.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/legado.yml b/.github/workflows/legado.yml
index e49db9726..87ca425ad 100644
--- a/.github/workflows/legado.yml
+++ b/.github/workflows/legado.yml
@@ -31,7 +31,7 @@ jobs:
UPLOAD_ARTIFACT: 'true'
steps:
- uses: actions/checkout@v2
- - name: set up JDK 1.8
+ - name: set up JDK
uses: actions/setup-java@v1
with:
java-version: 14
From 79ba9d2a15e92f0c99334435a502b3c47f07f4dc Mon Sep 17 00:00:00 2001
From: gedoor
Date: Mon, 28 Dec 2020 11:03:23 +0800
Subject: [PATCH 19/68] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/assets/updateLog.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md
index 75bf8b4ea..5af6a8d74 100644
--- a/app/src/main/assets/updateLog.md
+++ b/app/src/main/assets/updateLog.md
@@ -3,6 +3,9 @@
* 关注合作公众号 **[小说拾遗]** 获取好看的小说。
* 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。
+**2020/12/28**
+* 解决文件下载异常,在线语音可正常播放 by [Celeter](https://github.com/Celeter)
+
**2020/12/27**
* 订阅添加搜索和分组
* 修复部分手机状态栏bug
From 7a0a62898eb8740a8da36ecdfcb14a17ea6ed9ec Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Tue, 29 Dec 2020 08:25:37 +0800
Subject: [PATCH 20/68] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/assets/defaultData/httpTTS.json | 143 ++++++++++++++-----
1 file changed, 109 insertions(+), 34 deletions(-)
diff --git a/app/src/main/assets/defaultData/httpTTS.json b/app/src/main/assets/defaultData/httpTTS.json
index a249a3b29..228cc6d76 100644
--- a/app/src/main/assets/defaultData/httpTTS.json
+++ b/app/src/main/assets/defaultData/httpTTS.json
@@ -1,62 +1,137 @@
[
{
- "id": 1598233029304,
- "name": "度小美",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=0&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029336,
+ "name": "度丫丫",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029305,
- "name": "度小宇",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=1&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029337,
+ "name": "度博文①",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=106&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029306,
- "name": "度逍遥",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=5003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029338,
+ "name": "度博文②",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4106&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029307,
- "name": "度丫丫",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=4&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029339,
+ "name": "度博文③",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5106&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029308,
- "name": "度小娇",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=5&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029340,
+ "name": "度某男",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4114&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029309,
- "name": "度米朵",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=103&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029341,
+ "name": "度某女",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4119&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029310,
- "name": "度博文",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=106&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029342,
+ "name": "度小娇",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029311,
+ "id": 1598233029343,
+ "name": "度小宇",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=1&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029344,
"name": "度小童",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=110&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=110&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029312,
+ "id": 1598233029345,
+ "name": "度小美",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=0&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029346,
"name": "度小萌",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=111&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=111&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029313,
- "name": "百度骚男",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=11&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029347,
+ "name": "度小鹿①",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4118&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029314,
- "name": "百度评书",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=6&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "id": 1598233029348,
+ "name": "度小鹿②",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5118&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029349,
+ "name": "度米朵",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4103&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029350,
+ "name": "度逍遥-基础",
+ "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=3&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029351,
+ "name": "度逍遥-精品①",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029315,
+ "id": 1598233029352,
+ "name": "度逍遥-精品②",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029353,
+ "name": "情感女声",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4105&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029354,
+ "name": "情感男声",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4115&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029355,
+ "name": "标准女声",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4100&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029356,
+ "name": "标准男声",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4121&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029357,
+ "name": "治愈女声",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5120&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029358,
+ "name": "治愈男声",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5121&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029359,
+ "name": "甜美女声①",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4117&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029360,
+ "name": "甜美女声②",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5117&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029361,
"name": "百度主持",
- "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{String((speakSpeed + 5) / 10 + 4)}}&per=9&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=9&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029362,
+ "name": "百度评书",
+ "url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=6&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
}
-]
\ No newline at end of file
+]
From 60f7b699ddc7dabbd650a98c61bfd9a23087423d Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Tue, 29 Dec 2020 10:01:16 +0800
Subject: [PATCH 21/68] Update httpTTS.json
---
app/src/main/assets/defaultData/httpTTS.json | 62 ++++++++++----------
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/app/src/main/assets/defaultData/httpTTS.json b/app/src/main/assets/defaultData/httpTTS.json
index 228cc6d76..3a86fe65d 100644
--- a/app/src/main/assets/defaultData/httpTTS.json
+++ b/app/src/main/assets/defaultData/httpTTS.json
@@ -21,117 +21,117 @@
},
{
"id": 1598233029340,
- "name": "度某男",
- "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4114&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
- },
- {
- "id": 1598233029341,
- "name": "度某女",
- "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4119&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
- },
- {
- "id": 1598233029342,
"name": "度小娇",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029343,
+ "id": 1598233029341,
"name": "度小宇",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=1&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029344,
+ "id": 1598233029342,
"name": "度小童",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=110&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029345,
+ "id": 1598233029343,
"name": "度小美",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=0&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029346,
+ "id": 1598233029344,
"name": "度小萌",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=111&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029347,
+ "id": 1598233029345,
"name": "度小鹿①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4118&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029348,
+ "id": 1598233029346,
"name": "度小鹿②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5118&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029349,
+ "id": 1598233029347,
+ "name": "度小鹿③",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4119&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029348,
"name": "度米朵",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4103&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029350,
+ "id": 1598233029349,
"name": "度逍遥-基础",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=3&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029351,
+ "id": 1598233029350,
"name": "度逍遥-精品①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029352,
+ "id": 1598233029351,
"name": "度逍遥-精品②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029353,
+ "id": 1598233029352,
"name": "情感女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4105&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029354,
+ "id": 1598233029353,
"name": "情感男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4115&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029355,
+ "id": 1598233029354,
"name": "标准女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4100&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029356,
+ "id": 1598233029355,
"name": "标准男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4121&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029357,
+ "id": 1598233029356,
"name": "治愈女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5120&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029358,
+ "id": 1598233029357,
"name": "治愈男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5121&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029359,
+ "id": 1598233029358,
"name": "甜美女声①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4117&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029360,
+ "id": 1598233029359,
"name": "甜美女声②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5117&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029361,
+ "id": 1598233029360,
"name": "百度主持",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=9&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029362,
- "name": "百度评书",
+ "id": 1598233029361,
+ "name": "百度评书①",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=6&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029362,
+ "name": "百度评书②",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4114&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
}
]
From e68b277a80d91777f30ef75fc81ed5884948365f Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Tue, 29 Dec 2020 10:12:51 +0800
Subject: [PATCH 22/68] add tts src
---
app/src/main/assets/defaultData/httpTTS.json | 35 +++++++++++---------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/app/src/main/assets/defaultData/httpTTS.json b/app/src/main/assets/defaultData/httpTTS.json
index 3a86fe65d..8f12b739a 100644
--- a/app/src/main/assets/defaultData/httpTTS.json
+++ b/app/src/main/assets/defaultData/httpTTS.json
@@ -61,76 +61,81 @@
},
{
"id": 1598233029348,
- "name": "度米朵",
- "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4103&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ "name": "度米朵①",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=103&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
"id": 1598233029349,
+ "name": "度米朵②",
+ "url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4103&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
+ },
+ {
+ "id": 1598233029350,
"name": "度逍遥-基础",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=3&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029350,
+ "id": 1598233029351,
"name": "度逍遥-精品①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029351,
+ "id": 1598233029352,
"name": "度逍遥-精品②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029352,
+ "id": 1598233029353,
"name": "情感女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4105&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029353,
+ "id": 1598233029354,
"name": "情感男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4115&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029354,
+ "id": 1598233029355,
"name": "标准女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4100&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029355,
+ "id": 1598233029356,
"name": "标准男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4121&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029356,
+ "id": 1598233029357,
"name": "治愈女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5120&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029357,
+ "id": 1598233029358,
"name": "治愈男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5121&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029358,
+ "id": 1598233029359,
"name": "甜美女声①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4117&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029359,
+ "id": 1598233029360,
"name": "甜美女声②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5117&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029360,
+ "id": 1598233029361,
"name": "百度主持",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=9&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029361,
+ "id": 1598233029362,
"name": "百度评书①",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=6&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029362,
+ "id": 1598233029363,
"name": "百度评书②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4114&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
}
From 7b7fd0d5690e716db901244cc71dac472a2c0de2 Mon Sep 17 00:00:00 2001
From: Celeter <48249130+Celeter@users.noreply.github.com>
Date: Tue, 29 Dec 2020 10:22:19 +0800
Subject: [PATCH 23/68] Update legado.yml
---
.github/workflows/legado.yml | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/legado.yml b/.github/workflows/legado.yml
index 87ca425ad..57c22b832 100644
--- a/.github/workflows/legado.yml
+++ b/.github/workflows/legado.yml
@@ -31,15 +31,20 @@ jobs:
UPLOAD_ARTIFACT: 'true'
steps:
- uses: actions/checkout@v2
- - name: set up JDK
+ - name: Set Up JDK
uses: actions/setup-java@v1
with:
java-version: 14
- - name: clear 18PlusList.txt
+ - name: Clear 18PlusList.txt
run: |
echo "清空18PlusList.txt"
echo "">$GITHUB_WORKSPACE/app/src/main/assets/18PlusList.txt
- - name: release apk sign
+ - name: App Minify
+ if: ${{ github.event_name == 'release'}}
+ run: |
+ sed '/minifyEnabled/i\ shrinkResources true' $GITHUB_WORKSPACE/app/build.gradle -i
+ sed 's/minifyEnabled false/minifyEnabled true/' $GITHUB_WORKSPACE/app/build.gradle -i
+ - name: Release Apk Sign
run: |
echo "给apk增加签名"
cp $GITHUB_WORKSPACE/.github/workflows/legado.jks $GITHUB_WORKSPACE/app/legado.jks
@@ -47,12 +52,12 @@ jobs:
sed '$a\RELEASE_KEY_ALIAS=legado' $GITHUB_WORKSPACE/gradle.properties -i
sed '$a\RELEASE_STORE_PASSWORD=gedoor_legado' $GITHUB_WORKSPACE/gradle.properties -i
sed '$a\RELEASE_KEY_PASSWORD=gedoor_legado' $GITHUB_WORKSPACE/gradle.properties -i
- - name: apk live together
+ - name: Apk Live Together
run: |
echo "设置apk共存"
sed "s/'.release'/'.releaseA'/" $GITHUB_WORKSPACE/app/build.gradle -i
sed 's/.release/.releaseA/' $GITHUB_WORKSPACE/app/google-services.json -i
- - name: build with gradle
+ - name: Build With Gradle
run: |
echo "开始进行release构建"
chmod +x gradlew
@@ -63,12 +68,12 @@ jobs:
with:
name: legado apk
path: ${{ github.workspace }}/app/build/outputs/apk/app/release/*.apk
- - name: Set up Python 3.8
+ - name: Set Up Python 3
if: ${{ env.LANZOU_PSD }}
uses: actions/setup-python@v2
with:
- python-version: 3.8
- - name: Set up lanzou-api
+ python-version: 3.x
+ - name: Dependence Install
if: ${{ env.LANZOU_PSD }}
run: |
pip install requests
@@ -79,10 +84,10 @@ jobs:
run: |
import requests,os
res = requests.get('https://raw.githubusercontent.com/Celeter/build/master/.github/scripts/API_lanzou.py')
- with open(os.environ["FILEPATH"], 'wb') as f:
+ with open(os.environ["FILE_PATH"], 'wb') as f:
f.write(res.content)
env:
- FILEPATH: ${{ github.workspace }}/.github/lzy.py
+ FILE_PATH: ${{ github.workspace }}/.github/lzy.py
- name: Upload App To Lanzou
if: ${{ env.LANZOU_PSD }}
run: python $GITHUB_WORKSPACE/.github/lzy.py
From 61b13a70c32c77ef7bba4088cdec9e85c7c3aee0 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Tue, 29 Dec 2020 20:26:12 +0800
Subject: [PATCH 24/68] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=AF=BC=E5=87=BA=E4=B9=A6=E5=8D=95=E5=AF=BC=E5=85=A5=E4=B9=A6?=
=?UTF-8?q?=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/menu/main_bookshelf.xml | 19 +++++++++++++++++--
app/src/main/res/values-zh-rHK/strings.xml | 2 ++
app/src/main/res/values-zh-rTW/strings.xml | 2 ++
app/src/main/res/values-zh/strings.xml | 2 ++
app/src/main/res/values/strings.xml | 2 ++
5 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/menu/main_bookshelf.xml b/app/src/main/res/menu/main_bookshelf.xml
index 9dc1ebf5c..78d754fcc 100644
--- a/app/src/main/res/menu/main_bookshelf.xml
+++ b/app/src/main/res/menu/main_bookshelf.xml
@@ -1,12 +1,14 @@
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index bc5b42e2e..44ad0524b 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -795,5 +795,7 @@
进入退出阅读界面时同步阅读进度
创建书签失败
单URL
+ 导出书单
+ 导入书单
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index b68dbdc72..04601c9a6 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -796,5 +796,7 @@
進入退出閱讀介面時同步閱讀進度
创建书签失败
单URL
+ 导出书单
+ 导入书单
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 6eda0ea3d..e42728e52 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -799,5 +799,7 @@
进入退出阅读界面时同步阅读进度
创建书签失败
单URL
+ 导出书单
+ 导入书单
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9a698af4b..70fa7277b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -802,5 +802,7 @@
进入退出阅读界面时同步阅读进度
创建书签失败
单URL
+ 导出书单
+ 导入书单
From d241fd410d719c19c8e2c7e34ea2a0163af38ab6 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Tue, 29 Dec 2020 20:40:06 +0800
Subject: [PATCH 25/68] =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC=E8=87=AA?=
=?UTF-8?q?=E5=8A=A8=E6=9B=B4=E6=96=B0=E5=9C=A8=E7=BA=BF=E6=9C=97=E8=AF=BB?=
=?UTF-8?q?=E8=A7=84=E5=88=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/io/legado/app/help/DefaultData.kt | 6 ++++++
app/src/main/java/io/legado/app/help/LocalConfig.kt | 6 ++++++
.../app/ui/book/read/config/SpeakEngineViewModel.kt | 4 +---
app/src/main/java/io/legado/app/ui/main/MainViewModel.kt | 8 +++++++-
4 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/io/legado/app/help/DefaultData.kt b/app/src/main/java/io/legado/app/help/DefaultData.kt
index db14e1f29..b9708ba91 100644
--- a/app/src/main/java/io/legado/app/help/DefaultData.kt
+++ b/app/src/main/java/io/legado/app/help/DefaultData.kt
@@ -45,6 +45,12 @@ object DefaultData {
GSON.fromJsonArray(json)!!
}
+ fun importDefaultHttpTTS() {
+ httpTTS.let {
+ App.db.httpTTSDao.insert(*it.toTypedArray())
+ }
+ }
+
fun importDefaultTocRules() {
App.db.txtTocRule.deleteDefault()
txtTocRules.let {
diff --git a/app/src/main/java/io/legado/app/help/LocalConfig.kt b/app/src/main/java/io/legado/app/help/LocalConfig.kt
index 084113293..ac0d3034d 100644
--- a/app/src/main/java/io/legado/app/help/LocalConfig.kt
+++ b/app/src/main/java/io/legado/app/help/LocalConfig.kt
@@ -63,4 +63,10 @@ object LocalConfig {
val ruleHelpVersionIsLast: Boolean
get() = isLastVersion(1, "ruleHelpVersion")
+
+ val hasUpHttpTTS: Boolean
+ get() = isLastVersion(1, "httpTtsVersion")
+
+ val hasUpTxtTocRule: Boolean
+ get() = isLastVersion(1, "txtTocRuleVersion")
}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineViewModel.kt
index b72f65343..bfcb8ae2b 100644
--- a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineViewModel.kt
+++ b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineViewModel.kt
@@ -14,9 +14,7 @@ class SpeakEngineViewModel(application: Application) : BaseViewModel(application
fun importDefault() {
execute {
- DefaultData.httpTTS.let {
- App.db.httpTTSDao.insert(*it.toTypedArray())
- }
+ DefaultData.importDefaultHttpTTS()
}
}
diff --git a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt
index 239b0c9ff..242e94baa 100644
--- a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt
+++ b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt
@@ -9,6 +9,7 @@ import io.legado.app.data.entities.Book
import io.legado.app.help.AppConfig
import io.legado.app.help.BookHelp
import io.legado.app.help.DefaultData
+import io.legado.app.help.LocalConfig
import io.legado.app.model.webBook.WebBook
import io.legado.app.service.help.CacheBook
import io.legado.app.utils.FileUtils
@@ -148,7 +149,12 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
fun upVersion() {
execute {
- DefaultData.importDefaultTocRules()
+ if (LocalConfig.hasUpHttpTTS) {
+ DefaultData.importDefaultHttpTTS()
+ }
+ if (LocalConfig.hasUpTxtTocRule) {
+ DefaultData.importDefaultTocRules()
+ }
}
}
}
\ No newline at end of file
From fe2c89179fc8f7b7d75d9e66d1d28f702a4059ee Mon Sep 17 00:00:00 2001
From: gedoor
Date: Tue, 29 Dec 2020 20:51:24 +0800
Subject: [PATCH 26/68] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=A7=84=E5=88=99id?=
=?UTF-8?q?=E5=B0=8F=E4=BA=8E0=E6=96=B9=E4=BE=BF=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E6=97=B6=E5=88=A0=E9=99=A4=E6=97=A7=E8=A7=84=E5=88=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/assets/defaultData/httpTTS.json | 56 +++++++++----------
.../java/io/legado/app/data/dao/HttpTTSDao.kt | 2 +
.../java/io/legado/app/help/DefaultData.kt | 1 +
3 files changed, 31 insertions(+), 28 deletions(-)
diff --git a/app/src/main/assets/defaultData/httpTTS.json b/app/src/main/assets/defaultData/httpTTS.json
index 8f12b739a..b62ea90e5 100644
--- a/app/src/main/assets/defaultData/httpTTS.json
+++ b/app/src/main/assets/defaultData/httpTTS.json
@@ -1,141 +1,141 @@
[
{
- "id": 1598233029336,
+ "id": -1,
"name": "度丫丫",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029337,
+ "id": -2,
"name": "度博文①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=106&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029338,
+ "id": -3,
"name": "度博文②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4106&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029339,
+ "id": -4,
"name": "度博文③",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5106&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029340,
+ "id": -5,
"name": "度小娇",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029341,
+ "id": -6,
"name": "度小宇",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=1&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029342,
+ "id": -7,
"name": "度小童",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=110&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029343,
+ "id": -8,
"name": "度小美",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=0&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029344,
+ "id": -9,
"name": "度小萌",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=111&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029345,
+ "id": -10,
"name": "度小鹿①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4118&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029346,
+ "id": -11,
"name": "度小鹿②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5118&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029347,
+ "id": -12,
"name": "度小鹿③",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4119&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029348,
+ "id": -13,
"name": "度米朵①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=103&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029349,
+ "id": -14,
"name": "度米朵②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4103&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029350,
+ "id": -15,
"name": "度逍遥-基础",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=3&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029351,
+ "id": -16,
"name": "度逍遥-精品①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029352,
+ "id": -17,
"name": "度逍遥-精品②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5003&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029353,
+ "id": -18,
"name": "情感女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4105&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029354,
+ "id": -19,
"name": "情感男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4115&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029355,
+ "id": -20,
"name": "标准女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4100&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029356,
+ "id": -21,
"name": "标准男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4121&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029357,
+ "id": -22,
"name": "治愈女声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5120&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029358,
+ "id": -23,
"name": "治愈男声",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5121&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029359,
+ "id": -24,
"name": "甜美女声①",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4117&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029360,
+ "id": -25,
"name": "甜美女声②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=5117&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029361,
+ "id": -26,
"name": "百度主持",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=9&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029362,
+ "id": -27,
"name": "百度评书①",
"url": "http://tts.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=6&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
},
{
- "id": 1598233029363,
+ "id": -28,
"name": "百度评书②",
"url": "http://tsn.baidu.com/text2audio,{\n \"method\": \"POST\",\n \"body\": \"tex={{java.encodeURI(java.encodeURI(speakText))}}&spd={{(speakSpeed + 5) / 10 + 4}}&per=4114&cuid=baidu_speech_demo&idx=1&cod=2&lan=zh&ctp=1&pdt=1&vol=5&pit=5&_res_tag_=audio\"\n}"
}
diff --git a/app/src/main/java/io/legado/app/data/dao/HttpTTSDao.kt b/app/src/main/java/io/legado/app/data/dao/HttpTTSDao.kt
index f71169bb1..f97c17af1 100644
--- a/app/src/main/java/io/legado/app/data/dao/HttpTTSDao.kt
+++ b/app/src/main/java/io/legado/app/data/dao/HttpTTSDao.kt
@@ -28,4 +28,6 @@ interface HttpTTSDao {
@Update
fun update(vararg httpTTS: HttpTTS)
+ @Query("delete from httpTTS where id < 0")
+ fun deleteDefault()
}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/help/DefaultData.kt b/app/src/main/java/io/legado/app/help/DefaultData.kt
index b9708ba91..d2bab07f1 100644
--- a/app/src/main/java/io/legado/app/help/DefaultData.kt
+++ b/app/src/main/java/io/legado/app/help/DefaultData.kt
@@ -46,6 +46,7 @@ object DefaultData {
}
fun importDefaultHttpTTS() {
+ App.db.httpTTSDao.deleteDefault()
httpTTS.let {
App.db.httpTTSDao.insert(*it.toTypedArray())
}
From 7f1eaa7386d613fa2753fdffd5127c0cd014b1ad Mon Sep 17 00:00:00 2001
From: gedoor
Date: Tue, 29 Dec 2020 21:06:40 +0800
Subject: [PATCH 27/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/assets/updateLog.md | 3 ++-
.../io/legado/app/ui/book/read/config/SpeakEngineDialog.kt | 2 --
.../io/legado/app/ui/book/source/manage/BookSourceActivity.kt | 2 --
.../io/legado/app/ui/rss/source/manage/RssSourceActivity.kt | 2 --
app/src/main/res/layout/activity_book_source.xml | 3 ++-
app/src/main/res/layout/activity_rss_source.xml | 3 ++-
app/src/main/res/layout/dialog_recycler_view.xml | 3 ++-
7 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md
index 5af6a8d74..0e616d639 100644
--- a/app/src/main/assets/updateLog.md
+++ b/app/src/main/assets/updateLog.md
@@ -3,8 +3,9 @@
* 关注合作公众号 **[小说拾遗]** 获取好看的小说。
* 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。
-**2020/12/28**
+**2020/12/29**
* 解决文件下载异常,在线语音可正常播放 by [Celeter](https://github.com/Celeter)
+* 更新默认在线朗读库, 默认id小于0方便下次更新时删除旧数据, 有重复的自己删除
**2020/12/27**
* 订阅添加搜索和分组
diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
index 542853559..ab5219b82 100644
--- a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
+++ b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
@@ -9,7 +9,6 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.lifecycle.LiveData
-import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.App
import io.legado.app.R
import io.legado.app.base.BaseDialogFragment
@@ -59,7 +58,6 @@ class SpeakEngineDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickListener
private fun initView() = with(binding) {
toolBar.setBackgroundColor(primaryColor)
toolBar.setTitle(R.string.speak_engine)
- recyclerView.layoutManager = LinearLayoutManager(requireContext())
adapter = Adapter(requireContext())
recyclerView.adapter = adapter
tvFooterLeft.setText(R.string.local_tts)
diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
index c14809aaf..86e99b361 100644
--- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
@@ -12,7 +12,6 @@ import androidx.appcompat.widget.SearchView
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.LiveData
import androidx.recyclerview.widget.ItemTouchHelper
-import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.snackbar.Snackbar
import io.legado.app.App
import io.legado.app.R
@@ -147,7 +146,6 @@ class BookSourceActivity : VMBaseActivity
+ android:layout_height="match_parent"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
diff --git a/app/src/main/res/layout/activity_rss_source.xml b/app/src/main/res/layout/activity_rss_source.xml
index 527a9444f..703eea64f 100644
--- a/app/src/main/res/layout/activity_rss_source.xml
+++ b/app/src/main/res/layout/activity_rss_source.xml
@@ -22,7 +22,8 @@
+ android:layout_height="match_parent"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
diff --git a/app/src/main/res/layout/dialog_recycler_view.xml b/app/src/main/res/layout/dialog_recycler_view.xml
index 34ba05c5f..29d018cea 100644
--- a/app/src/main/res/layout/dialog_recycler_view.xml
+++ b/app/src/main/res/layout/dialog_recycler_view.xml
@@ -22,7 +22,8 @@
+ android:layout_height="match_parent"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
From a5a6eda39af6e679a010218564b5885fda86a4ba Mon Sep 17 00:00:00 2001
From: gedoor
Date: Tue, 29 Dec 2020 21:12:38 +0800
Subject: [PATCH 28/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/layout/item_http_tts.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/src/main/res/layout/item_http_tts.xml b/app/src/main/res/layout/item_http_tts.xml
index fae2a3bcc..6a65d5827 100644
--- a/app/src/main/res/layout/item_http_tts.xml
+++ b/app/src/main/res/layout/item_http_tts.xml
@@ -34,4 +34,9 @@
android:src="@drawable/ic_clear_all"
android:tint="@color/primaryText"
tools:ignore="RtlHardcoded" />
+
+
+
\ No newline at end of file
From 6ed918f9ada2cc827cabae19d260a4896dade27c Mon Sep 17 00:00:00 2001
From: gedoor
Date: Tue, 29 Dec 2020 21:14:09 +0800
Subject: [PATCH 29/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../io/legado/app/ui/book/read/config/SpeakEngineDialog.kt | 2 ++
app/src/main/res/layout/dialog_recycler_view.xml | 3 +--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
index ab5219b82..fb58e12a0 100644
--- a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
+++ b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
@@ -9,6 +9,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.lifecycle.LiveData
+import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.App
import io.legado.app.R
import io.legado.app.base.BaseDialogFragment
@@ -59,6 +60,7 @@ class SpeakEngineDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickListener
toolBar.setBackgroundColor(primaryColor)
toolBar.setTitle(R.string.speak_engine)
adapter = Adapter(requireContext())
+ recyclerView.layoutManager = LinearLayoutManager(requireContext())
recyclerView.adapter = adapter
tvFooterLeft.setText(R.string.local_tts)
tvFooterLeft.visible()
diff --git a/app/src/main/res/layout/dialog_recycler_view.xml b/app/src/main/res/layout/dialog_recycler_view.xml
index 29d018cea..34ba05c5f 100644
--- a/app/src/main/res/layout/dialog_recycler_view.xml
+++ b/app/src/main/res/layout/dialog_recycler_view.xml
@@ -22,8 +22,7 @@
+ android:layout_height="match_parent" />
From acc459cbb32aafee24415fd7b74c95ae5cbbfe4a Mon Sep 17 00:00:00 2001
From: gedoor
Date: Tue, 29 Dec 2020 21:42:18 +0800
Subject: [PATCH 30/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../app/ui/book/read/config/SpeakEngineDialog.kt | 4 +++-
app/src/main/res/layout/dialog_recycler_view.xml | 13 +++++++------
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
index fb58e12a0..2c807a279 100644
--- a/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
+++ b/app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
@@ -21,6 +21,7 @@ import io.legado.app.databinding.DialogHttpTtsEditBinding
import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemHttpTtsBinding
import io.legado.app.lib.dialogs.alert
+import io.legado.app.lib.theme.ATH
import io.legado.app.lib.theme.primaryColor
import io.legado.app.service.help.ReadAloud
import io.legado.app.ui.widget.dialog.TextDialog
@@ -59,8 +60,9 @@ class SpeakEngineDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickListener
private fun initView() = with(binding) {
toolBar.setBackgroundColor(primaryColor)
toolBar.setTitle(R.string.speak_engine)
- adapter = Adapter(requireContext())
+ ATH.applyEdgeEffectColor(recyclerView)
recyclerView.layoutManager = LinearLayoutManager(requireContext())
+ adapter = Adapter(requireContext())
recyclerView.adapter = adapter
tvFooterLeft.setText(R.string.local_tts)
tvFooterLeft.visible()
diff --git a/app/src/main/res/layout/dialog_recycler_view.xml b/app/src/main/res/layout/dialog_recycler_view.xml
index 34ba05c5f..2fcee5249 100644
--- a/app/src/main/res/layout/dialog_recycler_view.xml
+++ b/app/src/main/res/layout/dialog_recycler_view.xml
@@ -1,18 +1,18 @@
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ app:popupTheme="@style/AppTheme.PopupOverlay"
+ app:titleTextAppearance="@style/ToolbarTitle" />
+ android:layout_height="match_parent"
+ android:scrollbars="none" />
From 14fb5dc1ac12e759fb2f7bf089275603bfb7d526 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Tue, 29 Dec 2020 22:22:09 +0800
Subject: [PATCH 31/68] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../legado/app/ui/main/bookshelf/BookshelfFragment.kt | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
index fd4f39ee4..58a11e2c6 100644
--- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
@@ -86,6 +86,17 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b
Pair("groupId", selectedGroup?.groupId ?: 0),
Pair("groupName", selectedGroup?.groupName ?: 0)
)
+ R.id.menu_export_bookshelf -> {
+ val group = bookGroups[tabLayout.selectedTabPosition]
+ val fragment = fragmentMap[group.groupId]
+ fragment?.getBooks()?.let {
+
+ }
+ }
+ R.id.menu_import_bookshelf -> {
+ val group = bookGroups[tabLayout.selectedTabPosition]
+
+ }
}
}
From c7ac4e74c4d35f37e5ba22eaece42023a4522fa8 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Wed, 30 Dec 2020 10:06:19 +0800
Subject: [PATCH 32/68] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../app/base/adapter/RecyclerAdapter.kt | 33 ++++++++++++-
.../book/source/manage/BookSourceActivity.kt | 2 +-
.../book/source/manage/BookSourceAdapter.kt | 46 +++++++++++++++++++
.../ui/rss/source/manage/RssSourceActivity.kt | 2 +-
.../ui/rss/source/manage/RssSourceAdapter.kt | 32 +++++++++++++
5 files changed, 112 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
index 1f374acdf..c2882c048 100644
--- a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
+++ b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
@@ -98,8 +98,39 @@ abstract class RecyclerAdapter- (protected val context: Co
}
@Synchronized
- fun setItems(items: List
- ?, diffResult: DiffUtil.DiffResult) {
+ fun setItems(items: List
- ?, itemCallback: DiffUtil.ItemCallback
- ) {
kotlin.runCatching {
+ val callback = object : DiffUtil.Callback() {
+ override fun getOldListSize(): Int {
+ return itemCount
+ }
+
+ override fun getNewListSize(): Int {
+ return items?.size ?: 0
+ }
+
+ override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
+ val oldItem = getItem(oldItemPosition) ?: return false
+ val newItem = items?.getOrNull(newItemPosition) ?: return false
+ return itemCallback.areItemsTheSame(oldItem, newItem)
+ }
+
+ override fun areContentsTheSame(
+ oldItemPosition: Int,
+ newItemPosition: Int
+ ): Boolean {
+ val oldItem = getItem(oldItemPosition) ?: return false
+ val newItem = items?.getOrNull(newItemPosition) ?: return false
+ return itemCallback.areContentsTheSame(oldItem, newItem)
+ }
+
+ override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
+ val oldItem = getItem(oldItemPosition) ?: return null
+ val newItem = items?.getOrNull(newItemPosition) ?: return null
+ return itemCallback.getChangePayload(oldItem, newItem)
+ }
+ }
+ val diffResult = DiffUtil.calculateDiff(callback)
if (this.items.isNotEmpty()) {
this.items.clear()
}
diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
index 86e99b361..38c138482 100644
--- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
@@ -204,7 +204,7 @@ class BookSourceActivity : VMBaseActivity data.sortedBy { it.lastUpdateTime }
else -> data.reversed()
}
- adapter.setItems(sourceList)
+ adapter.setItems(sourceList, adapter.diffItemCallback)
})
}
diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt
index 55f179023..1545a3108 100644
--- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt
+++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt
@@ -8,6 +8,7 @@ import android.view.ViewGroup
import android.widget.ImageView
import android.widget.PopupMenu
import androidx.core.os.bundleOf
+import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.base.adapter.ItemViewHolder
@@ -27,6 +28,51 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) :
private val selected = linkedSetOf()
+ val diffItemCallback: DiffUtil.ItemCallback
+ get() = object : DiffUtil.ItemCallback() {
+
+ override fun areItemsTheSame(oldItem: BookSource, newItem: BookSource): Boolean {
+ return oldItem.bookSourceUrl == newItem.bookSourceUrl
+ }
+
+ override fun areContentsTheSame(oldItem: BookSource, newItem: BookSource): Boolean {
+ if (oldItem.bookSourceName != newItem.bookSourceName)
+ return false
+ if (oldItem.bookSourceGroup != newItem.bookSourceGroup)
+ return false
+ if (oldItem.enabled != newItem.enabled)
+ return false
+ if (oldItem.enabledExplore != newItem.enabledExplore
+ || oldItem.exploreUrl != newItem.exploreUrl
+ ) {
+ return false
+ }
+ return true
+ }
+
+ override fun getChangePayload(oldItem: BookSource, newItem: BookSource): Any? {
+ val payload = Bundle()
+ if (oldItem.bookSourceName != newItem.bookSourceName) {
+ payload.putString("name", newItem.bookSourceName)
+ }
+ if (oldItem.bookSourceGroup != newItem.bookSourceGroup) {
+ payload.putString("group", newItem.bookSourceGroup)
+ }
+ if (oldItem.enabled != newItem.enabled) {
+ payload.putBoolean("enabled", newItem.enabled)
+ }
+ if (oldItem.enabledExplore != newItem.enabledExplore
+ || oldItem.exploreUrl != newItem.exploreUrl
+ ) {
+ payload.putBoolean("showExplore", true)
+ }
+ if (payload.isEmpty) {
+ return null
+ }
+ return payload
+ }
+ }
+
override fun getViewBinding(parent: ViewGroup): ItemBookSourceBinding {
return ItemBookSourceBinding.inflate(inflater, parent, false)
}
diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt
index 0edd9304a..e6db8c73e 100644
--- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt
@@ -206,7 +206,7 @@ class RssSourceActivity : VMBaseActivity()
+ val diffItemCallback: DiffUtil.ItemCallback
+ get() = object : DiffUtil.ItemCallback() {
+
+ override fun areItemsTheSame(oldItem: RssSource, newItem: RssSource): Boolean {
+ return oldItem.sourceUrl == newItem.sourceUrl
+ }
+
+ override fun areContentsTheSame(oldItem: RssSource, newItem: RssSource): Boolean {
+ return oldItem.sourceName == newItem.sourceName
+ && oldItem.sourceGroup == newItem.sourceGroup
+ && oldItem.enabled == newItem.enabled
+ }
+
+ override fun getChangePayload(oldItem: RssSource, newItem: RssSource): Any? {
+ val payload = Bundle()
+ if (oldItem.sourceName != newItem.sourceName) {
+ payload.putString("name", newItem.sourceName)
+ }
+ if (oldItem.sourceGroup != newItem.sourceGroup) {
+ payload.putString("group", newItem.sourceGroup)
+ }
+ if (oldItem.enabled != newItem.enabled) {
+ payload.putBoolean("enabled", newItem.enabled)
+ }
+ if (payload.isEmpty) {
+ return null
+ }
+ return payload
+ }
+ }
+
override fun getViewBinding(parent: ViewGroup): ItemRssSourceBinding {
return ItemRssSourceBinding.inflate(inflater, parent, false)
}
From 00ede1036280f6aef6c6bd4d4833cfd8db62dfb8 Mon Sep 17 00:00:00 2001
From: gedoor
Date: Wed, 30 Dec 2020 10:17:49 +0800
Subject: [PATCH 33/68] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../app/base/adapter/RecyclerAdapter.kt | 20 ++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
index c2882c048..0d6e3b668 100644
--- a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
+++ b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt
@@ -106,12 +106,14 @@ abstract class RecyclerAdapter
- (protected val context: Co
}
override fun getNewListSize(): Int {
- return items?.size ?: 0
+ return (items?.size ?: 0) + getHeaderCount() + getFooterCount()
}
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
- val oldItem = getItem(oldItemPosition) ?: return false
- val newItem = items?.getOrNull(newItemPosition) ?: return false
+ val oldItem = getItem(oldItemPosition - getHeaderCount())
+ ?: return true
+ val newItem = items?.getOrNull(newItemPosition - getHeaderCount())
+ ?: return true
return itemCallback.areItemsTheSame(oldItem, newItem)
}
@@ -119,14 +121,18 @@ abstract class RecyclerAdapter
- (protected val context: Co
oldItemPosition: Int,
newItemPosition: Int
): Boolean {
- val oldItem = getItem(oldItemPosition) ?: return false
- val newItem = items?.getOrNull(newItemPosition) ?: return false
+ val oldItem = getItem(oldItemPosition - getHeaderCount())
+ ?: return true
+ val newItem = items?.getOrNull(newItemPosition - getHeaderCount())
+ ?: return true
return itemCallback.areContentsTheSame(oldItem, newItem)
}
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
- val oldItem = getItem(oldItemPosition) ?: return null
- val newItem = items?.getOrNull(newItemPosition) ?: return null
+ val oldItem = getItem(oldItemPosition - getHeaderCount())
+ ?: return null
+ val newItem = items?.getOrNull(newItemPosition - getHeaderCount())
+ ?: return null
return itemCallback.getChangePayload(oldItem, newItem)
}
}
From b83034bc0b093b767dbe67773fe33e5a682db87f Mon Sep 17 00:00:00 2001
From: gedoor
Date: Wed, 30 Dec 2020 14:05:16 +0800
Subject: [PATCH 34/68] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ui/main/bookshelf/BookshelfFragment.kt | 76 ++++++++++++++-----
.../ui/main/bookshelf/BookshelfViewModel.kt | 57 +++++++++++++-
2 files changed, 113 insertions(+), 20 deletions(-)
diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
index 58a11e2c6..300ba646d 100644
--- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
@@ -1,6 +1,8 @@
package io.legado.app.ui.main.bookshelf
import android.annotation.SuppressLint
+import android.app.Activity.RESULT_OK
+import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
@@ -29,17 +31,23 @@ import io.legado.app.ui.book.cache.CacheActivity
import io.legado.app.ui.book.group.GroupManageDialog
import io.legado.app.ui.book.local.ImportBookActivity
import io.legado.app.ui.book.search.SearchActivity
+import io.legado.app.ui.filepicker.FilePicker
+import io.legado.app.ui.filepicker.FilePickerDialog
import io.legado.app.ui.main.MainViewModel
import io.legado.app.ui.main.bookshelf.books.BooksFragment
import io.legado.app.utils.*
import io.legado.app.utils.viewbindingdelegate.viewBinding
+import org.jetbrains.anko.share
/**
* 书架界面
*/
class BookshelfFragment : VMBaseFragment(R.layout.fragment_bookshelf),
TabLayout.OnTabSelectedListener,
+ FilePickerDialog.CallBack,
SearchView.OnQueryTextListener {
+
+ private val requestCodeImportBookshelf = 312
private val binding by viewBinding(FragmentBookshelfBinding::bind)
override val viewModel: BookshelfViewModel
get() = getViewModel(BookshelfViewModel::class.java)
@@ -67,8 +75,7 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b
when (item.itemId) {
R.id.menu_search -> startActivity()
R.id.menu_update_toc -> {
- val group = bookGroups[tabLayout.selectedTabPosition]
- val fragment = fragmentMap[group.groupId]
+ val fragment = fragmentMap[selectedGroup.groupId]
fragment?.getBooks()?.let {
activityViewModel.upToc(it)
}
@@ -79,29 +86,25 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b
R.id.menu_add_local -> startActivity()
R.id.menu_add_url -> addBookByUrl()
R.id.menu_arrange_bookshelf -> startActivity(
- Pair("groupId", selectedGroup?.groupId ?: 0),
- Pair("groupName", selectedGroup?.groupName ?: 0)
+ Pair("groupId", selectedGroup.groupId ?: 0),
+ Pair("groupName", selectedGroup.groupName ?: 0)
)
R.id.menu_download -> startActivity(
- Pair("groupId", selectedGroup?.groupId ?: 0),
- Pair("groupName", selectedGroup?.groupName ?: 0)
+ Pair("groupId", selectedGroup.groupId ?: 0),
+ Pair("groupName", selectedGroup.groupName ?: 0)
)
R.id.menu_export_bookshelf -> {
- val group = bookGroups[tabLayout.selectedTabPosition]
- val fragment = fragmentMap[group.groupId]
- fragment?.getBooks()?.let {
-
+ val fragment = fragmentMap[selectedGroup.groupId]
+ viewModel.exportBookshelf(fragment?.getBooks()) {
+ activity?.share(it)
}
}
- R.id.menu_import_bookshelf -> {
- val group = bookGroups[tabLayout.selectedTabPosition]
-
- }
+ R.id.menu_import_bookshelf -> importBookshelfAlert()
}
}
- private val selectedGroup: BookGroup?
- get() = bookGroups.getOrNull(binding.viewPagerBookshelf.currentItem)
+ private val selectedGroup: BookGroup
+ get() = bookGroups[tabLayout.selectedTabPosition]
private fun initView() {
ATH.applyEdgeEffectColor(binding.viewPagerBookshelf)
@@ -201,8 +204,8 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b
}
override fun onTabReselected(tab: TabLayout.Tab) {
- fragmentMap[selectedGroup?.groupId]?.let {
- toast("${selectedGroup?.groupName}(${it.getBooksCount()})")
+ fragmentMap[selectedGroup.groupId]?.let {
+ toast("${selectedGroup.groupName}(${it.getBooksCount()})")
}
}
@@ -213,7 +216,42 @@ class BookshelfFragment : VMBaseFragment(R.layout.fragment_b
}
fun gotoTop() {
- fragmentMap[selectedGroup?.groupId]?.gotoTop()
+ fragmentMap[selectedGroup.groupId]?.gotoTop()
+ }
+
+ private fun importBookshelfAlert() {
+ alert(titleResource = R.string.import_bookshelf) {
+ val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
+ editView.hint = "url/json"
+ }
+ customView = alertBinding.root
+ okButton {
+ alertBinding.editView.text?.toString()?.let {
+ viewModel.importBookshelf(it, selectedGroup.groupId)
+ }
+ }
+ noButton()
+ neutralButton(R.string.select_file) {
+ FilePicker.selectFile(
+ this@BookshelfFragment,
+ requestCodeImportBookshelf,
+ allowExtensions = arrayOf("txt", "json")
+ )
+ }
+ }.show()
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ when (requestCode) {
+ requestCodeImportBookshelf -> if (resultCode == RESULT_OK) {
+ data?.data?.let { uri ->
+ uri.readText(requireContext())?.let {
+ viewModel.importBookshelf(it, selectedGroup.groupId)
+ }
+ }
+ }
+ }
}
private inner class TabFragmentPageAdapter(fm: FragmentManager) :
diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt
index 0e159277c..1d26c7159 100644
--- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt
+++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt
@@ -8,8 +8,10 @@ import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookGroup
import io.legado.app.data.entities.BookSource
import io.legado.app.model.webBook.WebBook
-import io.legado.app.utils.NetworkUtils
+import io.legado.app.utils.*
import kotlinx.coroutines.Dispatchers.IO
+import rxhttp.wrapper.param.RxHttp
+import rxhttp.wrapper.param.toText
class BookshelfViewModel(application: Application) : BaseViewModel(application) {
@@ -62,6 +64,59 @@ class BookshelfViewModel(application: Application) : BaseViewModel(application)
}
}
+ fun exportBookshelf(books: List?, success: (json: String) -> Unit) {
+ execute {
+ val exportList = arrayListOf