|
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