2
0
mirror of https://github.com/pyrogram/pyrogram synced 2025-08-29 13:27:47 +00:00

Update all media types' thumbnails

They are now a List of Thumbnail objects
This commit is contained in:
Dan 2019-05-29 09:50:41 +02:00
parent b217bf3784
commit 3208b22849
8 changed files with 122 additions and 111 deletions

View File

@ -26,11 +26,12 @@ from .message import Message
from .message_entity import MessageEntity
from .messages import Messages
from .photo import Photo
from .photo_size import PhotoSize
from .poll import Poll
from .poll_option import PollOption
from .sticker import Sticker
from .user_profile_photos import UserProfilePhotos
from .stripped_thumbnail import StrippedThumbnail
from .thumbnail import Thumbnail
from .photos import Photos
from .venue import Venue
from .video import Video
from .video_note import VideoNote
@ -38,5 +39,5 @@ from .voice import Voice
__all__ = [
"Animation", "Audio", "Contact", "Document", "Game", "Location", "Message", "MessageEntity", "Messages", "Photo",
"PhotoSize", "Poll", "PollOption", "Sticker", "UserProfilePhotos", "Venue", "Video", "VideoNote", "Voice"
"Thumbnail", "StrippedThumbnail", "Poll", "PollOption", "Sticker", "Photos", "Venue", "Video", "VideoNote", "Voice"
]

View File

@ -17,10 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from struct import pack
from typing import List
import pyrogram
from pyrogram.api import types
from .photo_size import PhotoSize
from .thumbnail import Thumbnail
from ..pyrogram_type import PyrogramType
from ...ext.utils import encode
@ -41,9 +42,6 @@ class Animation(PyrogramType):
duration (``int``):
Duration of the animation in seconds as defined by sender.
thumb (:obj:`PhotoSize <pyrogram.PhotoSize>`, *optional*):
Animation thumbnail.
file_name (``str``, *optional*):
Animation file name.
@ -55,9 +53,12 @@ class Animation(PyrogramType):
date (``int``, *optional*):
Date the animation was sent in Unix time.
thumbnails (List of :obj:`Thumbnail`, *optional*):
Animation thumbnails.
"""
__slots__ = ["file_id", "thumb", "file_name", "mime_type", "file_size", "date", "width", "height", "duration"]
__slots__ = ["file_id", "file_name", "mime_type", "file_size", "date", "width", "height", "duration", "thumbnails"]
def __init__(
self,
@ -67,16 +68,15 @@ class Animation(PyrogramType):
width: int,
height: int,
duration: int,
thumb: PhotoSize = None,
file_name: str = None,
mime_type: str = None,
file_size: int = None,
date: int = None
date: int = None,
thumbnails: List[Thumbnail] = None,
):
super().__init__(client)
self.file_id = file_id
self.thumb = thumb
self.file_name = file_name
self.mime_type = mime_type
self.file_size = file_size
@ -84,10 +84,15 @@ class Animation(PyrogramType):
self.width = width
self.height = height
self.duration = duration
self.thumbnails = thumbnails
@staticmethod
def _parse(client, animation: types.Document, video_attributes: types.DocumentAttributeVideo,
file_name: str) -> "Animation":
def _parse(
client,
animation: types.Document,
video_attributes: types.DocumentAttributeVideo,
file_name: str
) -> "Animation":
return Animation(
file_id=encode(
pack(
@ -101,10 +106,10 @@ class Animation(PyrogramType):
width=getattr(video_attributes, "w", 0),
height=getattr(video_attributes, "h", 0),
duration=getattr(video_attributes, "duration", 0),
thumb=PhotoSize._parse(client, animation.thumbs),
mime_type=animation.mime_type,
file_size=animation.size,
file_name=file_name,
date=animation.date,
thumbnails=Thumbnail._parse(client, animation),
client=client
)

View File

@ -17,10 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from struct import pack
from typing import List
import pyrogram
from pyrogram.api import types
from .photo_size import PhotoSize
from .thumbnail import Thumbnail
from ..pyrogram_type import PyrogramType
from ...ext.utils import encode
@ -35,9 +36,6 @@ class Audio(PyrogramType):
duration (``int``):
Duration of the audio in seconds as defined by sender.
thumb (:obj:`PhotoSize`, *optional*):
Thumbnail of the music file album cover.
file_name (``str``, *optional*):
Audio file name.
@ -55,9 +53,14 @@ class Audio(PyrogramType):
title (``str``, *optional*):
Title of the audio as defined by sender or by audio tags.
thumbnails (List of :obj:`Thumbnail`, *optional*):
Thumbnails of the music file album cover.
"""
__slots__ = ["file_id", "thumb", "file_name", "mime_type", "file_size", "date", "duration", "performer", "title"]
__slots__ = [
"file_id", "file_name", "mime_type", "file_size", "date", "duration", "performer", "title", "thumbnails"
]
def __init__(
self,
@ -65,18 +68,17 @@ class Audio(PyrogramType):
client: "pyrogram.BaseClient" = None,
file_id: str,
duration: int,
thumb: PhotoSize = None,
file_name: str = None,
mime_type: str = None,
file_size: int = None,
date: int = None,
performer: str = None,
title: str = None
title: str = None,
thumbnails: List[Thumbnail] = None,
):
super().__init__(client)
self.file_id = file_id
self.thumb = thumb
self.file_name = file_name
self.mime_type = mime_type
self.file_size = file_size
@ -84,10 +86,15 @@ class Audio(PyrogramType):
self.duration = duration
self.performer = performer
self.title = title
self.thumbnails = thumbnails
@staticmethod
def _parse(client, audio: types.Document, audio_attributes: types.DocumentAttributeAudio,
file_name: str) -> "Audio":
def _parse(
client,
audio: types.Document,
audio_attributes: types.DocumentAttributeAudio,
file_name: str
) -> "Audio":
return Audio(
file_id=encode(
pack(
@ -103,8 +110,8 @@ class Audio(PyrogramType):
title=audio_attributes.title,
mime_type=audio.mime_type,
file_size=audio.size,
thumb=PhotoSize._parse(client, audio.thumbs),
file_name=file_name,
date=audio.date,
thumbnails=Thumbnail._parse(client, audio),
client=client
)

View File

@ -17,10 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from struct import pack
from typing import List
import pyrogram
from pyrogram.api import types
from .photo_size import PhotoSize
from .thumbnail import Thumbnail
from ..pyrogram_type import PyrogramType
from ...ext.utils import encode
@ -32,9 +33,6 @@ class Document(PyrogramType):
file_id (``str``):
Unique file identifier.
thumb (:obj:`PhotoSize`, *optional*):
Document thumbnail as defined by sender.
file_name (``str``, *optional*):
Original filename as defined by sender.
@ -46,29 +44,32 @@ class Document(PyrogramType):
date (``int``, *optional*):
Date the document was sent in Unix time.
thumbnails (List of :obj:`Thumbnail`, *optional*):
Document thumbnails as defined by sender.
"""
__slots__ = ["file_id", "thumb", "file_name", "mime_type", "file_size", "date"]
__slots__ = ["file_id", "file_name", "mime_type", "file_size", "date", "thumbnails"]
def __init__(
self,
*,
client: "pyrogram.BaseClient" = None,
file_id: str,
thumb: PhotoSize = None,
file_name: str = None,
mime_type: str = None,
file_size: int = None,
date: int = None
date: int = None,
thumbnails: List[Thumbnail] = None,
):
super().__init__(client)
self.file_id = file_id
self.thumb = thumb
self.file_name = file_name
self.mime_type = mime_type
self.file_size = file_size
self.date = date
self.date = date,
self.thumbnails = thumbnails
@staticmethod
def _parse(client, document: types.Document, file_name: str) -> "Document":
@ -82,10 +83,10 @@ class Document(PyrogramType):
document.access_hash
)
),
thumb=PhotoSize._parse(client, document.thumbs),
file_name=file_name,
mime_type=document.mime_type,
file_size=document.size,
date=document.date,
thumbnails=Thumbnail._parse(client, document),
client=client
)

View File

@ -16,13 +16,12 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from base64 import b64encode
from struct import pack
from typing import List
import pyrogram
from pyrogram.api import types
from .photo_size import PhotoSize
from .thumbnail import Thumbnail
from ..pyrogram_type import PyrogramType
from ...ext.utils import encode
@ -31,74 +30,65 @@ class Photo(PyrogramType):
"""A Photo.
Parameters:
id (``str``):
file_id (``str``):
Unique identifier for this photo.
width (``int``):
Photo width.
height (``int``):
Photo height.
file_size (``int``):
File size.
date (``int``):
Date the photo was sent in Unix time.
sizes (List of :obj:`PhotoSize`):
thumbnails (List of :obj:`Thumbnail`):
Available sizes of this photo.
"""
__slots__ = ["id", "date", "sizes"]
__slots__ = ["file_id", "width", "height", "file_size", "date", "thumbnails"]
def __init__(
self,
*,
client: "pyrogram.BaseClient" = None,
id: str,
file_id: str,
width: int,
height: int,
file_size: int,
date: int,
sizes: List[PhotoSize]
thumbnails: List[Thumbnail]
):
super().__init__(client)
self.id = id
self.file_id = file_id
self.width = width
self.height = height
self.file_size = file_size
self.date = date
self.sizes = sizes
self.thumbnails = thumbnails
@staticmethod
def _parse(client, photo: types.Photo):
def _parse(client, photo: types.Photo) -> "Photo":
if isinstance(photo, types.Photo):
raw_sizes = photo.sizes
sizes = []
for raw_size in raw_sizes:
if isinstance(raw_size, (types.PhotoSize, types.PhotoCachedSize)):
if isinstance(raw_size, types.PhotoSize):
file_size = raw_size.size
elif isinstance(raw_size, types.PhotoCachedSize):
file_size = len(raw_size.bytes)
else:
file_size = 0
loc = raw_size.location
if isinstance(loc, types.FileLocation):
size = PhotoSize(
file_id=encode(
pack(
"<iiqqqqi",
2, loc.dc_id, photo.id, photo.access_hash,
loc.volume_id, loc.secret, loc.local_id)),
width=raw_size.w,
height=raw_size.h,
file_size=file_size,
client=client
)
sizes.append(size)
big = photo.sizes[-1]
return Photo(
id=b64encode(
file_id=encode(
pack(
"<qq",
photo.id,
photo.access_hash
"<iiqqc",
2, photo.dc_id,
photo.id, photo.access_hash,
big.type.encode()
)
),
b"-_"
).decode().rstrip("="),
width=big.w,
height=big.h,
file_size=big.size,
date=photo.date,
sizes=sizes,
thumbnails=Thumbnail._parse(client, photo),
client=client
)

View File

@ -18,11 +18,12 @@
from functools import lru_cache
from struct import pack
from typing import List
import pyrogram
from pyrogram.api import types, functions
from pyrogram.errors import StickersetInvalid
from .photo_size import PhotoSize
from .thumbnail import Thumbnail
from ..pyrogram_type import PyrogramType
from ...ext.utils import encode
@ -40,9 +41,6 @@ class Sticker(PyrogramType):
height (``int``):
Sticker height.
thumb (:obj:`PhotoSize`, *optional*):
Sticker thumbnail in the .webp or .jpg format.
file_name (``str``, *optional*):
Sticker file name.
@ -60,12 +58,15 @@ class Sticker(PyrogramType):
set_name (``str``, *optional*):
Name of the sticker set to which the sticker belongs.
thumbnails (List of :obj:`Thumbnail`, *optional*):
Sticker thumbnails in the .webp or .jpg format.
"""
# TODO: Add mask position
__slots__ = [
"file_id", "thumb", "file_name", "mime_type", "file_size", "date", "width", "height", "emoji", "set_name"
"file_id", "file_name", "mime_type", "file_size", "date", "width", "height", "emoji", "set_name", "thumbnails"
]
def __init__(
@ -75,18 +76,17 @@ class Sticker(PyrogramType):
file_id: str,
width: int,
height: int,
thumb: PhotoSize = None,
file_name: str = None,
mime_type: str = None,
file_size: int = None,
date: int = None,
emoji: str = None,
set_name: str = None
set_name: str = None,
thumbnails: List[Thumbnail] = None
):
super().__init__(client)
self.file_id = file_id
self.thumb = thumb
self.file_name = file_name
self.mime_type = mime_type
self.file_size = file_size
@ -94,7 +94,8 @@ class Sticker(PyrogramType):
self.width = width
self.height = height
self.emoji = emoji
self.set_name = set_name
self.set_name = set_name,
self.thumbnails = thumbnails
# self.mask_position = mask_position
@staticmethod
@ -135,7 +136,6 @@ class Sticker(PyrogramType):
),
width=image_size_attributes.w if image_size_attributes else 0,
height=image_size_attributes.h if image_size_attributes else 0,
thumb=PhotoSize._parse(client, sticker.thumbs),
# TODO: mask_position
set_name=set_name,
emoji=sticker_attributes.alt or None,
@ -143,5 +143,6 @@ class Sticker(PyrogramType):
mime_type=sticker.mime_type,
file_name=file_name,
date=sticker.date,
thumbnails=Thumbnail._parse(client, sticker),
client=client
)

View File

@ -17,10 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from struct import pack
from typing import List
import pyrogram
from pyrogram.api import types
from .photo_size import PhotoSize
from .thumbnail import Thumbnail
from ..pyrogram_type import PyrogramType
from ...ext.utils import encode
@ -41,9 +42,6 @@ class Video(PyrogramType):
duration (``int``):
Duration of the video in seconds as defined by sender.
thumb (:obj:`PhotoSize`, *optional*):
Video thumbnail.
file_name (``str``, *optional*):
Video file name.
@ -58,11 +56,14 @@ class Video(PyrogramType):
date (``int``, *optional*):
Date the video was sent in Unix time.
thumbnails (List of :obj:`Thumbnail`, *optional*):
Video thumbnails.
"""
__slots__ = [
"file_id", "width", "height", "duration", "thumb", "file_name", "mime_type", "supports_streaming", "file_size",
"date"
"file_id", "width", "height", "duration", "file_name", "mime_type", "supports_streaming", "file_size", "date",
"thumbnails"
]
def __init__(
@ -73,12 +74,12 @@ class Video(PyrogramType):
width: int,
height: int,
duration: int,
thumb: PhotoSize = None,
file_name: str = None,
mime_type: str = None,
supports_streaming: bool = None,
file_size: int = None,
date: int = None
date: int = None,
thumbnails: List[Thumbnail] = None
):
super().__init__(client)
@ -86,16 +87,20 @@ class Video(PyrogramType):
self.width = width
self.height = height
self.duration = duration
self.thumb = thumb
self.file_name = file_name
self.mime_type = mime_type
self.supports_streaming = supports_streaming
self.file_size = file_size
self.date = date
self.thumbnails = thumbnails
@staticmethod
def _parse(client, video: types.Document, video_attributes: types.DocumentAttributeVideo,
file_name: str) -> "Video":
def _parse(
client,
video: types.Document,
video_attributes: types.DocumentAttributeVideo,
file_name: str
) -> "Video":
return Video(
file_id=encode(
pack(
@ -109,11 +114,11 @@ class Video(PyrogramType):
width=video_attributes.w,
height=video_attributes.h,
duration=video_attributes.duration,
thumb=PhotoSize._parse(client, video.thumbs),
file_name=file_name,
mime_type=video.mime_type,
supports_streaming=video_attributes.supports_streaming,
file_size=video.size,
date=video.date,
thumbnails=Thumbnail._parse(client, video),
client=client
)

View File

@ -17,10 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from struct import pack
from typing import List
import pyrogram
from pyrogram.api import types
from .photo_size import PhotoSize
from .thumbnail import Thumbnail
from ..pyrogram_type import PyrogramType
from ...ext.utils import encode
@ -38,9 +39,6 @@ class VideoNote(PyrogramType):
duration (``int``):
Duration of the video in seconds as defined by sender.
thumb (:obj:`PhotoSize`, *optional*):
Video thumbnail.
mime_type (``str``, *optional*):
MIME type of the file as defined by sender.
@ -49,9 +47,12 @@ class VideoNote(PyrogramType):
date (``int``, *optional*):
Date the video note was sent in Unix time.
thumbnails (List of :obj:`Thumbnail`, *optional*):
Video thumbnails.
"""
__slots__ = ["file_id", "thumb", "mime_type", "file_size", "date", "length", "duration"]
__slots__ = ["file_id", "mime_type", "file_size", "date", "length", "duration", "thumbnails"]
def __init__(
self,
@ -60,7 +61,7 @@ class VideoNote(PyrogramType):
file_id: str,
length: int,
duration: int,
thumb: PhotoSize = None,
thumbnails: List[Thumbnail] = None,
mime_type: str = None,
file_size: int = None,
date: int = None
@ -68,12 +69,12 @@ class VideoNote(PyrogramType):
super().__init__(client)
self.file_id = file_id
self.thumb = thumb
self.mime_type = mime_type
self.file_size = file_size
self.date = date
self.length = length
self.duration = duration
self.thumbnails = thumbnails
@staticmethod
def _parse(client, video_note: types.Document, video_attributes: types.DocumentAttributeVideo) -> "VideoNote":
@ -89,9 +90,9 @@ class VideoNote(PyrogramType):
),
length=video_attributes.w,
duration=video_attributes.duration,
thumb=PhotoSize._parse(client, video_note.thumbs),
file_size=video_note.size,
mime_type=video_note.mime_type,
date=video_note.date,
thumbnails=Thumbnail._parse(client, video_note),
client=client
)