|
1 | 1 | import EventEmitter from './EventEmitter';
|
2 | 2 | import LiveQueryClient from './LiveQueryClient';
|
3 | 3 | import CoreManager from './CoreManager';
|
| 4 | +import ParsePromise from './ParsePromise'; |
4 | 5 |
|
5 | 6 | function open() {
|
6 | 7 | var LiveQueryController = CoreManager.getLiveQueryController();
|
@@ -69,82 +70,120 @@ LiveQuery.on('error', () => {
|
69 | 70 | export default LiveQuery;
|
70 | 71 |
|
71 | 72 | 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 | + }); |
78 | 79 | };
|
79 | 80 |
|
80 | 81 | let getLiveQueryClient = () => {
|
81 |
| - return CoreManager.getLiveQueryController().getDefaultLiveQueryClient(); |
| 82 | + return CoreManager.getLiveQueryController().getDefaultLiveQueryClient().then((defaultLiveQueryClient) => { |
| 83 | + return ParsePromise.as(defaultLiveQueryClient); |
| 84 | + }); |
82 | 85 | };
|
83 | 86 |
|
84 | 87 | let defaultLiveQueryClient;
|
85 | 88 | let DefaultLiveQueryController = {
|
86 | 89 | setDefaultLiveQueryClient(liveQueryClient: any) {
|
87 | 90 | defaultLiveQueryClient = liveQueryClient;
|
88 | 91 | },
|
89 |
| - getDefaultLiveQueryClient(): any { |
| 92 | + getDefaultLiveQueryClient(): ParsePromise { |
90 | 93 | if (defaultLiveQueryClient) {
|
91 |
| - return defaultLiveQueryClient; |
| 94 | + return ParsePromise.as(defaultLiveQueryClient); |
92 | 95 | }
|
93 | 96 |
|
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 | + } |
99 | 104 |
|
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 | + } |
106 | 111 |
|
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); |
127 | 133 | });
|
128 |
| - return defaultLiveQueryClient; |
129 | 134 | },
|
130 | 135 | open() {
|
131 |
| - let liveQueryClient = getLiveQueryClient(); |
132 |
| - liveQueryClient.open(); |
| 136 | + getLiveQueryClient().then((liveQueryClient) => { |
| 137 | + this.resolve(liveQueryClient.open()); |
| 138 | + }); |
133 | 139 | },
|
134 | 140 | close() {
|
135 |
| - let liveQueryClient = getLiveQueryClient(); |
136 |
| - liveQueryClient.close(); |
| 141 | + getLiveQueryClient().then((liveQueryClient) => { |
| 142 | + this.resolve(liveQueryClient.close()); |
| 143 | + }); |
137 | 144 | },
|
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; |
144 | 182 | },
|
145 | 183 | unsubscribe(subscription: any) {
|
146 |
| - let liveQueryClient = getLiveQueryClient(); |
147 |
| - return liveQueryClient.unsubscribe(subscription); |
| 184 | + getLiveQueryClient().then((liveQueryClient) => { |
| 185 | + this.resolve(liveQueryClient.unsubscribe(subscription)); |
| 186 | + }); |
148 | 187 | }
|
149 | 188 | };
|
150 | 189 |
|
|
0 commit comments