update 26.7.25

This commit is contained in:
kun
2026-07-25 02:31:18 +08:00
parent dd4babe65b
commit 41bc881f02
123 changed files with 24997 additions and 0 deletions
+122
View File
@@ -0,0 +1,122 @@
"""Download Stat"""
import asyncio
import time
from enum import Enum
from pyrogram import Client
from module.app import TaskNode
class DownloadState(Enum):
"""Download state"""
Downloading = 1
StopDownload = 2
_download_result: dict = {}
_total_download_speed: int = 0
_total_download_size: int = 0
_last_download_time: float = time.time()
_download_state: DownloadState = DownloadState.Downloading
def get_download_result() -> dict:
"""get global download result"""
return _download_result
def get_total_download_speed() -> int:
"""get total download speed"""
return _total_download_speed
def get_download_state() -> DownloadState:
"""get download state"""
return _download_state
# pylint: disable = W0603
def set_download_state(state: DownloadState):
"""set download state"""
global _download_state
_download_state = state
async def update_download_status(
down_byte: int,
total_size: int,
message_id: int,
file_name: str,
start_time: float,
node: TaskNode,
client: Client,
):
"""update_download_status"""
cur_time = time.time()
# pylint: disable = W0603
global _total_download_speed
global _total_download_size
global _last_download_time
if node.is_stop_transmission:
client.stop_transmission()
chat_id = node.chat_id
while get_download_state() == DownloadState.StopDownload:
if node.is_stop_transmission:
client.stop_transmission()
await asyncio.sleep(1)
if not _download_result.get(chat_id):
_download_result[chat_id] = {}
if _download_result[chat_id].get(message_id):
last_download_byte = _download_result[chat_id][message_id]["down_byte"]
last_time = _download_result[chat_id][message_id]["end_time"]
download_speed = _download_result[chat_id][message_id]["download_speed"]
each_second_total_download = _download_result[chat_id][message_id][
"each_second_total_download"
]
end_time = _download_result[chat_id][message_id]["end_time"]
_total_download_size += down_byte - last_download_byte
each_second_total_download += down_byte - last_download_byte
if cur_time - last_time >= 1.0:
download_speed = int(each_second_total_download / (cur_time - last_time))
end_time = cur_time
each_second_total_download = 0
download_speed = max(download_speed, 0)
_download_result[chat_id][message_id]["down_byte"] = down_byte
_download_result[chat_id][message_id]["end_time"] = end_time
_download_result[chat_id][message_id]["download_speed"] = download_speed
_download_result[chat_id][message_id][
"each_second_total_download"
] = each_second_total_download
else:
each_second_total_download = down_byte
_download_result[chat_id][message_id] = {
"down_byte": down_byte,
"total_size": total_size,
"file_name": file_name,
"start_time": start_time,
"end_time": cur_time,
"download_speed": down_byte / (cur_time - start_time),
"each_second_total_download": each_second_total_download,
"task_id": node.task_id,
}
_total_download_size += down_byte
if cur_time - _last_download_time >= 1.0:
# update speed
_total_download_speed = int(
_total_download_size / (cur_time - _last_download_time)
)
_total_download_speed = max(_total_download_speed, 0)
_total_download_size = 0
_last_download_time = cur_time