From 2ebe47a0ec566be75522da533e76a2f491227a51 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Mon, 12 Oct 2020 19:11:07 +0200 Subject: new annotations --- .../cli/app/controllers/annotation_controller.py | 21 +++++++++-------- animism-align/frontend/app/utils/index.js | 26 +++++++++++++--------- .../frontend/app/views/align/align.actions.js | 19 ++++++++++++++++ .../views/align/containers/timeline.container.js | 4 +++- 4 files changed, 50 insertions(+), 20 deletions(-) (limited to 'animism-align') diff --git a/animism-align/cli/app/controllers/annotation_controller.py b/animism-align/cli/app/controllers/annotation_controller.py index 757f1e3..aed7310 100644 --- a/animism-align/cli/app/controllers/annotation_controller.py +++ b/animism-align/cli/app/controllers/annotation_controller.py @@ -27,38 +27,41 @@ class AnnotationView(CrudView): if 'settings' in form: item.settings = form['settings'] + @route('/splice', methods=['POST']) def splice(self): """Add or remove time""" session = Session() try: - start_ts = float(args.get('start_ts')) + start_ts = float(request.json['start_ts']) except: - print("Annotation splice: duration is invalid") + print("Annotation splice: start_ts is invalid") session.close() - return + return { 'status': 'error', 'error': 'start_ts is invalid '} try: - duration = float(args.get('duration')) + duration = float(request.json['duration']) except: print("Annotation splice: duration is invalid") session.close() - return + return { 'status': 'error', 'error': 'duration is invalid '} query = session.query(self.model) - query = query.filter(Annotation.start_ts > form['start_ts']) + query = query.filter(Annotation.start_ts > start_ts) items = query.all() print(f"{len(items)} annotations would be updated") + print(f"start_ts: {start_ts}") + print(f"duration: {duration}") for item in items: item.start_ts += duration - # session.add(item) - # session.commit() + session.add(item) + session.commit() res = { 'status': 'ok', - 'items': len(items), + 'count': len(items), } session.close() return jsonify(res) diff --git a/animism-align/frontend/app/utils/index.js b/animism-align/frontend/app/utils/index.js index 03c484c..ac4b83b 100644 --- a/animism-align/frontend/app/utils/index.js +++ b/animism-align/frontend/app/utils/index.js @@ -231,16 +231,22 @@ export const post = (dispatch, type=api_type, tag, url, data) => { headers, }) .then(res => res.json()) - .then(res => dispatch({ - type: type.loaded, - tag, - data: res, - })) - .catch(err => dispatch({ - type: type.error, - tag, - err, - })) + .then(res => { + dispatch({ + type: type.loaded, + tag, + data: res, + }) + return res + }) + .catch(err => { + dispatch({ + type: type.error, + tag, + err, + }) + return err + }) } export const api = (dispatch, type=api_type, tag, url, data) => { diff --git a/animism-align/frontend/app/views/align/align.actions.js b/animism-align/frontend/app/views/align/align.actions.js index 6eca0a7..524de07 100644 --- a/animism-align/frontend/app/views/align/align.actions.js +++ b/animism-align/frontend/app/views/align/align.actions.js @@ -6,6 +6,7 @@ import throttle from 'lodash.throttle' import debounce from 'lodash.debounce' import { ZOOM_STEPS } from 'app/constants' +import { timestampToSeconds, post } from 'app/utils' import { cutFirstSentence } from 'app/utils/align.utils' export const setScrollPosition = start_ts => dispatch => ( @@ -90,3 +91,21 @@ export const hideAnnotationForm = () => dispatch => { data: {} }) } + + +export const spliceTime = start_ts => dispatch => { + let duration = timestampToSeconds(prompt("How many seconds to add or remove? Enter a positive / negative number")) + if (!duration) { + return + } + console.log(start_ts, duration) + const data = { + start_ts, duration, + } + post(dispatch, types.api, 'splice', '/api/v1/annotation/splice', data) + .then(res => { + console.log(res) + alert(res.count + ' records updated!') + actions.annotation.index() + }) +} \ No newline at end of file diff --git a/animism-align/frontend/app/views/align/containers/timeline.container.js b/animism-align/frontend/app/views/align/containers/timeline.container.js index d1917b5..3db658c 100644 --- a/animism-align/frontend/app/views/align/containers/timeline.container.js +++ b/animism-align/frontend/app/views/align/containers/timeline.container.js @@ -127,7 +127,9 @@ class Timeline extends Component { } handleTimelineClick(e) { const play_ts = positionToTime(e.pageY, this.props.timeline) - if (e.pageX < WAVEFORM_SIZE * 0.67) { + if (e.metaKey) { + actions.align.spliceTime(play_ts) + } else if (e.pageX < WAVEFORM_SIZE * 0.67) { actions.audio.seek(play_ts) } else { actions.align.showNewAnnotationForm(play_ts, this.props.text) -- cgit v1.2.3-70-g09d2