Skip to content

Commit acf6d18

Browse files
committed
Updating Parse.LiveQuery to use currentUserAsync.
1 parent 68ac2aa commit acf6d18

File tree

3 files changed

+101
-57
lines changed

3 files changed

+101
-57
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 events.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: 94 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import events from 'events';
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,122 @@ 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+
});
127+
defaultLiveQueryClient.on('open', () => {
128+
LiveQuery.emit('open');
129+
});
130+
defaultLiveQueryClient.on('close', () => {
131+
LiveQuery.emit('close');
132+
});
133+
134+
return ParsePromise.as(defaultLiveQueryClient);
127135
});
128-
return defaultLiveQueryClient;
129136
},
130137
open() {
131-
let liveQueryClient = getLiveQueryClient();
132-
liveQueryClient.open();
138+
getLiveQueryClient().then((liveQueryClient) => {
139+
this.resolve(liveQueryClient.open());
140+
});
133141
},
134142
close() {
135-
let liveQueryClient = getLiveQueryClient();
136-
liveQueryClient.close();
143+
getLiveQueryClient().then((liveQueryClient) => {
144+
this.resolve(liveQueryClient.close());
145+
});
137146
},
138-
subscribe(query: any): any {
139-
let liveQueryClient = getLiveQueryClient();
140-
if (liveQueryClient.shouldOpen()) {
141-
liveQueryClient.open();
142-
}
143-
return liveQueryClient.subscribe(query, getSessionToken());
147+
subscribe(query: any): EventEmitter {
148+
let subscriptionWrap = new events.EventEmitter();
149+
150+
getLiveQueryClient().then((liveQueryClient) => {
151+
if (liveQueryClient.shouldOpen()) {
152+
liveQueryClient.open();
153+
}
154+
let promiseSessionToken = getSessionToken();
155+
// new event emitter
156+
return promiseSessionToken.then((sessionToken) => {
157+
158+
let subscription = liveQueryClient.subscribe(query, sessionToken);
159+
// enter, leave create, etc
160+
161+
subscriptionWrap.id = subscription.id;
162+
subscriptionWrap.query = subscription.query;
163+
subscriptionWrap.sessionToken = subscription.sessionToken;
164+
subscriptionWrap.unsubscribe = subscription.unsubscribe;
165+
166+
subscription.on('open', () => {
167+
subscriptionWrap.emit('open');
168+
}).on('create', (object) => {
169+
subscriptionWrap.emit('create', object);
170+
}).on('update', (object) => {
171+
subscriptionWrap.emit('update', object);
172+
}).on('enter', (object) => {
173+
subscriptionWrap.emit('enter', object);
174+
}).on('leave', (object) => {
175+
subscriptionWrap.emit('leave', object);
176+
}).on('delete', (object) => {
177+
subscriptionWrap.emit('delete', object);
178+
});
179+
180+
this.resolve();
181+
});
182+
});
183+
return subscriptionWrap;
144184
},
145185
unsubscribe(subscription: any) {
146-
let liveQueryClient = getLiveQueryClient();
147-
return liveQueryClient.unsubscribe(subscription);
186+
getLiveQueryClient().then((liveQueryClient) => {
187+
this.resolve(liveQueryClient.unsubscribe(subscription));
188+
});
148189
}
149190
};
150191

src/ParseQuery.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ export default class ParseQuery {
990990
/**
991991
* Subscribe this query to get liveQuery updates
992992
* @method subscribe
993-
* @return {LiveQuerySubscription} Returns the liveQuerySubscription, it's an event emitter
993+
* @return {Parse.Promise} A promise that is resolved with a liveQuerySubscription
994994
* which can be used to get liveQuery updates.
995995
*/
996996
subscribe(): any {

0 commit comments

Comments
 (0)