Skip to content

Commit 344b21c

Browse files
Merge pull request #89 from GHOSTsama2503/main
Fix for files without filename
2 parents 1664942 + ce25af0 commit 344b21c

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

WebStreamer/server/stream_routes.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -116,21 +116,11 @@ async def media_streamer(request: web.Request, message_id: int, secure_hash: str
116116
file_id, index, offset, first_part_cut, last_part_cut, part_count, chunk_size
117117
)
118118
mime_type = file_id.mime_type
119-
file_name = file_id.file_name
119+
file_name = utils.get_name(file_id)
120120
disposition = "attachment"
121121

122-
if mime_type:
123-
if not file_name:
124-
try:
125-
file_name = f"{secrets.token_hex(2)}.{mime_type.split('/')[1]}"
126-
except (IndexError, AttributeError):
127-
file_name = f"{secrets.token_hex(2)}.unknown"
128-
else:
129-
if file_name:
130-
mime_type = mimetypes.guess_type(file_id.file_name)
131-
else:
132-
mime_type = "application/octet-stream"
133-
file_name = f"{secrets.token_hex(2)}.unknown"
122+
if not mime_type:
123+
mime_type = mimetypes.guess_type(file_name)[0] or "application/octet-stream"
134124

135125
if "video/" in mime_type or "audio/" in mime_type or "/html" in mime_type:
136126
disposition = "inline"

WebStreamer/utils/file_properties.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import Any, Optional, Union
66
from pyrogram.raw.types.messages import Messages
77
from WebStreamer.server.exceptions import FIleNotFound
8+
from datetime import datetime
89

910

1011
async def parse_file_id(message: "Message") -> Optional[FileId]:
@@ -56,6 +57,34 @@ def get_hash(media_msg: Union[str, Message], length: int) -> str:
5657
long_hash = hashlib.sha256(unique_id.encode("UTF-8")).hexdigest()
5758
return long_hash[:length]
5859

59-
def get_name(media_msg: Message) -> str:
60-
media = get_media_from_message(media_msg)
61-
return getattr(media, 'file_name', "") or ""
60+
61+
def get_name(media_msg: Message | FileId) -> str:
62+
63+
if isinstance(media_msg, Message):
64+
media = get_media_from_message(media_msg)
65+
file_name = getattr(media, "file_name", "")
66+
67+
elif isinstance(media_msg, FileId):
68+
file_name = getattr(media_msg, "file_name", "")
69+
70+
if not file_name:
71+
if isinstance(media_msg, Message) and media_msg.media:
72+
media_type = media_msg.media.value
73+
elif media_msg.file_type:
74+
media_type = media_msg.file_type.name.lower()
75+
else:
76+
media_type = "file"
77+
78+
formats = {
79+
"photo": "jpg", "audio": "mp3", "voice": "ogg",
80+
"video": "mp4", "animation": "mp4", "video_note": "mp4",
81+
"sticker": "webp"
82+
}
83+
84+
ext = formats.get(media_type)
85+
ext = "." + ext if ext else ""
86+
87+
date = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
88+
file_name = f"{media_type}-{date}{ext}"
89+
90+
return file_name

0 commit comments

Comments
 (0)