Fix excluding NSFW

This commit is contained in:
Koitharu
2024-08-28 09:24:36 +03:00
parent 9cba6e694a
commit 05b5953f35
5 changed files with 19 additions and 4 deletions

View File

@@ -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'

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}
}

View File

@@ -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()