diff --git a/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java b/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java index 75a010ea7..d0880e730 100644 --- a/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java @@ -19,6 +19,7 @@ import fr.free.nrw.commons.databinding.ActivityNotificationBinding; import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException; import fr.free.nrw.commons.notification.models.Notification; +import fr.free.nrw.commons.notification.models.NotificationType; import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.ViewUtil; @@ -147,8 +148,11 @@ public class NotificationActivity extends BaseActivity { refresh(false); } adapter = new NotificatinAdapter(item -> { - Timber.d("Notification clicked %s", item.getLink()); - handleUrl(item.getLink()); + if (item.getNotificationType() == NotificationType.EMAIL){ + ViewUtil.showLongSnackbar(binding.container, "Check your mail box"); + } else { + handleUrl(item.getLink()); + } removeNotification(item); return Unit.INSTANCE; }); diff --git a/app/src/main/java/fr/free/nrw/commons/notification/NotificationClient.kt b/app/src/main/java/fr/free/nrw/commons/notification/NotificationClient.kt index aa998ffb5..2737cf000 100644 --- a/app/src/main/java/fr/free/nrw/commons/notification/NotificationClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/notification/NotificationClient.kt @@ -9,6 +9,7 @@ import fr.free.nrw.commons.utils.DateUtil import fr.free.nrw.commons.wikidata.mwapi.MwQueryResponse import io.reactivex.Observable import io.reactivex.Single +import timber.log.Timber import javax.inject.Inject import javax.inject.Named import javax.inject.Singleton @@ -21,43 +22,55 @@ class NotificationClient @param:Named(NetworkingModule.NAMED_COMMONS_CSRF) private val csrfTokenClient: CsrfTokenClient, private val service: NotificationInterface, ) { - fun getNotifications(archived: Boolean): Single> = + fun getNotifications(archived: Boolean): Single> = + service + .getAllNotifications( + wikiList = "wikidatawiki|commonswiki|enwiki", + filter = if (archived) "read" else "!read", + continueStr = null, + ).map { + it.query()?.notifications()?.list() ?: emptyList() + }.flatMap { + Observable.fromIterable(it) + }.map { + it.toCommonsNotification() + }.toList() + + fun markNotificationAsRead(notificationId: String?): Observable = + try { service - .getAllNotifications( - wikiList = "wikidatawiki|commonswiki|enwiki", - filter = if (archived) "read" else "!read", - continueStr = null, - ).map { - it.query()?.notifications()?.list() ?: emptyList() - }.flatMap { - Observable.fromIterable(it) - }.map { - it.toCommonsNotification() - }.toList() - - fun markNotificationAsRead(notificationId: String?): Observable = - try { - service - .markRead( - token = csrfTokenClient.getTokenBlocking(), - readList = notificationId, - unreadList = "", - ).map(MwQueryResponse::success) - } catch (throwable: Throwable) { - if (throwable is InvalidLoginTokenException) { - Observable.error(throwable) - } else { - Observable.just(false) - } + .markRead( + token = csrfTokenClient.getTokenBlocking(), + readList = notificationId, + unreadList = "", + ).map(MwQueryResponse::success) + } catch (throwable: Throwable) { + if (throwable is InvalidLoginTokenException) { + Observable.error(throwable) + } else { + Observable.just(false) } + } + + private fun WikimediaNotification.toCommonsNotification(): Notification { + + val notificationText = contents?.compactHeader ?: "" + + val notificationType = if (notificationText.contains("sent you an email", ignoreCase = true)){ + NotificationType.EMAIL + } else { + NotificationType.UNKNOWN + } + + return Notification( + + notificationType = notificationType, + notificationText = notificationText, + date = DateUtil.getMonthOnlyDateString(timestamp), + link = contents?.links?.primary?.url ?: "", + iconUrl = "", + notificationId = id().toString(), + ) - private fun WikimediaNotification.toCommonsNotification() = - Notification( - notificationType = NotificationType.UNKNOWN, - notificationText = contents?.compactHeader ?: "", - date = DateUtil.getMonthOnlyDateString(timestamp), - link = contents?.links?.primary?.url ?: "", - iconUrl = "", - notificationId = id().toString(), - ) } +} diff --git a/app/src/main/java/fr/free/nrw/commons/notification/models/NotificationType.java b/app/src/main/java/fr/free/nrw/commons/notification/models/NotificationType.java index 1b825f071..100f68abf 100644 --- a/app/src/main/java/fr/free/nrw/commons/notification/models/NotificationType.java +++ b/app/src/main/java/fr/free/nrw/commons/notification/models/NotificationType.java @@ -1,9 +1,12 @@ package fr.free.nrw.commons.notification.models; +import timber.log.Timber; + public enum NotificationType { THANK_YOU_EDIT("thank-you-edit"), EDIT_USER_TALK("edit-user-talk"), MENTION("mention"), + EMAIL("email"), WELCOME("welcome"), UNKNOWN("unknown"); private String type;