91 lines
2.7 KiB
Python
91 lines
2.7 KiB
Python
import json
|
|
import math
|
|
import os
|
|
import time
|
|
|
|
FINISHED_PROGRESS_STR = "█"
|
|
UN_FINISHED_PROGRESS_STR = ""
|
|
DOWNLOAD_LOCATION = "/app"
|
|
|
|
|
|
async def progress_for_pyrogram(
|
|
current,
|
|
total,
|
|
bot,
|
|
ud_type,
|
|
message,
|
|
start
|
|
):
|
|
now = time.time()
|
|
diff = now - start
|
|
if round(diff % 10.00) == 0 or current == total:
|
|
percentage = current * 100 / total
|
|
status = DOWNLOAD_LOCATION + "/status.json"
|
|
if os.path.exists(status):
|
|
with open(status, 'r+') as f:
|
|
statusMsg = json.load(f)
|
|
if not statusMsg["running"]:
|
|
bot.stop_transmission()
|
|
speed = current / diff
|
|
elapsed_time = round(diff) * 1000
|
|
time_to_completion = round((total - current) / speed) * 1000
|
|
estimated_total_time = elapsed_time + time_to_completion
|
|
|
|
elapsed_time = TimeFormatter(milliseconds=elapsed_time)
|
|
estimated_total_time = TimeFormatter(milliseconds=estimated_total_time)
|
|
|
|
progress = "**[{0}{1}]** `| {2}%`\n\n".format(
|
|
''.join([FINISHED_PROGRESS_STR for i in range(
|
|
math.floor(percentage / 10))]),
|
|
''.join([UN_FINISHED_PROGRESS_STR for i in range(
|
|
10 - math.floor(percentage / 10))]),
|
|
round(percentage, 2))
|
|
|
|
tmp = progress + "GROSSS: {0} of {1}\n\nSpeed: {2}/s\n\nETA: {3}\n".format(
|
|
humanbytes(current),
|
|
humanbytes(total),
|
|
humanbytes(speed),
|
|
estimated_total_time if estimated_total_time != '' else "0 s"
|
|
)
|
|
try:
|
|
if not message.photo:
|
|
await message.edit_text(
|
|
text="{}\n {}".format(
|
|
ud_type,
|
|
tmp
|
|
)
|
|
)
|
|
else:
|
|
await message.edit_caption(
|
|
caption="{}\n {}".format(
|
|
ud_type,
|
|
tmp
|
|
)
|
|
)
|
|
except:
|
|
pass
|
|
|
|
|
|
def humanbytes(size):
|
|
if not size:
|
|
return ""
|
|
power = 2**10
|
|
n = 0
|
|
Dic_powerN = {0: ' ', 1: 'Ki', 2: 'Mi', 3: 'Gi', 4: 'Ti'}
|
|
while size > power:
|
|
size /= power
|
|
n += 1
|
|
return str(round(size, 2)) + " " + Dic_powerN[n] + 'B'
|
|
|
|
|
|
def TimeFormatter(milliseconds: int) -> str:
|
|
seconds, milliseconds = divmod(int(milliseconds), 1000)
|
|
minutes, seconds = divmod(seconds, 60)
|
|
hours, minutes = divmod(minutes, 60)
|
|
days, hours = divmod(hours, 24)
|
|
tmp = ((str(days) + "d, ") if days else "") + \
|
|
((str(hours) + "h, ") if hours else "") + \
|
|
((str(minutes) + "m, ") if minutes else "") + \
|
|
((str(seconds) + "s, ") if seconds else "")
|
|
return tmp[:-2]
|