diff options
Diffstat (limited to 'app/client/modules/pix2pixhd/views/sequence.editor.js')
| -rw-r--r-- | app/client/modules/pix2pixhd/views/sequence.editor.js | 177 |
1 files changed, 118 insertions, 59 deletions
diff --git a/app/client/modules/pix2pixhd/views/sequence.editor.js b/app/client/modules/pix2pixhd/views/sequence.editor.js index 9693805..6a5da39 100644 --- a/app/client/modules/pix2pixhd/views/sequence.editor.js +++ b/app/client/modules/pix2pixhd/views/sequence.editor.js @@ -3,78 +3,137 @@ import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import { Route, Link } from 'react-router-dom' -import { Loading, FileList, FileViewer } from '../../common' +import { Loading, FileList, FileViewer } from '../../../common' -import actions from '../actions' +import actions from '../../../actions' + +const initialState = { + dir: '/', + frameA: null, + frameB: null, + selection: null, + loading: true +} + +/* + when the sequence editor loads, + reset the selection + reset the two frames + set the two frames to the beginning and end of the video + when mousing over the video + ideally you would see a tiny thumbnail preview of the frame :) + - click to start a selection, drag over, mouseup to end the selection + this should update the start/end frame + ... + so there are two things you could do with this + 1) create an entirely new dataset + 2) add frames to an existing dataset + ... + method 1) + - requires minimal setup, just a server script which.. + - creates the new sequence folder + - symlinks the frames + - runs build_dataset + - create appropriate file object, using parent dataset's folder_id + - enqueue initial training + ---> we can then train on basic subsets, with more control, like we do already... + - tell parent dataset thing the new sequence name + ... + method 2) + - requires sequence editor to be aware of its own dataset + - requires sequence editor to know whether a sequence is original or not +*/ class SequenceEditor extends Component { - state = { - dir: '/', - files: [], - loading: true + state = { ...initialState } + + constructor() { + super() + this.handleMouseDown = this.handleMouseDown.bind(this) + this.handleMouseMove = this.handleMouseMove.bind(this) + this.handleMouseEnter = this.handleMouseEnter.bind(this) + this.handleMouseLeave = this.handleMouseLeave.bind(this) + this.handleMouseUp = this.handleMouseUp.bind(this) } + componentDidMount() { - this.fetch(this.state.dir) + const { checkpoint } = this.props + window.addEventListener('mousemove', this.handleMouseMove) + window.addEventListener('mouseup', this.handleMouseUp) + if (checkpoint && checkpoint.sequence) { + console.log(checkpoint) + const frameA = checkpoint.sequence[0] + const frameB = checkpoint.sequence[checkpoint.sequence.length-1] + this.setState({ + ...initialState, + frameA, + frameB, + }) + } } - handlePick(file) { - console.log(file) - if (file.dir) { - this.fetch([this.state.dir, file.name].join('/').replace('//','/')) - } else { - this.fetchFile([this.state.dir, file.name].join('/').replace('//','/')) + + componentDidUpdate(prevProps) { + const { checkpoint } = this.props + if (checkpoint !== prevProps.checkpoint) { + console.log(checkpoint) + const frameA = checkpoint.sequence[0] + const frameB = checkpoint.sequence[checkpoint.sequence.length-1] + this.setState({ + ...initialState, + frameA, + frameB, + }) } } - fetch(dir) { - console.log('fetch', dir) - const { tool: module } = this.props.app - this.setState({ dir, file: null, loading: true }) - actions.socket.list_directory({ module, dir }).then(files => { - console.log(files) - this.setState({ dir, files, loading: false }) - }) + + componentWillUnmount(){ + window.removeEventListener('mouseup', this.handleMouseUp) + window.removeEventListener('mousemove', this.handleMouseMove) + } + + handleMouseDown(e) { + this.setState({ dragging: true }) + } + handleMouseMove(e) { + } + handleMouseEnter(e) { + } + handleMouseLeave(e) { } - fetchFile(fn) { - console.log('fetch file', fn) - const { tool: module } = this.props.app - this.setState({ file: null, loadingFile: true }) - actions.socket.read_file({ module, fn }).then(file => { - console.log(file) - this.setState({ file, loadingFile: false }) - }) + handleMouseUp(e) { + this.setState({ dragging: false }) } + + handlePick(file) { + console.log(file) + // this.setState({ dir, file: null, loading: true }) + } + render() { - const { app } = this.props + const { app, checkpoint } = this.props const { - loading, dir, files, - loadingFile, file, + loading, + selection, + frameA, frameB, } = this.state - console.log(this.props, this.state) - // return ( - // <div className='app browser'> - // <h1>{dir}{dir[dir.length-1] !== '/' && '/'}</h1> - // {app.tool}<br/> - // {loading && <Loading />} - // <FileList - // files={files} - // groupDirectories - // parentDirectory={dir !== '/'} - // orderBy='name asc' - // fields={'name datetime size'} - // onClick={(file, e) => { - // e.preventDefault() - // e.stopPropagation() - // console.log('picked a result', file) - // this.handlePick(file) - // }} - // onClickParent={e => { - // console.log('navigate up') - // this.fetch(this.state.dir.split('/').slice(0, -1).join('/') || '/') - // }} - // /> - // {loadingFile && <Loading />} - // {file && <FileViewer file={file} />} - // </div> - // ) + // console.log(this.props, this.state) + const width = 200 + const path = "sequences/" + checkpoint.name + return ( + <div className='sequenceEditor'> + <div + className='timeline' + style={{ width }} + mouseDown={this.handleSelectionStart} + mouseEnter={this.handleMouseEnter} + mouseLeave={this.handleMouseLeave} + > + {selection && <div className='selection' style={selection}></div>} + </div> + <FileViewer path={path} file={this.state.frameA} /> + <FileViewer path={path} file={this.state.frameB} /> + </div> + ) } } |
