Files
music-tag-web/applications/subsonic/utils.py
2023-05-08 15:06:47 +08:00

43 lines
1.2 KiB
Python

import urllib.parse
from datetime import datetime
from django.conf import settings
from rest_framework.response import Response
from applications.subsonic.constants import EXTENSION_TO_MIMETYPE
def get_type_from_ext(path):
extension = path.split(".")[-1]
return EXTENSION_TO_MIMETYPE.get(extension)
def get_content_disposition(filename):
filename = f"filename*=UTF-8''{urllib.parse.quote(filename)}"
return f"attachment; {filename}"
def handle_serve(
track, user, _format=None, max_bitrate=None, proxy_media=True, download=False):
# we update the accessed_date
now = datetime.now()
track.accessed_date = now
track.save(update_fields=["accessed_date"])
file_path = track.path.replace(str(settings.BASE_DIR), "").encode("utf-8")
mt = track.mimetype
if mt:
response = Response(content_type=mt)
else:
response = Response()
mapping = {"nginx": "X-Accel-Redirect", "apache2": "X-Sendfile"}
file_header = mapping[settings.REVERSE_PROXY_TYPE]
response[file_header] = file_path
if download:
filename = track.name
response["Content-Disposition"] = get_content_disposition(filename)
if mt:
response["Content-Type"] = mt
return response