some improvement

This commit is contained in:
2025-05-03 01:22:03 +02:00
parent 42332ac329
commit 26d4613dd1
9 changed files with 80 additions and 28 deletions

View File

@@ -69,7 +69,7 @@ class File(models.Model):
def abs_pathname(self):
return settings.DOWNLOAD_BASE_DIR / self.pathname
@property
@cached_property
def mime_types(self):
mime = mimetypes.guess_type(self.pathname)
if mime:
@@ -79,11 +79,15 @@ class File(models.Model):
@property
def is_stream_video(self):
return self.pathname.stem in ["mp4", "flv", "webm"]
video_extensions = ["mp4", "flv", "webm"]
return self.pathname.suffix.lower() in video_extensions
@property
def is_video(self):
return self.pathname.stem in ["mp4", "flv", "webm", "avi", "mkv"]
if self.mime_types.startswith("video/"):
return True
video_extensions = ['.mp4', '.flv', '.webm', '.avi', '.mkv', '.mov', '.wmv']
return self.pathname.suffix.lower() in video_extensions
@property
def accel_redirect(self):

View File

@@ -21,6 +21,7 @@ class FileSerializer(serializers.ModelSerializer):
is_stream_video = serializers.BooleanField(read_only=True)
is_video = serializers.BooleanField(read_only=True)
download_url = serializers.SerializerMethodField(read_only=True)
flux_url = serializers.SerializerMethodField(read_only=True)
class Meta:
model = File
@@ -28,3 +29,6 @@ class FileSerializer(serializers.ModelSerializer):
def get_download_url(self, obj):
return reverse("torrent:download_file", kwargs={"file_id": obj.id})
def get_flux_url(self, obj):
return reverse("torrent:flux_file", kwargs={"file_id": obj.id})

View File

@@ -1,6 +1,6 @@
from django.urls import path
from .views import HomeView, download_file, download_torrent, pping
from .views import HomeView, download_file, download_torrent, pping, flux_file
app_name = "torrent"
urlpatterns = [
@@ -8,4 +8,5 @@ urlpatterns = [
path("pping/", pping, name="pping"),
path("download_file/<uuid:file_id>", download_file, name="download_file"),
path("download_torrent/<str:torrent_id>", download_torrent, name="download_torrent"),
path("flux_file/<uuid:file_id>", flux_file, name="flux_file"),
]

View File

@@ -15,7 +15,7 @@ from user.models import User
class Transmission:
trpc_args = [
"id", "percentDone", "uploadRatio", "rateUpload", "rateDownload", "hashString", "status", "sizeWhenDone",
"leftUntilDone", "name", "eta", "totalSize"
"leftUntilDone", "name", "eta", "totalSize", "uploadedEver"
]
def __init__(self):

View File

@@ -62,6 +62,23 @@ async def download_file(request, file_id):
async def flux_file(request, file_id):
# todo : version non sécurisé, voir pour ajouter un contrôle IP (par ex)
qs = File.objects.filter(pk=file_id)
try:
file = await qs.aget()
except File.DoesNotExist:
raise Http404()
else:
response = HttpResponse()
response["X-Accel-Redirect"] = file.accel_redirect
response["X-Accel-Buffering"] = "no"
response["Content-Type"] = file.mime_types
response["Content-Disposition"] = file.disposition
return response
async def secured_flux_file(request, file_id):
user = await request.auser()
qs = File.objects.filter(
Q(torrent__user=user)
@@ -106,7 +123,7 @@ async def download_torrent(request, torrent_id):
}))
response = StreamingZipFileResponse(
filename="test.zip",
filename=f"{torrent.name}.zip",
file_list=[
(file.abs_pathname, file.rel_name)
async for file in torrent.files.all()