Send video files as video by default instead as document (#601)

This commit is contained in:
Lonami Exo 2018-02-12 10:33:51 +01:00
parent 0633e204c2
commit 9abeefac7f
2 changed files with 14 additions and 6 deletions

View File

@ -70,7 +70,7 @@ from .tl.types import (
ChatInvite, ChatInviteAlready, PeerChannel, Photo, InputPeerSelf, ChatInvite, ChatInviteAlready, PeerChannel, Photo, InputPeerSelf,
InputSingleMedia, InputMediaPhoto, InputPhoto, InputFile, InputFileBig, InputSingleMedia, InputMediaPhoto, InputPhoto, InputFile, InputFileBig,
InputDocument, InputMediaDocument, Document, MessageEntityTextUrl, InputDocument, InputMediaDocument, Document, MessageEntityTextUrl,
InputMessageEntityMentionName InputMessageEntityMentionName, DocumentAttributeVideo
) )
from .tl.types.messages import DialogsSlice from .tl.types.messages import DialogsSlice
from .extensions import markdown, html from .extensions import markdown, html
@ -922,8 +922,8 @@ class TelegramClient(TelegramBareClient):
force_document (:obj:`bool`, optional): force_document (:obj:`bool`, optional):
If left to ``False`` and the file is a path that ends with If left to ``False`` and the file is a path that ends with
``.png``, ``.jpg`` and such, the file will be sent as a photo. the extension of an image file or a video file, it will be
Otherwise always as a document. sent as such. Otherwise always as a document.
progress_callback (:obj:`callable`, optional): progress_callback (:obj:`callable`, optional):
A callback function accepting two parameters: A callback function accepting two parameters:
@ -1015,6 +1015,9 @@ class TelegramClient(TelegramBareClient):
# TODO If the input file is an audio, find out: # TODO If the input file is an audio, find out:
# Performer and song title and add DocumentAttributeAudio # Performer and song title and add DocumentAttributeAudio
} }
if not force_document and utils.is_video(file):
attr_dict[DocumentAttributeVideo] = \
DocumentAttributeVideo(0, 0, 0)
else: else:
attr_dict = { attr_dict = {
DocumentAttributeFilename: DocumentAttributeFilename:

View File

@ -3,10 +3,10 @@ Utilities for working with the Telegram API itself (such as handy methods
to convert between an entity like an User, Chat, etc. into its Input version) to convert between an entity like an User, Chat, etc. into its Input version)
""" """
import math import math
import mimetypes
import re import re
from mimetypes import add_type, guess_extension from mimetypes import add_type, guess_extension
from .tl.types.contacts import ResolvedPeer
from .tl.types import ( from .tl.types import (
Channel, ChannelForbidden, Chat, ChatEmpty, ChatForbidden, ChatFull, Channel, ChannelForbidden, Chat, ChatEmpty, ChatForbidden, ChatFull,
ChatPhoto, InputPeerChannel, InputPeerChat, InputPeerUser, InputPeerEmpty, ChatPhoto, InputPeerChannel, InputPeerChat, InputPeerUser, InputPeerEmpty,
@ -24,6 +24,7 @@ from .tl.types import (
InputMediaUploadedPhoto, DocumentAttributeFilename, photos, InputMediaUploadedPhoto, DocumentAttributeFilename, photos,
TopPeer, InputNotifyPeer TopPeer, InputNotifyPeer
) )
from .tl.types.contacts import ResolvedPeer
USERNAME_RE = re.compile( USERNAME_RE = re.compile(
r'@|(?:https?://)?(?:telegram\.(?:me|dog)|t\.me)/(joinchat/)?' r'@|(?:https?://)?(?:telegram\.(?:me|dog)|t\.me)/(joinchat/)?'
@ -322,8 +323,12 @@ def get_input_media(media, user_caption=None, is_photo=False):
def is_image(file): def is_image(file):
"""Returns True if the file extension looks like an image file""" """Returns True if the file extension looks like an image file"""
return (isinstance(file, str) and return (mimetypes.guess_type(file)[0] or '').startswith('image/')
bool(re.search(r'\.(png|jpe?g|gif)$', file, re.IGNORECASE)))
def is_video(file):
"""Returns True if the file extension looks like a video file"""
return (mimetypes.guess_type(file)[0] or '').startswith('video/')
def parse_phone(phone): def parse_phone(phone):