import sys, os, time, asyncio
os.chdir("/var/www/html/filmbot/uploader/")
from telethon import TelegramClient
from telethon.tl.types import DocumentAttributeVideo
from hachoir.metadata import extractMetadata
from hachoir.parser import createParser
import glob

api_id = 816054
api_hash = '8ec9a6b89cb6dfe8ee859f6b26ae7011'
channel_id = -1001168634416
download_dir = "/var/www/html/filmbot/storage/films/3/*"

percents = {}

def progress(p1,p2,sid):
    sid = sid + 20
    global percents
    percent = int(p1 / p2 * 100)
    if sid not in percents:
        percents[sid] = 0
    if percents[sid]!=percent:
        percents[sid] = percent
        message = '{"file_'+str(sid)+'":'+str(percent)+'}'
        os.system("php /var/www/html/admin/artisan redis:publish '"+message+"'")
        print(message)

async def main():
    sended_files = 0
    thumb = await client.upload_file('/var/www/html/filmbot/uploader/thumb.jpg')
    while True:
        if sended_files>=9 :
            sys.exit()

        files = glob.glob(download_dir)
        files.sort(key=os.path.getmtime, reverse=False)

        if len(files) > 0 or len(files) == 1:
            sended_files = sended_files + 1
            i = 0
            videos = []
            video_list = []
            while i < 1:
                video = files[i]
                video_list.append(video)
                parser = createParser(video)
                metadata = extractMetadata(parser)
                attr = DocumentAttributeVideo((0, metadata.get('duration').seconds)[metadata.has('duration')], (0, metadata.get('width'))[metadata.has('width')], (0, metadata.get('height'))[metadata.has('height')], False, True)
                videos.append(client.send_file(
                    channel_id,
                    video,
                    supports_streaming=True,
                    thumb=thumb,
                    caption=files[i][38:],
                    progress_callback = lambda p1, p2, sid = i+1, **kw: progress(p1, p2, sid),
                    attributes=[attr])
                )
                i = i + 1
            await asyncio.gather(*videos)

            for video in video_list:
                os.remove(video)
        else:
            print('wait download')
            time.sleep(3)

with TelegramClient('account_3', api_id, api_hash) as client:
    client.loop.run_until_complete(main())
