优化rss相关 (#4403)
* js变量中增加rssArticle;消除ide警告 * 修改提示按钮 * rss收藏页面增加分组查看和跳转
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
|baseUrl|当前url,String |
|
|baseUrl|当前url,String |
|
||||||
|result|上一步的结果|
|
|result|上一步的结果|
|
||||||
|book|[书籍类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/Book.kt)|
|
|book|[书籍类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/Book.kt)|
|
||||||
|
|rssArticle|[Article类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/RssArticle.kt)|
|
||||||
|chapter|[章节类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/BookChapter.kt)|
|
|chapter|[章节类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/BookChapter.kt)|
|
||||||
|source|[基础书源类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/BaseSource.kt)|
|
|source|[基础书源类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/data/entities/BaseSource.kt)|
|
||||||
|cookie|[cookie操作类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/help/http/CookieStore.kt)|
|
|cookie|[cookie操作类](https://github.com/gedoor/legado/blob/master/app/src/main/java/io/legado/app/help/http/CookieStore.kt)|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import io.legado.app.data.entities.BaseSource
|
|||||||
import io.legado.app.data.entities.Book
|
import io.legado.app.data.entities.Book
|
||||||
import io.legado.app.data.entities.BookChapter
|
import io.legado.app.data.entities.BookChapter
|
||||||
import io.legado.app.data.entities.BookSource
|
import io.legado.app.data.entities.BookSource
|
||||||
|
import io.legado.app.data.entities.RssArticle
|
||||||
import io.legado.app.help.CacheManager
|
import io.legado.app.help.CacheManager
|
||||||
import io.legado.app.help.JsExtensions
|
import io.legado.app.help.JsExtensions
|
||||||
import io.legado.app.help.http.CookieStore
|
import io.legado.app.help.http.CookieStore
|
||||||
@@ -27,6 +28,7 @@ import org.apache.commons.text.StringEscapeUtils
|
|||||||
import org.jsoup.nodes.Node
|
import org.jsoup.nodes.Node
|
||||||
import org.mozilla.javascript.NativeObject
|
import org.mozilla.javascript.NativeObject
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
|
import java.util.Locale
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
import kotlin.collections.component1
|
import kotlin.collections.component1
|
||||||
import kotlin.collections.component2
|
import kotlin.collections.component2
|
||||||
@@ -45,6 +47,7 @@ class AnalyzeRule(
|
|||||||
) : JsExtensions {
|
) : JsExtensions {
|
||||||
|
|
||||||
val book get() = ruleData as? BaseBook
|
val book get() = ruleData as? BaseBook
|
||||||
|
val rssArticle get() = ruleData as? RssArticle
|
||||||
|
|
||||||
var chapter: BookChapter? = null
|
var chapter: BookChapter? = null
|
||||||
var nextChapterUrl: String? = null
|
var nextChapterUrl: String? = null
|
||||||
@@ -199,7 +202,7 @@ class AnalyzeRule(
|
|||||||
}
|
}
|
||||||
if (sourceRule.replaceRegex.isNotEmpty() && result is List<*>) {
|
if (sourceRule.replaceRegex.isNotEmpty() && result is List<*>) {
|
||||||
val newList = ArrayList<String>()
|
val newList = ArrayList<String>()
|
||||||
for (item in result) {
|
for (item in result as List<*>) {
|
||||||
newList.add(replaceRegex(item.toString(), sourceRule))
|
newList.add(replaceRegex(item.toString(), sourceRule))
|
||||||
}
|
}
|
||||||
result = newList
|
result = newList
|
||||||
@@ -212,12 +215,12 @@ class AnalyzeRule(
|
|||||||
}
|
}
|
||||||
if (result == null) return null
|
if (result == null) return null
|
||||||
if (result is String) {
|
if (result is String) {
|
||||||
result = result.split("\n")
|
result = (result as String).split("\n")
|
||||||
}
|
}
|
||||||
if (isUrl) {
|
if (isUrl) {
|
||||||
val urlList = ArrayList<String>()
|
val urlList = ArrayList<String>()
|
||||||
if (result is List<*>) {
|
if (result is List<*>) {
|
||||||
for (url in result) {
|
for (url in result as List<*>) {
|
||||||
val absoluteURL = NetworkUtils.getAbsoluteURL(redirectUrl, url.toString())
|
val absoluteURL = NetworkUtils.getAbsoluteURL(redirectUrl, url.toString())
|
||||||
if (absoluteURL.isNotEmpty() && !urlList.contains(absoluteURL)) {
|
if (absoluteURL.isNotEmpty() && !urlList.contains(absoluteURL)) {
|
||||||
urlList.add(absoluteURL)
|
urlList.add(absoluteURL)
|
||||||
@@ -650,7 +653,7 @@ class AnalyzeRule(
|
|||||||
jsEval is String -> infoVal.insert(0, jsEval)
|
jsEval is String -> infoVal.insert(0, jsEval)
|
||||||
jsEval is Double && jsEval % 1.0 == 0.0 -> infoVal.insert(
|
jsEval is Double && jsEval % 1.0 == 0.0 -> infoVal.insert(
|
||||||
0,
|
0,
|
||||||
String.format("%.0f", jsEval)
|
String.format(Locale.getDefault(), "%.0f", jsEval)
|
||||||
)
|
)
|
||||||
|
|
||||||
else -> infoVal.insert(0, jsEval.toString())
|
else -> infoVal.insert(0, jsEval.toString())
|
||||||
@@ -744,6 +747,7 @@ class AnalyzeRule(
|
|||||||
bindings["title"] = chapter?.title
|
bindings["title"] = chapter?.title
|
||||||
bindings["src"] = content
|
bindings["src"] = content
|
||||||
bindings["nextChapterUrl"] = nextChapterUrl
|
bindings["nextChapterUrl"] = nextChapterUrl
|
||||||
|
bindings["rssArticle"] = rssArticle
|
||||||
}
|
}
|
||||||
val scope = RhinoScriptEngine.getRuntimeScope(bindings)
|
val scope = RhinoScriptEngine.getRuntimeScope(bindings)
|
||||||
source?.getShareScope()?.let {
|
source?.getShareScope()?.let {
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ class OtherConfigFragment : PreferenceFragment(),
|
|||||||
putPrefString(PreferKey.userAgent, userAgent)
|
putPrefString(PreferKey.userAgent, userAgent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
noButton()
|
cancelButton()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,13 @@
|
|||||||
package io.legado.app.ui.rss.favorites
|
package io.legado.app.ui.rss.favorites
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.Menu
|
||||||
|
import android.view.MenuItem
|
||||||
|
import android.view.SubMenu
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import io.legado.app.R
|
||||||
import io.legado.app.base.BaseActivity
|
import io.legado.app.base.BaseActivity
|
||||||
import io.legado.app.constant.AppLog
|
import io.legado.app.constant.AppLog
|
||||||
import io.legado.app.data.appDb
|
import io.legado.app.data.appDb
|
||||||
@@ -28,6 +32,7 @@ class RssFavoritesActivity : BaseActivity<ActivityRssFavoritesBinding>() {
|
|||||||
override val binding by viewBinding(ActivityRssFavoritesBinding::inflate)
|
override val binding by viewBinding(ActivityRssFavoritesBinding::inflate)
|
||||||
private val adapter by lazy { TabFragmentPageAdapter() }
|
private val adapter by lazy { TabFragmentPageAdapter() }
|
||||||
private var groupList = mutableListOf<String>()
|
private var groupList = mutableListOf<String>()
|
||||||
|
private var groupsMenu: SubMenu? = null
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
initView()
|
initView()
|
||||||
@@ -40,6 +45,28 @@ class RssFavoritesActivity : BaseActivity<ActivityRssFavoritesBinding>() {
|
|||||||
binding.tabLayout.setSelectedTabIndicatorColor(accentColor)
|
binding.tabLayout.setSelectedTabIndicatorColor(accentColor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
|
menuInflater.inflate(R.menu.main_explore, menu)
|
||||||
|
groupsMenu = menu.findItem(R.id.menu_group)?.subMenu
|
||||||
|
upGroupsMenu()
|
||||||
|
return super.onCompatCreateOptionsMenu(menu)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun upGroupsMenu() = groupsMenu?.let { subMenu ->
|
||||||
|
subMenu.removeGroup(R.id.menu_group_text)
|
||||||
|
groupList.forEachIndexed { index, it ->
|
||||||
|
subMenu.add(R.id.menu_group_text, Menu.NONE, index, it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
|
super.onCompatOptionsItemSelected(item)
|
||||||
|
if (item.groupId == R.id.menu_group_text) {
|
||||||
|
binding.viewPager.setCurrentItem(item.order)
|
||||||
|
}
|
||||||
|
return super.onCompatOptionsItemSelected(item)
|
||||||
|
}
|
||||||
|
|
||||||
private fun upFragments() {
|
private fun upFragments() {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
appDb.rssStarDao.flowGroups().catch {
|
appDb.rssStarDao.flowGroups().catch {
|
||||||
@@ -52,6 +79,9 @@ class RssFavoritesActivity : BaseActivity<ActivityRssFavoritesBinding>() {
|
|||||||
} else {
|
} else {
|
||||||
binding.tabLayout.visible()
|
binding.tabLayout.visible()
|
||||||
}
|
}
|
||||||
|
if (groupsMenu != null){
|
||||||
|
upGroupsMenu()
|
||||||
|
}
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user