diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CaptchaNotifier.kt b/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CaptchaNotifier.kt index 817abfd6b..087387314 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CaptchaNotifier.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CaptchaNotifier.kt @@ -40,6 +40,7 @@ class CaptchaNotifier( .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setDefaults(NotificationCompat.DEFAULT_SOUND) .setSmallIcon(android.R.drawable.stat_notify_error) + .setGroup(GROUP_CAPTCHA) .setAutoCancel(true) .setVisibility( if (exception.source?.contentType == ContentType.HENTAI) { @@ -82,5 +83,6 @@ class CaptchaNotifier( private const val PARAM_IGNORE_CAPTCHA = "ignore_captcha" private const val CHANNEL_ID = "captcha" private const val TAG = CHANNEL_ID + private const val GROUP_CAPTCHA = "org.koitharu.kotatsu.CAPTCHA" } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt b/app/src/main/kotlin/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt index 2d38a3160..3ef7e2e19 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt @@ -65,6 +65,12 @@ class FavouritesRepository @Inject constructor( .distinctUntilChanged() } + suspend fun getCategories(): List { + return db.getFavouriteCategoriesDao().findAll().map { + it.toFavouriteCategory() + } + } + fun observeCategories(): Flow> { return db.getFavouriteCategoriesDao().observeAll().mapItems { it.toFavouriteCategory() diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/suggestions/ui/SuggestionsWorker.kt b/app/src/main/kotlin/org/koitharu/kotatsu/suggestions/ui/SuggestionsWorker.kt index f541a5fd2..ee52cbbd4 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/suggestions/ui/SuggestionsWorker.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/suggestions/ui/SuggestionsWorker.kt @@ -273,6 +273,7 @@ class SuggestionsWorker @AssistedInject constructor( with(builder) { setContentText(tagsText) setContentTitle(title) + setGroup(GROUP_SUGGESTION) setLargeIcon( coil.execute( ImageRequest.Builder(applicationContext) @@ -425,6 +426,7 @@ class SuggestionsWorker @AssistedInject constructor( const val DATA_COUNT = "count" const val WORKER_CHANNEL_ID = "suggestion_worker" const val MANGA_CHANNEL_ID = "suggestions" + const val GROUP_SUGGESTION = "org.koitharu.kotatsu.SUGGESTIONS" const val WORKER_NOTIFICATION_ID = 36 const val MAX_RESULTS = 80 const val MAX_PARALLELISM = 3 diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/Tracker.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/Tracker.kt index 5570c3839..f01585f5a 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/Tracker.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/Tracker.kt @@ -9,6 +9,7 @@ import org.koitharu.kotatsu.core.parser.RemoteMangaRepository import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.util.CompositeMutex2 import org.koitharu.kotatsu.core.util.ext.toInstantOrNull +import org.koitharu.kotatsu.favourites.domain.FavouritesRepository import org.koitharu.kotatsu.history.data.HistoryRepository import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.util.runCatchingCancellable @@ -26,6 +27,7 @@ class Tracker @Inject constructor( private val settings: AppSettings, private val repository: TrackingRepository, private val historyRepository: HistoryRepository, + private val favouritesRepository: FavouritesRepository, private val channels: TrackerNotificationChannels, private val mangaRepositoryFactory: MangaRepository.Factory, ) { @@ -45,6 +47,11 @@ class Tracker @Inject constructor( } } + suspend fun updateNotificationsChannels() { + val categories = favouritesRepository.getCategories() + channels.updateChannels(categories) + } + suspend fun gc() { repository.gc() } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/work/TrackWorker.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/work/TrackWorker.kt index 9ab8ed1f3..7132348aa 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/work/TrackWorker.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/work/TrackWorker.kt @@ -104,6 +104,7 @@ class TrackWorker @AssistedInject constructor( if (!settings.isTrackerEnabled) { return Result.success(workDataOf(0, 0)) } + tracker.updateNotificationsChannels() val tracks = tracker.getTracks(if (isFullRun) Int.MAX_VALUE else BATCH_SIZE) logger.log("Total ${tracks.size} tracks") if (tracks.isEmpty()) { @@ -194,6 +195,7 @@ class TrackWorker @AssistedInject constructor( ).toBitmapOrNull(), ) setSmallIcon(R.drawable.ic_stat_book_plus) + setGroup(GROUP_NEW_CHAPTERS) val style = NotificationCompat.InboxStyle(this) for (chapter in newChapters) { style.addLine(chapter.name) @@ -366,6 +368,7 @@ class TrackWorker @AssistedInject constructor( const val WORKER_CHANNEL_ID = "track_worker" const val WORKER_NOTIFICATION_ID = 35 + const val GROUP_NEW_CHAPTERS = "org.koitharu.kotatsu.NEW_CHAPTERS" const val TAG = "tracking" const val TAG_ONESHOT = "tracking_oneshot" const val MAX_PARALLELISM = 6