2014-01-05 03:47:23 +00:00
|
|
|
/**
|
2014-01-08 18:04:11 +00:00
|
|
|
* Playback widget (play, pause , etc)
|
2014-01-05 03:47:23 +00:00
|
|
|
*/
|
2015-07-15 15:04:45 +00:00
|
|
|
|
2015-10-16 19:01:18 +00:00
|
|
|
|
|
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
(function (context, $) {
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-10-16 19:01:18 +00:00
|
|
|
|
|
|
|
|
// this check ensures we attempt to listen if this component is created in a popup
|
|
|
|
|
var reactContext = window.opener ? window.opener : window
|
|
|
|
|
// make sure this is actually us opening the window, not someone else (by checking for MixerStore)
|
|
|
|
|
if (window.opener) {
|
|
|
|
|
try {
|
|
|
|
|
m = window.opener.MixerStore
|
|
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
reactContext = window
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var BrowserMediaStore = reactContext.BrowserMediaStore
|
|
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
"use strict";
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
var PlaybackMode = {
|
|
|
|
|
NoPlayback: 0,
|
|
|
|
|
EveryWhere: 1,
|
|
|
|
|
PrivatePreview: 2,
|
|
|
|
|
PreviewToAll: 3,
|
|
|
|
|
LastPbMode: 4
|
|
|
|
|
};
|
2014-01-06 20:35:35 +00:00
|
|
|
|
|
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
context.JK = context.JK || {};
|
|
|
|
|
context.JK.PlaybackControls = function ($parentElement, options) {
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
options = $.extend(false, {playmodeControlsVisible: false, mediaActions: null}, options);
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
var logger = context.JK.logger;
|
|
|
|
|
if ($parentElement.length == 0) {
|
|
|
|
|
logger.debug("no $parentElement specified in PlaybackControls");
|
|
|
|
|
}
|
2015-04-29 19:38:03 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
var PLAYBACK_MONITOR_MODE = context.JK.PLAYBACK_MONITOR_MODE;
|
|
|
|
|
|
|
|
|
|
var $playButton = $('.play-button img.playbutton', $parentElement);
|
|
|
|
|
var $pauseButton = $('.play-button img.pausebutton', $parentElement);
|
|
|
|
|
var $stopButton = $('.stop-button img.stopbutton', $parentElement);
|
|
|
|
|
var $currentTime = $('.recording-current', $parentElement);
|
|
|
|
|
var $duration = $('.duration-time', $parentElement);
|
|
|
|
|
var $sliderBar = $('.recording-playback', $parentElement);
|
|
|
|
|
var $slider = $('.recording-slider', $parentElement);
|
|
|
|
|
var $playmodeButton = $('.playback-mode-buttons.icheckbuttons input', $parentElement);
|
|
|
|
|
var $jamTrackGetReady = $('.jam-track-get-ready', $parentElement);
|
|
|
|
|
|
|
|
|
|
var $self = $(this);
|
|
|
|
|
|
2015-09-23 20:27:41 +00:00
|
|
|
var disabled = false;
|
2015-07-24 17:20:10 +00:00
|
|
|
var playbackPlaying = false;
|
|
|
|
|
var playbackDurationMs = 0;
|
|
|
|
|
var playbackPositionMs = 0;
|
|
|
|
|
var durationChanged = false;
|
|
|
|
|
var seenActivity = false;
|
|
|
|
|
|
|
|
|
|
var endReached = false;
|
|
|
|
|
var dragging = false;
|
|
|
|
|
var playingWhenDragStart = false;
|
|
|
|
|
var draggingUpdateTimer = null;
|
|
|
|
|
var canUpdateBackend = false;
|
|
|
|
|
var playbackMode = PlaybackMode.EveryWhere;
|
|
|
|
|
var monitorPlaybackTimeout = null;
|
|
|
|
|
var playbackMonitorMode = PLAYBACK_MONITOR_MODE.MEDIA_FILE;
|
|
|
|
|
var monitoring = false;
|
|
|
|
|
|
|
|
|
|
function init() {
|
|
|
|
|
updateSliderPosition(0);
|
|
|
|
|
updateDurationTime(0);
|
|
|
|
|
updateCurrentTime(0);
|
|
|
|
|
seenActivity = false;
|
|
|
|
|
}
|
2015-04-15 23:27:00 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function startPlay() {
|
|
|
|
|
seenActivity = false;
|
|
|
|
|
updateIsPlaying(true);
|
|
|
|
|
if (endReached) {
|
|
|
|
|
update(0, playbackDurationMs, playbackPlaying);
|
|
|
|
|
}
|
2015-07-15 15:04:45 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (options.mediaActions) {
|
2015-10-26 21:03:43 +00:00
|
|
|
options.mediaActions.mediaStartPlay.trigger({playbackMode: playbackMode, playbackMonitorMode: playbackMonitorMode})
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$self.triggerHandler('play', {playbackMode: playbackMode, playbackMonitorMode: playbackMonitorMode});
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (playbackMonitorMode == PLAYBACK_MONITOR_MODE.JAMTRACK) {
|
|
|
|
|
context.JK.GA.trackJamTrackPlaySession(context.SessionStore.id(), true)
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-04-28 13:58:34 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function stopPlay(endReached) {
|
|
|
|
|
logger.debug("STOP PLAY CLICKED")
|
|
|
|
|
updateIsPlaying(false);
|
|
|
|
|
|
|
|
|
|
if (options.mediaActions) {
|
|
|
|
|
logger.debug("mediaStopPlay", endReached)
|
|
|
|
|
options.mediaActions.mediaStopPlay({
|
|
|
|
|
playbackMode: playbackMode,
|
|
|
|
|
playbackMonitorMode: playbackMonitorMode,
|
|
|
|
|
endReached: endReached
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$self.triggerHandler('stop', {
|
|
|
|
|
playbackMode: playbackMode,
|
|
|
|
|
playbackMonitorMode: playbackMonitorMode,
|
|
|
|
|
endReached: endReached
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-07-15 15:04:45 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function pausePlay(endReached) {
|
|
|
|
|
updateIsPlaying(false);
|
|
|
|
|
|
|
|
|
|
if (options.mediaActions) {
|
|
|
|
|
options.mediaActions.mediaPausePlay({
|
|
|
|
|
playbackMode: playbackMode,
|
|
|
|
|
playbackMonitorMode: playbackMonitorMode,
|
|
|
|
|
endReached: endReached
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$self.triggerHandler('pause', {
|
|
|
|
|
playbackMode: playbackMode,
|
|
|
|
|
playbackMonitorMode: playbackMonitorMode,
|
|
|
|
|
endReached: endReached
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function updateOffsetBasedOnPosition(offsetLeft) {
|
|
|
|
|
var sliderBarWidth = $sliderBar.width();
|
|
|
|
|
|
|
|
|
|
playbackPositionMs = parseInt((offsetLeft / sliderBarWidth) * playbackDurationMs);
|
|
|
|
|
updateCurrentTimeText(playbackPositionMs);
|
|
|
|
|
if (canUpdateBackend) {
|
|
|
|
|
if (options.mediaActions) {
|
|
|
|
|
options.mediaActions.mediaChangePosition({
|
|
|
|
|
positionMs: playbackPositionMs,
|
|
|
|
|
playbackMonitorMode: playbackMonitorMode
|
|
|
|
|
})
|
2014-01-05 03:47:23 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
else {
|
|
|
|
|
$self.triggerHandler('change-position', {
|
|
|
|
|
positionMs: playbackPositionMs,
|
|
|
|
|
playbackMonitorMode: playbackMonitorMode
|
|
|
|
|
});
|
2014-01-05 03:47:23 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
canUpdateBackend = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function startDrag(e, ui) {
|
|
|
|
|
dragging = true;
|
|
|
|
|
playingWhenDragStart = playbackPlaying;
|
|
|
|
|
//draggingUpdateTimer = setInterval(function() { canUpdateBackend = true; }, 333); // only call backend up to 3 times a second while dragging
|
|
|
|
|
//if(playingWhenDragStart) {
|
|
|
|
|
//stopPlay();
|
|
|
|
|
//}
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function stopDrag(e, ui) {
|
|
|
|
|
dragging = false;
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
clearInterval(draggingUpdateTimer);
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
canUpdateBackend = true;
|
|
|
|
|
updateOffsetBasedOnPosition(ui.position.left);
|
|
|
|
|
updateSliderPosition(playbackPositionMs);
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
//if(playingWhenDragStart) {
|
|
|
|
|
// playingWhenDragStart = false;
|
|
|
|
|
// startPlay();
|
|
|
|
|
//}
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function onDrag(e, ui) {
|
|
|
|
|
updateOffsetBasedOnPosition(ui.position.left);
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
$playButton.on('click', function (e) {
|
2015-09-23 20:27:41 +00:00
|
|
|
|
|
|
|
|
if (disabled) {
|
|
|
|
|
logger.debug("PlaybackControls are disabled; ignoring start button")
|
|
|
|
|
return;
|
|
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
startPlay();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$pauseButton.on('click', function (e) {
|
|
|
|
|
pausePlay();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$stopButton.on('click', function (e) {
|
|
|
|
|
stopPlay();
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$sliderBar.on('click', function (e) {
|
|
|
|
|
var offset = e.pageX - $(this).offset().left;
|
|
|
|
|
canUpdateBackend = true;
|
|
|
|
|
updateOffsetBasedOnPosition(offset);
|
|
|
|
|
updateSliderPosition(playbackPositionMs);
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$slider.draggable({
|
|
|
|
|
axis: 'x',
|
|
|
|
|
containment: $sliderBar,
|
|
|
|
|
start: startDrag,
|
|
|
|
|
stop: stopDrag,
|
|
|
|
|
drag: onDrag
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (options.playmodeControlsVisible) {
|
|
|
|
|
$('.playback-mode-buttons.icheckbuttons', $parentElement).show();
|
|
|
|
|
}
|
2015-04-28 13:58:34 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
$playmodeButton.iCheck({
|
|
|
|
|
checkboxClass: 'icheckbox_minimal',
|
|
|
|
|
radioClass: 'iradio_minimal',
|
|
|
|
|
inheritClass: true
|
|
|
|
|
});
|
2014-01-05 03:47:23 +00:00
|
|
|
|
|
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
$playmodeButton.on('ifChecked', function (e) {
|
|
|
|
|
var playmode = $(this).val();
|
|
|
|
|
logger.debug("set new playmode", playmode);
|
|
|
|
|
setPlaybackMode(playmode);
|
|
|
|
|
});
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function styleControls() {
|
|
|
|
|
try {
|
|
|
|
|
$jamTrackGetReady.attr('data-mode', playbackMonitorMode);
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
$parentElement.removeClass('mediafile-mode jamtrack-mode metronome-mode');
|
|
|
|
|
if (playbackMonitorMode == PLAYBACK_MONITOR_MODE.MEDIA_FILE) {
|
|
|
|
|
$parentElement.addClass('mediafile-mode');
|
2014-01-06 20:35:35 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
else if (playbackMonitorMode == PLAYBACK_MONITOR_MODE.JAMTRACK) {
|
|
|
|
|
$parentElement.addClass('jamtrack-mode');
|
|
|
|
|
}
|
|
|
|
|
else if (playbackMonitorMode == PLAYBACK_MONITOR_MODE.METRONOME) {
|
|
|
|
|
$parentElement.addClass('metronome-mode');
|
|
|
|
|
}
|
2015-10-16 19:01:18 +00:00
|
|
|
else if (playbackMonitorMode == PLAYBACK_MONITOR_MODE.BROWSER_MEDIA) {
|
|
|
|
|
$parentElement.addClass('mediafile-mode');
|
|
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
else {
|
|
|
|
|
throw "unknown playbackMonitorMode: " + playbackMonitorMode;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
logger.error("playbackControls: unable to style controls", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function executeMonitor(positionMs, durationMs, isPlaying) {
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (positionMs < 0) {
|
|
|
|
|
// bug in backend?
|
|
|
|
|
positionMs = 0;
|
|
|
|
|
}
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (positionMs > 0) {
|
|
|
|
|
seenActivity = true;
|
|
|
|
|
}
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (playbackMonitorMode == PLAYBACK_MONITOR_MODE.METRONOME) {
|
|
|
|
|
updateIsPlaying(isPlaying);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
update(positionMs, durationMs, isPlaying);
|
|
|
|
|
}
|
2015-04-13 14:56:48 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (playbackMonitorMode == PLAYBACK_MONITOR_MODE.JAMTRACK) {
|
2015-02-20 17:55:49 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (playbackPlaying) {
|
|
|
|
|
$jamTrackGetReady.attr('data-current-time', positionMs)
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// this is so the jamtrack 'Get Ready!' stays hidden when it's not playing
|
|
|
|
|
$jamTrackGetReady.attr('data-current-time', -1)
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-02-20 17:55:49 +00:00
|
|
|
|
2016-09-13 03:25:13 +00:00
|
|
|
if (setTimeout) {
|
|
|
|
|
monitorPlaybackTimeout = setTimeout(monitorRecordingPlayback, 500);
|
|
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function monitorRecordingPlayback() {
|
|
|
|
|
if (!monitoring) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (options.mediaActions) {
|
2024-07-19 15:33:28 +00:00
|
|
|
console.log("CASE 0", playbackMonitorMode)
|
2015-07-24 17:20:10 +00:00
|
|
|
options.mediaActions.positionUpdate(playbackMonitorMode)
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (playbackMonitorMode == PLAYBACK_MONITOR_MODE.JAMTRACK) {
|
2024-07-19 15:33:28 +00:00
|
|
|
console.log("CASE 1")
|
2015-07-24 17:20:10 +00:00
|
|
|
var positionMs = context.jamClient.SessionCurrrentJamTrackPlayPosMs();
|
|
|
|
|
var duration = context.jamClient.SessionGetJamTracksPlayDurationMs();
|
|
|
|
|
var durationMs = duration.media_len;
|
2015-10-16 19:01:18 +00:00
|
|
|
var isPlaying = context.jamClient.isSessionTrackPlaying();
|
|
|
|
|
}
|
|
|
|
|
else if(playbackMonitorMode == PLAYBACK_MONITOR_MODE.BROWSER_MEDIA) {
|
2024-07-19 15:33:28 +00:00
|
|
|
console.log("CASE 2")
|
2015-10-16 19:01:18 +00:00
|
|
|
var positionMs = BrowserMediaStore.onGetPlayPosition() || 0
|
|
|
|
|
var durationMs = BrowserMediaStore.onGetPlayDuration() || 0;
|
|
|
|
|
var isPlaying = BrowserMediaStore.playing;
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2024-07-19 15:33:28 +00:00
|
|
|
console.log("CASE 3")
|
2015-07-24 17:20:10 +00:00
|
|
|
var positionMs = context.jamClient.SessionCurrrentPlayPosMs();
|
|
|
|
|
var durationMs = context.jamClient.SessionGetTracksPlayDurationMs();
|
2015-10-16 19:01:18 +00:00
|
|
|
var isPlaying = context.jamClient.isSessionTrackPlaying();
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
2015-04-28 13:58:34 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
executeMonitor(positionMs, durationMs, isPlaying)
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-04-28 13:58:34 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function update(currentTimeMs, durationTimeMs, isPlaying, offsetStart) {
|
|
|
|
|
|
|
|
|
|
if (dragging) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// at the end of the play, the duration sets to 0, as does currentTime. but isPlaying does not reset to
|
|
|
|
|
//logger.debug("currentTimeMs, durationTimeMs, mode", currentTimeMs, durationTimeMs, playbackMonitorMode);
|
|
|
|
|
if (currentTimeMs == 0 && seenActivity) {
|
|
|
|
|
if (playbackPlaying) {
|
|
|
|
|
isPlaying = false;
|
|
|
|
|
durationTimeMs = playbackDurationMs;
|
|
|
|
|
currentTimeMs = playbackDurationMs;
|
|
|
|
|
stopPlay(true);
|
|
|
|
|
endReached = true;
|
|
|
|
|
logger.debug("end reached");
|
2015-07-15 15:04:45 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
else {
|
|
|
|
|
// make sure slide shows '0'
|
|
|
|
|
updateCurrentTime(currentTimeMs);
|
|
|
|
|
return;
|
2014-01-06 20:35:35 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (currentTimeMs < offsetStart) {
|
|
|
|
|
currentTimeMs = 0; // this is to squelch movement during tap-in period
|
|
|
|
|
}
|
|
|
|
|
updateDurationTime(durationTimeMs);
|
|
|
|
|
updateCurrentTime(currentTimeMs);
|
|
|
|
|
updateIsPlaying(isPlaying);
|
|
|
|
|
|
|
|
|
|
durationChanged = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function updateDurationTime(timeMs) {
|
|
|
|
|
try {
|
|
|
|
|
if (timeMs != playbackDurationMs) {
|
|
|
|
|
$duration.text(context.JK.prettyPrintSeconds(parseInt(timeMs / 1000)));
|
|
|
|
|
playbackDurationMs = timeMs;
|
|
|
|
|
durationChanged = true;
|
2014-01-05 03:47:23 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
logger.error("playbackControls: updateDurationTime error", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function updateCurrentTimeText(timeMs) {
|
|
|
|
|
try {
|
|
|
|
|
var time = context.JK.prettyPrintSeconds(parseInt(timeMs / 1000))
|
|
|
|
|
$currentTime.text(time);
|
|
|
|
|
if (options.mediaActions) {
|
|
|
|
|
options.mediaActions.currentTimeChanged(time)
|
2014-01-05 03:47:23 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
logger.error("playbackControls: updateCurrentTimeText error", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function updateSliderPosition(timeMs) {
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
try {
|
|
|
|
|
var slideWidthPx = $sliderBar.width();
|
|
|
|
|
var xPos = Math.ceil(timeMs / playbackDurationMs * slideWidthPx);
|
|
|
|
|
$slider.css('left', xPos);
|
|
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
logger.error("playbackControls: updateSliderPosition error", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function updateCurrentTime(timeMs) {
|
|
|
|
|
try {
|
|
|
|
|
if (timeMs != playbackPositionMs || durationChanged) {
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
updateCurrentTimeText(timeMs);
|
|
|
|
|
updateSliderPosition(timeMs);
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
playbackPositionMs = timeMs;
|
2014-01-05 03:47:23 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
logger.error("playbackControls: updateCurrentTime err", e)
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function updateIsPlaying(isPlaying) {
|
|
|
|
|
try {
|
|
|
|
|
if (isPlaying != playbackPlaying) {
|
|
|
|
|
if (isPlaying) {
|
|
|
|
|
$playButton.hide();
|
|
|
|
|
$pauseButton.show();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$playButton.show();
|
|
|
|
|
$pauseButton.hide();
|
|
|
|
|
}
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
logger.debug("updating is playing: " + isPlaying)
|
|
|
|
|
playbackPlaying = isPlaying;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (e) {
|
|
|
|
|
logger.error("playbackControls: updateIsPlaying error", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-07-15 15:04:45 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function setPlaybackMode(mode) {
|
|
|
|
|
if (mode == 'preview-to-all') {
|
|
|
|
|
playbackMode = PlaybackMode.PreviewToAll;
|
|
|
|
|
}
|
|
|
|
|
else if (mode == 'preview-to-me') {
|
|
|
|
|
playbackMode = PlaybackMode.PrivatePreview;
|
|
|
|
|
}
|
|
|
|
|
else if (mode == 'eveywhere') {
|
|
|
|
|
playbackMode = PlaybackMode.EveryWhere;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
logger.error("unable to set playback mode", mode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// let the mode change immediately affect the behavior of the stream
|
|
|
|
|
if (playbackPlaying) {
|
|
|
|
|
stopPlay();
|
|
|
|
|
startPlay();
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-07-15 15:04:45 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function startMonitor(_playbackMonitorMode) {
|
|
|
|
|
logger.debug("startMonitor: " + _playbackMonitorMode)
|
2015-04-29 19:38:03 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (monitoring && _playbackMonitorMode == playbackMonitorMode) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2015-02-20 17:55:49 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
monitoring = true;
|
|
|
|
|
// resets everything to zero
|
|
|
|
|
init();
|
2015-02-20 17:55:49 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (_playbackMonitorMode === undefined || _playbackMonitorMode === null) {
|
|
|
|
|
playbackMonitorMode = PLAYBACK_MONITOR_MODE.MEDIA_FILE;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
playbackMonitorMode = _playbackMonitorMode;
|
|
|
|
|
}
|
2015-07-15 15:04:45 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
logger.debug("playbackControl.startMonitor " + playbackMonitorMode + "")
|
2014-01-06 20:35:35 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
styleControls();
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
if (monitorPlaybackTimeout != null) {
|
|
|
|
|
clearTimeout(monitorPlaybackTimeout);
|
|
|
|
|
monitorPlaybackTimeout = null;
|
|
|
|
|
}
|
|
|
|
|
monitorRecordingPlayback();
|
|
|
|
|
}
|
2015-05-04 02:28:17 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function stopMonitor() {
|
|
|
|
|
monitoring = false;
|
|
|
|
|
logger.debug("playbackControl.stopMonitor")
|
|
|
|
|
if (monitorPlaybackTimeout != null) {
|
2016-11-04 16:18:58 +00:00
|
|
|
if(clearTimeout) {
|
|
|
|
|
clearTimeout(monitorPlaybackTimeout);
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
monitorPlaybackTimeout = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-05-04 02:28:17 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function onPlayStartEvent() {
|
|
|
|
|
updateIsPlaying(true);
|
|
|
|
|
playbackPlaying = true;
|
|
|
|
|
seenActivity = false;
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function onPlayStopEvent() {
|
|
|
|
|
updateIsPlaying(false);
|
|
|
|
|
playbackPlaying = false;
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
function onPlayPauseEvent() {
|
|
|
|
|
playbackPlaying = false;
|
2014-01-05 03:47:23 +00:00
|
|
|
}
|
2015-07-24 17:20:10 +00:00
|
|
|
|
2015-09-23 20:27:41 +00:00
|
|
|
function setDisabled(_disabled) {
|
|
|
|
|
disabled = _disabled;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-24 17:20:10 +00:00
|
|
|
this.update = update;
|
|
|
|
|
this.setPlaybackMode = setPlaybackMode;
|
|
|
|
|
this.startMonitor = startMonitor;
|
|
|
|
|
this.stopMonitor = stopMonitor;
|
|
|
|
|
this.executeMonitor = executeMonitor;
|
|
|
|
|
this.onPlayStopEvent = onPlayStopEvent;
|
|
|
|
|
this.onPlayStartEvent = onPlayStartEvent;
|
|
|
|
|
this.onPlayPauseEvent = onPlayPauseEvent;
|
2015-09-23 20:27:41 +00:00
|
|
|
this.setDisabled = setDisabled;
|
2015-07-24 17:20:10 +00:00
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
})(window, jQuery);
|