Add Better Extension Search (#6359)
Add support to searching with source name, id and baseUrl for a extension's sources. (cherry picked from commit 9e83130bd8a8fac1b13b0d093c301cd93892c27e)
This commit is contained in:
parent
a9f037dc8b
commit
13beef4ebe
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.extension.api
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
|
import eu.kanade.tachiyomi.extension.model.AvailableExtensionSources
|
||||||
import eu.kanade.tachiyomi.extension.model.Extension
|
import eu.kanade.tachiyomi.extension.model.Extension
|
||||||
import eu.kanade.tachiyomi.extension.model.LoadResult
|
import eu.kanade.tachiyomi.extension.model.LoadResult
|
||||||
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
||||||
@ -98,6 +99,7 @@ internal class ExtensionGithubApi {
|
|||||||
versionCode = it.code,
|
versionCode = it.code,
|
||||||
lang = it.lang,
|
lang = it.lang,
|
||||||
isNsfw = it.nsfw == 1,
|
isNsfw = it.nsfw == 1,
|
||||||
|
sources = it.sources.toExtensionSources(),
|
||||||
apkName = it.apk,
|
apkName = it.apk,
|
||||||
iconUrl = "${/* SY --> */ repoUrl /* SY <-- */}icon/${it.apk.replace(".apk", ".png")}",
|
iconUrl = "${/* SY --> */ repoUrl /* SY <-- */}icon/${it.apk.replace(".apk", ".png")}",
|
||||||
// SY -->
|
// SY -->
|
||||||
@ -107,6 +109,16 @@ internal class ExtensionGithubApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun List<ExtensionSourceJsonObject>.toExtensionSources(): List<AvailableExtensionSources> {
|
||||||
|
return this.map {
|
||||||
|
AvailableExtensionSources(
|
||||||
|
name = it.name,
|
||||||
|
id = it.id,
|
||||||
|
baseUrl = it.baseUrl
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getApkUrl(extension: Extension.Available): String {
|
fun getApkUrl(extension: Extension.Available): String {
|
||||||
return /* SY --> */ "${extension.repoUrl}/apk/${extension.apkName}" /* SY <-- */
|
return /* SY --> */ "${extension.repoUrl}/apk/${extension.apkName}" /* SY <-- */
|
||||||
}
|
}
|
||||||
@ -128,8 +140,17 @@ private data class ExtensionJsonObject(
|
|||||||
val name: String,
|
val name: String,
|
||||||
val pkg: String,
|
val pkg: String,
|
||||||
val apk: String,
|
val apk: String,
|
||||||
val version: String,
|
|
||||||
val code: Long,
|
|
||||||
val lang: String,
|
val lang: String,
|
||||||
|
val code: Long,
|
||||||
|
val version: String,
|
||||||
val nsfw: Int,
|
val nsfw: Int,
|
||||||
|
val sources: List<ExtensionSourceJsonObject>,
|
||||||
|
)
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
private data class ExtensionSourceJsonObject(
|
||||||
|
val name: String,
|
||||||
|
val id: Long,
|
||||||
|
val baseUrl: String
|
||||||
|
|
||||||
)
|
)
|
||||||
|
@ -35,6 +35,7 @@ sealed class Extension {
|
|||||||
override val versionCode: Long,
|
override val versionCode: Long,
|
||||||
override val lang: String,
|
override val lang: String,
|
||||||
override val isNsfw: Boolean,
|
override val isNsfw: Boolean,
|
||||||
|
val sources: List<AvailableExtensionSources>,
|
||||||
val apkName: String,
|
val apkName: String,
|
||||||
val iconUrl: String,
|
val iconUrl: String,
|
||||||
// SY -->
|
// SY -->
|
||||||
@ -52,3 +53,9 @@ sealed class Extension {
|
|||||||
override val isNsfw: Boolean = false
|
override val isNsfw: Boolean = false
|
||||||
) : Extension()
|
) : Extension()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class AvailableExtensionSources(
|
||||||
|
val name: String,
|
||||||
|
val id: Long,
|
||||||
|
val baseUrl: String
|
||||||
|
)
|
||||||
|
@ -15,6 +15,7 @@ import eu.davidea.flexibleadapter.items.IFlexible
|
|||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.databinding.ExtensionControllerBinding
|
import eu.kanade.tachiyomi.databinding.ExtensionControllerBinding
|
||||||
import eu.kanade.tachiyomi.extension.model.Extension
|
import eu.kanade.tachiyomi.extension.model.Extension
|
||||||
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
||||||
@ -56,7 +57,8 @@ open class ExtensionController :
|
|||||||
return ExtensionPresenter()
|
return ExtensionPresenter()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createBinding(inflater: LayoutInflater) = ExtensionControllerBinding.inflate(inflater)
|
override fun createBinding(inflater: LayoutInflater) =
|
||||||
|
ExtensionControllerBinding.inflate(inflater)
|
||||||
|
|
||||||
override fun onViewCreated(view: View) {
|
override fun onViewCreated(view: View) {
|
||||||
super.onViewCreated(view)
|
super.onViewCreated(view)
|
||||||
@ -189,11 +191,27 @@ open class ExtensionController :
|
|||||||
|
|
||||||
private fun updateExtensionsList() {
|
private fun updateExtensionsList() {
|
||||||
if (query.isNotBlank()) {
|
if (query.isNotBlank()) {
|
||||||
val extensionNames = query.split(",")
|
val queries = query.split(",")
|
||||||
adapter?.updateDataSet(
|
adapter?.updateDataSet(
|
||||||
extensions.filter {
|
extensions.filter {
|
||||||
extensionNames.any { queriedName ->
|
queries.any { query ->
|
||||||
it.extension.name.contains(queriedName, ignoreCase = true)
|
when (it.extension) {
|
||||||
|
is Extension.Available -> {
|
||||||
|
it.extension.sources.any {
|
||||||
|
it.name.contains(query, ignoreCase = true) ||
|
||||||
|
it.baseUrl.contains(query, ignoreCase = true) ||
|
||||||
|
it.id == query.toLongOrNull()
|
||||||
|
} || it.extension.name.contains(query, ignoreCase = true)
|
||||||
|
}
|
||||||
|
is Extension.Installed -> {
|
||||||
|
it.extension.sources.any {
|
||||||
|
it.name.contains(query, ignoreCase = true) ||
|
||||||
|
it.id == query.toLongOrNull() ||
|
||||||
|
if (it is HttpSource) { it.baseUrl.contains(query, ignoreCase = true) } else false
|
||||||
|
} || it.extension.name.contains(query, ignoreCase = true)
|
||||||
|
}
|
||||||
|
is Extension.Untrusted -> it.extension.name.contains(query, ignoreCase = true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user