You've already forked joplin
							
							
				mirror of
				https://github.com/laurent22/joplin.git
				synced 2025-10-31 00:07:48 +02:00 
			
		
		
		
	Android: Got notifications to work
This commit is contained in:
		| @@ -15,6 +15,20 @@ class PoorManIntervals { | ||||
| 		return PoorManIntervals.intervalId_; | ||||
| 	} | ||||
|  | ||||
| 	static setTimeout(callback, interval) { | ||||
| 		PoorManIntervals.intervalId_++; | ||||
|  | ||||
| 		PoorManIntervals.intervals_.push({ | ||||
| 			id: PoorManIntervals.intervalId_, | ||||
| 			callback: callback, | ||||
| 			interval: interval, | ||||
| 			lastIntervalTime: time.unixMs(), | ||||
| 			oneOff: true, | ||||
| 		}); | ||||
|  | ||||
| 		return PoorManIntervals.intervalId_; | ||||
| 	} | ||||
|  | ||||
| 	static intervalById(id) { | ||||
| 		for (let i = 0; i < PoorManIntervals.intervals_.length; i++) { | ||||
| 			if (PoorManIntervals.intervals_[i].id == id) return PoorManIntervals.intervals_[id]; | ||||
| @@ -41,6 +55,9 @@ class PoorManIntervals { | ||||
| 			if (now - interval.lastIntervalTime >= interval.interval) { | ||||
| 				interval.lastIntervalTime = now; | ||||
| 				interval.callback(); | ||||
| 				if (interval.oneOff) { | ||||
| 					this.clearInterval(interval.id); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
|   | ||||
| @@ -57,11 +57,13 @@ class AlarmService { | ||||
| 		let clearAlarm = false; | ||||
|  | ||||
| 		const makeNotificationFromAlarm = (alarm) => { | ||||
| 			return { | ||||
| 			const output = { | ||||
| 				id: alarm.id, | ||||
| 				date: new Date(note.todo_due), | ||||
| 				title: note.title, | ||||
| 				title: note.title.substr(0,128), | ||||
| 			} | ||||
| 			if (note.body) output.body = note.body.substr(0,512); | ||||
| 			return output; | ||||
| 		} | ||||
|  | ||||
| 		if (isDeleted || | ||||
| @@ -103,9 +105,6 @@ class AlarmService { | ||||
| 		alarm = await Alarm.byNoteId(note.id); | ||||
|  | ||||
| 		const notification = makeNotificationFromAlarm(alarm); | ||||
|  | ||||
| 		if (note.body) notification.body = note.body; | ||||
|  | ||||
| 		this.logger().info('Scheduling notification for note ' + note.id, notification); | ||||
| 		await driver.scheduleNotification(notification); | ||||
| 	} | ||||
|   | ||||
| @@ -17,11 +17,11 @@ class AlarmServiceDriver { | ||||
| 	async scheduleNotification(notification) { | ||||
| 		const androidNotification = { | ||||
| 			id: notification.id, | ||||
| 			message: notification.title.substr(0, 100), // No idea what the limits are for title and body but set something reasonable anyway | ||||
| 			message: notification.title, // No idea what the limits are for title and body but set something reasonable anyway | ||||
| 			date: notification.date, | ||||
| 		}; | ||||
|  | ||||
| 		if ('body' in notification) androidNotification.body = notification.body.substr(0, 512); | ||||
| 		if ('body' in notification) androidNotification.body = notification.body; | ||||
|  | ||||
| 		PushNotification.localNotificationSchedule(androidNotification); | ||||
| 	} | ||||
|   | ||||
| @@ -60,6 +60,10 @@ const generalMiddleware = store => next => async (action) => { | ||||
| 		if (!await reg.syncTarget().syncStarted()) reg.scheduleSync(); | ||||
| 	} | ||||
|  | ||||
| 	if (['EVENT_NOTE_ALARM_FIELD_CHANGE', 'NOTE_DELETE'].indexOf(action.type) >= 0) { | ||||
| 		await AlarmService.updateNoteNotification(action.id, action.type === 'NOTE_DELETE'); | ||||
| 	} | ||||
|  | ||||
| 	if (action.type == 'SETTING_UPDATE_ONE' && action.key == 'sync.interval' || action.type == 'SETTING_UPDATE_ALL') { | ||||
| 		reg.setupRecurrentSync(); | ||||
| 	} | ||||
| @@ -369,32 +373,15 @@ async function initialize(dispatch, backButtonHandler) { | ||||
|  | ||||
| 	reg.setupRecurrentSync(); | ||||
|  | ||||
| 	if (Setting.value('env') == 'dev') { | ||||
| 		// reg.scheduleSync(); | ||||
| 	} else { | ||||
| 		reg.scheduleSync(); | ||||
| 	} | ||||
|  | ||||
|  | ||||
|  | ||||
| 	//reg.logger().info('Scheduling iOS notification'); | ||||
|  | ||||
| 	// PushNotificationIOS.scheduleLocalNotification({ | ||||
| 	// 	alertTitle: "From Joplin", | ||||
| 	// 	alertBody : "Testing notification on iOS", | ||||
| 	// 	fireDate: new Date(Date.now() + (10 * 1000)), | ||||
| 	// }); | ||||
|  | ||||
|  | ||||
|  | ||||
| 	// const r = PushNotification.localNotificationSchedule({ | ||||
| 	// 	id: '222456', | ||||
| 	// 	message: "My Notification Message", // (required) | ||||
| 	// 	date: new Date(Date.now() + (10 * 1000)) // in 60 secs | ||||
| 	// }); | ||||
|  | ||||
| 	//PushNotification.cancelLocalNotifications({ id: '222456' }); | ||||
| 	PoorManIntervals.setTimeout(() => { | ||||
| 		AlarmService.garbageCollect(); | ||||
| 	}, 1000 * 60 * 60); | ||||
|  | ||||
| 	reg.scheduleSync().then(() => { | ||||
| 		// Wait for the first sync before updating the notifications, since synchronisation | ||||
| 		// might change the notifications. | ||||
| 		AlarmService.updateAllNotifications(); | ||||
| 	}); | ||||
|  | ||||
| 	reg.logger().info('Application initialized'); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user