forked from CIT/Vmeda.Online
		
	MOBILE-3021 calendar: Schedule event notifications
This commit is contained in:
		
							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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user