MOBILE-2795 notifications: Handle duplication event detection
parent
cb4f6c196a
commit
5128880d6d
|
@ -138,6 +138,37 @@ export class AddonCalendarProvider {
|
||||||
this.sitesProvider.createTablesFromSchema(this.tablesSchema);
|
this.sitesProvider.createTablesFromSchema(this.tablesSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes expired events from local DB.
|
||||||
|
*
|
||||||
|
* @param {string} [siteId] ID of the site the event belongs to. If not defined, use current site.
|
||||||
|
* @return {Promise<void>} Promise resolved when done.
|
||||||
|
*/
|
||||||
|
cleanExpiredEvents(siteId?: string): Promise<void> {
|
||||||
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
|
let promise;
|
||||||
|
|
||||||
|
// Cancel expired events notifications first.
|
||||||
|
if (this.localNotificationsProvider.isAvailable()) {
|
||||||
|
promise = site.getDb().getRecordsSelect(AddonCalendarProvider.EVENTS_TABLE, 'timestart < ?',
|
||||||
|
[this.timeUtils.timestamp()]).then((events) => {
|
||||||
|
events.forEach((event) => {
|
||||||
|
return this.localNotificationsProvider.cancel(event.id, AddonCalendarProvider.COMPONENT, site.getId());
|
||||||
|
});
|
||||||
|
}).catch(() => {
|
||||||
|
// Ignore errors.
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
promise = Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
return promise.then(() => {
|
||||||
|
return site.getDb().deleteRecordsSelect(AddonCalendarProvider.EVENTS_TABLE, 'timestart < ?',
|
||||||
|
[this.timeUtils.timestamp()]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all calendar events from local Db.
|
* Get all calendar events from local Db.
|
||||||
*
|
*
|
||||||
|
@ -442,27 +473,29 @@ export class AddonCalendarProvider {
|
||||||
* @return {Promise} Promise resolved when all the notifications have been scheduled.
|
* @return {Promise} Promise resolved when all the notifications have been scheduled.
|
||||||
*/
|
*/
|
||||||
scheduleAllSitesEventsNotifications(): Promise<any[]> {
|
scheduleAllSitesEventsNotifications(): Promise<any[]> {
|
||||||
if (this.localNotificationsProvider.isAvailable()) {
|
const notificationsEnabled = this.localNotificationsProvider.isAvailable();
|
||||||
return this.sitesProvider.getSitesIds().then((siteIds) => {
|
|
||||||
const promises = [];
|
|
||||||
|
|
||||||
siteIds.forEach((siteId) => {
|
return this.sitesProvider.getSitesIds().then((siteIds) => {
|
||||||
// Check if calendar is disabled for the site.
|
const promises = [];
|
||||||
promises.push(this.isDisabled(siteId).then((disabled) => {
|
|
||||||
if (!disabled) {
|
|
||||||
// Get first events.
|
|
||||||
return this.getEventsList(undefined, undefined, siteId).then((events) => {
|
|
||||||
return this.scheduleEventsNotifications(events, siteId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
|
|
||||||
return Promise.all(promises);
|
siteIds.forEach((siteId) => {
|
||||||
|
promises.push(this.cleanExpiredEvents(siteId).then(() => {
|
||||||
|
if (notificationsEnabled) {
|
||||||
|
// Check if calendar is disabled for the site.
|
||||||
|
return this.isDisabled(siteId).then((disabled) => {
|
||||||
|
if (!disabled) {
|
||||||
|
// Get first events.
|
||||||
|
return this.getEventsList(undefined, undefined, siteId).then((events) => {
|
||||||
|
return this.scheduleEventsNotifications(events, siteId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
return Promise.resolve([]);
|
return Promise.all(promises);
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -489,7 +489,9 @@ export class CoreLocalNotificationsProvider {
|
||||||
|
|
||||||
// Remove from triggered, since the notification could be in there with a different time.
|
// Remove from triggered, since the notification could be in there with a different time.
|
||||||
this.removeTriggered(notification.id);
|
this.removeTriggered(notification.id);
|
||||||
this.localNotifications.schedule(notification);
|
this.localNotifications.cancel(notification.id).finally(() => {
|
||||||
|
this.localNotifications.schedule(notification);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue