Implement tar-mirror invoked by /tarmirror
Signed-off-by: lzzy12 <jhashivam2020@gmail.com>
This commit is contained in:
parent
d36ba18a9f
commit
80388249c5
|
|
@ -6,7 +6,7 @@ import time
|
||||||
from bot.helper.telegram_helper.message_utils import *
|
from bot.helper.telegram_helper.message_utils import *
|
||||||
import shutil
|
import shutil
|
||||||
from .helper.telegram_helper.filters import CustomFilters
|
from .helper.telegram_helper.filters import CustomFilters
|
||||||
from .modules import *
|
from .modules import authorize, list, cancel_mirror, mirror_status, mirror
|
||||||
|
|
||||||
|
|
||||||
@run_async
|
@run_async
|
||||||
|
|
@ -43,11 +43,18 @@ def bot_help(update, context):
|
||||||
|
|
||||||
/mirror [download_url][magnet_link]: Start mirroring the link to google drive
|
/mirror [download_url][magnet_link]: Start mirroring the link to google drive
|
||||||
|
|
||||||
|
/tarmirror [download_url][magnet_link]: start mirroring and upload the archived (.tar) version of the download
|
||||||
|
|
||||||
/cancel: Reply to the message by which the download was initiated and that download will be cancelled
|
/cancel: Reply to the message by which the download was initiated and that download will be cancelled
|
||||||
|
|
||||||
/status: Shows a status of all the downloads
|
/status: Shows a status of all the downloads
|
||||||
|
|
||||||
/list [search term]: Searches the search term in the Google drive, if found replies with the link'''
|
/list [search term]: Searches the search term in the Google drive, if found replies with the link
|
||||||
|
|
||||||
|
/disk: Show a status of the disk usage of the machine the bot is hosted on
|
||||||
|
|
||||||
|
/authorize: Authorize a chat or a user to use the bot (Can only be invoked by owner of the bot)
|
||||||
|
'''
|
||||||
sendMessage(help_string, context, update)
|
sendMessage(help_string, context, update)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -84,5 +84,5 @@ def get_readable_message(progress_list: list = download_dict.values()):
|
||||||
f'<code>{get_progress_bar_string(status)}</code> {status.progress()} of {status.size()}\n' \
|
f'<code>{get_progress_bar_string(status)}</code> {status.progress()} of {status.size()}\n' \
|
||||||
f'<b>Speed:</b> {status.speed()}\n' \
|
f'<b>Speed:</b> {status.speed()}\n' \
|
||||||
f'<b>ETA:</b> {status.eta()}\n'
|
f'<b>ETA:</b> {status.eta()}\n'
|
||||||
LOGGER.info(msg)
|
# LOGGER.info(msg)
|
||||||
return msg
|
return msg
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,9 @@ def exit_clean_up(signal, frame):
|
||||||
def tar(orig_path: str):
|
def tar(orig_path: str):
|
||||||
path = pathlib.PurePath(orig_path)
|
path = pathlib.PurePath(orig_path)
|
||||||
base = path.name
|
base = path.name
|
||||||
root = path.parent.name
|
root = pathlib.Path(path.parent.as_posix()).absolute().as_posix()
|
||||||
shutil.make_archive(base_name=orig_path, format='tar', root_dir=root, base_dir=base)
|
LOGGER.info(f'Tar: orig_path: {orig_path}, base: {base}, root: {root}')
|
||||||
|
return shutil.make_archive(orig_path, 'tar', root, base)
|
||||||
|
|
||||||
|
|
||||||
def get_mime_type(file_path):
|
def get_mime_type(file_path):
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ def get_download(gid):
|
||||||
class DownloadStatus:
|
class DownloadStatus:
|
||||||
|
|
||||||
def __init__(self, gid, message_id):
|
def __init__(self, gid, message_id):
|
||||||
|
self.upload_name = None
|
||||||
self.__gid = gid
|
self.__gid = gid
|
||||||
self.__download = get_download(gid)
|
self.__download = get_download(gid)
|
||||||
self.__uid = message_id
|
self.__uid = message_id
|
||||||
|
|
@ -55,6 +56,8 @@ class DownloadStatus:
|
||||||
return self.__download.download_speed_string()
|
return self.__download.download_speed_string()
|
||||||
|
|
||||||
def name(self):
|
def name(self):
|
||||||
|
if self.upload_name is not None:
|
||||||
|
return self.upload_name
|
||||||
return self.__download.name
|
return self.__download.name
|
||||||
|
|
||||||
def path(self):
|
def path(self):
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,19 @@
|
||||||
from telegram.ext import CommandHandler, run_async
|
from telegram.ext import CommandHandler, run_async
|
||||||
from telegram.error import BadRequest
|
from telegram.error import BadRequest
|
||||||
from bot.helper.mirror_utils import download_tools, gdriveTools, listeners
|
from bot.helper.mirror_utils import download_tools, gdriveTools, listeners
|
||||||
from bot import LOGGER, dispatcher
|
from bot import LOGGER, dispatcher, DOWNLOAD_DIR
|
||||||
from bot.helper.ext_utils import fs_utils
|
from bot.helper.ext_utils import fs_utils
|
||||||
from bot import download_dict, status_reply_dict, status_reply_dict_lock, download_dict_lock
|
from bot import download_dict, status_reply_dict, status_reply_dict_lock, download_dict_lock
|
||||||
from bot.helper.telegram_helper.message_utils import *
|
from bot.helper.telegram_helper.message_utils import *
|
||||||
from bot.helper.ext_utils.bot_utils import get_readable_message, MirrorStatus
|
from bot.helper.ext_utils.bot_utils import get_readable_message, MirrorStatus
|
||||||
from bot.helper.ext_utils.exceptions import KillThreadException
|
from bot.helper.ext_utils.exceptions import KillThreadException
|
||||||
from bot.helper.telegram_helper.filters import CustomFilters
|
from bot.helper.telegram_helper.filters import CustomFilters
|
||||||
|
import pathlib
|
||||||
|
|
||||||
class MirrorListener(listeners.MirrorListeners):
|
class MirrorListener(listeners.MirrorListeners):
|
||||||
def __init__(self, context, update, reply_message):
|
def __init__(self, context, update, reply_message, isTar=False):
|
||||||
super().__init__(context, update, reply_message)
|
super().__init__(context, update, reply_message)
|
||||||
|
self.isTar = isTar
|
||||||
|
|
||||||
def onDownloadStarted(self, link):
|
def onDownloadStarted(self, link):
|
||||||
LOGGER.info("Adding link: " + link)
|
LOGGER.info("Adding link: " + link)
|
||||||
|
|
@ -28,8 +30,14 @@ class MirrorListener(listeners.MirrorListeners):
|
||||||
|
|
||||||
def onDownloadComplete(self, progress_status_list, index: int):
|
def onDownloadComplete(self, progress_status_list, index: int):
|
||||||
LOGGER.info(f"Download completed: {progress_status_list[index].name()}")
|
LOGGER.info(f"Download completed: {progress_status_list[index].name()}")
|
||||||
|
if self.isTar:
|
||||||
|
path = fs_utils.tar(f'{DOWNLOAD_DIR}{self.uid}/{progress_status_list[index].name()}')
|
||||||
|
else:
|
||||||
|
path = f'{DOWNLOAD_DIR}{self.uid}/{progress_status_list[index].name()}'
|
||||||
|
name = pathlib.PurePath(path).name
|
||||||
|
download_dict[self.uid].upload_name = name
|
||||||
gdrive = gdriveTools.GoogleDriveHelper(self)
|
gdrive = gdriveTools.GoogleDriveHelper(self)
|
||||||
gdrive.upload(progress_status_list[index].name())
|
gdrive.upload(name)
|
||||||
|
|
||||||
def onDownloadError(self, error, progress_status_list: list, index: int):
|
def onDownloadError(self, error, progress_status_list: list, index: int):
|
||||||
LOGGER.error(error)
|
LOGGER.error(error)
|
||||||
|
|
@ -78,10 +86,10 @@ class MirrorListener(listeners.MirrorListeners):
|
||||||
raise KillThreadException('Message deleted. Do not call this method from the thread')
|
raise KillThreadException('Message deleted. Do not call this method from the thread')
|
||||||
|
|
||||||
|
|
||||||
@run_async
|
def _mirror(update, context, isTar=False):
|
||||||
def mirror(update, context):
|
message_args = update.message.text.split(' ')
|
||||||
message = update.message.text
|
link = message_args[1]
|
||||||
link = message.replace('/mirror', '')[1:]
|
LOGGER.info(link)
|
||||||
link = link.strip()
|
link = link.strip()
|
||||||
if len(link) == 0 and update.message.reply_to_message is not None:
|
if len(link) == 0 and update.message.reply_to_message is not None:
|
||||||
document = update.message.reply_to_message.document
|
document = update.message.reply_to_message.document
|
||||||
|
|
@ -93,10 +101,23 @@ def mirror(update, context):
|
||||||
if index in status_reply_dict.keys():
|
if index in status_reply_dict.keys():
|
||||||
deleteMessage(context, status_reply_dict[index])
|
deleteMessage(context, status_reply_dict[index])
|
||||||
status_reply_dict[index] = reply_msg
|
status_reply_dict[index] = reply_msg
|
||||||
listener = MirrorListener(context, update, reply_msg)
|
listener = MirrorListener(context, update, reply_msg, isTar)
|
||||||
aria = download_tools.DownloadHelper(listener)
|
aria = download_tools.DownloadHelper(listener)
|
||||||
aria.add_download(link)
|
aria.add_download(link)
|
||||||
|
|
||||||
|
|
||||||
|
@run_async
|
||||||
|
def mirror(update, context):
|
||||||
|
_mirror(update, context)
|
||||||
|
|
||||||
|
|
||||||
|
@run_async
|
||||||
|
def tar_mirror(update, context):
|
||||||
|
_mirror(update, context, True)
|
||||||
|
|
||||||
|
|
||||||
mirror_handler = CommandHandler('mirror', mirror, filters=CustomFilters.authorized_chat | CustomFilters.authorized_user)
|
mirror_handler = CommandHandler('mirror', mirror, filters=CustomFilters.authorized_chat | CustomFilters.authorized_user)
|
||||||
|
tar_mirror_handler = CommandHandler('tarmirror', tar_mirror,
|
||||||
|
filters=CustomFilters.authorized_chat | CustomFilters.authorized_user)
|
||||||
dispatcher.add_handler(mirror_handler)
|
dispatcher.add_handler(mirror_handler)
|
||||||
|
dispatcher.add_handler(tar_mirror_handler)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue