Final version
This commit is contained in:
90
progress.py
Normal file
90
progress.py
Normal file
@@ -0,0 +1,90 @@
|
||||
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]
|
||||
Reference in New Issue
Block a user