blob: 9957e37f71d0dc38693781e9a5abc7df39b6da39 [file] [log] [blame]
// Copyright (C) 2019 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import * as m from 'mithril';
import {globals} from './globals';
import {Actions} from '../common/actions';
import {randomColor} from './colorizer';
export class VideoPanel implements m.ClassComponent {
view() {
const vidSections = [];
const offset = globals.state.traceTime.startSec + globals.state.videoOffset;
vidSections.push(
m('video', {
class: 'video-panel',
controls: true,
width: 320,
currentTime: globals.frontendLocalState.vidTimestamp - offset,
onpause: (e: Event) => {
const elem = e.target as HTMLVideoElement;
if (globals.state.flagPauseEnabled && !(elem.ended)) {
const timestamp = elem.currentTime + offset;
const color = randomColor();
const isMovie = true;
globals.dispatch(Actions.addNote({timestamp, color, isMovie}));
elem.currentTime = timestamp - offset;
globals.frontendLocalState.setVidTimestamp(timestamp);
}
},
ontimeupdate: (e: Event) => {
const elem = e.target as HTMLVideoElement;
if (globals.state.scrubbingEnabled) {
elem.currentTime = globals.frontendLocalState.vidTimestamp - offset;
}
},
},
m('source', { src: globals.state.video, type: 'video/mp4' })));
const vidMessages = [];
const pSetting = `Pause/Flag Synchronization: `;
const pEnabled = `When you pause the video, a video flag ` +
`will be drawn at this position. \n Also, adding a video flag by ` +
`clicking on the notes panel (below the time axis) will move the video ` +
`to this position.`;
const pDisabled = `Press 'p' to enable.`;
const tSetting = `Timeline Scrubbing: `;
const tEnabled = `When you hover over the notes panel, the video will ` +
`skip to the hovered timestamp.`;
const tDisabled = `Press 't' to enable.`;
function makeMsg(setting: boolean, msgType: string, e: string, d: string) {
return m('h1', { class: `video-panel-${msgType}` }, setting ? e : d);
}
vidMessages.push(
makeMsg(globals.state.flagPauseEnabled, 'setting',
pSetting.concat('Enabled'), pSetting.concat('Disabled')),
makeMsg(globals.state.flagPauseEnabled, 'message', pEnabled, pDisabled),
makeMsg(globals.state.scrubbingEnabled, 'setting',
tSetting.concat('Enabled'), tSetting.concat('Disabled')),
makeMsg(globals.state.scrubbingEnabled, 'message', tEnabled, tDisabled));
vidSections.push(vidMessages);
return m('.video-panel', vidSections);
}
}