mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-01-24 00:04:14 +03:00
Fix uploaded files cache may have expired
This commit is contained in:
parent
00859d52c3
commit
494c90af69
|
@ -571,6 +571,7 @@ class TelegramBareClient:
|
|||
file,
|
||||
part_size_kb=None,
|
||||
file_name=None,
|
||||
allow_cache=True,
|
||||
progress_callback=None):
|
||||
"""Uploads the specified file and returns a handle (an instance
|
||||
of InputFile or InputFileBig, as required) which can be later used.
|
||||
|
@ -633,10 +634,12 @@ class TelegramBareClient:
|
|||
file = stream.read()
|
||||
hash_md5 = md5(file)
|
||||
tuple_ = self.session.get_file(hash_md5.digest(), file_size)
|
||||
if tuple_:
|
||||
if tuple_ and allow_cache:
|
||||
__log__.info('File was already cached, not uploading again')
|
||||
return InputFile(name=file_name,
|
||||
md5_checksum=tuple_[0], id=tuple_[2], parts=tuple_[3])
|
||||
elif tuple_ and not allow_cache:
|
||||
self.session.clear_file(hash_md5.digest(), file_size)
|
||||
else:
|
||||
hash_md5 = None
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ from . import helpers, utils
|
|||
from .errors import (
|
||||
RPCError, UnauthorizedError, PhoneCodeEmptyError, PhoneCodeExpiredError,
|
||||
PhoneCodeHashEmptyError, PhoneCodeInvalidError, LocationInvalidError,
|
||||
SessionPasswordNeededError)
|
||||
SessionPasswordNeededError, FilePartMissingError)
|
||||
from .network import ConnectionMode
|
||||
from .tl import TLObject
|
||||
from .tl.custom import Draft, Dialog
|
||||
|
@ -813,6 +813,7 @@ class TelegramClient(TelegramBareClient):
|
|||
reply_to=None,
|
||||
attributes=None,
|
||||
thumb=None,
|
||||
allow_cache=True,
|
||||
**kwargs):
|
||||
"""
|
||||
Sends a file to the specified entity.
|
||||
|
@ -849,9 +850,13 @@ class TelegramClient(TelegramBareClient):
|
|||
Optional attributes that override the inferred ones, like
|
||||
``DocumentAttributeFilename`` and so on.
|
||||
|
||||
thumb (:obj:`str` | :obj:`bytes` | :obj:`file`):
|
||||
thumb (:obj:`str` | :obj:`bytes` | :obj:`file`, optional):
|
||||
Optional thumbnail (for videos).
|
||||
|
||||
allow_cache (:obj:`bool`, optional):
|
||||
Whether to allow using the cached version stored in the
|
||||
database or not. Defaults to ``True`` to avoid reuploads.
|
||||
|
||||
Kwargs:
|
||||
If "is_voice_note" in kwargs, despite its value, and the file is
|
||||
sent as a document, it will be sent as a voice note.
|
||||
|
@ -868,7 +873,7 @@ class TelegramClient(TelegramBareClient):
|
|||
)
|
||||
|
||||
file_handle = self.upload_file(
|
||||
file, progress_callback=progress_callback)
|
||||
file, progress_callback=progress_callback, allow_cache=allow_cache)
|
||||
|
||||
if as_photo and not force_document:
|
||||
media = InputMediaUploadedPhoto(file_handle, caption)
|
||||
|
@ -926,9 +931,19 @@ class TelegramClient(TelegramBareClient):
|
|||
media=media,
|
||||
reply_to_msg_id=self._get_reply_to(reply_to)
|
||||
)
|
||||
result = self(request)
|
||||
|
||||
return self._get_response_message(request, result)
|
||||
try:
|
||||
return self._get_response_message(request, self(request))
|
||||
except FilePartMissingError:
|
||||
# After a while, cached files are invalidated and this
|
||||
# error is raised. The file needs to be uploaded again.
|
||||
if not allow_cache:
|
||||
raise
|
||||
return self.send_file(
|
||||
entity, file, allow_cache=False,
|
||||
caption=caption, force_document=force_document,
|
||||
progress_callback=progress_callback, reply_to=reply_to,
|
||||
attributes=attributes, thumb=thumb, **kwargs
|
||||
)
|
||||
|
||||
def send_voice_note(self, entity, file, caption='', upload_progress=None,
|
||||
reply_to=None):
|
||||
|
|
|
@ -433,3 +433,11 @@ class Session:
|
|||
(md5_digest, file_size, file_id, part_count)
|
||||
)
|
||||
self.save()
|
||||
|
||||
def clear_file(self, md5_digest, file_size):
|
||||
with self._db_lock:
|
||||
self._conn.execute(
|
||||
'delete from sent_files where '
|
||||
'md5_digest = ? and file_size = ?', (md5_digest, file_size)
|
||||
)
|
||||
self.save()
|
||||
|
|
Loading…
Reference in New Issue
Block a user