mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-01-22 18:28:00 +00:00
Move caching to client to remove burden on dispatch server
This commit is contained in:
parent
7cf7aecdf2
commit
c970cfcf9a
1 changed files with 9 additions and 3 deletions
|
|
@ -9,7 +9,8 @@ from drf_yasg import openapi
|
||||||
from django.shortcuts import get_object_or_404, get_list_or_404
|
from django.shortcuts import get_object_or_404, get_list_or_404
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
import os, json, requests, logging
|
import os, json, requests, logging, mimetypes
|
||||||
|
from django.utils.http import http_date
|
||||||
from urllib.parse import unquote
|
from urllib.parse import unquote
|
||||||
from apps.accounts.permissions import (
|
from apps.accounts.permissions import (
|
||||||
Authenticated,
|
Authenticated,
|
||||||
|
|
@ -1653,11 +1654,10 @@ class LogoViewSet(viewsets.ModelViewSet):
|
||||||
"""Streams the logo file, whether it's local or remote."""
|
"""Streams the logo file, whether it's local or remote."""
|
||||||
logo = self.get_object()
|
logo = self.get_object()
|
||||||
logo_url = logo.url
|
logo_url = logo.url
|
||||||
|
|
||||||
if logo_url.startswith("/data"): # Local file
|
if logo_url.startswith("/data"): # Local file
|
||||||
if not os.path.exists(logo_url):
|
if not os.path.exists(logo_url):
|
||||||
raise Http404("Image not found")
|
raise Http404("Image not found")
|
||||||
|
stat = os.stat(logo_url)
|
||||||
# Get proper mime type (first item of the tuple)
|
# Get proper mime type (first item of the tuple)
|
||||||
content_type, _ = mimetypes.guess_type(logo_url)
|
content_type, _ = mimetypes.guess_type(logo_url)
|
||||||
if not content_type:
|
if not content_type:
|
||||||
|
|
@ -1667,6 +1667,8 @@ class LogoViewSet(viewsets.ModelViewSet):
|
||||||
response = StreamingHttpResponse(
|
response = StreamingHttpResponse(
|
||||||
open(logo_url, "rb"), content_type=content_type
|
open(logo_url, "rb"), content_type=content_type
|
||||||
)
|
)
|
||||||
|
response["Cache-Control"] = "public, max-age=14400" # Cache in browser for 4 hours
|
||||||
|
response["Last-Modified"] = http_date(stat.st_mtime)
|
||||||
response["Content-Disposition"] = 'inline; filename="{}"'.format(
|
response["Content-Disposition"] = 'inline; filename="{}"'.format(
|
||||||
os.path.basename(logo_url)
|
os.path.basename(logo_url)
|
||||||
)
|
)
|
||||||
|
|
@ -1706,6 +1708,10 @@ class LogoViewSet(viewsets.ModelViewSet):
|
||||||
remote_response.iter_content(chunk_size=8192),
|
remote_response.iter_content(chunk_size=8192),
|
||||||
content_type=content_type,
|
content_type=content_type,
|
||||||
)
|
)
|
||||||
|
if(remote_response.headers.get("Cache-Control")):
|
||||||
|
response["Cache-Control"] = remote_response.headers.get("Cache-Control")
|
||||||
|
if(remote_response.headers.get("Last-Modified")):
|
||||||
|
response["Last-Modified"] = remote_response.headers.get("Last-Modified")
|
||||||
response["Content-Disposition"] = 'inline; filename="{}"'.format(
|
response["Content-Disposition"] = 'inline; filename="{}"'.format(
|
||||||
os.path.basename(logo_url)
|
os.path.basename(logo_url)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue