2
0
mirror of https://github.com/pyrogram/pyrogram synced 2025-09-10 03:05:58 +00:00

Bring back automatic mime type detection for new uploads (fixes #239)

- Add mime.types file to contain a good database of type -> ext mappings
  from svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

- Load mime.type at BaseClient creation and add two convenience methods
  for guessing mime types from filenames and extensions from mime types,
  guess_mime_type and guess_extension

- Make all send_* method as well as download_media use the new mime type
  database via guess_mime_type and guess_extension methods
This commit is contained in:
Dan
2019-04-20 17:59:42 +02:00
parent 57be97566d
commit 63d76a7f13
12 changed files with 1911 additions and 23 deletions

View File

@@ -861,18 +861,20 @@ class Client(Methods, BaseClient):
file_name = file_name or getattr(media, "file_name", None)
if not file_name:
if media_type == 3:
extension = ".ogg"
elif media_type in (4, 10, 13):
extension = mimetypes.guess_extension(media.mime_type) or ".mp4"
elif media_type == 5:
extension = mimetypes.guess_extension(media.mime_type) or ".unknown"
elif media_type == 8:
extension = ".webp"
elif media_type == 9:
extension = mimetypes.guess_extension(media.mime_type) or ".mp3"
elif media_type in (0, 1, 2):
guessed_extension = self.guess_extension(media.mime_type)
if media_type in (0, 1, 2):
extension = ".jpg"
elif media_type == 3:
extension = guessed_extension or ".ogg"
elif media_type in (4, 10, 13):
extension = guessed_extension or ".mp4"
elif media_type == 5:
extension = guessed_extension or ".zip"
elif media_type == 8:
extension = guessed_extension or ".webp"
elif media_type == 9:
extension = guessed_extension or ".mp3"
else:
continue
@@ -1708,3 +1710,13 @@ class Client(Methods, BaseClient):
return ""
else:
return file_name
def guess_mime_type(self, filename: str):
extension = os.path.splitext(filename)[1]
return self.extensions_to_mime_types.get(extension)
def guess_extension(self, mime_type: str):
extensions = self.mime_types_to_extensions.get(mime_type)
if extensions:
return extensions.split(" ")[0]