diff --git a/aria.sh b/aria.sh
index d066cfa..9c81e30 100755
--- a/aria.sh
+++ b/aria.sh
@@ -1 +1,5 @@
-aria2c --enable-rpc --rpc-listen-all=false --rpc-listen-port 6800 --max-connection-per-server=10 --rpc-max-request-size=1024M --seed-time=0.01 --min-split-size=10M --follow-torrent=mem --split=10 --daemon=true --allow-overwrite=true
\ No newline at end of file
+export MAX_DOWNLOAD_SPEED=0
+aria2c --enable-rpc --rpc-listen-all=false --rpc-listen-port 6800 \
+ --max-connection-per-server=10 --rpc-max-request-size=1024M \
+ --seed-time=0.01 --min-split-size=10M --follow-torrent=mem --split=10 \
+ --daemon=true --allow-overwrite=true --max-overall-download-limit=$MAX_DOWNLOAD_SPEED
\ No newline at end of file
diff --git a/bot/helper/download_tools.py b/bot/helper/download_tools.py
index 903c379..043c3ec 100644
--- a/bot/helper/download_tools.py
+++ b/bot/helper/download_tools.py
@@ -54,6 +54,9 @@ class DownloadHelper:
# Waiting for the actual gid
new_gid = None
while new_gid is None:
+ if self.__get_download().has_failed:
+ self.__listener.onDownloadError(self.__get_download().error_message, status_list[index])
+ break
sleep(DOWNLOAD_STATUS_UPDATE_INTERVAL)
if should_update:
# Check every few seconds
@@ -68,12 +71,12 @@ class DownloadHelper:
previous = None
download = self.__get_download()
while not download.is_complete:
+ if download.has_failed:
+ self.__listener.onDownloadError(self.__get_download().error_message, status_list[index])
+ return
if should_update:
status_list = get_download_status_list()
index = get_download_index(status_list, self.__get_download().gid)
- if self.__get_download().has_failed:
- self.__listener.onDownloadError(self.__get_download().error_message, status_list[index])
- break
# TODO: Find a better way to differentiate between 2 list of objects
progress_str_list = get_download_str()
if progress_str_list != previous:
@@ -82,6 +85,7 @@ class DownloadHelper:
except KillThreadException:
should_update = False
previous = progress_str_list
- download = self.__get_download()
+ download = self.__get_download()
sleep(DOWNLOAD_STATUS_UPDATE_INTERVAL)
+
self.__listener.onDownloadComplete(status_list, index)
diff --git a/bot/helper/gdriveTools.py b/bot/helper/gdriveTools.py
index b19d73b..32bd7a6 100644
--- a/bot/helper/gdriveTools.py
+++ b/bot/helper/gdriveTools.py
@@ -9,7 +9,10 @@ from .fs_utils import get_mime_type
from .bot_utils import *
import logging
+
logging.getLogger('googleapiclient.discovery').setLevel(logging.ERROR)
+
+
class GoogleDriveHelper:
def __init__(self, listener=None):
@@ -23,7 +26,7 @@ class GoogleDriveHelper:
self.__listener = listener
self.__service = self.authorize()
- def upload_file(self, file_path, file_name, mime_type,parent_id):
+ def upload_file(self, file_path, file_name, mime_type, parent_id):
# File body description
media_body = MediaFileUpload(file_path,
mimetype=mime_type,
@@ -72,7 +75,7 @@ class GoogleDriveHelper:
else:
try:
dir_id = self.create_directory(os.path.basename(os.path.abspath(file_name)), parent_id)
- self.upload_dir(file_path,dir_id)
+ self.upload_dir(file_path, dir_id)
LOGGER.info("Uploaded To G-Drive: " + file_name)
link = "https://drive.google.com/folderview?id={}".format(dir_id)
except Exception as e:
@@ -83,7 +86,7 @@ class GoogleDriveHelper:
LOGGER.info("Deleting downloaded file/folder..")
return link
- def create_directory(self, directory_name,parent_id):
+ def create_directory(self, directory_name, parent_id):
permissions = {
"role": "reader",
"type": "anyone",
@@ -140,23 +143,26 @@ class GoogleDriveHelper:
pickle.dump(credentials, token)
return build('drive', 'v3', credentials=credentials, cache_discovery=False)
- def drive_list(self,fileName):
+ def drive_list(self, fileName):
msg = ""
- #Create Search Query for API request.
- query = "'{}' in parents and (name contains '{}')".format(parent_id,fileName)
+ # Create Search Query for API request.
+ query = "'{}' in parents and (name contains '{}')".format(parent_id, fileName)
page_token = None
while True:
response = self.__service.files().list(q=query,
- spaces='drive',
- fields='nextPageToken, files(id, name, mimeType)',
- pageToken=page_token).execute()
- for file in response.get('files',[]):
+ spaces='drive',
+ fields='nextPageToken, files(id, name, mimeType)',
+ pageToken=page_token).execute()
+ for file in response.get('files', []):
if file.get('mimeType') == "application/vnd.google-apps.folder":
- msg +='⁍ {} (folder)'.format(file.get('id'),file.get('name'))+"\n"
+ msg += '⁍ {} (folder)'.format(
+ file.get('id'), file.get('name')) + "\n"
# Detect Whether Current Entity is a Folder or File.
else:
- msg += '⁍ {}'.format(file.get('id'),file.get('name'))+"\n"
+ msg += '⁍ {}'.format(file.get('id'),
+ file.get(
+ 'name')) + "\n"
page_token = response.get('nextPageToken', None)
if page_token is None:
break
- return msg
\ No newline at end of file
+ return msg
diff --git a/bot/mirror.py b/bot/mirror.py
index 47fa3ca..ceebaa2 100644
--- a/bot/mirror.py
+++ b/bot/mirror.py
@@ -2,9 +2,8 @@ from telegram.ext import CommandHandler, run_async
from bot.helper import download_tools, gdriveTools, listeners
from bot import LOGGER, dispatcher
from bot.helper import fs_utils
-from bot import download_dict, status_reply_dict, DOWNLOAD_STATUS_UPDATE_INTERVAL
+from bot import download_dict, status_reply_dict
from bot.helper.message_utils import *
-from time import sleep
from bot.helper.bot_utils import get_readable_message, KillThreadException
LOGGER.info('mirror.py')
@@ -18,14 +17,14 @@ class MirrorListener(listeners.MirrorListeners):
def onDownloadProgress(self, progress_status_list: list, index: int):
msg = get_readable_message(progress_status_list)
- LOGGER.info("Editing message")
+ # LOGGER.info("Editing message")
try:
editMessage(msg, self.context, self.reply_message)
except BadRequest:
raise KillThreadException('Message deleted. Terminate thread')
def onDownloadComplete(self, progress_status_list, index: int):
- LOGGER.info("Download completed")
+ LOGGER.info("Download completed: {}".format(progress_status_list[index].name()))
gdrive = gdriveTools.GoogleDriveHelper(self)
gdrive.upload(progress_status_list[index].name())
@@ -40,13 +39,16 @@ class MirrorListener(listeners.MirrorListeners):
def onUploadComplete(self, link: str, progress_status_list: list, index: int):
msg = '{}'.format(link, progress_status_list[index].name())
+ del download_dict[self.update.update_id]
try:
deleteMessage(self.context, self.reply_message)
+ del status_reply_dict[self.update.effective_chat.id]
except BadRequest:
# This means that the message has been deleted because of a /status command
pass
+ except KeyError:
+ pass
sendMessage(msg, self.context, self.update)
- del download_dict[self.update.update_id]
fs_utils.clean_download(progress_status_list[index].path())
def onUploadError(self, error: str, progress_status: list, index: int):