diff --git a/files/models.py b/files/models.py index d46d094..07ac01f 100644 --- a/files/models.py +++ b/files/models.py @@ -8,6 +8,7 @@ import tempfile import uuid import m3u8 +import webvtt from django.conf import settings from django.contrib.postgres.indexes import GinIndex from django.contrib.postgres.search import SearchVectorField @@ -797,6 +798,34 @@ class Media(models.Model): ) return ret + @property + def subtitles_info_contents(self): + """Property used on serializers + Returns subtitles info with file data + """ + + ret = [] + for subtitle in self.subtitles.all(): + contents = open(subtitle.subtitle_file.path, 'r').read() + text = "" + try: + lines = webvtt.read(subtitle.subtitle_file.path) + for line in lines: + text += line.text + " " + except Exception: + pass + + ret.append( + { + "src": helpers.url_from_path(subtitle.subtitle_file.path), + "srclang": subtitle.language.code, + "label": subtitle.language.title, + "contents": contents, + "text": text, + } + ) + return ret + @property def sprites_url(self): """Property used on serializers diff --git a/files/views.py b/files/views.py index 19505a0..28a037e 100644 --- a/files/views.py +++ b/files/views.py @@ -221,6 +221,7 @@ def featured_media(request): """List featured media view""" context = {} + context["media"] = list(Media.objects.filter(Q(listable=True), featured=True))[:50] return render(request, "cms/featured-media.html", context) @@ -228,6 +229,9 @@ def index(request): """Index view""" context = {} + context["media_featured"] = list(Media.objects.filter(Q(listable=True), featured=True))[:10] + context["media_recommended"] = list(show_recommended_media(request, limit=10)) + context["media_latest"] = list(Media.objects.filter(Q(listable=True)).order_by("-add_date"))[:50] return render(request, "cms/index.html", context) @@ -235,6 +239,7 @@ def latest_media(request): """List latest media view""" context = {} + context["media"] = list(Media.objects.filter(Q(listable=True)).order_by("-add_date"))[:50] return render(request, "cms/latest-media.html", context) @@ -280,6 +285,7 @@ def recommended_media(request): """List recommended media view""" context = {} + context["media"] = list(show_recommended_media(request, limit=50)) return render(request, "cms/recommended-media.html", context) @@ -369,6 +375,7 @@ def view_playlist(request, friendly_token): context = {} context["playlist"] = playlist + context["media"] = [c.media for c in PlaylistMedia.objects.filter(playlist=playlist)] return render(request, "cms/playlist.html", context) diff --git a/frontend/src/static/js/components/media-page/MediaPage.scss b/frontend/src/static/js/components/media-page/MediaPage.scss index 26c567b..ae4b4f8 100755 --- a/frontend/src/static/js/components/media-page/MediaPage.scss +++ b/frontend/src/static/js/components/media-page/MediaPage.scss @@ -1944,3 +1944,8 @@ } } } + +#page-media-metadata { + opacity: 0.1; + zoom: 0.1; +} diff --git a/requirements.txt b/requirements.txt index acbb677..17757ef 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,3 +19,4 @@ m3u8==3.5.0 django-ckeditor==6.6.1 django-debug-toolbar==4.1.0 django-login-required-middleware==0.9.0 +webvtt-py==0.4.6 diff --git a/templates/cms/featured-media.html b/templates/cms/featured-media.html index e541078..81d542d 100644 --- a/templates/cms/featured-media.html +++ b/templates/cms/featured-media.html @@ -39,7 +39,20 @@ {% endblock headermeta %} {% block content %} -{% if user %}{% endif %} +{% if user %}{% endif %} {% endblock %} {% block bottomimports %} diff --git a/templates/cms/index.html b/templates/cms/index.html index 181a65b..ef90f50 100644 --- a/templates/cms/index.html +++ b/templates/cms/index.html @@ -45,7 +45,44 @@ {% endblock headermeta %} -{% block content %}
{% endblock %} +{% block content %}
+

Featured VIEW ALL

+ +

Recommended VIEW ALL

+ +

Latest VIEW ALL

+ +
{% endblock %} {% block bottomimports %} diff --git a/templates/cms/latest-media.html b/templates/cms/latest-media.html index 02095b1..662e72c 100644 --- a/templates/cms/latest-media.html +++ b/templates/cms/latest-media.html @@ -39,7 +39,20 @@ {% endblock headermeta %} {% block content %} -{% if user %}
{% endif %} +{% if user %}
+

Recent uploads

+ +
{% endif %} {% endblock %} {% block bottomimports %} diff --git a/templates/cms/media.html b/templates/cms/media.html index 2999f19..2ebc58b 100644 --- a/templates/cms/media.html +++ b/templates/cms/media.html @@ -121,7 +121,21 @@ {%endblock topimports %} -{% block content %}
{% endblock content %} +{% block content %} +
+
+

{{media_object.title}}

+

Published {{media_object.add_date}}

+

{% if media_object.summary %}{{media_object.summary}}{% else %}{{media_object.description}}{% endif %}

+{% for subtitle_object in media_object.subtitles_info_contents %} +{% if subtitle_object.text != "" %} +

Transcript in {{ subtitle_object.label }}

+

{{ subtitle_object.text }}

+{% endif %} +{% endfor %} +
+
+{% endblock content %} {% block bottomimports %} diff --git a/templates/cms/playlist.html b/templates/cms/playlist.html index 00e7540..43b9838 100755 --- a/templates/cms/playlist.html +++ b/templates/cms/playlist.html @@ -9,7 +9,24 @@ {%endblock topimports %} {% block content %} -{% if user %}
{% endif %} +{% if user %}
+

{{playlist.title}}

+

{{playlist.media_count}} videos

+

Published {{playlist.add_date}}

+

{{playlist.description}}

+

{{playlist.user}}

+
    + {% for media_object in media %} +
  1. +

    Thumbnail
    + {{media_object.title}}

    +

    Posted by {{media_object.author_name}}

    +

    {{media_object.views}} views

    +

    Published {{media_object.add_date}}

    +
  2. + {% endfor %} +
+
{% endif %} {% endblock %} {% block bottomimports %} diff --git a/templates/cms/recommended-media.html b/templates/cms/recommended-media.html index 8b048dd..6e4b526 100644 --- a/templates/cms/recommended-media.html +++ b/templates/cms/recommended-media.html @@ -39,7 +39,20 @@ {% endblock headermeta %} {% block content %} -{% if user %}{% endif %} +{% if user %}{% endif %} {% endblock %} {% block bottomimports %} diff --git a/templates/cms/user.html b/templates/cms/user.html index c9a7d01..97fa5c5 100644 --- a/templates/cms/user.html +++ b/templates/cms/user.html @@ -25,9 +25,27 @@ No such user {% endblock %} {% block content %} -{% if user %}
{% endif %} +{% if user %}
+

{{user.name}}

+
+

Uploads

+ +
{% endif %} {% endblock %} {% block bottomimports %} -{% endblock bottomimports %} \ No newline at end of file +{% endblock bottomimports %} diff --git a/templates/cms/user_about.html b/templates/cms/user_about.html index 53f311a..a165336 100644 --- a/templates/cms/user_about.html +++ b/templates/cms/user_about.html @@ -25,7 +25,16 @@ No such user {% endblock %} {% block content %} -{% if user %}
{% endif %} +{% if user %}
+

{{user.name}}

+ +

Biography

+

{{user.description}}

+
{% endif %} {% endblock %} {% block bottomimports %} diff --git a/templates/cms/user_playlists.html b/templates/cms/user_playlists.html index fd2d8ea..52579aa 100755 --- a/templates/cms/user_playlists.html +++ b/templates/cms/user_playlists.html @@ -25,7 +25,25 @@ No such user {% endblock %} {% block content %} -{% if user %}
{% endif %} +{% if user %}
+

{{user.name}}

+ +

Created playlists

+ +
{% endif %} {% endblock %} {% block bottomimports %} diff --git a/users/views.py b/users/views.py index acf1425..a7368d3 100644 --- a/users/views.py +++ b/users/views.py @@ -1,6 +1,7 @@ from django.conf import settings from django.contrib.auth.decorators import login_required from django.core.mail import EmailMessage +from django.db.models import Q from django.http import HttpResponseRedirect from django.shortcuts import render from drf_yasg import openapi as openapi @@ -21,9 +22,10 @@ from rest_framework.views import APIView from cms.permissions import IsUserOrManager from files.methods import is_mediacms_editor, is_mediacms_manager +from files.models import Playlist from .forms import ChannelForm, UserForm -from .models import Channel, User +from .models import Channel, Media, User from .serializers import LoginSerializer, UserDetailSerializer, UserSerializer @@ -44,6 +46,7 @@ def view_user(request, username): context["CAN_EDIT"] = True if ((user and user == request.user) or is_mediacms_manager(request.user)) else False context["CAN_DELETE"] = True if is_mediacms_manager(request.user) else False context["SHOW_CONTACT_FORM"] = True if (user.allow_contact or is_mediacms_editor(request.user)) else False + context["media"] = list(Media.objects.filter(Q(listable=True)).filter(user__username=username))[:50] return render(request, "cms/user.html", context) @@ -57,6 +60,7 @@ def view_user_media(request, username): context["CAN_EDIT"] = True if ((user and user == request.user) or is_mediacms_manager(request.user)) else False context["CAN_DELETE"] = True if is_mediacms_manager(request.user) else False context["SHOW_CONTACT_FORM"] = True if (user.allow_contact or is_mediacms_editor(request.user)) else False + context["media"] = list(Media.objects.filter(Q(listable=True)).filter(user__username=username))[:50] return render(request, "cms/user_media.html", context) @@ -70,6 +74,7 @@ def view_user_playlists(request, username): context["CAN_EDIT"] = True if ((user and user == request.user) or is_mediacms_manager(request.user)) else False context["CAN_DELETE"] = True if is_mediacms_manager(request.user) else False context["SHOW_CONTACT_FORM"] = True if (user.allow_contact or is_mediacms_editor(request.user)) else False + context["playlists"] = Playlist.objects.filter(user__username=username) return render(request, "cms/user_playlists.html", context)