webxdc.js

 1// Based on GPLv3 code from deltachat-android
 2// https://github.com/deltachat/deltachat-android/blob/master/res/raw/webxdc.js
 3
 4window.webxdc = (() => {
 5	let setUpdateListenerPromise = null
 6	var update_listener = () => {};
 7	var last_serial = 0;
 8
 9	window.__webxdcUpdate = () => {
10		var updates = JSON.parse(InternalJSApi.getStatusUpdates(last_serial));
11		updates.forEach((update) => {
12				update_listener(update);
13				last_serial = update.serial;
14		});
15		if (setUpdateListenerPromise) {
16			setUpdateListenerPromise();
17			setUpdateListenerPromise = null;
18		}
19	};
20
21	return {
22		selfAddr: InternalJSApi.selfAddr(),
23
24		selfName: InternalJSApi.selfName(),
25
26		setUpdateListener: (cb, serial) => {
27				last_serial = typeof serial === "undefined" ? 0 : parseInt(serial);
28				update_listener = cb;
29				var promise = new Promise((res, _rej) => {
30					setUpdateListenerPromise = res;
31				});
32				window.__webxdcUpdate();
33				return promise;
34		},
35
36		sendUpdate: (payload, descr) => {
37			InternalJSApi.sendStatusUpdate(JSON.stringify(payload), descr);
38		},
39	};
40})();