OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * Overrided metadata worker's path. | 6 * Overrided metadata worker's path. |
7 * @type {string} | 7 * @type {string} |
8 * @const | 8 * @const |
9 */ | 9 */ |
10 ContentProvider.WORKER_SCRIPT = '/js/metadata_worker.js'; | 10 ContentMetadataProvider.WORKER_SCRIPT = '/js/metadata_worker.js'; |
11 | 11 |
12 /** | 12 /** |
13 * @param {HTMLElement} container Container element. | 13 * @param {HTMLElement} container Container element. |
14 * @constructor | 14 * @constructor |
15 */ | 15 */ |
16 function AudioPlayer(container) { | 16 function AudioPlayer(container) { |
17 this.container_ = container; | 17 this.container_ = container; |
18 this.volumeManager_ = new VolumeManagerWrapper( | 18 this.volumeManager_ = new VolumeManagerWrapper( |
19 VolumeManagerWrapper.DriveEnabledStatus.DRIVE_ENABLED); | 19 VolumeManagerWrapper.DriveEnabledStatus.DRIVE_ENABLED); |
20 this.metadataCache_ = MetadataCache.createFull(this.volumeManager_); | 20 this.fileSystemMetadata_ = FileSystemMetadata.create( |
| 21 new MetadataProviderCache(), this.volumeManager_); |
21 this.selectedEntry_ = null; | 22 this.selectedEntry_ = null; |
22 | 23 |
23 this.model_ = new AudioPlayerModel(); | 24 this.model_ = new AudioPlayerModel(); |
24 var observer = new PathObserver(this.model_, 'expanded'); | 25 var observer = new PathObserver(this.model_, 'expanded'); |
25 observer.open(function(newValue, oldValue) { | 26 observer.open(function(newValue, oldValue) { |
26 // Inverse arguments intentionally to match the Polymer way. | 27 // Inverse arguments intentionally to match the Polymer way. |
27 this.onModelExpandedChanged(oldValue, newValue); | 28 this.onModelExpandedChanged(oldValue, newValue); |
28 }.bind(this)); | 29 }.bind(this)); |
29 | 30 |
30 this.entries_ = []; | 31 this.entries_ = []; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 // Show the window after DOM is processed. | 66 // Show the window after DOM is processed. |
66 var currentWindow = chrome.app.window.current(); | 67 var currentWindow = chrome.app.window.current(); |
67 if (currentWindow) | 68 if (currentWindow) |
68 setTimeout(currentWindow.show.bind(currentWindow), 0); | 69 setTimeout(currentWindow.show.bind(currentWindow), 0); |
69 } | 70 } |
70 | 71 |
71 /** | 72 /** |
72 * Initial load method (static). | 73 * Initial load method (static). |
73 */ | 74 */ |
74 AudioPlayer.load = function() { | 75 AudioPlayer.load = function() { |
75 document.ondragstart = function(e) { e.preventDefault() }; | 76 document.ondragstart = function(e) { e.preventDefault(); }; |
76 | 77 |
77 AudioPlayer.instance = | 78 AudioPlayer.instance = |
78 new AudioPlayer(document.querySelector('.audio-player')); | 79 new AudioPlayer(document.querySelector('.audio-player')); |
79 | 80 |
80 reload(); | 81 reload(); |
81 }; | 82 }; |
82 | 83 |
83 /** | 84 /** |
84 * Unloads the player. | 85 * Unloads the player. |
85 */ | 86 */ |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 this.selectedEntry_ = entry; | 231 this.selectedEntry_ = entry; |
231 }.bind(this)); | 232 }.bind(this)); |
232 }; | 233 }; |
233 | 234 |
234 /** | 235 /** |
235 * @param {FileEntry} entry Track file entry. | 236 * @param {FileEntry} entry Track file entry. |
236 * @param {function(object)} callback Callback. | 237 * @param {function(object)} callback Callback. |
237 * @private | 238 * @private |
238 */ | 239 */ |
239 AudioPlayer.prototype.fetchMetadata_ = function(entry, callback) { | 240 AudioPlayer.prototype.fetchMetadata_ = function(entry, callback) { |
240 this.metadataCache_.getOne(entry, 'thumbnail|media|external', | 241 this.fileSystemMetadata_.get( |
| 242 [entry], ['mediaTitle', 'mediaArtist', 'present']).then( |
241 function(generation, metadata) { | 243 function(generation, metadata) { |
242 // Do nothing if another load happened since the metadata request. | 244 // Do nothing if another load happened since the metadata request. |
243 if (this.playlistGeneration_ == generation) | 245 if (this.playlistGeneration_ == generation) |
244 callback(metadata); | 246 callback(metadata[0]); |
245 }.bind(this, this.playlistGeneration_)); | 247 }.bind(this, this.playlistGeneration_)); |
246 }; | 248 }; |
247 | 249 |
248 /** | 250 /** |
249 * Media error handler. | 251 * Media error handler. |
250 * @private | 252 * @private |
251 */ | 253 */ |
252 AudioPlayer.prototype.onError_ = function() { | 254 AudioPlayer.prototype.onError_ = function() { |
253 var track = this.currentTrackIndex_; | 255 var track = this.currentTrackIndex_; |
254 | 256 |
255 this.invalidTracks_[track] = true; | 257 this.invalidTracks_[track] = true; |
256 | 258 |
257 this.fetchMetadata_( | 259 this.fetchMetadata_( |
258 this.entries_[track], | 260 this.entries_[track], |
259 function(metadata) { | 261 function(metadata) { |
260 var error = (!navigator.onLine && !metadata.external.present) ? | 262 var error = (!navigator.onLine && !metadata.present) ? |
261 this.offlineString_ : this.errorString_; | 263 this.offlineString_ : this.errorString_; |
262 this.displayMetadata_(track, metadata, error); | 264 this.displayMetadata_(track, metadata, error); |
263 this.scheduleAutoAdvance_(); | 265 this.scheduleAutoAdvance_(); |
264 }.bind(this)); | 266 }.bind(this)); |
265 }; | 267 }; |
266 | 268 |
267 /** | 269 /** |
268 * Toggles the expanded mode when resizing. | 270 * Toggles the expanded mode when resizing. |
269 * | 271 * |
270 * @param {Event} event Resize event. | 272 * @param {Event} event Resize event. |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 this.artist = this.getDefaultArtist(); | 384 this.artist = this.getDefaultArtist(); |
383 | 385 |
384 // TODO(yoshiki): implement artwork. | 386 // TODO(yoshiki): implement artwork. |
385 this.artwork = null; | 387 this.artwork = null; |
386 this.active = false; | 388 this.active = false; |
387 }; | 389 }; |
388 | 390 |
389 /** | 391 /** |
390 * @return {HTMLDivElement} The wrapper element for the track. | 392 * @return {HTMLDivElement} The wrapper element for the track. |
391 */ | 393 */ |
392 AudioPlayer.TrackInfo.prototype.getBox = function() { return this.box_ }; | 394 AudioPlayer.TrackInfo.prototype.getBox = function() { return this.box_; }; |
393 | 395 |
394 /** | 396 /** |
395 * @return {string} Default track title (file name extracted from the url). | 397 * @return {string} Default track title (file name extracted from the url). |
396 */ | 398 */ |
397 AudioPlayer.TrackInfo.prototype.getDefaultTitle = function() { | 399 AudioPlayer.TrackInfo.prototype.getDefaultTitle = function() { |
398 var title = this.url.split('/').pop(); | 400 var title = this.url.split('/').pop(); |
399 var dotIndex = title.lastIndexOf('.'); | 401 var dotIndex = title.lastIndexOf('.'); |
400 if (dotIndex >= 0) title = title.substr(0, dotIndex); | 402 if (dotIndex >= 0) title = title.substr(0, dotIndex); |
401 title = decodeURIComponent(title); | 403 title = decodeURIComponent(title); |
402 return title; | 404 return title; |
(...skipping 12 matching lines...) Expand all Loading... |
415 }; | 417 }; |
416 | 418 |
417 /** | 419 /** |
418 * @param {Object} metadata The metadata object. | 420 * @param {Object} metadata The metadata object. |
419 * @param {string} error Error string. | 421 * @param {string} error Error string. |
420 */ | 422 */ |
421 AudioPlayer.TrackInfo.prototype.setMetadata = function( | 423 AudioPlayer.TrackInfo.prototype.setMetadata = function( |
422 metadata, error) { | 424 metadata, error) { |
423 // TODO(yoshiki): Handle error in better way. | 425 // TODO(yoshiki): Handle error in better way. |
424 // TODO(yoshiki): implement artwork (metadata.thumbnail) | 426 // TODO(yoshiki): implement artwork (metadata.thumbnail) |
425 this.title = (metadata.media && metadata.media.title) || | 427 this.title = metadata.mediaTitle || this.getDefaultTitle(); |
426 this.getDefaultTitle(); | 428 this.artist = error || metadata.mediaArtist || this.getDefaultArtist(); |
427 this.artist = error || | |
428 (metadata.media && metadata.media.artist) || this.getDefaultArtist(); | |
429 }; | 429 }; |
430 | 430 |
431 // Starts loading the audio player. | 431 // Starts loading the audio player. |
432 window.addEventListener('polymer-ready', function(e) { | 432 window.addEventListener('polymer-ready', function(e) { |
433 AudioPlayer.load(); | 433 AudioPlayer.load(); |
434 }); | 434 }); |
OLD | NEW |