diff --git a/app.py b/app.py index e3fbe54f..8d4b6fe1 100644 --- a/app.py +++ b/app.py @@ -1,8 +1,10 @@ -#!/usr/bin/env python +#!/srv/bin/venv python3.6 import os import sys os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rowsandall_app.settings") + +from django.core.wsgi import get_wsgi_application application = get_wsgi_application() #execute_from_command_line(sys.argv) diff --git a/rowers/templates/embedded_video.html b/rowers/templates/embedded_video.html index 6bd67499..5543733b 100644 --- a/rowers/templates/embedded_video.html +++ b/rowers/templates/embedded_video.html @@ -40,6 +40,10 @@ $(this).removeAttr('disabled'); }); }); + document.getElementById("smallscreen").style.display = "none"; + if ($(window).width() <= 950) { + $("#smallscreen").show() + } }); + + + + + +{% endblock %} + +{% block main %} + + + +{% language 'en' %} +

Video Analysis for {{ workout.name }}

+ + +

 

+
+ +
+

 

+ + +{% endlanguage %} + +{% endblock %} + +{% block sidebar %} +{% include 'menu_workout.html' %} +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 2a9c39d6..5696c0d4 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -346,6 +346,8 @@ urlpatterns = [ re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/video/$',views.workout_video_create_view, name='workout_video_create_view'), re_path(r'^video/(?P\d+)/delete/$',views.VideoDelete.as_view(),name='video_delete'), + re_path(r'^video/(?P\w.+)/m/$',views.workout_video_view_mini, + name='workout_video_view_mini'), re_path(r'^video/(?P\w.+)/$',views.workout_video_view, name='workout_video_view'), re_path(r'^videos/',views.list_videos,name='list_videos'), diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index eea37716..b72db049 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -48,6 +48,116 @@ def get_video_id(url): else: raise ValueError +# Show a video compared with data +def workout_video_view_mini(request,id=''): + try: + id = encoder.decode_hex(id) + analysis = VideoAnalysis.objects.get(id=id) + except VideoAnalysis.DoesNotExist: + raise Http404("Video Analysis does not exist") + + w = analysis.workout + delay = analysis.delay + + if w.workouttype in mytypes.otwtypes: + mode = 'water' + else: + mode = 'erg' + + if request.user.is_authenticated: + mayedit = checkworkoutuser(request.user,w) and isprorower(request.user.rower) + rower = request.user.rower + else: + mayedit = False + rower = None + + # get video ID and offset + if mayedit and request.method == 'POST': + form = VideoAnalysisCreateForm(request.POST) + metricsform = VideoAnalysisMetricsForm(request.POST,mode=mode) + if form.is_valid() and metricsform.is_valid(): + video_id = form.cleaned_data['url'] + try: + video_id = get_video_id(form.cleaned_data['url']) + except (TypeError,ValueError): + pass + delay = form.cleaned_data['delay'] + metricsgroups = metricsform.cleaned_data['groups'] + if 'save_button' in request.POST: + analysis.name = form.cleaned_data['name'] + analysis.video_id = video_id + analysis.delay = delay + analysis.metricsgroups = metricsgroups + analysis.save() + else: + video_id = id + delay = 0 + elif mayedit: + form = VideoAnalysisCreateForm( + initial = { + 'name':analysis.name, + 'delay': analysis.delay, + 'url': analysis.video_id, + } + ) + metricsform = VideoAnalysisMetricsForm(initial={'groups':analysis.metricsgroups}, + mode=mode) + metricsgroups = analysis.metricsgroups + video_id = analysis.video_id + else: + form = None + metricsform = None + metricsgroups = analysis.metricsgroups + + data, metrics, maxtime = dataprep.get_video_data(w,groups=metricsgroups,mode=mode) + hascoordinates = pd.Series(data['latitude']).std() > 0 + # create map + if hascoordinates: + mapscript, mapdiv = leaflet_chart_video(data['latitude'],data['longitude'], + w.name) + else: + mapscript, mapdiv = interactive_chart_video(data) + data['longitude'] = data['spm'] + data['latitude'] = list(range(len(data['spm']))) + + + breadcrumbs = [ + { + 'url':'/rowers/list-workouts/', + 'name':'Workouts' + }, + { + 'url':get_workout_default_page(request,encoder.encode_hex(w.id)), + 'name': w.name + }, + { + 'url':reverse('workout_video_view',kwargs={'id':encoder.encode_hex(analysis.id)}), + 'name': 'Video Analysis' + } + + ] + + + return render(request, + 'embedded_video_mini.html', + { + 'workout':w, + 'rower':rower, + 'data': json.dumps(data,default=default), + 'mapscript': mapscript, + 'mapdiv': mapdiv, + 'video_id': analysis.video_id, + 'form':form, + 'breadcrumbs':breadcrumbs, + 'analysis':analysis, + 'maxtime':maxtime, + 'metrics':metrics, + 'locked': True, + 'metricsform':metricsform, + 'metricsgroups': metricsgroups, + 'siteurl': settings.SITE_URL, + }) + # Show a video compared with data def workout_video_view(request,id=''):