Merge pull request #50 from Celeter/master

优化老书源转新书源
pull/51/head
kunfei 5 years ago committed by GitHub
commit 7870f39ac6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 129
      app/src/main/java/io/legado/app/help/storage/OldRule.kt

@ -9,6 +9,7 @@ import io.legado.app.utils.GSON
import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.readInt
import io.legado.app.utils.readString
import io.legado.app.utils.readBool
import java.util.regex.Pattern
object OldRule {
@ -26,7 +27,7 @@ object OldRule {
val jsonItem = jsonPath.parse(json.trim())
bookSourceUrl = jsonItem.readString("bookSourceUrl") ?: ""
bookSourceName = jsonItem.readString("bookSourceName") ?: ""
bookSourceGroup = jsonItem.readString("bookSourceGroup") ?: ""
bookSourceGroup = jsonItem.readString("bookSourceGroup")
loginUrl = jsonItem.readString("loginUrl")
bookUrlPattern = jsonItem.readString("ruleBookUrlPattern")
customOrder = jsonItem.readInt("serialNumber") ?: 0
@ -35,56 +36,57 @@ object OldRule {
exploreUrl = toNewUrls(jsonItem.readString("ruleFindUrl"))
bookSourceType =
if (jsonItem.readString("bookSourceType") == "AUDIO") BookType.audio else BookType.default
enabled = jsonItem.readBool("enable") ?: true
if (exploreUrl.isNullOrBlank()) {
enabledExplore = false
}
val searchRule = SearchRule(
bookList = jsonItem.readString("ruleSearchList"),
name = jsonItem.readString("ruleSearchName"),
author = jsonItem.readString("ruleSearchAuthor"),
intro = jsonItem.readString("ruleSearchIntroduce"),
kind = jsonItem.readString("ruleSearchKind"),
bookUrl = jsonItem.readString("ruleSearchNoteUrl"),
coverUrl = jsonItem.readString("ruleSearchCoverUrl"),
lastChapter = jsonItem.readString("ruleSearchLastChapter")
bookList = toNewRule(jsonItem.readString("ruleSearchList")),
name = toNewRule(jsonItem.readString("ruleSearchName")),
author = toNewRule(jsonItem.readString("ruleSearchAuthor")),
intro = toNewRule(jsonItem.readString("ruleSearchIntroduce")),
kind = toNewRule(jsonItem.readString("ruleSearchKind")),
bookUrl = toNewRule(jsonItem.readString("ruleSearchNoteUrl")),
coverUrl = toNewRule(jsonItem.readString("ruleSearchCoverUrl")),
lastChapter = toNewRule(jsonItem.readString("ruleSearchLastChapter"))
)
ruleSearch = GSON.toJson(searchRule)
val exploreRule = ExploreRule(
bookList = jsonItem.readString("ruleFindList"),
name = jsonItem.readString("ruleFindName"),
author = jsonItem.readString("ruleFindAuthor"),
intro = jsonItem.readString("ruleFindIntroduce"),
kind = jsonItem.readString("ruleFindKind"),
bookUrl = jsonItem.readString("ruleFindNoteUrl"),
coverUrl = jsonItem.readString("ruleFindCoverUrl"),
lastChapter = jsonItem.readString("ruleFindLastChapter")
bookList = toNewRule(jsonItem.readString("ruleFindList")),
name = toNewRule(jsonItem.readString("ruleFindName")),
author = toNewRule(jsonItem.readString("ruleFindAuthor")),
intro = toNewRule(jsonItem.readString("ruleFindIntroduce")),
kind = toNewRule(jsonItem.readString("ruleFindKind")),
bookUrl = toNewRule(jsonItem.readString("ruleFindNoteUrl")),
coverUrl = toNewRule(jsonItem.readString("ruleFindCoverUrl")),
lastChapter = toNewRule(jsonItem.readString("ruleFindLastChapter"))
)
ruleExplore = GSON.toJson(exploreRule)
val bookInfoRule = BookInfoRule(
init = jsonItem.readString("ruleBookInfoInit"),
name = jsonItem.readString("ruleBookName"),
author = jsonItem.readString("ruleBookAuthor"),
intro = jsonItem.readString("ruleIntroduce"),
kind = jsonItem.readString("ruleBookKind"),
coverUrl = jsonItem.readString("ruleCoverUrl"),
lastChapter = jsonItem.readString("ruleBookLastChapter"),
tocUrl = jsonItem.readString("ruleChapterUrl")
init = toNewRule(jsonItem.readString("ruleBookInfoInit")),
name = toNewRule(jsonItem.readString("ruleBookName")),
author = toNewRule(jsonItem.readString("ruleBookAuthor")),
intro = toNewRule(jsonItem.readString("ruleIntroduce")),
kind = toNewRule(jsonItem.readString("ruleBookKind")),
coverUrl = toNewRule(jsonItem.readString("ruleCoverUrl")),
lastChapter = toNewRule(jsonItem.readString("ruleBookLastChapter")),
tocUrl = toNewRule(jsonItem.readString("ruleChapterUrl"))
)
ruleBookInfo = GSON.toJson(bookInfoRule)
val chapterRule = TocRule(
chapterList = jsonItem.readString("ruleChapterList"),
chapterName = jsonItem.readString("ruleChapterName"),
chapterUrl = jsonItem.readString("ruleContentUrl"),
nextTocUrl = jsonItem.readString("ruleChapterUrlNext")
chapterList = toNewRule(jsonItem.readString("ruleChapterList")),
chapterName = toNewRule(jsonItem.readString("ruleChapterName")),
chapterUrl = toNewRule(jsonItem.readString("ruleContentUrl")),
nextTocUrl = toNewRule(jsonItem.readString("ruleChapterUrlNext"))
)
ruleToc = GSON.toJson(chapterRule)
var content = jsonItem.readString("ruleBookContent") ?: ""
var content = toNewRule(jsonItem.readString("ruleBookContent")) ?: ""
if (content.startsWith("$") && !content.startsWith("$.")) {
content = content.substring(1)
}
val contentRule = ContentRule(
content = content,
nextContentUrl = jsonItem.readString("ruleContentUrlNext")
nextContentUrl = toNewRule(jsonItem.readString("ruleContentUrlNext"))
)
ruleContent = GSON.toJson(contentRule)
}
@ -93,21 +95,64 @@ object OldRule {
return source
}
private fun toNewUrls(oldUrl: String?): String? {
if (oldUrl == null) return null
if (!oldUrl.contains("\n") && !oldUrl.contains("&&"))
return toNewUrl(oldUrl)
val urls = oldUrl.split("(&&|\n)+".toRegex())
var newUrl = ""
for (url in urls) {
newUrl += toNewUrl(url)?.replace("\\n\\s*".toRegex(), "") + "\n"
// default规则适配
// #正则#替换内容 替换成 ##正则##替换内容
// | 替换成 ||
// & 替换成 &&
private fun toNewRule(oldRule: String?): String? {
if (oldRule.isNullOrBlank()) return null
var newRule = oldRule
var reverse = false
if (oldRule.startsWith("-")) {
reverse = true
newRule = oldRule.substring(1)
}
if (!newRule.startsWith("@CSS:", true) &&
!newRule.startsWith("@XPath:", true) &&
!newRule.startsWith("//") &&
!newRule.startsWith("##") &&
!newRule.startsWith(":")
) {
if (newRule.contains("#") && !newRule.contains("##")) {
newRule = oldRule.replace("#", "##")
}
if (newRule.contains("|") && !newRule.contains("||")) {
if (newRule.contains("##")) {
var list = newRule.split("##")
if (list[0].contains("|")) {
newRule = list[0].replace("|", "||")
for (i in 1 until list.size) {
newRule += "##" + list[i]
}
}
} else {
newRule = newRule.replace("|", "||")
}
}
return newUrl
if (newRule.contains("&") && !newRule.contains("&&")) {
newRule = newRule.replace("&", "&&")
}
}
if (reverse) {
newRule += "-"
}
return newRule
}
private fun toNewUrls(oldUrls: String?): String? {
if (oldUrls.isNullOrBlank()) return null
if (!oldUrls.contains("\n") && !oldUrls.contains("&&"))
return toNewUrl(oldUrls)
val urls = oldUrls.split("(&&|\n)+".toRegex())
val newUrls = urls.map {
toNewUrl(it)?.replace("\n\\s*".toRegex(),"")
}.joinToString("\n")
return newUrls
}
private fun toNewUrl(oldUrl: String?): String? {
if (oldUrl == null) return null
if (oldUrl.isNullOrBlank()) return null
var url: String = oldUrl
if (oldUrl.startsWith("<js>", true)) {
url = url.replace("=searchKey", "={{key}}")

Loading…
Cancel
Save