MOBILE-2921 notification: Mark as read when push clicked

main
Dani Palou 2019-03-15 14:42:47 +01:00
parent 34d77d8d14
commit 881b7675cf
4 changed files with 40 additions and 22 deletions

View File

@ -76,7 +76,8 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr
// If a message push notification is received, refresh the count. // If a message push notification is received, refresh the count.
pushNotificationsDelegate.on('receive').subscribe((notification) => { pushNotificationsDelegate.on('receive').subscribe((notification) => {
// New message received. If it's from current site, refresh the data. // New message received. If it's from current site, refresh the data.
if (utils.isFalseOrZero(notification.notif) && this.sitesProvider.isCurrentSite(notification.site)) { const isMessage = utils.isFalseOrZero(notification.notif) || notification.name == 'messagecontactrequests';
if (isMessage && this.sitesProvider.isCurrentSite(notification.site)) {
this.refreshBadge(notification.site); this.refreshBadge(notification.site);
} }
}); });

View File

@ -1863,16 +1863,19 @@ export class AddonMessagesProvider {
/** /**
* Mark message as read. * Mark message as read.
* *
* @param {number} messageId ID of message to mark as read * @param {number} messageId ID of message to mark as read
* @param {string} [siteId] Site ID. If not defined, current site.
* @returns {Promise<any>} Promise resolved with boolean marking success or not. * @returns {Promise<any>} Promise resolved with boolean marking success or not.
*/ */
markMessageRead(messageId: number): Promise<any> { markMessageRead(messageId: number, siteId?: string): Promise<any> {
const params = { return this.sitesProvider.getSite(siteId).then((site) => {
messageid: messageId, const params = {
timeread: this.timeUtils.timestamp() messageid: messageId,
}; timeread: this.timeUtils.timestamp()
};
return this.sitesProvider.getCurrentSite().write('core_message_mark_message_read', params); return site.write('core_message_mark_message_read', params);
});
} }
/** /**

View File

@ -262,23 +262,25 @@ export class AddonNotificationsProvider {
* Mark a single notification as read. * Mark a single notification as read.
* *
* @param {number} notificationId ID of notification to mark as read * @param {number} notificationId ID of notification to mark as read
* @param {string} [siteId] Site ID. If not defined, current site.
* @returns {Promise<any>} Resolved when done. * @returns {Promise<any>} Resolved when done.
* @since 3.5 * @since 3.5
*/ */
markNotificationRead(notificationId: number): Promise<any> { markNotificationRead(notificationId: number, siteId?: string): Promise<any> {
const currentSite = this.sitesProvider.getCurrentSite(); return this.sitesProvider.getSite(siteId).then((site) => {
if (currentSite.wsAvailable('core_message_mark_notification_read')) { if (site.wsAvailable('core_message_mark_notification_read')) {
const params = { const params = {
notificationid: notificationId, notificationid: notificationId,
timeread: this.timeUtils.timestamp() timeread: this.timeUtils.timestamp()
}; };
return currentSite.write('core_message_mark_notification_read', params); return site.write('core_message_mark_notification_read', params);
} else { } else {
// Fallback for versions prior to 3.5. // Fallback for versions prior to 3.5.
return this.messageProvider.markMessageRead(notificationId); return this.messageProvider.markMessageRead(notificationId, site.id);
} }
});
} }
/** /**

View File

@ -13,6 +13,7 @@
// limitations under the License. // limitations under the License.
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { CoreEventsProvider } from '@providers/events';
import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreUtilsProvider } from '@providers/utils/utils';
import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate';
import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper';
@ -28,7 +29,7 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications
featureName = 'CoreMainMenuDelegate_AddonNotifications'; featureName = 'CoreMainMenuDelegate_AddonNotifications';
constructor(private utils: CoreUtilsProvider, private notificationsProvider: AddonNotificationsProvider, constructor(private utils: CoreUtilsProvider, private notificationsProvider: AddonNotificationsProvider,
private linkHelper: CoreContentLinksHelperProvider) {} private linkHelper: CoreContentLinksHelperProvider, private eventsProvider: CoreEventsProvider) {}
/** /**
* Check if a notification click is handled by this handler. * Check if a notification click is handled by this handler.
@ -37,7 +38,18 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications
* @return {boolean} Whether the notification click is handled by this handler * @return {boolean} Whether the notification click is handled by this handler
*/ */
handles(notification: any): boolean | Promise<boolean> { handles(notification: any): boolean | Promise<boolean> {
return this.utils.isTrueOrOne(notification.notif); if (this.utils.isTrueOrOne(notification.notif)) {
// Notification clicked, mark as read. Don't block for this.
this.notificationsProvider.markNotificationRead(notification.savedmessageid, notification.site).then(() => {
this.eventsProvider.trigger(AddonNotificationsProvider.READ_CHANGED_EVENT, null, notification.site);
}).catch(() => {
// Ignore errors.
});
return true;
}
return false;
} }
/** /**