/* 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);
};