diff --git a/rowers/templates/embedded_video.html b/rowers/templates/embedded_video.html new file mode 100644 index 00000000..ebd0de5e --- /dev/null +++ b/rowers/templates/embedded_video.html @@ -0,0 +1,108 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} +{% load i18n %} + +{% block title %}Workout Video{% endblock %} + +{% block main %} +

+ {% if workout|previousworkout:rower.user %} + Previous  + {% endif %} + {% if workout|nextworkout:rower.user %} + Next + {% endif %} +

+ +{% language 'en' %} +

Workout Video for {{ workout.name }}

+
    +
  • +

    + This page will contain an embedded video +

    +
  • +
  • + Video Time + + seconds +
  • +
  • + Boat Speed + + m/s +
  • +
  • +
    + + +
  • + + +
+{% endlanguage %} + +{% endblock %} + +{% block sidebar %} +{% include 'menu_workout.html' %} +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index cabc1753..a54d85da 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -45,8 +45,8 @@ class WorkoutViewSet(viewsets.ModelViewSet): except TypeError: return [] - - + + permission_classes = ( #DjangoModelPermissions, IsOwnerOrNot, @@ -56,7 +56,7 @@ class RowerViewSet(viewsets.ModelViewSet): model = Rower serializer_class = RowerSerializer #queryset = Rower.objects.all() - + def get_queryset(self): try: r = Rower.objects.filter(user=self.request.user) @@ -70,7 +70,7 @@ class RowerViewSet(viewsets.ModelViewSet): http_method_names = ['get','patch'] - + class FavoriteChartViewSet(viewsets.ModelViewSet): model = FavoriteChart serializer_class = FavoriteChartSerializer @@ -88,10 +88,10 @@ class FavoriteChartViewSet(viewsets.ModelViewSet): ) http_method_names = ['get','put','patch','delete'] - + class StrokeDataViewSet(viewsets.ModelViewSet): serializer_class = StrokeDataSerializer - + # Routers provide an easy way of automatically determining the URL conf. router = routers.DefaultRouter() router.register(r'api/workouts',WorkoutViewSet, 'workout') @@ -104,7 +104,6 @@ def permissiondenied_view(request): def filenotfound_view(request): - print('aapje') return rowers.views.error403_view(request) def response_error_handler(request, exception=None): @@ -344,6 +343,7 @@ urlpatterns = [ re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/split/$',views.workout_split_view,name='workout_split_view'), # re_path(r'^workout/(?P\d+)/interactiveplot/$',views.workout_biginteractive_view), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/view/$',views.workout_view,name='workout_view'), + re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/video/$',views.workout_video_view,name='workout_video_view'), # re_path(r'^workout/(?P\d+)/$',views.workout_view,name='workout_view'), re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/$',views.workout_view,name='workout_view'), re_path(r'^workout/fusion/(?P\b[0-9A-Fa-f]+\b)/(?P\b[0-9A-Fa-f]+\b)/$',views.workout_fusion_view,name='workout_fusion_view'), @@ -475,7 +475,7 @@ urlpatterns = [ re_path(r'^me/coachrequest/(?P\w+.*)/accept/$',views.coach_accept_coachrequest_view, name='coach_accept_coachrequest_view'), re_path(r'^me/coachoffer/(?P\w+.*)/accept/$',views.rower_accept_coachoffer_view, - name='rower_accept_coachoffer_view'), + name='rower_accept_coachoffer_view'), re_path(r'^team/(?P\d+)/delete/$',views.team_delete_view,name='team_delete_view'), re_path(r'^team/create/$',views.team_create_view,name='team_create_view'), re_path(r'^me/team/(?P\d+)/drop/(?P\d+)/$',views.manager_member_drop_view,name='manager_member_drop_view'), diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 0615b027..11bb9c67 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -6,6 +6,27 @@ from __future__ import unicode_literals from rowers.views.statements import * import rowers.teams as teams +# Show a video compared with data +@user_passes_test(ispromember,login_url="/rowers/paidplans/", + message="This functionality requires a Pro plan or higher", + redirect_field_name=None) +def workout_video_view(request,id=0): + w = get_workout_permitted(request.user,id) + df = getsmallrowdata_db(['time','velo'],ids=[w.id]) + df2 = pd.DataFrame({'time':[0]}) + df.sort_values(by='time',inplace=True) + df.set_index(pd.to_timedelta(df['time'],unit='s'),inplace=True) + df2 = df.resample('1s').mean().interpolate() + boatspeed = df2['velo'] + + return render(request, + 'embedded_video.html', + { + 'workout':w, + 'rower':request.user.rower, + 'boatspeed': boatspeed.values, + }) + # Show the EMpower Oarlock generated Stroke Profile @user_passes_test(ispromember,login_url="/rowers/paidplans/", message="This functionality requires a Pro plan or higher",