From bf3f88f5236a6ebda4ca3b6dc246f98ff404a360 Mon Sep 17 00:00:00 2001 From: mehekj Date: Wed, 15 Jun 2022 13:11:16 -0400 Subject: ui fixes and thumbnails upload in parallel --- src/client/views/nodes/AudioBox.tsx | 6 +++--- src/client/views/nodes/VideoBox.tsx | 40 ++++++++++++------------------------- 2 files changed, 16 insertions(+), 30 deletions(-) (limited to 'src/client/views/nodes') diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx index 59c37753a..1d06f368f 100644 --- a/src/client/views/nodes/AudioBox.tsx +++ b/src/client/views/nodes/AudioBox.tsx @@ -581,7 +581,9 @@ export class AudioBox extends ViewBoxAnnotatableComponent {this.timeline && formatTime(Math.round(NumCast(this.layoutDoc._currentTimecode) - NumCast(this.timeline.clipStart)))} - {!this.miniPlayer && + {this.miniPlayer ? +
/
+ :
} - {this.miniPlayer &&
/
} -
{this.timeline && formatTime(Math.round(this.timeline.clipDuration))}
diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx index 80ff19519..ef3b0d105 100644 --- a/src/client/views/nodes/VideoBox.tsx +++ b/src/client/views/nodes/VideoBox.tsx @@ -32,18 +32,6 @@ import { Image } from "wikijs"; import { List } from "../../../fields/List"; const path = require('path'); - -//TODO mj: one option for doing thumbnail previews of video in timeline? -/** - * 1. set vref in videobox - * 2. when vref is set immediately process video to extract ~50 thumbnails - * (^^ would make more sense to do this when video is initially uploaded) - * 3. upload each file to server using convertDataURI and save list of URLs as field on doc - * 4. in CST onHover, set hover time - * 5. use hover time to figure out index of nearest thumbnail - * 6. get URL of image and use source to paint canvas accordingly - */ - /** * VideoBox * Main component: VideoBox.tsx @@ -375,12 +363,13 @@ export class VideoBox extends ViewBoxAnnotatableComponent { - this.layoutDoc.cloneO const video = document.createElement('video'); - const thumbnails: string[] = []; + const thumbnailPromises: Promise[] = []; + video.onloadedmetadata = () => { video.currentTime = 0; }; + video.onseeked = () => { const canvas = document.createElement('canvas'); canvas.height = video.videoHeight; @@ -391,18 +380,15 @@ export class VideoBox extends ViewBoxAnnotatableComponent { - returnedFilename && thumbnails.push(returnedFilename); - const newTime = video.currentTime + video.duration / VideoBox.numThumbnails; - if (newTime < video.duration) { - video.currentTime = newTime; - console.log(thumbnails.length); - } - else { - this.dataDoc.thumbnails = new List(thumbnails); - } - }); - }; + thumbnailPromises.push(VideoBox.convertDataUri(imgUrl, filename)); + const newTime = video.currentTime + video.duration / (VideoBox.numThumbnails - 1); + if (newTime < video.duration) { + video.currentTime = newTime; + } + else { + Promise.all(thumbnailPromises).then(thumbnails => { this.dataDoc.thumbnails = new List(thumbnails); }); + } + } const field = Cast(this.dataDoc[this.fieldKey], VideoField); field && (video.src = field.url.href); @@ -421,7 +407,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent NumCast(this.layoutDoc._currentTimecode), time => !this._playing && (vref.currentTime = time), { fireImmediately: true }); - !this.dataDoc.thumbnails && this.getVideoThumbnails(); + (!this.dataDoc.thumbnails || this.dataDoc.thumbnails.length != VideoBox.numThumbnails) && this.getVideoThumbnails(); } } -- cgit v1.2.3-70-g09d2