Fix excluding NSFW
This commit is contained in:
@@ -87,7 +87,7 @@ dependencies {
|
|||||||
exclude group: 'org.json', module: 'json'
|
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.kotlin:kotlin-stdlib:2.0.10'
|
||||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0-RC.2'
|
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)"
|
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.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})"
|
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
|
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)"
|
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.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})"
|
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
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import androidx.lifecycle.viewModelScope
|
|||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.CoroutineStart
|
import kotlinx.coroutines.CoroutineStart
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
@@ -15,12 +16,14 @@ import kotlinx.coroutines.flow.stateIn
|
|||||||
import kotlinx.coroutines.plus
|
import kotlinx.coroutines.plus
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
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.prefs.observeAsStateFlow
|
||||||
import org.koitharu.kotatsu.core.ui.BaseViewModel
|
import org.koitharu.kotatsu.core.ui.BaseViewModel
|
||||||
import org.koitharu.kotatsu.core.ui.model.DateTimeAgo
|
import org.koitharu.kotatsu.core.ui.model.DateTimeAgo
|
||||||
import org.koitharu.kotatsu.core.util.ext.MutableEventFlow
|
import org.koitharu.kotatsu.core.util.ext.MutableEventFlow
|
||||||
import org.koitharu.kotatsu.core.util.ext.calculateTimeAgo
|
import org.koitharu.kotatsu.core.util.ext.calculateTimeAgo
|
||||||
import org.koitharu.kotatsu.core.util.ext.call
|
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.MangaListMapper
|
||||||
import org.koitharu.kotatsu.list.domain.QuickFilterListener
|
import org.koitharu.kotatsu.list.domain.QuickFilterListener
|
||||||
import org.koitharu.kotatsu.list.ui.model.EmptyState
|
import org.koitharu.kotatsu.list.ui.model.EmptyState
|
||||||
@@ -67,7 +70,7 @@ class FeedViewModel @Inject constructor(
|
|||||||
val content = combine(
|
val content = combine(
|
||||||
observeHeader(),
|
observeHeader(),
|
||||||
quickFilter.appliedOptions,
|
quickFilter.appliedOptions,
|
||||||
combine(limit, quickFilter.appliedOptions, ::Pair)
|
combine(limit, quickFilter.appliedOptions.combineWithSettings(), ::Pair)
|
||||||
.flatMapLatest { repository.observeTrackingLog(it.first, it.second) },
|
.flatMapLatest { repository.observeTrackingLog(it.first, it.second) },
|
||||||
) { header, filters, list ->
|
) { header, filters, list ->
|
||||||
val result = ArrayList<ListModel>((list.size * 1.4).toInt().coerceAtLeast(3))
|
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 ->
|
private fun observeHeader() = isHeaderEnabled.flatMapLatest { hasHeader ->
|
||||||
if (hasHeader) {
|
if (hasHeader) {
|
||||||
quickFilter.appliedOptions.flatMapLatest {
|
quickFilter.appliedOptions.combineWithSettings().flatMapLatest {
|
||||||
repository.observeUpdatedManga(10, it)
|
repository.observeUpdatedManga(10, it)
|
||||||
}.map { mangaList ->
|
}.map { mangaList ->
|
||||||
if (mangaList.isEmpty()) {
|
if (mangaList.isEmpty()) {
|
||||||
@@ -156,4 +159,14 @@ class FeedViewModel @Inject constructor(
|
|||||||
flowOf(null)
|
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)) {
|
if (newChapters.isEmpty() || !applicationContext.checkNotificationPermission(CHANNEL_ID)) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
if (manga.isNsfw && settings.isTrackerNsfwDisabled) {
|
if (manga.isNsfw && (settings.isTrackerNsfwDisabled || settings.isNsfwContentDisabled)) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
val id = manga.url.hashCode()
|
val id = manga.url.hashCode()
|
||||||
|
|||||||
Reference in New Issue
Block a user