diff --git a/definitions/base.js b/definitions/base.js
index fb89fe16..32ab4574 100644
--- a/definitions/base.js
+++ b/definitions/base.js
@@ -8152,7 +8152,7 @@ module.exports = function(s,config,lang){
"section-pre-class": "col-md-8 search-parent",
"info": [
{
- "id": "studioMonitorViews",
+ "id": "studioViewingCanvas",
"fieldType": "div",
},
{
@@ -8167,6 +8167,12 @@ module.exports = function(s,config,lang){
"fieldType": "btn-group",
"normalWidth": true,
"btns": [
+ {
+ "fieldType": "btn",
+ "class": `btn-default btn-sm play-preview`,
+ "attribute": `title="${lang['Play']}"`,
+ "btnContent": ``,
+ },
{
"fieldType": "btn",
"class": `btn-default btn-sm slice-video`,
diff --git a/web/assets/js/bs5.studio.js b/web/assets/js/bs5.studio.js
index 38ce76f8..98887958 100644
--- a/web/assets/js/bs5.studio.js
+++ b/web/assets/js/bs5.studio.js
@@ -1,15 +1,30 @@
$(document).ready(function(){
var theEnclosure = $('#tab-studio')
+ var viewingCanvas = $('#studioViewingCanvas')
var timelineStrip = $('#studioTimelineStrip')
var timelineStripTimeTicksContainer = $('#studio-time-ticks')
var timelineStripSliceSelection = $('#studio-slice-selection')
var loadedVideoForSlicer = null
+ var loadedVideoElement = null
var timelineStripMousemoveX = 0
var timelineStripMousemoveY = 0
+ var userInvokedPlayState = false
var slicerQueue = {}
function initStudio(){
+ var lastStartTime = 0
+ var lastEndTime = 0
function onChange(){
- console.log(getSliceSelection())
+ var data = getSliceSelection()
+ var startTime = data.startTimeSeconds
+ var endTime = data.endTimeSeconds
+ if(lastStartTime === startTime){
+ setSeekPosition(endTime)
+ }else{
+ setSeekPosition(startTime)
+ }
+ lastStartTime = parseFloat(startTime)
+ lastEndTime = parseFloat(endTime)
+ setSeekRestraintOnVideo()
}
timelineStripSliceSelection.resizable({
containment: '#studioTimelineStrip',
@@ -85,10 +100,74 @@ $(document).ready(function(){
}
timelineStripTimeTicksContainer.html(tickHtml)
}
+ function createVideoElement(video){
+ var html = ``
+ viewingCanvas.html(html)
+ var videoElement = theEnclosure.find('video')
+ loadedVideoElement = videoElement[0]
+ }
+ function setSeekRestraintOnVideo(){
+ var data = getSliceSelection()
+ var startTime = data.startTimeSeconds
+ var endTime = data.endTimeSeconds
+ console.log(data)
+ if(!userInvokedPlayState){
+ loadedVideoElement.ontimeupdate = () => {}
+ }else{
+ loadedVideoElement.ontimeupdate = (event) => {
+ console.log(loadedVideoElement.currentTime,event)
+ if(loadedVideoElement.currentTime <= startTime){
+ loadedVideoElement.currentTime = startTime
+ }else if(loadedVideoElement.currentTime >= endTime){
+ loadedVideoElement.currentTime = startTime
+ pauseVideo()
+ }
+ };
+ }
+ }
+ function pauseVideo(){
+ userInvokedPlayState = false
+ loadedVideoElement.pause()
+ togglePlayPauseIcon()
+ }
+ function togglePlayPause(){
+ try{
+ if(userInvokedPlayState){
+ pauseVideo()
+ }else{
+ userInvokedPlayState = true
+ loadedVideoElement.play()
+ }
+ }catch(err){
+ console.log(err)
+ }
+ setSeekRestraintOnVideo()
+ }
+ function togglePlayPauseIcon(){
+ var iconEl = theEnclosure.find('.play-preview i')
+ if(!userInvokedPlayState){
+ iconEl.addClass('fa-play').removeClass('fa-pause')
+ }else{
+ iconEl.addClass('fa-pause').removeClass('fa-play')
+ }
+ }
+ function setSeekPosition(secondsIn){
+ loadedVideoElement.currentTime = parseFloat(secondsIn) || 1
+ try{
+ loadedVideoElement.play()
+ }catch(err){
+
+ }
+ pauseVideo()
+ }
function loadVideoIntoSlicer(video){
loadedVideoForSlicer = Object.assign({},video)
drawTimeTicks(video)
+ createVideoElement(video)
}
+ addOnTabAway('studio', function () {
+ loadedVideoElement.pause()
+ })
$(window).resize(function(){
drawTimeTicks(loadedVideoForSlicer)
})
@@ -106,6 +185,15 @@ $(document).ready(function(){
theEnclosure
.on('click','.slice-video',function(){
sliceVideo()
+ })
+ .on('click','.play-preview',function(){
+ togglePlayPause()
+ togglePlayPauseIcon()
+ })
+ .on('mouseup','.ui-resizable-handle.ui-resizable-e',function(){
+ var data = getSliceSelection()
+ var startTime = data.startTimeSeconds
+ setSeekPosition(startTime)
});
initStudio()
})