@@ -176,16 +176,33 @@ cwc.ui.Account.prototype.setAuthentication = function(authenticated) {
176
176
menuBarInstance . setAuthenticated ( authenticated ) ;
177
177
}
178
178
179
+ if ( ! authenticated ) {
180
+ this . accessToken = '' ;
181
+ }
182
+ this . authenticated = authenticated ;
183
+
179
184
let navigationInstance = this . helper . getInstance ( 'navigation' ) ;
180
185
if ( navigationInstance ) {
181
186
navigationInstance . enableOpenGoogleDriveFile ( authenticated ) ;
182
187
navigationInstance . enableSaveGoogleDriveFile ( authenticated ) ;
188
+ navigationInstance . enableOpenGoogleClassroom ( authenticated ) ;
189
+
190
+ if ( authenticated ) {
191
+ this . request ( {
192
+ subdomain : 'classroom' ,
193
+ path : '/v1/courses' ,
194
+ params : {
195
+ 'studentId' : 'me' ,
196
+ } ,
197
+ } , function ( response ) {
198
+ if ( Object . keys ( response ) . length > 0 ) {
199
+ navigationInstance . enableOpenGoogleClassroom ( true ) ;
200
+ }
201
+ } ) ;
202
+ } else {
203
+ navigationInstance . enableOpenGoogleClassroom ( false ) ;
204
+ }
183
205
}
184
-
185
- if ( ! authenticated ) {
186
- this . accessToken = '' ;
187
- }
188
- this . authenticated = authenticated ;
189
206
} ;
190
207
191
208
@@ -200,58 +217,75 @@ cwc.ui.Account.prototype.setAuthentication = function(authenticated) {
200
217
* - token: Authorization bearer token.
201
218
* - raw: if true opts.path becomes the entire URI.
202
219
* @param {function(?)= } callback Called when http request completes.
220
+ * @return {Promise } to wait on the completion of the http request.
203
221
*/
204
222
cwc . ui . Account . prototype . request = function ( opts , callback ) {
205
223
let params = opts . params || { } ;
224
+ let subdomain = 'www' ;
225
+ if ( opts . subdomain && typeof ( opts . subdomain ) === 'string' &&
226
+ opts . subdomain . match ( / ^ [ 0 - 9 a - z A - Z ] + $ / ) ) {
227
+ subdomain = opts . subdomain ;
228
+ }
206
229
207
- let handleRequest = ( function ( ) {
208
- let subdomain = 'www' ;
209
- if ( opts . subdomain && typeof ( opts . subdomain ) === 'string' &&
210
- opts . subdomain . match ( / ^ [ 0 - 9 a - z A - Z ] + $ / ) ) {
211
- subdomain = opts . subdomain ;
212
- }
230
+ let uri = subdomain + '.googleapis.com' ;
231
+ let url = goog . Uri . create ( 'https' , null , uri , null , opts . path ) ;
232
+ if ( opts . raw ) {
233
+ url = new goog . Uri ( opts . path ) ;
234
+ }
235
+ let method = opts . method || 'GET' ;
236
+ let content = opts . content ;
237
+ let token = opts . token || this . accessToken || '' ;
213
238
214
- let uri = subdomain + '.googleapis.com' ;
215
- let url = goog . Uri . create ( 'https' , null , uri , null , opts . path ) ;
216
- if ( opts . raw ) {
217
- url = new goog . Uri ( opts . path ) ;
239
+ for ( let i in params ) {
240
+ if ( Object . prototype . hasOwnProperty . call ( params , i ) ) {
241
+ url . setParameterValue ( i , params [ i ] ) ;
218
242
}
219
- let method = opts . method || 'GET' ;
220
- let content = opts . content ;
221
- let token = opts . token || this . accessToken || '' ;
243
+ }
222
244
223
- for ( let i in params ) {
224
- if ( Object . prototype . hasOwnProperty . call ( params , i ) ) {
225
- url . setParameterValue ( i , params [ i ] ) ;
245
+ let headers = new Map ( Object . entries ( opts . header || { } ) ) ;
246
+ headers . set ( 'Authorization' , 'Bearer ' + token ) ;
247
+ headers . set ( 'X-JavaScript-User-Agent' , 'Coding with Chrome' ) ;
248
+
249
+ return new Promise ( ( resolve , reject ) => {
250
+ let handleRequest = ( function ( ) {
251
+ let xhrRepsonseEvent = ( event ) => {
252
+ this . handleXhrResponse ( event , ( response ) => {
253
+ if ( callback ) {
254
+ callback ( response ) ;
255
+ }
256
+ resolve ( response ) ;
257
+ } ) ;
258
+ } ;
259
+
260
+ let xhrErrorEvent = ( event ) => {
261
+ this . handleXhrError ( event ) ;
262
+ reject ( event ) ;
263
+ } ;
264
+
265
+ let xhrTimeoutEvent = ( event ) => {
266
+ this . handleXhrTimeout ( event ) ;
267
+ reject ( event ) ;
268
+ } ;
269
+
270
+ /** @type {goog.net.XhrIo } */
271
+ let xhr = new goog . net . XhrIo ( ) ;
272
+ goog . events . listen ( xhr , goog . net . EventType . COMPLETE , xhrRepsonseEvent ,
273
+ false , this ) ;
274
+ goog . events . listen ( xhr , goog . net . EventType . ERROR , xhrErrorEvent ,
275
+ false , this ) ;
276
+ goog . events . listen ( xhr , goog . net . EventType . TIMEOUT , xhrTimeoutEvent ,
277
+ false , this ) ;
278
+
279
+ this . log_ . info ( 'Request: ' + method + ' ' + url ) ;
280
+ xhr . send ( url , method , content , headers ) ;
281
+ } ) . bind ( this ) ;
282
+
283
+ if ( ! this . authenticated ) {
284
+ this . authenticate ( handleRequest ) ;
285
+ } else {
286
+ handleRequest ( ) ;
226
287
}
227
- }
228
-
229
- let headers = new Map ( Object . entries ( opts . header || { } ) ) ;
230
- headers . set ( 'Authorization' , 'Bearer ' + token ) ;
231
- headers . set ( 'X-JavaScript-User-Agent' , 'Coding with Chrome' ) ;
232
-
233
- let xhrRepsonseEvent = function ( event ) {
234
- this . handleXhrResponse ( event , callback ) ;
235
- } ;
236
-
237
- /** @type {goog.net.XhrIo } */
238
- let xhr = new goog . net . XhrIo ( ) ;
239
- goog . events . listen ( xhr , goog . net . EventType . COMPLETE , xhrRepsonseEvent ,
240
- false , this ) ;
241
- goog . events . listen ( xhr , goog . net . EventType . ERROR , this . handleXhrError ,
242
- false , this ) ;
243
- goog . events . listen ( xhr , goog . net . EventType . TIMEOUT , this . handleXhrTimeout ,
244
- false , this ) ;
245
-
246
- this . log_ . info ( 'Request: ' + method + ' ' + url ) ;
247
- xhr . send ( url , method , content , headers ) ;
248
- } ) . bind ( this ) ;
249
-
250
- if ( ! this . authenticated ) {
251
- this . authenticate ( handleRequest ) ;
252
- } else {
253
- handleRequest ( ) ;
254
- }
288
+ } ) ;
255
289
} ;
256
290
257
291
0 commit comments