Spaces:
Running
Running
File size: 2,464 Bytes
89e33ed 2fe1440 89e33ed 2fe1440 89e33ed 2fe1440 0dce97e 2fe1440 e7261d3 2fe1440 89e33ed 2fe1440 89e33ed 2fe1440 89e33ed 2fe1440 89e33ed 0dce97e 89e33ed 2fe1440 89e33ed 2fe1440 89e33ed 2fe1440 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | # Thunder/utils/render_template.py
import asyncio
import urllib.parse
from jinja2 import Environment, FileSystemLoader, select_autoescape
from pyrogram.errors import FloodWait
from Thunder.bot import StreamBot
from Thunder.server.exceptions import InvalidHash
from Thunder.utils.file_properties import get_fname, get_uniqid
from Thunder.utils.logger import logger
from Thunder.vars import Var
template_env = Environment(
loader=FileSystemLoader('Thunder/template'),
autoescape=select_autoescape(enabled_extensions=("html",), default_for_string=True),
enable_async=True,
cache_size=200,
auto_reload=False,
optimized=True
)
async def render_media_page(file_name: str, src: str, requested_action: str | None = None) -> str:
# NOTE: src must be a pre-encoded URL. Templates use |safe to avoid double-encoding.
if requested_action == 'stream':
template = template_env.get_template('req.html')
context = {
'heading': f"View {file_name}",
'file_name': file_name,
'src': f"{src}?disposition=inline"
}
else:
template = template_env.get_template('dl.html')
context = {
'file_name': file_name,
'src': src
}
return await template.render_async(**context)
async def render_page(message_id: int, secure_hash: str, requested_action: str | None = None) -> str:
try:
try:
message = await StreamBot.get_messages(chat_id=int(Var.BIN_CHANNEL), message_ids=message_id)
except FloodWait as e:
await asyncio.sleep(e.value)
message = await StreamBot.get_messages(chat_id=int(Var.BIN_CHANNEL), message_ids=message_id)
if not message:
raise InvalidHash("Message not found")
file_unique_id = get_uniqid(message)
file_name = get_fname(message)
if not file_unique_id or file_unique_id[:6] != secure_hash:
raise InvalidHash("File unique ID or secure hash mismatch during rendering.")
quoted_filename = urllib.parse.quote(file_name.replace('/', '_'), safe="")
src = urllib.parse.urljoin(Var.URL, f'{secure_hash}{message_id}/{quoted_filename}')
return await render_media_page(file_name, src, requested_action)
except Exception as e:
logger.error(
f"Error in render_page for message_id {message_id} and hash {secure_hash}: {e}",
exc_info=True
)
raise
|