MOBILE-3021 calendar: Schedule event notifications
parent
6d94c961f1
commit
31c92398b3
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChange, Output, EventEmitter } from '@angular/core';
|
import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChange, Output, EventEmitter } from '@angular/core';
|
||||||
import { CoreEventsProvider } from '@providers/events';
|
import { CoreEventsProvider } from '@providers/events';
|
||||||
|
import { CoreLocalNotificationsProvider } from '@providers/local-notifications';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
||||||
import { CoreTimeUtilsProvider } from '@providers/utils/time';
|
import { CoreTimeUtilsProvider } from '@providers/utils/time';
|
||||||
|
@ -56,9 +57,11 @@ export class AddonCalendarCalendarComponent implements OnInit, OnChanges, OnDest
|
||||||
|
|
||||||
// Observers.
|
// Observers.
|
||||||
protected undeleteEventObserver: any;
|
protected undeleteEventObserver: any;
|
||||||
|
protected obsDefaultTimeChange: any;
|
||||||
|
|
||||||
constructor(eventsProvider: CoreEventsProvider,
|
constructor(eventsProvider: CoreEventsProvider,
|
||||||
sitesProvider: CoreSitesProvider,
|
sitesProvider: CoreSitesProvider,
|
||||||
|
localNotificationsProvider: CoreLocalNotificationsProvider,
|
||||||
private calendarProvider: AddonCalendarProvider,
|
private calendarProvider: AddonCalendarProvider,
|
||||||
private calendarHelper: AddonCalendarHelperProvider,
|
private calendarHelper: AddonCalendarHelperProvider,
|
||||||
private calendarOffline: AddonCalendarOfflineProvider,
|
private calendarOffline: AddonCalendarOfflineProvider,
|
||||||
|
@ -69,6 +72,17 @@ export class AddonCalendarCalendarComponent implements OnInit, OnChanges, OnDest
|
||||||
|
|
||||||
this.currentSiteId = sitesProvider.getCurrentSiteId();
|
this.currentSiteId = sitesProvider.getCurrentSiteId();
|
||||||
|
|
||||||
|
if (localNotificationsProvider.isAvailable()) {
|
||||||
|
// Re-schedule events if default time changes.
|
||||||
|
this.obsDefaultTimeChange = eventsProvider.on(AddonCalendarProvider.DEFAULT_NOTIFICATION_TIME_CHANGED, () => {
|
||||||
|
this.weeks.forEach((week) => {
|
||||||
|
week.days.forEach((day) => {
|
||||||
|
calendarProvider.scheduleEventsNotifications(day.events);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, this.currentSiteId);
|
||||||
|
}
|
||||||
|
|
||||||
// Listen for events "undeleted" (offline).
|
// Listen for events "undeleted" (offline).
|
||||||
this.undeleteEventObserver = eventsProvider.on(AddonCalendarProvider.UNDELETED_EVENT_EVENT, (data) => {
|
this.undeleteEventObserver = eventsProvider.on(AddonCalendarProvider.UNDELETED_EVENT_EVENT, (data) => {
|
||||||
if (data && data.eventId) {
|
if (data && data.eventId) {
|
||||||
|
@ -334,6 +348,9 @@ export class AddonCalendarCalendarComponent implements OnInit, OnChanges, OnDest
|
||||||
// Format online events.
|
// Format online events.
|
||||||
day.events.forEach(this.calendarHelper.formatEventData.bind(this.calendarHelper));
|
day.events.forEach(this.calendarHelper.formatEventData.bind(this.calendarHelper));
|
||||||
|
|
||||||
|
// Schedule notifications for the events retrieved (only future events will be scheduled).
|
||||||
|
this.calendarProvider.scheduleEventsNotifications(day.events);
|
||||||
|
|
||||||
if (monthOfflineEvents || this.deletedEvents.length) {
|
if (monthOfflineEvents || this.deletedEvents.length) {
|
||||||
// There is offline data, merge it.
|
// There is offline data, merge it.
|
||||||
|
|
||||||
|
@ -403,5 +420,6 @@ export class AddonCalendarCalendarComponent implements OnInit, OnChanges, OnDest
|
||||||
*/
|
*/
|
||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
this.undeleteEventObserver && this.undeleteEventObserver.off();
|
this.undeleteEventObserver && this.undeleteEventObserver.off();
|
||||||
|
this.obsDefaultTimeChange && this.obsDefaultTimeChange.off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChange, Output, EventEmitter } from '@angular/core';
|
import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChange, Output, EventEmitter } from '@angular/core';
|
||||||
import { CoreEventsProvider } from '@providers/events';
|
import { CoreEventsProvider } from '@providers/events';
|
||||||
|
import { CoreLocalNotificationsProvider } from '@providers/local-notifications';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
||||||
import { AddonCalendarProvider } from '../../providers/calendar';
|
import { AddonCalendarProvider } from '../../providers/calendar';
|
||||||
|
@ -51,9 +52,11 @@ export class AddonCalendarUpcomingEventsComponent implements OnInit, OnChanges,
|
||||||
|
|
||||||
// Observers.
|
// Observers.
|
||||||
protected undeleteEventObserver: any;
|
protected undeleteEventObserver: any;
|
||||||
|
protected obsDefaultTimeChange: any;
|
||||||
|
|
||||||
constructor(eventsProvider: CoreEventsProvider,
|
constructor(eventsProvider: CoreEventsProvider,
|
||||||
sitesProvider: CoreSitesProvider,
|
sitesProvider: CoreSitesProvider,
|
||||||
|
localNotificationsProvider: CoreLocalNotificationsProvider,
|
||||||
private calendarProvider: AddonCalendarProvider,
|
private calendarProvider: AddonCalendarProvider,
|
||||||
private calendarHelper: AddonCalendarHelperProvider,
|
private calendarHelper: AddonCalendarHelperProvider,
|
||||||
private calendarOffline: AddonCalendarOfflineProvider,
|
private calendarOffline: AddonCalendarOfflineProvider,
|
||||||
|
@ -62,6 +65,13 @@ export class AddonCalendarUpcomingEventsComponent implements OnInit, OnChanges,
|
||||||
|
|
||||||
this.currentSiteId = sitesProvider.getCurrentSiteId();
|
this.currentSiteId = sitesProvider.getCurrentSiteId();
|
||||||
|
|
||||||
|
if (localNotificationsProvider.isAvailable()) {
|
||||||
|
// Re-schedule events if default time changes.
|
||||||
|
this.obsDefaultTimeChange = eventsProvider.on(AddonCalendarProvider.DEFAULT_NOTIFICATION_TIME_CHANGED, () => {
|
||||||
|
calendarProvider.scheduleEventsNotifications(this.onlineEvents);
|
||||||
|
}, this.currentSiteId);
|
||||||
|
}
|
||||||
|
|
||||||
// Listen for events "undeleted" (offline).
|
// Listen for events "undeleted" (offline).
|
||||||
this.undeleteEventObserver = eventsProvider.on(AddonCalendarProvider.UNDELETED_EVENT_EVENT, (data) => {
|
this.undeleteEventObserver = eventsProvider.on(AddonCalendarProvider.UNDELETED_EVENT_EVENT, (data) => {
|
||||||
if (data && data.eventId) {
|
if (data && data.eventId) {
|
||||||
|
@ -152,6 +162,9 @@ export class AddonCalendarUpcomingEventsComponent implements OnInit, OnChanges,
|
||||||
|
|
||||||
this.onlineEvents.forEach(this.calendarHelper.formatEventData.bind(this.calendarHelper));
|
this.onlineEvents.forEach(this.calendarHelper.formatEventData.bind(this.calendarHelper));
|
||||||
|
|
||||||
|
// Schedule notifications for the events retrieved.
|
||||||
|
this.calendarProvider.scheduleEventsNotifications(this.onlineEvents);
|
||||||
|
|
||||||
// Merge the online events with offline data.
|
// Merge the online events with offline data.
|
||||||
this.events = this.mergeEvents();
|
this.events = this.mergeEvents();
|
||||||
|
|
||||||
|
@ -319,5 +332,6 @@ export class AddonCalendarUpcomingEventsComponent implements OnInit, OnChanges,
|
||||||
*/
|
*/
|
||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
this.undeleteEventObserver && this.undeleteEventObserver.off();
|
this.undeleteEventObserver && this.undeleteEventObserver.off();
|
||||||
|
this.obsDefaultTimeChange && this.obsDefaultTimeChange.off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,6 +61,7 @@ export class AddonCalendarDayPage implements OnInit, OnDestroy {
|
||||||
protected syncObserver: any;
|
protected syncObserver: any;
|
||||||
protected manualSyncObserver: any;
|
protected manualSyncObserver: any;
|
||||||
protected onlineObserver: any;
|
protected onlineObserver: any;
|
||||||
|
protected obsDefaultTimeChange: any;
|
||||||
|
|
||||||
periodName: string;
|
periodName: string;
|
||||||
filteredEvents = [];
|
filteredEvents = [];
|
||||||
|
@ -98,6 +99,13 @@ export class AddonCalendarDayPage implements OnInit, OnDestroy {
|
||||||
this.courseId = navParams.get('courseId');
|
this.courseId = navParams.get('courseId');
|
||||||
this.currentSiteId = sitesProvider.getCurrentSiteId();
|
this.currentSiteId = sitesProvider.getCurrentSiteId();
|
||||||
|
|
||||||
|
if (localNotificationsProvider.isAvailable()) {
|
||||||
|
// Re-schedule events if default time changes.
|
||||||
|
this.obsDefaultTimeChange = eventsProvider.on(AddonCalendarProvider.DEFAULT_NOTIFICATION_TIME_CHANGED, () => {
|
||||||
|
calendarProvider.scheduleEventsNotifications(this.onlineEvents);
|
||||||
|
}, this.currentSiteId);
|
||||||
|
}
|
||||||
|
|
||||||
// Listen for events added. When an event is added, reload the data.
|
// Listen for events added. When an event is added, reload the data.
|
||||||
this.newEventObserver = eventsProvider.on(AddonCalendarProvider.NEW_EVENT_EVENT, (data) => {
|
this.newEventObserver = eventsProvider.on(AddonCalendarProvider.NEW_EVENT_EVENT, (data) => {
|
||||||
if (data && data.event) {
|
if (data && data.event) {
|
||||||
|
@ -282,6 +290,9 @@ export class AddonCalendarDayPage implements OnInit, OnDestroy {
|
||||||
this.onlineEvents = result.events;
|
this.onlineEvents = result.events;
|
||||||
this.onlineEvents.forEach(this.calendarHelper.formatEventData.bind(this.calendarHelper));
|
this.onlineEvents.forEach(this.calendarHelper.formatEventData.bind(this.calendarHelper));
|
||||||
|
|
||||||
|
// Schedule notifications for the events retrieved (only future events will be scheduled).
|
||||||
|
this.calendarProvider.scheduleEventsNotifications(this.onlineEvents);
|
||||||
|
|
||||||
// Merge the online events with offline data.
|
// Merge the online events with offline data.
|
||||||
this.events = this.mergeEvents();
|
this.events = this.mergeEvents();
|
||||||
|
|
||||||
|
@ -609,5 +620,6 @@ export class AddonCalendarDayPage implements OnInit, OnDestroy {
|
||||||
this.syncObserver && this.syncObserver.off();
|
this.syncObserver && this.syncObserver.off();
|
||||||
this.manualSyncObserver && this.manualSyncObserver.off();
|
this.manualSyncObserver && this.manualSyncObserver.off();
|
||||||
this.onlineObserver && this.onlineObserver.unsubscribe();
|
this.onlineObserver && this.onlineObserver.unsubscribe();
|
||||||
|
this.obsDefaultTimeChange && this.obsDefaultTimeChange.off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue