Fix Library filter (#22)
This commit is contained in:
@@ -7,6 +7,7 @@ import android.text.InputType
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.preference.EditTextPreference
|
import androidx.preference.EditTextPreference
|
||||||
|
import androidx.preference.MultiSelectListPreference
|
||||||
import androidx.preference.SwitchPreferenceCompat
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
import eu.kanade.tachiyomi.AppInfo
|
import eu.kanade.tachiyomi.AppInfo
|
||||||
import eu.kanade.tachiyomi.extension.all.kavita.dto.AuthenticationDto
|
import eu.kanade.tachiyomi.extension.all.kavita.dto.AuthenticationDto
|
||||||
@@ -659,20 +660,23 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
|
|||||||
}
|
}
|
||||||
is LibrariesFilterGroup -> {
|
is LibrariesFilterGroup -> {
|
||||||
filter.state.forEach { libraryFilter ->
|
filter.state.forEach { libraryFilter ->
|
||||||
when ((libraryFilter as Filter.TriState).state) {
|
val library = libraryListMeta.find { it.name == (libraryFilter as Filter.TriState).name }
|
||||||
|
library?.let {
|
||||||
|
when (libraryFilter.state) {
|
||||||
STATE_INCLUDE -> filterV2.addStatement(
|
STATE_INCLUDE -> filterV2.addStatement(
|
||||||
FilterComparison.Contains,
|
FilterComparison.Contains,
|
||||||
FilterField.Libraries,
|
FilterField.Libraries,
|
||||||
libraryFilter.name,
|
library.id.toString(),
|
||||||
)
|
)
|
||||||
STATE_EXCLUDE -> filterV2.addStatement(
|
STATE_EXCLUDE -> filterV2.addStatement(
|
||||||
FilterComparison.NotContains,
|
FilterComparison.NotContains,
|
||||||
FilterField.Libraries,
|
FilterField.Libraries,
|
||||||
libraryFilter.name,
|
library.id.toString(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
is PubStatusFilterGroup -> {
|
is PubStatusFilterGroup -> {
|
||||||
filter.state.forEach { pubStatusFilter ->
|
filter.state.forEach { pubStatusFilter ->
|
||||||
if ((pubStatusFilter as Filter.CheckBox).state) {
|
if ((pubStatusFilter as Filter.CheckBox).state) {
|
||||||
@@ -1014,17 +1018,6 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
|
|||||||
val volumes = client.newCall(volumesRequest).execute().parseAs<List<VolumeDto>>()
|
val volumes = client.newCall(volumesRequest).execute().parseAs<List<VolumeDto>>()
|
||||||
|
|
||||||
Log.d(LOG_TAG, "Found ${volumes.size} volumes for series ${result.seriesId}")
|
Log.d(LOG_TAG, "Found ${volumes.size} volumes for series ${result.seriesId}")
|
||||||
// volumes.forEachIndexed { index, volume ->
|
|
||||||
// Log.d(
|
|
||||||
// LOG_TAG,
|
|
||||||
// "Volume #${index + 1}: " +
|
|
||||||
// "id=${volume.id}, " +
|
|
||||||
// "number=${volume.number}, " +
|
|
||||||
// "name=${volume.name}, " +
|
|
||||||
// "cover=${volume.coverImage.isNotBlank()}, " +
|
|
||||||
// "chapters=${volume.chapters.size}",
|
|
||||||
// )
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Find all volumes that have SingleFileVolume chapters and valid covers
|
// Find all volumes that have SingleFileVolume chapters and valid covers
|
||||||
val validVolumes = volumes.filter { volume ->
|
val validVolumes = volumes.filter { volume ->
|
||||||
@@ -1032,19 +1025,11 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
|
|||||||
ChapterType.of(chapter, volume) == ChapterType.SingleFileVolume
|
ChapterType.of(chapter, volume) == ChapterType.SingleFileVolume
|
||||||
}
|
}
|
||||||
val hasCover = volume.coverImage.isNotBlank()
|
val hasCover = volume.coverImage.isNotBlank()
|
||||||
// Log.d(
|
|
||||||
// LOG_TAG,
|
|
||||||
// "Volume ${volume.number} - " +
|
|
||||||
// "hasSingleFile: $hasSingleFile, " +
|
|
||||||
// "hasCover: $hasCover",
|
|
||||||
// )
|
|
||||||
hasSingleFile && hasCover
|
hasSingleFile && hasCover
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.d(LOG_TAG, "Found ${validVolumes.size} valid volumes with covers")
|
Log.d(LOG_TAG, "Found ${validVolumes.size} valid volumes with covers")
|
||||||
// validVolumes.forEach { volume ->
|
|
||||||
// Log.d(LOG_TAG, "Valid volume: #${volume.number} (id=${volume.id})")
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Get the last volume with a valid cover
|
// Get the last volume with a valid cover
|
||||||
val lastValidVolume = validVolumes.maxByOrNull { it.number }
|
val lastValidVolume = validVolumes.maxByOrNull { it.number }
|
||||||
@@ -1493,99 +1478,99 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
|
|||||||
/**
|
/**
|
||||||
* Loads the enabled filters if they are not empty so tachiyomi can show them to the user
|
* Loads the enabled filters if they are not empty so tachiyomi can show them to the user
|
||||||
*/
|
*/
|
||||||
// override fun getFilterList(): FilterList {
|
override fun getFilterList(): FilterList {
|
||||||
// val toggledFilters = getToggledFilters()
|
val toggledFilters = getToggledFilters()
|
||||||
//
|
|
||||||
// val filters = try {
|
val filters = try {
|
||||||
// val filtersLoaded = mutableListOf<Filter<*>>()
|
val filtersLoaded = mutableListOf<Filter<*>>()
|
||||||
//
|
|
||||||
// filtersLoaded.add(SortFilter(sortableList.map { it.first }.toTypedArray()))
|
filtersLoaded.add(SortFilter(sortableList.map { it.first }.toTypedArray()))
|
||||||
//
|
|
||||||
// if (smartFilters.isNotEmpty()) {
|
if (smartFilters.isNotEmpty()) {
|
||||||
// filtersLoaded.add(SmartFiltersFilter(smartFilters.map { it.name }.toTypedArray()))
|
filtersLoaded.add(SmartFiltersFilter(smartFilters.map { it.name }.toTypedArray()))
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// filtersLoaded.add(SpecialListFilter())
|
filtersLoaded.add(SpecialListFilter())
|
||||||
//
|
|
||||||
// if (toggledFilters.contains("Read Status")) {
|
if (toggledFilters.contains("Read Status")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// StatusFilterGroup(
|
StatusFilterGroup(
|
||||||
// listOf(
|
listOf(
|
||||||
// "notRead",
|
"notRead",
|
||||||
// "inProgress",
|
"inProgress",
|
||||||
// "read",
|
"read",
|
||||||
// ).map { StatusFilter(it) },
|
).map { StatusFilter(it) },
|
||||||
// ),
|
),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (toggledFilters.contains("ReleaseYearRange")) {
|
if (toggledFilters.contains("ReleaseYearRange")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// ReleaseYearRangeGroup(
|
ReleaseYearRangeGroup(
|
||||||
// listOf("Min", "Max").map { ReleaseYearRange(it) },
|
listOf("Min", "Max").map { ReleaseYearRange(it) },
|
||||||
// ),
|
),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// if (genresListMeta.isNotEmpty() and toggledFilters.contains("Genres")) {
|
if (genresListMeta.isNotEmpty() and toggledFilters.contains("Genres")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// GenreFilterGroup(genresListMeta.map { GenreFilter(it.title) }),
|
GenreFilterGroup(genresListMeta.map { GenreFilter(it.title) }),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (tagsListMeta.isNotEmpty() and toggledFilters.contains("Tags")) {
|
if (tagsListMeta.isNotEmpty() and toggledFilters.contains("Tags")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// TagFilterGroup(tagsListMeta.map { TagFilter(it.title) }),
|
TagFilterGroup(tagsListMeta.map { TagFilter(it.title) }),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (ageRatingsListMeta.isNotEmpty() and toggledFilters.contains("Age Rating")) {
|
if (ageRatingsListMeta.isNotEmpty() and toggledFilters.contains("Age Rating")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// AgeRatingFilterGroup(ageRatingsListMeta.map { AgeRatingFilter(it.title) }),
|
AgeRatingFilterGroup(ageRatingsListMeta.map { AgeRatingFilter(it.title) }),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (toggledFilters.contains("Format")) {
|
if (toggledFilters.contains("Format")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// FormatsFilterGroup(
|
FormatsFilterGroup(
|
||||||
// listOf(
|
listOf(
|
||||||
// "Image",
|
"Image",
|
||||||
// "Archive",
|
"Archive",
|
||||||
// "Pdf",
|
"Pdf",
|
||||||
// "Unknown",
|
"Unknown",
|
||||||
// ).map { FormatFilter(it) },
|
).map { FormatFilter(it) },
|
||||||
// ),
|
),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (collectionsListMeta.isNotEmpty() and toggledFilters.contains("Collections")) {
|
if (collectionsListMeta.isNotEmpty() and toggledFilters.contains("Collections")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// CollectionFilterGroup(collectionsListMeta.map { CollectionFilter(it.title) }),
|
CollectionFilterGroup(collectionsListMeta.map { CollectionFilter(it.title) }),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (languagesListMeta.isNotEmpty() and toggledFilters.contains("Languages")) {
|
if (languagesListMeta.isNotEmpty() and toggledFilters.contains("Languages")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// LanguageFilterGroup(languagesListMeta.map { LanguageFilter(it.title) }),
|
LanguageFilterGroup(languagesListMeta.map { LanguageFilter(it.title) }),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (libraryListMeta.isNotEmpty() and toggledFilters.contains("Libraries")) {
|
if (libraryListMeta.isNotEmpty() and toggledFilters.contains("Libraries")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// LibrariesFilterGroup(libraryListMeta.map { LibraryFilter(it.name) }),
|
LibrariesFilterGroup(libraryListMeta.map { LibraryFilter(it.name) }),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (pubStatusListMeta.isNotEmpty() and toggledFilters.contains("Publication Status")) {
|
if (pubStatusListMeta.isNotEmpty() and toggledFilters.contains("Publication Status")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// PubStatusFilterGroup(pubStatusListMeta.map { PubStatusFilter(it.title) }),
|
PubStatusFilterGroup(pubStatusListMeta.map { PubStatusFilter(it.title) }),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
// if (pubStatusListMeta.isNotEmpty() and toggledFilters.contains("Rating")) {
|
if (pubStatusListMeta.isNotEmpty() and toggledFilters.contains("Rating")) {
|
||||||
// filtersLoaded.add(
|
filtersLoaded.add(
|
||||||
// UserRating(),
|
UserRating(),
|
||||||
// )
|
)
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// filtersLoaded
|
filtersLoaded
|
||||||
// } catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
// Log.e(LOG_TAG, "[FILTERS] Error while creating filter list", e)
|
Log.e(LOG_TAG, "[FILTERS] Error while creating filter list", e)
|
||||||
// FilterList(emptyList())
|
FilterList(emptyList())
|
||||||
// }
|
}
|
||||||
// return FilterList(filters)
|
return FilterList(filters)
|
||||||
// }
|
}
|
||||||
|
|
||||||
class LoginErrorException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) {
|
class LoginErrorException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) {
|
||||||
constructor(cause: Throwable) : this(null, cause)
|
constructor(cause: Throwable) : this(null, cause)
|
||||||
@@ -1629,21 +1614,21 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
|
|||||||
helper.intl["pref_opds_summary"],
|
helper.intl["pref_opds_summary"],
|
||||||
)
|
)
|
||||||
|
|
||||||
// val enabledFiltersPref = MultiSelectListPreference(screen.context).apply {
|
val enabledFiltersPref = MultiSelectListPreference(screen.context).apply {
|
||||||
// key = KavitaConstants.toggledFiltersPref
|
key = KavitaConstants.toggledFiltersPref
|
||||||
// title = helper.intl["pref_filters_title"]
|
title = helper.intl["pref_filters_title"]
|
||||||
// summary = helper.intl["pref_filters_summary"]
|
summary = helper.intl["pref_filters_summary"]
|
||||||
// entries = KavitaConstants.filterPrefEntries
|
entries = KavitaConstants.filterPrefEntries
|
||||||
// entryValues = KavitaConstants.filterPrefEntriesValue
|
entryValues = KavitaConstants.filterPrefEntriesValue
|
||||||
// setDefaultValue(KavitaConstants.defaultFilterPrefEntries)
|
setDefaultValue(KavitaConstants.defaultFilterPrefEntries)
|
||||||
// setOnPreferenceChangeListener { _, newValue ->
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
// @Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
// val checkValue = newValue as Set<String>
|
val checkValue = newValue as Set<String>
|
||||||
// preferences.edit()
|
preferences.edit()
|
||||||
// .putStringSet(KavitaConstants.toggledFiltersPref, checkValue)
|
.putStringSet(KavitaConstants.toggledFiltersPref, checkValue)
|
||||||
// .commit()
|
.commit()
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
val customSourceNamePref = EditTextPreference(screen.context).apply {
|
val customSourceNamePref = EditTextPreference(screen.context).apply {
|
||||||
key = KavitaConstants.customSourceNamePref
|
key = KavitaConstants.customSourceNamePref
|
||||||
title = helper.intl["pref_customsource_title"]
|
title = helper.intl["pref_customsource_title"]
|
||||||
@@ -1742,7 +1727,7 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
|
|||||||
}
|
}
|
||||||
}.also(screen::addPreference)
|
}.also(screen::addPreference)
|
||||||
|
|
||||||
// screen.addPreference(enabledFiltersPref)
|
screen.addPreference(enabledFiltersPref)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun androidx.preference.PreferenceScreen.editTextPreference(
|
private fun androidx.preference.PreferenceScreen.editTextPreference(
|
||||||
@@ -1804,7 +1789,7 @@ class Kavita(private val suffix: String = "") : ConfigurableSource, UnmeteredSou
|
|||||||
private fun getPrefBaseUrl(): String = preferences.getString("BASEURL", "")!!
|
private fun getPrefBaseUrl(): String = preferences.getString("BASEURL", "")!!
|
||||||
private fun getPrefApiUrl(): String = preferences.getString("APIURL", "")!!
|
private fun getPrefApiUrl(): String = preferences.getString("APIURL", "")!!
|
||||||
private fun getPrefKey(): String = preferences.getString("APIKEY", "")!!
|
private fun getPrefKey(): String = preferences.getString("APIKEY", "")!!
|
||||||
// private fun getToggledFilters() = preferences.getStringSet(KavitaConstants.toggledFiltersPref, KavitaConstants.defaultFilterPrefEntries)!!
|
private fun getToggledFilters() = preferences.getStringSet(KavitaConstants.toggledFiltersPref, KavitaConstants.defaultFilterPrefEntries)!!
|
||||||
|
|
||||||
private val SharedPreferences.score: Boolean
|
private val SharedPreferences.score: Boolean
|
||||||
get() = getBoolean(SCORE_PREF, SCORE_DEFAULT)
|
get() = getBoolean(SCORE_PREF, SCORE_DEFAULT)
|
||||||
|
|||||||
@@ -23,18 +23,7 @@ object KavitaConstants {
|
|||||||
"Publication Status",
|
"Publication Status",
|
||||||
"Rating",
|
"Rating",
|
||||||
"Age Rating",
|
"Age Rating",
|
||||||
"Writers",
|
|
||||||
"Penciller",
|
|
||||||
"Inker",
|
|
||||||
"Colorist",
|
|
||||||
"Letterer",
|
|
||||||
"Cover Artist",
|
|
||||||
"Editor",
|
|
||||||
"Publisher",
|
|
||||||
"Character",
|
|
||||||
"Translators",
|
|
||||||
"ReleaseYearRange",
|
"ReleaseYearRange",
|
||||||
"Average Rating",
|
|
||||||
"Random",
|
"Random",
|
||||||
"Read Progress",
|
"Read Progress",
|
||||||
)
|
)
|
||||||
@@ -51,18 +40,7 @@ object KavitaConstants {
|
|||||||
"Publication Status",
|
"Publication Status",
|
||||||
"Rating",
|
"Rating",
|
||||||
"Age Rating",
|
"Age Rating",
|
||||||
"Writers",
|
|
||||||
"Penciller",
|
|
||||||
"Inker",
|
|
||||||
"Colorist",
|
|
||||||
"Letterer",
|
|
||||||
"CoverArtist",
|
|
||||||
"Editor",
|
|
||||||
"Publisher",
|
|
||||||
"Character",
|
|
||||||
"Translators",
|
|
||||||
"ReleaseYearRange",
|
"ReleaseYearRange",
|
||||||
"Average Rating",
|
|
||||||
"Random",
|
"Random",
|
||||||
"Read Progress",
|
"Read Progress",
|
||||||
)
|
)
|
||||||
@@ -79,18 +57,7 @@ object KavitaConstants {
|
|||||||
"Publication Status",
|
"Publication Status",
|
||||||
"Rating",
|
"Rating",
|
||||||
"Age Rating",
|
"Age Rating",
|
||||||
"Writers",
|
|
||||||
"Penciller",
|
|
||||||
"Inker",
|
|
||||||
"Colorist",
|
|
||||||
"Letterer",
|
|
||||||
"CoverArtist",
|
|
||||||
"Editor",
|
|
||||||
"Publisher",
|
|
||||||
"Character",
|
|
||||||
"Translators",
|
|
||||||
"ReleaseYearRange",
|
"ReleaseYearRange",
|
||||||
"Average Rating",
|
|
||||||
"Random",
|
"Random",
|
||||||
"Read Progress",
|
"Read Progress",
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user