patch 6493c04f9d8bdb7b1d2c037fdd66c337a7a91af5
Author: E. Bosch <presidev@AT@gmail.com>
Date: Sun May 31 00:26:34 CEST 2026
* utils: Modify sanitize_filename(): convert invalid chars to hex representation,
this makes the filenames deterministic for the same session,
and helps to not download a file more than once
hunk ./utils.py 21
-FILENAME_INVALID_CHARS = re.compile('[/{}<>()"\'\\|&#%?]')
+FILENAME_INVALID_CHARS = re.compile('[\0-\x1F/{}<>"\'\\|*&#%?\x7F]')
hunk ./utils.py 90
- cn = str(sanitize_filename.cn)
- new_fn, ns = FILENAME_INVALID_CHARS.subn(cn, fn)
- if ns:
- sanitize_filename.cn += 1
- return new_fn.strip('-').replace(' ','_')
-sanitize_filename.cn = 0
+ def hexize(m):
+ return '-{:x}-'.format(ord(m.group(0)))
+
+ new_fn = FILENAME_INVALID_CHARS.sub(hexize, fn)
+ return new_fn.lstrip('-').replace(' ','_')
patch dd18dbebc3877faa7fe1c7f1257fb3a4048aab32
Author: E. Bosch <presidev@AT@gmail.com>
Date: Sat May 30 22:25:32 CEST 2026
* utils: In add_filename() don't put a final dot if there is no extension in the filename
hunk ./utils.py 101
+ last_dot = '.'
hunk ./utils.py 106
- return '{}-{}.{}'.format(name, add, ext)
+ last_dot = ''
+ return '{}-{}{}{}'.format(name, add, last_dot, ext)
patch feebc9eac596c484be6e5f67934196e64d52beeb
Author: E. Bosch <presidev@AT@gmail.com>
Date: Sat May 30 21:33:57 CEST 2026
* telegram: Refactor download media routine
optimized to download files only once
utils: Add session tokens for unnamed files
hunk ./telegram.py 26
-from utils import get_highlighted, fix_braces, format_timestamp, pretty, current_date
+from utils import get_highlighted, fix_braces, format_timestamp, pretty, current_date, token
hunk ./telegram.py 47
+ if self.media_url[-1:] != '/':
+ self.media_url += '/'
hunk ./telegram.py 64
- self.media_cn = 0
+ self.token = token('+0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz')
+ self.filename_token = self.token.gen_token(5)
hunk ./telegram.py 1034
- idd_file = add_filename(filename, mid)
- new_file = sanitize_filename(idd_file)
- new_path = os.path.join(self.telegram_media_dir, new_file)
- if os.path.exists(new_path):
- local_path = new_path
+ aux_file = filename
+ else:
+ if hasattr(message, 'file') and message.file is not None:
+ aux_file = self.filename_token + message.file.ext
hunk ./telegram.py 1039
- await self.notice_downloading(size, relay_attr)
- local_path = await message.download_media(new_path)
- if not local_path: return ''
+ aux_file = self.filename_token
+
+ idd_file = add_filename(aux_file, mid)
+ new_file = sanitize_filename(idd_file)
+ new_path = os.path.join(self.telegram_media_dir, new_file)
+ if os.path.exists(new_path) and (size == 0 or size == os.path.getsize(new_path)):
+ local_path = new_path
hunk ./telegram.py 1048
- local_path = await message.download_media(self.telegram_media_dir)
+ local_path = await message.download_media(new_path)
hunk ./telegram.py 1050
- filetype = os.path.splitext(local_path)[1]
- gen_file = str(self.media_cn) + filetype
- idd_file = add_filename(gen_file, mid)
- new_file = sanitize_filename(idd_file)
- self.media_cn += 1
- new_path = os.path.join(self.telegram_media_dir, new_file)
hunk ./telegram.py 1053
- if self.media_url[-1:] != '/':
- self.media_url += '/'
hunk ./utils.py 17
+import random
hunk ./utils.py 244
+
+class token:
+ def __init__(self, alpha):
+ self.alpha = alpha
+ self.long_alpha = len(alpha)
+
+ def gen_token(self, long_token):
+ if long_token == 1:
+ return self.alpha[random.randrange(self.long_alpha)]
+ else:
+ aux = self.gen_token(long_token - 1)
+ return aux + self.alpha[random.randrange(self.long_alpha)]