summaryrefslogtreecommitdiff
path: root/animism-align
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-10-12 19:11:07 +0200
committerJules Laplace <julescarbon@gmail.com>2020-10-12 19:11:07 +0200
commit2ebe47a0ec566be75522da533e76a2f491227a51 (patch)
tree13fb04119086e45e24078dfef1ee46abdddb7002 /animism-align
parent4368c66b4efddbda87335c42d82dc562629bd0e9 (diff)
new annotations
Diffstat (limited to 'animism-align')
-rw-r--r--animism-align/cli/app/controllers/annotation_controller.py21
-rw-r--r--animism-align/frontend/app/utils/index.js26
-rw-r--r--animism-align/frontend/app/views/align/align.actions.js19
-rw-r--r--animism-align/frontend/app/views/align/containers/timeline.container.js4
4 files changed, 50 insertions, 20 deletions
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)