From aa21ef28f7fd084549bf062c0103128798aa443e Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 2 Jun 2023 15:58:35 +0200 Subject: [PATCH] Fix (disable) notifications for already seen videos --- .../libretube/helpers/PreferenceHelper.kt | 2 +- .../ui/models/SubscriptionsViewModel.kt | 2 +- .../libretube/workers/NotificationWorker.kt | 20 +++++++++---------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/github/libretube/helpers/PreferenceHelper.kt b/app/src/main/java/com/github/libretube/helpers/PreferenceHelper.kt index 0ee4824f5..60a4a8d59 100644 --- a/app/src/main/java/com/github/libretube/helpers/PreferenceHelper.kt +++ b/app/src/main/java/com/github/libretube/helpers/PreferenceHelper.kt @@ -101,7 +101,7 @@ object PreferenceHelper { authEditor.putString(PreferenceKeys.USERNAME, newValue).apply() } - fun setLatestVideoId(videoId: String) { + fun setLastSeenVideoId(videoId: String) { editor.putString(PreferenceKeys.LAST_STREAM_VIDEO_ID, videoId).commit() } diff --git a/app/src/main/java/com/github/libretube/ui/models/SubscriptionsViewModel.kt b/app/src/main/java/com/github/libretube/ui/models/SubscriptionsViewModel.kt index 8dc4c846e..d56cccb1e 100644 --- a/app/src/main/java/com/github/libretube/ui/models/SubscriptionsViewModel.kt +++ b/app/src/main/java/com/github/libretube/ui/models/SubscriptionsViewModel.kt @@ -38,7 +38,7 @@ class SubscriptionsViewModel : ViewModel() { this@SubscriptionsViewModel.videoFeed.postValue(videoFeed) if (videoFeed.isNotEmpty()) { // save the last recent video to the prefs for the notification worker - PreferenceHelper.setLatestVideoId(videoFeed[0].url!!.toID()) + PreferenceHelper.setLastSeenVideoId(videoFeed[0].url!!.toID()) } } } diff --git a/app/src/main/java/com/github/libretube/workers/NotificationWorker.kt b/app/src/main/java/com/github/libretube/workers/NotificationWorker.kt index 75f1b3f6e..696b8648a 100644 --- a/app/src/main/java/com/github/libretube/workers/NotificationWorker.kt +++ b/app/src/main/java/com/github/libretube/workers/NotificationWorker.kt @@ -84,24 +84,24 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) : } } catch (e: Exception) { return false - }.filter { - PreferenceHelper.getBoolean(PreferenceKeys.SHORTS_NOTIFICATIONS, false) || !it.isShort } - val lastSeenStreamId = PreferenceHelper.getLastSeenVideoId() - val latestFeedStreamId = videoFeed.firstOrNull()?.url?.toID() ?: return true + val lastUserSeenVideoId = PreferenceHelper.getLastSeenVideoId() + val mostRecentStreamId = videoFeed.firstOrNull()?.url?.toID() ?: return true + // save the latest streams that got notified about + PreferenceHelper.setLastSeenVideoId(mostRecentStreamId) // first time notifications are enabled or no new video available - if (lastSeenStreamId.isEmpty() || lastSeenStreamId == latestFeedStreamId) { - PreferenceHelper.setLatestVideoId(lastSeenStreamId) - return true - } + if (lastUserSeenVideoId.isEmpty() || lastUserSeenVideoId == mostRecentStreamId) return true val channelsToIgnore = PreferenceHelper.getIgnorableNotificationChannels() + val enableShortsNotification = PreferenceHelper.getBoolean(PreferenceKeys.SHORTS_NOTIFICATIONS, false) val channelGroups = videoFeed.asSequence() // filter the new videos until the last seen video in the feed - .takeWhile { it.url!!.toID() != lastSeenStreamId } + .takeWhile { it.url!!.toID() != lastUserSeenVideoId } + // don't show notifications for shorts videos if not enabled + .filter { enableShortsNotification || !it.isShort } // hide for notifications unsubscribed channels .filter { it.uploaderUrl!!.toID() !in channelsToIgnore } // group the new streams by the uploader @@ -116,8 +116,6 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) : channelGroups.forEach { (channelId, streams) -> createNotificationsForChannel(channelId, streams) } - // save the latest streams that got notified about - PreferenceHelper.setLatestVideoId(videoFeed.first().url!!.toID()) // return whether the work succeeded return true }