Implemented Source Selector
This commit is contained in:
@@ -18,9 +18,13 @@
|
||||
|
||||
package xyz.quaver.pupil.sources
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.Drawable
|
||||
import androidx.core.content.ContextCompat
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import xyz.quaver.pupil.R
|
||||
import kotlin.reflect.KClass
|
||||
import xyz.quaver.pupil.sources.hitomi.Hitomi
|
||||
import xyz.quaver.pupil.sources.hitomi.Hiyobi
|
||||
|
||||
data class SearchResult(
|
||||
val id: String,
|
||||
@@ -49,8 +53,28 @@ data class SearchResult(
|
||||
}
|
||||
}
|
||||
|
||||
interface Source<Query_SortMode: Enum<*>> {
|
||||
val querySortModeClass: KClass<Query_SortMode>?
|
||||
enum class DefaultSortMode {
|
||||
DEFAULT
|
||||
}
|
||||
interface Source<Query_SortMode : Enum<Query_SortMode>> {
|
||||
val name: String
|
||||
val iconResID: Int
|
||||
val availableSortMode: Array<Query_SortMode>
|
||||
|
||||
suspend fun query(query: String, range: IntRange, sortMode: Query_SortMode? = null) : Pair<Channel<SearchResult>, Int>
|
||||
suspend fun query(query: String, range: IntRange, sortMode: Enum<*>) : Pair<Channel<SearchResult>, Int>
|
||||
}
|
||||
|
||||
val sources = mutableMapOf<String, Source<*>>()
|
||||
val sourceIcons = mutableMapOf<String, Drawable?>()
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun initSources(context: Context) {
|
||||
// Add Default Sources
|
||||
listOf(
|
||||
Hitomi(),
|
||||
Hiyobi()
|
||||
).forEach {
|
||||
sources[it.name] = it
|
||||
sourceIcons[it.name] = ContextCompat.getDrawable(context, it.iconResID)
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ package xyz.quaver.pupil.sources.hitomi
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import xyz.quaver.hitomi.*
|
||||
import xyz.quaver.pupil.R
|
||||
import xyz.quaver.pupil.sources.SearchResult
|
||||
import xyz.quaver.pupil.sources.SearchResult.ExtraType
|
||||
import xyz.quaver.pupil.sources.Source
|
||||
@@ -30,18 +31,20 @@ import kotlin.math.min
|
||||
|
||||
class Hitomi : Source<Hitomi.SortMode> {
|
||||
|
||||
override val querySortModeClass = SortMode::class
|
||||
|
||||
enum class SortMode {
|
||||
NEWEST,
|
||||
POPULAR
|
||||
}
|
||||
|
||||
override val name: String = "hitomi.la"
|
||||
override val iconResID: Int = R.drawable.hitomi
|
||||
override val availableSortMode: Array<SortMode> = SortMode.values()
|
||||
|
||||
var cachedQuery: String? = null
|
||||
var cachedSortMode: SortMode? = null
|
||||
val cache = mutableListOf<Int>()
|
||||
|
||||
override suspend fun query(query: String, range: IntRange, sortMode: SortMode?): Pair<Channel<SearchResult>, Int> {
|
||||
override suspend fun query(query: String, range: IntRange, sortMode: Enum<*>): Pair<Channel<SearchResult>, Int> {
|
||||
if (cachedQuery != query || cachedSortMode != sortMode || cache.isEmpty()) {
|
||||
cachedQuery = null
|
||||
cache.clear()
|
||||
|
||||
@@ -23,14 +23,19 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.launch
|
||||
import xyz.quaver.hiyobi.*
|
||||
import xyz.quaver.pupil.R
|
||||
import xyz.quaver.pupil.sources.DefaultSortMode
|
||||
import xyz.quaver.pupil.sources.SearchResult
|
||||
import xyz.quaver.pupil.sources.Source
|
||||
import xyz.quaver.pupil.util.wordCapitalize
|
||||
|
||||
class Hiyobi : Source<Enum<*>> {
|
||||
override val querySortModeClass = null
|
||||
class Hiyobi : Source<DefaultSortMode> {
|
||||
|
||||
override suspend fun query(query: String, range: IntRange, sortMode: Enum<*>?): Pair<Channel<SearchResult>, Int> {
|
||||
override val name: String = "hiyobi.me"
|
||||
override val iconResID: Int = R.drawable.ic_hiyobi
|
||||
override val availableSortMode: Array<DefaultSortMode> = DefaultSortMode.values()
|
||||
|
||||
override suspend fun query(query: String, range: IntRange, sortMode: Enum<*>): Pair<Channel<SearchResult>, Int> {
|
||||
val channel = Channel<SearchResult>()
|
||||
|
||||
val (results, total) = if (query.isEmpty())
|
||||
@@ -59,7 +64,7 @@ class Hiyobi : Source<Enum<*>> {
|
||||
mapOf(
|
||||
SearchResult.ExtraType.CHARACTER to { galleryBlock.characters.joinToString { it.value.wordCapitalize() } },
|
||||
SearchResult.ExtraType.SERIES to { galleryBlock.parodys.joinToString { it.value.wordCapitalize() } },
|
||||
SearchResult.ExtraType.TYPE to { galleryBlock.type.name.wordCapitalize() },
|
||||
SearchResult.ExtraType.TYPE to { galleryBlock.type.name.replace('_', ' ').wordCapitalize() },
|
||||
SearchResult.ExtraType.PAGECOUNT to { getGalleryInfo(galleryBlock.id).files.size.toString() }
|
||||
),
|
||||
galleryBlock.tags.map { it.value }
|
||||
|
||||
Reference in New Issue
Block a user