Fix excluding NSFW
This commit is contained in:
@@ -87,7 +87,7 @@ dependencies {
|
||||
exclude group: 'org.json', module: 'json'
|
||||
}
|
||||
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.0'
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib:2.0.10'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0-RC.2'
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ abstract class TrackLogsDao : MangaQueryBuilder.ConditionCallback {
|
||||
ListFilterOption.Macro.FAVORITE -> "EXISTS(SELECT * FROM favourites WHERE favourites.manga_id = track_logs.manga_id)"
|
||||
is ListFilterOption.Favorite -> "EXISTS(SELECT * FROM favourites WHERE favourites.manga_id = track_logs.manga_id AND favourites.category_id = ${option.category.id})"
|
||||
is ListFilterOption.Tag -> "EXISTS(SELECT * FROM manga_tags WHERE manga_tags.manga_id = track_logs.manga_id AND tag_id = ${option.tagId})"
|
||||
ListFilterOption.Macro.NSFW -> "(SELECT nsfw FROM manga WHERE manga.manga_id = track_logs.manga_id) = 1"
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,6 +81,7 @@ abstract class TracksDao : MangaQueryBuilder.ConditionCallback {
|
||||
ListFilterOption.Macro.FAVORITE -> "EXISTS(SELECT * FROM favourites WHERE favourites.manga_id = tracks.manga_id)"
|
||||
is ListFilterOption.Favorite -> "EXISTS(SELECT * FROM favourites WHERE favourites.manga_id = tracks.manga_id AND favourites.category_id = ${option.category.id})"
|
||||
is ListFilterOption.Tag -> "EXISTS(SELECT * FROM manga_tags WHERE manga_tags.manga_id = tracks.manga_id AND tag_id = ${option.tagId})"
|
||||
ListFilterOption.Macro.NSFW -> "(SELECT nsfw FROM manga WHERE manga.manga_id = tracks.manga_id) = 1"
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.CoroutineStart
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.catch
|
||||
@@ -15,12 +16,14 @@ import kotlinx.coroutines.flow.stateIn
|
||||
import kotlinx.coroutines.plus
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||
import org.koitharu.kotatsu.core.prefs.observeAsFlow
|
||||
import org.koitharu.kotatsu.core.prefs.observeAsStateFlow
|
||||
import org.koitharu.kotatsu.core.ui.BaseViewModel
|
||||
import org.koitharu.kotatsu.core.ui.model.DateTimeAgo
|
||||
import org.koitharu.kotatsu.core.util.ext.MutableEventFlow
|
||||
import org.koitharu.kotatsu.core.util.ext.calculateTimeAgo
|
||||
import org.koitharu.kotatsu.core.util.ext.call
|
||||
import org.koitharu.kotatsu.list.domain.ListFilterOption
|
||||
import org.koitharu.kotatsu.list.domain.MangaListMapper
|
||||
import org.koitharu.kotatsu.list.domain.QuickFilterListener
|
||||
import org.koitharu.kotatsu.list.ui.model.EmptyState
|
||||
@@ -67,7 +70,7 @@ class FeedViewModel @Inject constructor(
|
||||
val content = combine(
|
||||
observeHeader(),
|
||||
quickFilter.appliedOptions,
|
||||
combine(limit, quickFilter.appliedOptions, ::Pair)
|
||||
combine(limit, quickFilter.appliedOptions.combineWithSettings(), ::Pair)
|
||||
.flatMapLatest { repository.observeTrackingLog(it.first, it.second) },
|
||||
) { header, filters, list ->
|
||||
val result = ArrayList<ListModel>((list.size * 1.4).toInt().coerceAtLeast(3))
|
||||
@@ -141,7 +144,7 @@ class FeedViewModel @Inject constructor(
|
||||
|
||||
private fun observeHeader() = isHeaderEnabled.flatMapLatest { hasHeader ->
|
||||
if (hasHeader) {
|
||||
quickFilter.appliedOptions.flatMapLatest {
|
||||
quickFilter.appliedOptions.combineWithSettings().flatMapLatest {
|
||||
repository.observeUpdatedManga(10, it)
|
||||
}.map { mangaList ->
|
||||
if (mangaList.isEmpty()) {
|
||||
@@ -156,4 +159,14 @@ class FeedViewModel @Inject constructor(
|
||||
flowOf(null)
|
||||
}
|
||||
}
|
||||
|
||||
private fun Flow<Set<ListFilterOption>>.combineWithSettings(): Flow<Set<ListFilterOption>> = combine(
|
||||
settings.observeAsFlow(AppSettings.KEY_DISABLE_NSFW) { isNsfwContentDisabled },
|
||||
) { filters, skipNsfw ->
|
||||
if (skipNsfw) {
|
||||
filters + ListFilterOption.Inverted(ListFilterOption.Macro.NSFW, R.drawable.ic_sfw, R.string.sfw, null)
|
||||
} else {
|
||||
filters
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ class TrackerNotificationHelper @Inject constructor(
|
||||
if (newChapters.isEmpty() || !applicationContext.checkNotificationPermission(CHANNEL_ID)) {
|
||||
return null
|
||||
}
|
||||
if (manga.isNsfw && settings.isTrackerNsfwDisabled) {
|
||||
if (manga.isNsfw && (settings.isTrackerNsfwDisabled || settings.isNsfwContentDisabled)) {
|
||||
return null
|
||||
}
|
||||
val id = manga.url.hashCode()
|
||||
|
||||
Reference in New Issue
Block a user