From 0995c4fe741af88d6f6e832f8d7e7518ae29b73d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sat, 12 Nov 2022 18:33:23 +0100 Subject: [PATCH] misc: add support for offsite podcasts --- panikweb/settings.py | 14 ++++++++++++++ panikweb/urls.py | 4 ++++ panikweb/views.py | 13 ++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/panikweb/settings.py b/panikweb/settings.py index aa7505b..c007872 100644 --- a/panikweb/settings.py +++ b/panikweb/settings.py @@ -266,6 +266,20 @@ HOME_NEWSITEMS_COUNT = 3 HOME_PODCASTS_COUNT = 3 USE_AGENDA_ONLY_FIELD = False +# allow to serve from an alternative path if file is not found locally, +# to be used with nginx, sth like +# location /remote_media { +# internal; +# proxy_pass https://panikdb.radiopanik.org/media/; +# proxy_limit_rate 500k; +# } +# location /local_media { +# internal; +# alias /srv/www.radiopanik.org/media; +# } +# with OFFSITE_MEDIA_SOUNDS = ('/local_media/', '/remote_media/') +OFFSITE_MEDIA_SOUNDS = None + PROGRAM_PREFIX = 'programme/' EMISSIONS_PREFIX = 'emissions/' NEWSITEMS_PREFIX = 'actus/' diff --git a/panikweb/urls.py b/panikweb/urls.py index dbed28b..73f607a 100644 --- a/panikweb/urls.py +++ b/panikweb/urls.py @@ -85,6 +85,10 @@ urlpatterns = [ urlpatterns = combo_plugins.register_plugins_urls(urlpatterns) urlpatterns += staticfiles_urlpatterns() + +if settings.OFFSITE_MEDIA_SOUNDS: + urlpatterns += [url(r'^media/(?Psounds/.*)', views.media_hosting)] + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) if settings.DEBUG_TOOLBAR: diff --git a/panikweb/views.py b/panikweb/views.py index 92b801a..d4b5df9 100644 --- a/panikweb/views.py +++ b/panikweb/views.py @@ -9,8 +9,9 @@ from datetime import date, datetime, timedelta from django.conf import settings from django.contrib.sites.models import Site from django.contrib.syndication.views import Feed, add_domain +from django.core.files.storage import default_storage from django.core.paginator import Paginator -from django.http import Http404, JsonResponse +from django.http import Http404, HttpResponse, JsonResponse from django.urls import reverse from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed @@ -1117,3 +1118,13 @@ class Chat(DetailView, EmissionMixin): chat = cache_control(max_age=15)(Chat.as_view()) + + +def media_hosting(request, location, *args, **kwargs): + local_path = default_storage.path(location) + response = HttpResponse() + if os.path.exists(local_path): + response['X-Accel-Redirect'] = settings.OFFSITE_MEDIA_SOUNDS[0] + location + else: + response['X-Accel-Redirect'] = settings.OFFSITE_MEDIA_SOUNDS[1] + location + return response -- 2.39.2