// vim: et:ts=4:sw=4:sts=4:ft=javascript 'use strict'; pandora.ui.uploadVideoDialog = function(data) { var cancelled = false, file, hasFirefogg = !(typeof Firefogg == 'undefined') && ( $.browser.version < "35" || Firefogg().version >= 334), itemView = pandora.site.capabilities.canSeeExtraItemViews[pandora.user.level] ? 'media' : 'info', selectFile, $actionButton, $closeButton, $content = Ox.Element().css({margin: '16px'}), $info = $('
').css({padding: '4px'}) .html(Ox._('Please select the video file you want to upload.')), $progress, $status = $('
').css({padding: '4px', paddingTop: '8px'}), that = Ox.Dialog({ buttons: [ $closeButton = Ox.Button({ id: 'close', title: Ox._('Close') }).css({ float: 'left' }).bindEvent({ click: function() { if ($closeButton.options('title') == Ox._('Cancel')) { cancelled = true; pandora.firefogg && pandora.firefogg.cancel(); pandora.$ui.upload && pandora.$ui.upload.abort(); $closeButton.options('title', Ox._('Close')); $actionButton.show(); } else { that.triggerEvent('close'); } } }), $actionButton = hasFirefogg ? Ox.Button({ id: 'action', title: Ox._('Select Video') }).bindEvent({ click: function() { if ($actionButton.options('title') == Ox._('Select Video')) { if (selectVideo()) { $actionButton.options('title', Ox._('Upload')); } } else if ($actionButton.options('title') == Ox._('Cancel')) { cancelled = true; pandora.firefogg && pandora.firefogg.cancel(); pandora.$ui.upload && pandora.$ui.upload.abort(); $actionButton.options('title', Ox._('Select Video')); $closeButton.show(); } else { $closeButton.options('title', Ox._('Cancel')); $actionButton.hide().options('title', Ox._('Select Video')); encode(); } } }) : Ox.FileButton({ id: 'action', title: Ox._('Select Video'), maxFiles: 1, width: 96 }).css({ float: 'left' }).bindEvent({ click: function(data) { if (data.files.length) { cancelled = false; $actionButton.replaceWith($actionButton = Ox.Button({ id: 'action', title: 'Upload', disabled: true }).css({ float: 'left' })); getInfo(data.files[0], function(info) { console.log(info); $actionButton.options({ disabled: false }).bindEvent({ click: function() { info.direct ? directUpload(data.files[0], info) : upload(data.files[0]); } }); $info.html(formatVideoInfo(info)); $status.html( info.direct ? Ox._('Your video will be used directly.') : Ox._('Your video will be transcoded.') ); }); //$closeButton.options('title', Ox._('Cancel')); } } }) ], content: $content, height: 128, removeOnClose: true, width: 368, title: Ox._('Upload Video'), }) .bindEvent({ close: function(data) { if (pandora.firefogg) { pandora.firefogg.cancel(); delete pandora.firefogg; } that.close(); } }); if (!pandora.site.itemRequiresVideo && !pandora.user.ui.item) { $info.html(Ox._( 'You can only upload a video to an existing {0}.' + ' Please check if an entry for the {0}' + ' you want to upload exists and create otherwise.', [pandora.site.itemName.singular.toLowerCase()] )); $actionButton.hide(); } $content.append($info); $content.append($status); function aspectratio(ratio) { var denominator, numerator; ratio = ratio.split(':'); numerator = ratio[0]; if (ratio.length == 2) { denominator = ratio[1]; } if (Math.abs(numerator / denominator - 4/3) < 0.03) { numerator = 4; denominator = 3; } else if (Math.abs(numerator / denominator - 16/9) < 0.02) { numerator = 16; denominator = 9; } return { denominator: denominator, 'float': numerator / denominator, numerator: numerator, ratio: numerator + ':' + denominator }; } function resetProgress(status) { $progress = Ox.Progressbar({ progress: 0, showPercent: true, showTime: true, width: 304 }); $status.html(status || '').append($progress); } function directUpload(file, info) { resetProgress(); pandora.api.addMedia({ filename: info.name, id: info.oshash, item: pandora.site.itemRequiresVideo ? undefined : pandora.user.ui.item }, function(result) { uploadStream(result.data.item, info, file); }); } function encode() { var filename = pandora.firefogg.sourceFilename, info = JSON.parse(pandora.firefogg.sourceInfo), item, oshash = info.oshash; $info.html('' + filename + '
' + Ox._('encoding...')); resetProgress(); pandora.api.addMedia({ filename: filename, id: oshash, info: info, item: pandora.site.itemRequiresVideo ? undefined : pandora.user.ui.item }, function(result) { item = result.data.item; pandora.firefogg.encode( getEncodingOptions(info), function(result, file) { result = JSON.parse(result); if (result.progress != 1) { $status.html(cancelled ? Ox._('Encoding cancelled.') : Ox._('Encoding failed.')); delete pandora.firefogg; return; } setTimeout(function() { $info.html('' + filename + '
' + Ox._('uploading...')); uploadStream(item, info, file); }); }, function(progress) { progress = JSON.parse(progress).progress || 0; $progress.options({progress: progress}); } ); }); } function getInfo(file, callback) { Ox.oshash(file, function(oshash) { var $video = $('