Skip to content

Commit 2e87aa0

Browse files
committed
Merge pull request #234 from ParsePlatform/peterjs.liveQueryAsync
Updating Parse.LiveQuery to use currentUserAsync.
2 parents 7c04a3b + ad7951b commit 2e87aa0

File tree

2 files changed

+98
-56
lines changed

2 files changed

+98
-56
lines changed

src/LiveQuerySubscription.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,11 @@ export default class Subscription extends EventEmitter {
102102
* @method unsubscribe
103103
*/
104104
unsubscribe() {
105-
var liveQueryClient = CoreManager.getLiveQueryController().getDefaultLiveQueryClient();
106-
liveQueryClient.unsubscribe(this);
107-
this.emit('close');
105+
let _this = this;
106+
CoreManager.getLiveQueryController().getDefaultLiveQueryClient().then((liveQueryClient) => {
107+
liveQueryClient.unsubscribe(_this);
108+
_this.emit('close');
109+
this.resolve();
110+
});
108111
}
109112
}

src/ParseLiveQuery.js

Lines changed: 92 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import EventEmitter from './EventEmitter';
22
import LiveQueryClient from './LiveQueryClient';
33
import CoreManager from './CoreManager';
4+
import ParsePromise from './ParsePromise';
45

56
function open() {
67
var LiveQueryController = CoreManager.getLiveQueryController();
@@ -69,82 +70,120 @@ LiveQuery.on('error', () => {
6970
export default LiveQuery;
7071

7172
let getSessionToken = () => {
72-
let currentUser = CoreManager.getUserController().currentUser();
73-
let sessionToken;
74-
if (currentUser) {
75-
sessionToken = currentUser.getSessionToken();
76-
}
77-
return sessionToken;
73+
let promiseUser = CoreManager.getUserController().currentUserAsync();
74+
return promiseUser.then((currentUser) => {
75+
return ParsePromise.as(currentUser ? currentUser.sessionToken : undefined);
76+
}).then((sessionToken) => {
77+
return ParsePromise.as(sessionToken);
78+
});
7879
};
7980

8081
let getLiveQueryClient = () => {
81-
return CoreManager.getLiveQueryController().getDefaultLiveQueryClient();
82+
return CoreManager.getLiveQueryController().getDefaultLiveQueryClient().then((defaultLiveQueryClient) => {
83+
return ParsePromise.as(defaultLiveQueryClient);
84+
});
8285
};
8386

8487
let defaultLiveQueryClient;
8588
let DefaultLiveQueryController = {
8689
setDefaultLiveQueryClient(liveQueryClient: any) {
8790
defaultLiveQueryClient = liveQueryClient;
8891
},
89-
getDefaultLiveQueryClient(): any {
92+
getDefaultLiveQueryClient(): ParsePromise {
9093
if (defaultLiveQueryClient) {
91-
return defaultLiveQueryClient;
94+
return ParsePromise.as(defaultLiveQueryClient);
9295
}
9396

94-
let liveQueryServerURL = CoreManager.get('LIVEQUERY_SERVER_URL');
95-
96-
if (liveQueryServerURL && liveQueryServerURL.indexOf('ws') !== 0) {
97-
throw new Error('You need to set a proper Parse LiveQuery server url before using LiveQueryClient');
98-
}
97+
let sessionTokenPromise = getSessionToken();
98+
return sessionTokenPromise.then((sessionToken) => {
99+
let liveQueryServerURL = CoreManager.get('LIVEQUERY_SERVER_URL');
100+
101+
if (liveQueryServerURL && liveQueryServerURL.indexOf('ws') !== 0) {
102+
throw new Error('You need to set a proper Parse LiveQuery server url before using LiveQueryClient');
103+
}
99104

100-
// If we can not find Parse.liveQueryServerURL, we try to extract it from Parse.serverURL
101-
if (!liveQueryServerURL) {
102-
let host = CoreManager.get('SERVER_URL').replace(/^https?:\/\//, '');
103-
liveQueryServerURL = 'ws://' + host;
104-
CoreManager.set('LIVEQUERY_SERVER_URL', liveQueryServerURL);
105-
}
105+
// If we can not find Parse.liveQueryServerURL, we try to extract it from Parse.serverURL
106+
if (!liveQueryServerURL) {
107+
let host = CoreManager.get('SERVER_URL').replace(/^https?:\/\//, '');
108+
liveQueryServerURL = 'ws://' + host;
109+
CoreManager.set('LIVEQUERY_SERVER_URL', liveQueryServerURL);
110+
}
106111

107-
let applicationId = CoreManager.get('APPLICATION_ID');
108-
let javascriptKey = CoreManager.get('JAVASCRIPT_KEY');
109-
let masterKey = CoreManager.get('MASTER_KEY');
110-
// Get currentUser sessionToken if possible
111-
defaultLiveQueryClient = new LiveQueryClient({
112-
applicationId,
113-
serverURL: liveQueryServerURL,
114-
javascriptKey,
115-
masterKey,
116-
sessionToken: getSessionToken(),
117-
});
118-
// Register a default onError callback to make sure we do not crash on error
119-
defaultLiveQueryClient.on('error', (error) => {
120-
LiveQuery.emit('error', error);
121-
});
122-
defaultLiveQueryClient.on('open', () => {
123-
LiveQuery.emit('open');
124-
});
125-
defaultLiveQueryClient.on('close', () => {
126-
LiveQuery.emit('close');
112+
let applicationId = CoreManager.get('APPLICATION_ID');
113+
let javascriptKey = CoreManager.get('JAVASCRIPT_KEY');
114+
let masterKey = CoreManager.get('MASTER_KEY');
115+
// Get currentUser sessionToken if possible
116+
defaultLiveQueryClient = new LiveQueryClient({
117+
applicationId,
118+
serverURL: liveQueryServerURL,
119+
javascriptKey,
120+
masterKey,
121+
sessionToken,
122+
});
123+
// Register a default onError callback to make sure we do not crash on error
124+
defaultLiveQueryClient.on('error', (error) => {
125+
LiveQuery.emit('error', error);
126+
}).on('open', () => {
127+
LiveQuery.emit('open');
128+
}).on('close', () => {
129+
LiveQuery.emit('close');
130+
});
131+
132+
return ParsePromise.as(defaultLiveQueryClient);
127133
});
128-
return defaultLiveQueryClient;
129134
},
130135
open() {
131-
let liveQueryClient = getLiveQueryClient();
132-
liveQueryClient.open();
136+
getLiveQueryClient().then((liveQueryClient) => {
137+
this.resolve(liveQueryClient.open());
138+
});
133139
},
134140
close() {
135-
let liveQueryClient = getLiveQueryClient();
136-
liveQueryClient.close();
141+
getLiveQueryClient().then((liveQueryClient) => {
142+
this.resolve(liveQueryClient.close());
143+
});
137144
},
138-
subscribe(query: any): any {
139-
let liveQueryClient = getLiveQueryClient();
140-
if (liveQueryClient.shouldOpen()) {
141-
liveQueryClient.open();
142-
}
143-
return liveQueryClient.subscribe(query, getSessionToken());
145+
subscribe(query: any): EventEmitter {
146+
let subscriptionWrap = new EventEmitter();
147+
148+
getLiveQueryClient().then((liveQueryClient) => {
149+
if (liveQueryClient.shouldOpen()) {
150+
liveQueryClient.open();
151+
}
152+
let promiseSessionToken = getSessionToken();
153+
// new event emitter
154+
return promiseSessionToken.then((sessionToken) => {
155+
156+
let subscription = liveQueryClient.subscribe(query, sessionToken);
157+
// enter, leave create, etc
158+
159+
subscriptionWrap.id = subscription.id;
160+
subscriptionWrap.query = subscription.query;
161+
subscriptionWrap.sessionToken = subscription.sessionToken;
162+
subscriptionWrap.unsubscribe = subscription.unsubscribe;
163+
164+
subscription.on('open', () => {
165+
subscriptionWrap.emit('open');
166+
}).on('create', (object) => {
167+
subscriptionWrap.emit('create', object);
168+
}).on('update', (object) => {
169+
subscriptionWrap.emit('update', object);
170+
}).on('enter', (object) => {
171+
subscriptionWrap.emit('enter', object);
172+
}).on('leave', (object) => {
173+
subscriptionWrap.emit('leave', object);
174+
}).on('delete', (object) => {
175+
subscriptionWrap.emit('delete', object);
176+
});
177+
178+
this.resolve();
179+
});
180+
});
181+
return subscriptionWrap;
144182
},
145183
unsubscribe(subscription: any) {
146-
let liveQueryClient = getLiveQueryClient();
147-
return liveQueryClient.unsubscribe(subscription);
184+
getLiveQueryClient().then((liveQueryClient) => {
185+
this.resolve(liveQueryClient.unsubscribe(subscription));
186+
});
148187
}
149188
};
150189

0 commit comments

Comments
 (0)