some improvement
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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})
|
||||
|
||||
@@ -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"),
|
||||
]
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user