Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Unified Diff: ui/file_manager/video_player/js/video_player.js

Issue 313273002: Video Player: Supports multiple files (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed the comments Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/file_manager/video_player/js/video_player.js
diff --git a/ui/file_manager/video_player/js/video_player.js b/ui/file_manager/video_player/js/video_player.js
index 23524bf6f363f923c3fbcf47778d9c2322369b68..9411822fc64c735887119f17d0d7a546e6d8aacf 100644
--- a/ui/file_manager/video_player/js/video_player.js
+++ b/ui/file_manager/video_player/js/video_player.js
@@ -60,6 +60,7 @@ FullWindowVideoControls.prototype = { __proto__: VideoControls.prototype };
/**
* Displays error message.
+ *
* @param {string} message Message id.
* @private
*/
@@ -110,6 +111,7 @@ function VideoPlayer() {
this.controls_ = null;
this.videoElement_ = null;
this.videos_ = null;
+ this.currentPos_ = 0;
Object.seal(this);
}
@@ -167,11 +169,24 @@ VideoPlayer.prototype.prepare = function(videos) {
if (this.controls_.decodeErrorOccured &&
// Ignore shortcut keys
!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {
- this.playVideo();
+ this.reloadCurrentVideo_(function() {
+ this.videoElement_.play();
+ }.wrap(this));
e.preventDefault();
}
}.wrap(this);
+ var arrowRight = document.querySelector('.arrow-box .arrow.right');
+ arrowRight.addEventListener('click', this.advance_.wrap(this, 1));
+ var arrowLeft = document.querySelector('.arrow-box .arrow.left');
+ arrowLeft.addEventListener('click', this.advance_.wrap(this, 0));
+
+ var videoPlayerElement = document.querySelector('#video-player');
+ if (videos.length > 1)
+ videoPlayerElement.setAttribute('multiple', true);
+ else
+ videoPlayerElement.removeAttribute('multiple');
+
document.addEventListener('keydown', reloadVideo, true);
document.addEventListener('click', reloadVideo, true);
};
@@ -191,7 +206,7 @@ function unload() {
* Loads the video file.
* @param {string} url URL of the video file.
* @param {string} title Title of the video file.
- * @param {function(number, number)=} opt_callback Completion callback.
+ * @param {function()=} opt_callback Completion callback.
* @private
*/
VideoPlayer.prototype.loadVideo_ = function(url, title, opt_callback) {
@@ -201,6 +216,17 @@ VideoPlayer.prototype.loadVideo_ = function(url, title, opt_callback) {
document.querySelector('#title').innerText = title;
+ var videoPlayerElement = document.querySelector('#video-player');
+ if (this.currentPos_ === (this.videos_.length - 1))
+ videoPlayerElement.setAttribute('last-video', true);
+ else
+ videoPlayerElement.removeAttribute('last-video');
+
+ if (this.currentPos_ === 0)
+ videoPlayerElement.setAttribute('first-video', true);
+ else
+ videoPlayerElement.removeAttribute('first-video');
+
// Re-enables ui and hides error message if already displayed.
document.querySelector('#video-player').removeAttribute('disabled');
document.querySelector('#error').removeAttribute('visible');
@@ -213,18 +239,25 @@ VideoPlayer.prototype.loadVideo_ = function(url, title, opt_callback) {
this.videoElement_.src = url;
this.videoElement_.load();
- if (opt_callback)
- this.videoElement_.addEventListener('loadedmetadata', opt_callback);
+
+ if (opt_callback) {
+ var handler = function(currentPos, event) {
+ console.log('loaded: ', currentPos, this.currentPos_);
+ if (currentPos === this.currentPos_)
+ opt_callback();
+ this.videoElement_.removeEventListener('loadedmetadata', handler);
+ }.wrap(this, this.currentPos_);
+
+ this.videoElement_.addEventListener('loadedmetadata', handler);
+ }
};
/**
- * Plays the video.
+ * Plays the first video.
*/
-VideoPlayer.prototype.playVideo = function() {
- var currentVideo = this.videos_[0];
- this.loadVideo_(currentVideo.fileUrl,
- currentVideo.entry.name,
- this.onVideoReady_.wrap(this));
+VideoPlayer.prototype.playFirstVideo = function() {
+ this.currentPos_ = 0;
+ this.reloadCurrentVideo_(this.onFirstVideoReady_.wrap(this));
};
/**
@@ -238,10 +271,10 @@ VideoPlayer.prototype.unloadVideo = function() {
};
/**
- * Called when the video is ready after starting to load.
+ * Called when the first video is ready after starting to load.
* @private
*/
-VideoPlayer.prototype.onVideoReady_ = function() {
+VideoPlayer.prototype.onFirstVideoReady_ = function() {
// TODO: chrome.app.window soon will be able to resize the content area.
// Until then use approximate title bar height.
var TITLE_HEIGHT = 33;
@@ -285,10 +318,37 @@ VideoPlayer.prototype.onVideoReady_ = function() {
};
/**
+ * Advances to the next (or previous) track.
+ *
+ * @param {boolean} direction True to the next, false to the previous.
+ * @private
+ */
+VideoPlayer.prototype.advance_ = function(direction) {
+ var newPos = this.currentPos_ + (direction ? 1 : -1);
+ if (0 <= newPos && newPos < this.videos_.length) {
+ this.currentPos_ = newPos;
+ this.reloadCurrentVideo_(function() {
+ this.videoElement_.play();
+ }.wrap(this));
+ }
+};
+
+/**
+ * Reloads the current video.
+ *
+ * @param {function()=} opt_callback Completion callback.
+ * @private
+ */
+VideoPlayer.prototype.reloadCurrentVideo_ = function(opt_callback) {
+ var currentVideo = this.videos_[this.currentPos_];
+ this.loadVideo_(currentVideo.fileUrl, currentVideo.entry.name, opt_callback);
+};
+
+/**
* Initialize the list of videos.
* @param {function(Array.<Object>)} callback Called with the video list when
* it is ready.
- **/
+ */
function initVideos(callback) {
if (window.videos) {
var videos = window.videos;
@@ -310,7 +370,7 @@ var player = new VideoPlayer();
/**
* Initializes the strings.
* @param {function()} callback Called when the sting data is ready.
- **/
+ */
function initStrings(callback) {
chrome.fileBrowserPrivate.getStrings(function(strings) {
loadTimeData.data = strings;
@@ -326,5 +386,5 @@ var initPromise = Promise.all(
initPromise.then(function(results) {
var videos = results[0];
player.prepare(videos);
- return new Promise(player.playVideo.wrap(player));
+ return new Promise(player.playFirstVideo.wrap(player));
}.wrap(null));
« no previous file with comments | « ui/file_manager/video_player/images/200/arrow_right.png ('k') | ui/file_manager/video_player/video_player.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698