1 | import { EventEmitter } from 'fbemitter';
|
2 | import { DeviceEventEmitter, NativeModules } from 'react-native';
|
3 | const { ExponentUpdates } = NativeModules;
|
4 | export function reload() {
|
5 | ExponentUpdates.reload();
|
6 | }
|
7 | export function reloadFromCache() {
|
8 | ExponentUpdates.reloadFromCache();
|
9 | }
|
10 | export async function checkForUpdateAsync() {
|
11 | const result = await ExponentUpdates.checkForUpdateAsync();
|
12 | let returnObj = {
|
13 | isAvailable: !!result,
|
14 | };
|
15 | if (result) {
|
16 | returnObj.manifest = typeof result === 'string' ? JSON.parse(result) : result;
|
17 | }
|
18 | return returnObj;
|
19 | }
|
20 | export async function fetchUpdateAsync({ eventListener } = {}) {
|
21 | let subscription;
|
22 | let result;
|
23 | if (eventListener && typeof eventListener === 'function') {
|
24 | subscription = addListener(eventListener);
|
25 | }
|
26 | try {
|
27 | result = await ExponentUpdates.fetchUpdateAsync();
|
28 | }
|
29 | finally {
|
30 | subscription && subscription.remove();
|
31 | }
|
32 | let returnObj = {
|
33 | isNew: !!result,
|
34 | };
|
35 | if (result) {
|
36 | returnObj.manifest = typeof result === 'string' ? JSON.parse(result) : result;
|
37 | }
|
38 | return returnObj;
|
39 | }
|
40 | let _emitter;
|
41 | function _getEmitter() {
|
42 | if (!_emitter) {
|
43 | _emitter = new EventEmitter();
|
44 | DeviceEventEmitter.addListener('Exponent.nativeUpdatesEvent', _emitEvent);
|
45 | }
|
46 | return _emitter;
|
47 | }
|
48 | function _emitEvent(params) {
|
49 | let newParams = params;
|
50 | if (typeof params === 'string') {
|
51 | newParams = JSON.parse(params);
|
52 | }
|
53 | if (newParams.manifestString) {
|
54 | newParams.manifest = JSON.parse(newParams.manifestString);
|
55 | delete newParams.manifestString;
|
56 | }
|
57 | if (!_emitter) {
|
58 | throw new Error(`EventEmitter must be initialized to use from its listener`);
|
59 | }
|
60 | _emitter.emit('Exponent.updatesEvent', newParams);
|
61 | }
|
62 | export function addListener(listener) {
|
63 | let emitter = _getEmitter();
|
64 | return emitter.addListener('Exponent.updatesEvent', listener);
|
65 | }
|
66 | export const EventType = {
|
67 | DOWNLOAD_STARTED: 'downloadStart',
|
68 | DOWNLOAD_PROGRESS: 'downloadProgress',
|
69 | DOWNLOAD_FINISHED: 'downloadFinished',
|
70 | NO_UPDATE_AVAILABLE: 'noUpdateAvailable',
|
71 | ERROR: 'error',
|
72 | };
|
73 |
|
\ | No newline at end of file |