| /* Copyright 2015 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /* Client id obtained from API console credential page should be set before |
| * running this script. */ |
| if (!CLIENT_ID) { |
| console.error.log('CLIENT_ID is not set'); |
| } |
| |
| /* Initialize a Google Drive picker after Google client API is loaded. */ |
| function onGoogleClientApiLoad() { |
| var picker = new Picker({ |
| clientId: CLIENT_ID, |
| button: document.getElementById('google_drive_pick_file') |
| }); |
| } |
| |
| /* Initializes a Google Drive picker and loads drive API and picker API.*/ |
| var Picker = function(options) { |
| this.clientId = options.clientId; |
| this.button = options.button; |
| this.button.addEventListener('click', this.open.bind(this)); |
| |
| gapi.client.load('drive', 'v2'); |
| gapi.load('picker', {callback: this.onPickerApiLoaded.bind(this) }); |
| } |
| |
| /* Enable the button after picker API is loaded. */ |
| Picker.prototype.onPickerApiLoaded = function() { |
| this.button.disabled = false; |
| }; |
| |
| /* Let user authenticate and show file picker. */ |
| Picker.prototype.open = function(){ |
| if (gapi.auth.getToken()) { |
| this.showFilePicker(); |
| } else { |
| this.authenticate(this.showFilePicker.bind(this)); |
| } |
| }; |
| |
| /* Run authenticate using auth API. */ |
| Picker.prototype.authenticate = function(callback) { |
| gapi.auth.authorize( |
| { |
| client_id: this.clientId + '.apps.googleusercontent.com', |
| scope: 'https://www.googleapis.com/auth/drive.readonly', |
| immediate: false |
| }, |
| callback); |
| }; |
| |
| /* Create a picker using picker API. */ |
| Picker.prototype.showFilePicker = function() { |
| var accessToken = gapi.auth.getToken().access_token; |
| this.picker = new google.picker.PickerBuilder(). |
| addView(google.picker.ViewId.DOCS). |
| setAppId(this.clientId). |
| setOAuthToken(accessToken). |
| setCallback(this.onFilePicked.bind(this)). |
| build(). |
| setVisible(true); |
| }; |
| |
| /* Request the file using drive API once a file is picked. */ |
| Picker.prototype.onFilePicked = function(data) { |
| if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) { |
| var file = data[google.picker.Response.DOCUMENTS][0]; |
| var id = file[google.picker.Document.ID]; |
| var request = gapi.client.drive.files.get({fileId: id}); |
| request.execute(this.onFileGet.bind(this)); |
| } |
| }; |
| |
| /* Retrieve the file URL and access token and set it as audio source. */ |
| Picker.prototype.onFileGet = function(file) { |
| var accessToken = gapi.auth.getToken().access_token; |
| var authedUrl = file.downloadUrl + "&access_token=" |
| + encodeURIComponent(accessToken); |
| audio_source_set(authedUrl); |
| }; |