From d293d8e4e5130782b3618e5301652684a0573fe4 Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Sat, 22 Oct 2022 13:35:57 +0000 Subject: [PATCH 01/10] Add static content for media pages --- templates/cms/media.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/templates/cms/media.html b/templates/cms/media.html index 2999f19..c6c7592 100644 --- a/templates/cms/media.html +++ b/templates/cms/media.html @@ -121,7 +121,13 @@ {%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 %}

+
+{% endblock content %} {% block bottomimports %} From 4dac1d4161c63d9d04feea627dd5e778a59b13eb Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Mon, 24 Oct 2022 13:55:37 +0000 Subject: [PATCH 02/10] Add subtitles to the page as static searchable text --- files/models.py | 30 ++++++++++++++++++++++++++++++ requirements.txt | 2 ++ templates/cms/media.html | 6 ++++++ 3 files changed, 38 insertions(+) diff --git a/files/models.py b/files/models.py index 66299ea..993e889 100644 --- a/files/models.py +++ b/files/models.py @@ -26,6 +26,8 @@ from mptt.models import MPTTModel, TreeForeignKey from . import helpers from .stop_words import STOP_WORDS +import webvtt + logger = logging.getLogger(__name__) RE_TIMECODE = re.compile(r"(\d+:\d+:\d+.\d+)") @@ -787,6 +789,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/requirements.txt b/requirements.txt index 0a739a4..7b838cd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,3 +31,5 @@ django-ckeditor django-debug-toolbar==3.2.4 django-login-required-middleware==0.6.1 + +webvtt-py==0.4.6 diff --git a/templates/cms/media.html b/templates/cms/media.html index c6c7592..53bd0e7 100644 --- a/templates/cms/media.html +++ b/templates/cms/media.html @@ -126,6 +126,12 @@

{{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 %} From 1dd609dd3be5476aeb3141a4a0256f9b28cc384e Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Mon, 24 Oct 2022 14:07:27 +0000 Subject: [PATCH 03/10] Hide metadata during page load --- frontend/src/static/js/components/media-page/MediaPage.scss | 5 +++++ templates/cms/media.html | 2 ++ 2 files changed, 7 insertions(+) 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/templates/cms/media.html b/templates/cms/media.html index 53bd0e7..2ebc58b 100644 --- a/templates/cms/media.html +++ b/templates/cms/media.html @@ -123,6 +123,7 @@ {% block content %}
+

{{media_object.title}}

Published {{media_object.add_date}}

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

@@ -133,6 +134,7 @@ {% endif %} {% endfor %}
+
{% endblock content %} {% block bottomimports %} From 1846114bad1ade86d6fd8dac132857059883e17c Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Sun, 13 Nov 2022 23:34:34 +0000 Subject: [PATCH 04/10] Add searchable content to index, featured, latest, and recommended --- files/views.py | 6 +++++ templates/cms/featured-media.html | 15 ++++++++++- templates/cms/index.html | 39 +++++++++++++++++++++++++++- templates/cms/latest-media.html | 15 ++++++++++- templates/cms/recommended-media.html | 15 ++++++++++- 5 files changed, 86 insertions(+), 4 deletions(-) diff --git a/files/views.py b/files/views.py index b3f2cc8..6500be5 100644 --- a/files/views.py +++ b/files/views.py @@ -222,6 +222,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) @@ -229,6 +230,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) @@ -236,6 +240,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) @@ -281,6 +286,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) diff --git a/templates/cms/featured-media.html b/templates/cms/featured-media.html index e541078..d847e71 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 57fa31d..7120104 100644 --- a/templates/cms/index.html +++ b/templates/cms/index.html @@ -43,7 +43,44 @@ {% endblock headermeta %} -{% block content %}
{% endblock %} +{% block content %}
+

Featured VIEW ALL

+
    + {% for media_object in media_featured %} +
  • +

    Thumbnail
    + {{media_object.title}}

    +

    Posted by {{media_object.author_name}}

    +

    {{media_object.views}} views

    +

    Published {{media_object.add_date}}

    +
  • + {% endfor %} +
+

Recommended VIEW ALL

+
    + {% for media_object in media_recommended %} +
  • +

    Thumbnail
    + {{media_object.title}}

    +

    Posted by {{media_object.author_name}}

    +

    {{media_object.views}} views

    +

    Published {{media_object.add_date}}

    +
  • + {% endfor %} +
+

Latest VIEW ALL

+
    + {% for media_object in media_latest %} +
  • +

    Thumbnail
    + {{media_object.title}}

    +

    Posted by {{media_object.author_name}}

    +

    {{media_object.views}} views

    +

    Published {{media_object.add_date}}

    +
  • + {% endfor %} +
+
{% endblock %} {% block bottomimports %} diff --git a/templates/cms/latest-media.html b/templates/cms/latest-media.html index 02095b1..3c84e28 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

+
    + {% for media_object in media %} +
  • +

    Thumbnail
    + {{media_object.title}}

    +

    Posted by {{media_object.author_name}}

    +

    {{media_object.views}} views

    +

    Published {{media_object.add_date}}

    +
  • + {% endfor %} +
+
{% endif %} {% endblock %} {% block bottomimports %} diff --git a/templates/cms/recommended-media.html b/templates/cms/recommended-media.html index 8b048dd..5125f9c 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 %} From 8a0f9fd085152308aad130592f9db93824e798f2 Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Mon, 14 Nov 2022 00:03:36 +0000 Subject: [PATCH 05/10] Add static content to user media page --- templates/cms/user.html | 22 ++++++++++++++++++++-- users/views.py | 5 ++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/templates/cms/user.html b/templates/cms/user.html index c9a7d01..6a3b3fa 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

+
    + {% for media_object in media %} +
  • +

    Thumbnail
    + {{media_object.title}}

    +

    {{media_object.views}} views

    +

    Published {{media_object.add_date}}

    +
  • + {% endfor %} +
+
{% endif %} {% endblock %} {% block bottomimports %} -{% endblock bottomimports %} \ No newline at end of file +{% endblock bottomimports %} diff --git a/users/views.py b/users/views.py index dcf9b31..50dafa9 100644 --- a/users/views.py +++ b/users/views.py @@ -3,6 +3,7 @@ from django.contrib.auth.decorators import login_required from django.core.mail import EmailMessage from django.http import HttpResponseRedirect from django.shortcuts import render +from django.db.models import Q from drf_yasg import openapi as openapi from drf_yasg.utils import swagger_auto_schema from rest_framework import generics, permissions, status @@ -23,7 +24,7 @@ from cms.permissions import IsUserOrManager from files.methods import is_mediacms_editor, is_mediacms_manager from .forms import ChannelForm, UserForm -from .models import Channel, User +from .models import Channel, User, Media from .serializers import LoginSerializer, UserDetailSerializer, UserSerializer @@ -44,6 +45,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 +59,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) From f66cd12c026e91bc721ef599a00ca1bdcd9f141f Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Mon, 14 Nov 2022 00:39:50 +0000 Subject: [PATCH 06/10] Add links to media --- templates/cms/featured-media.html | 4 ++-- templates/cms/index.html | 12 ++++++------ templates/cms/latest-media.html | 4 ++-- templates/cms/recommended-media.html | 4 ++-- templates/cms/user.html | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/templates/cms/featured-media.html b/templates/cms/featured-media.html index d847e71..81d542d 100644 --- a/templates/cms/featured-media.html +++ b/templates/cms/featured-media.html @@ -44,8 +44,8 @@
    {% for media_object in media %}
  • -

    Thumbnail
    - {{media_object.title}}

    +

    Thumbnail
    + {{media_object.title}}

    Posted by {{media_object.author_name}}

    {{media_object.views}} views

    Published {{media_object.add_date}}

    diff --git a/templates/cms/index.html b/templates/cms/index.html index 7120104..e127dd9 100644 --- a/templates/cms/index.html +++ b/templates/cms/index.html @@ -48,8 +48,8 @@
      {% for media_object in media_featured %}
    • -

      Thumbnail
      - {{media_object.title}}

      +

      Thumbnail
      + {{media_object.title}}

      Posted by {{media_object.author_name}}

      {{media_object.views}} views

      Published {{media_object.add_date}}

      @@ -60,8 +60,8 @@
        {% for media_object in media_recommended %}
      • -

        Thumbnail
        - {{media_object.title}}

        +

        Thumbnail
        + {{media_object.title}}

        Posted by {{media_object.author_name}}

        {{media_object.views}} views

        Published {{media_object.add_date}}

        @@ -72,8 +72,8 @@
          {% for media_object in media_latest %}
        • -

          Thumbnail
          - {{media_object.title}}

          +

          Thumbnail
          + {{media_object.title}}

          Posted by {{media_object.author_name}}

          {{media_object.views}} views

          Published {{media_object.add_date}}

          diff --git a/templates/cms/latest-media.html b/templates/cms/latest-media.html index 3c84e28..662e72c 100644 --- a/templates/cms/latest-media.html +++ b/templates/cms/latest-media.html @@ -44,8 +44,8 @@
            {% for media_object in media %}
          • -

            Thumbnail
            - {{media_object.title}}

            +

            Thumbnail
            + {{media_object.title}}

            Posted by {{media_object.author_name}}

            {{media_object.views}} views

            Published {{media_object.add_date}}

            diff --git a/templates/cms/recommended-media.html b/templates/cms/recommended-media.html index 5125f9c..6e4b526 100644 --- a/templates/cms/recommended-media.html +++ b/templates/cms/recommended-media.html @@ -44,8 +44,8 @@
              {% for media_object in media %}
            • -

              Thumbnail
              - {{media_object.title}}

              +

              Thumbnail
              + {{media_object.title}}

              Posted by {{media_object.author_name}}

              {{media_object.views}} views

              Published {{media_object.add_date}}

              diff --git a/templates/cms/user.html b/templates/cms/user.html index 6a3b3fa..97fa5c5 100644 --- a/templates/cms/user.html +++ b/templates/cms/user.html @@ -36,8 +36,8 @@ No such user
                {% for media_object in media %}
              • -

                Thumbnail
                - {{media_object.title}}

                +

                Thumbnail
                + {{media_object.title}}

                {{media_object.views}} views

                Published {{media_object.add_date}}

              • From a916952d211602f614ba4348975de1c7c470f684 Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Mon, 14 Nov 2022 00:45:45 +0000 Subject: [PATCH 07/10] Add static indexable content for user About pages --- templates/cms/user_about.html | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 %} From 7d146c9770c864271aa30490ecad77abb07b40df Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Mon, 14 Nov 2022 14:45:50 +0000 Subject: [PATCH 08/10] Add static content for user Playlists pages --- templates/cms/user_playlists.html | 20 +++++++++++++++++++- users/views.py | 2 ++ 2 files changed, 21 insertions(+), 1 deletion(-) 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

                +
                  + {% for playlist_object in playlists %} +
                • +

                  Thumbnail
                  + {{playlist_object.title}}

                  +

                  {{playlist_object.media_count}} videos

                  +

                  Published {{playlist_object.add_date}}

                  +
                • + {% endfor %} +
                +
                {% endif %} {% endblock %} {% block bottomimports %} diff --git a/users/views.py b/users/views.py index 50dafa9..ca2d0de 100644 --- a/users/views.py +++ b/users/views.py @@ -22,6 +22,7 @@ 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, Media @@ -73,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) From 5e5536134d35f77917da455125059bce50bd4538 Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Mon, 14 Nov 2022 14:57:33 +0000 Subject: [PATCH 09/10] Add static content for playlist pages --- files/views.py | 1 + templates/cms/playlist.html | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/files/views.py b/files/views.py index 6500be5..0c513d6 100644 --- a/files/views.py +++ b/files/views.py @@ -366,6 +366,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/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 %} From 00472751dc78bfdf44c84456c61d2e7bd74d30f8 Mon Sep 17 00:00:00 2001 From: Kyle Maas Date: Sun, 3 Sep 2023 16:03:32 +0000 Subject: [PATCH 10/10] Fix lint --- files/models.py | 3 +-- users/views.py | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/files/models.py b/files/models.py index 910693d..a3085a9 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 @@ -26,8 +27,6 @@ from mptt.models import MPTTModel, TreeForeignKey from . import helpers from .stop_words import STOP_WORDS -import webvtt - logger = logging.getLogger(__name__) RE_TIMECODE = re.compile(r"(\d+:\d+:\d+.\d+)") diff --git a/users/views.py b/users/views.py index c38d5e8..a7368d3 100644 --- a/users/views.py +++ b/users/views.py @@ -1,9 +1,9 @@ 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 django.db.models import Q from drf_yasg import openapi as openapi from drf_yasg.utils import swagger_auto_schema from rest_framework import generics, permissions, status @@ -25,7 +25,7 @@ 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, Media +from .models import Channel, Media, User from .serializers import LoginSerializer, UserDetailSerializer, UserSerializer