Home | History | Annotate | Download | only in frontend
      1 /* Copyright 2015 The Chromium OS Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 /* Client id obtained from API console credential page should be set before
      7  * running this script. */
      8 if (!CLIENT_ID) {
      9   console.error.log('CLIENT_ID is not set');
     10 }
     11 
     12 /* Initialize a Google Drive picker after Google client API is loaded. */
     13 function onGoogleClientApiLoad() {
     14   var picker = new Picker({
     15       clientId: CLIENT_ID,
     16       button: document.getElementById('google_drive_pick_file')
     17   });
     18 }
     19 
     20 /* Initializes a Google Drive picker and loads drive API and picker API.*/
     21 var Picker = function(options) {
     22   this.clientId = options.clientId;
     23   this.button = options.button;
     24   this.button.addEventListener('click', this.open.bind(this));
     25 
     26   gapi.client.load('drive', 'v2');
     27   gapi.load('picker', {callback: this.onPickerApiLoaded.bind(this) });
     28 }
     29 
     30 /* Enable the button after picker API is loaded. */
     31 Picker.prototype.onPickerApiLoaded = function() {
     32   this.button.disabled = false;
     33 };
     34 
     35 /* Let user authenticate and show file picker. */
     36 Picker.prototype.open = function(){
     37   if (gapi.auth.getToken()) {
     38     this.showFilePicker();
     39   } else {
     40     this.authenticate(this.showFilePicker.bind(this));
     41   }
     42 };
     43 
     44 /* Run authenticate using auth API. */
     45 Picker.prototype.authenticate = function(callback) {
     46   gapi.auth.authorize(
     47       {
     48           client_id: this.clientId + '.apps.googleusercontent.com',
     49           scope: 'https://www.googleapis.com/auth/drive.readonly',
     50           immediate: false
     51       },
     52       callback);
     53 };
     54 
     55 /* Create a picker using picker API. */
     56 Picker.prototype.showFilePicker = function() {
     57   var accessToken = gapi.auth.getToken().access_token;
     58   this.picker = new google.picker.PickerBuilder().
     59                 addView(google.picker.ViewId.DOCS).
     60                 setAppId(this.clientId).
     61                 setOAuthToken(accessToken).
     62                 setCallback(this.onFilePicked.bind(this)).
     63                 build().
     64                 setVisible(true);
     65 };
     66 
     67 /* Request the file using drive API once a file is picked. */
     68 Picker.prototype.onFilePicked = function(data) {
     69   if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
     70     var file = data[google.picker.Response.DOCUMENTS][0];
     71     var id = file[google.picker.Document.ID];
     72     var request = gapi.client.drive.files.get({fileId: id});
     73     request.execute(this.onFileGet.bind(this));
     74   }
     75 };
     76 
     77 /* Retrieve the file URL and access token and set it as audio source. */
     78 Picker.prototype.onFileGet = function(file) {
     79   var accessToken = gapi.auth.getToken().access_token;
     80   var authedUrl = file.downloadUrl + "&access_token="
     81       + encodeURIComponent(accessToken);
     82   audio_source_set(authedUrl);
     83 };
     84