|
1 |
| -from bot import DOWNLOAD_STATUS_UPDATE_INTERVAL, aria2 |
| 1 | +from bot import DOWNLOAD_STATUS_UPDATE_INTERVAL, aria2, Interval |
2 | 2 | from bot.helper.ext_utils.bot_utils import *
|
3 | 3 | from .download_helper import DownloadHelper
|
4 | 4 | from .download_status import DownloadStatus
|
| 5 | +from bot.helper.telegram_helper.message_utils import * |
| 6 | +from bot.helper.mirror_utils.gdriveTools import GoogleDriveHelper |
5 | 7 | import threading
|
6 | 8 | from aria2p import API, ClientException
|
7 | 9 | import schedule
|
8 | 10 | import time
|
9 | 11 |
|
10 |
| - |
11 | 12 | class AriaDownloadHelper(DownloadHelper):
|
12 | 13 |
|
13 |
| - def __init__(self, listener): |
14 |
| - super(AriaDownloadHelper, self).__init__(listener) |
15 |
| - self.__is_torrent = False |
| 14 | + def __init__(self,listener): |
16 | 15 | self.gid = None
|
17 |
| - self.__scheduler = schedule.every(DOWNLOAD_STATUS_UPDATE_INTERVAL).seconds.do(self.__onDownloadProgress()) |
18 |
| - |
19 |
| - def __updater(self): |
20 |
| - while True: |
21 |
| - with self._resource_lock: |
22 |
| - if self.__scheduler is None: |
23 |
| - break |
24 |
| - schedule.run_pending() |
25 |
| - time.sleep(1) |
| 16 | + self._listener = listener |
| 17 | + self._resource_lock = threading.Lock() |
26 | 18 |
|
27 | 19 | def __onDownloadStarted(self, api, gid):
|
28 | 20 | with self._resource_lock:
|
29 | 21 | if self.gid == gid:
|
30 | 22 | download = api.get_download(gid)
|
31 | 23 | self.name = download.name
|
32 |
| - self.size = download.length |
33 |
| - self._listener.onDownloadStarted() |
34 |
| - self.should_update = True |
35 |
| - |
36 |
| - def __onDownloadProgress(self): |
37 |
| - with self._resource_lock: |
38 |
| - download = aria2.get_download(self.gid) |
39 |
| - self.progress = download.progress |
40 |
| - self.progress_string = download.progress_string |
41 |
| - self.eta_string = download.eta_string |
42 |
| - self.eta = download.eta |
| 24 | + update_all_messages() |
43 | 25 |
|
44 | 26 | def __onDownloadComplete(self, api: API, gid):
|
45 | 27 | with self._resource_lock:
|
46 | 28 | if self.gid == gid:
|
47 |
| - if self.__is_torrent: |
48 |
| - self.__is_torrent = False |
| 29 | + if api.get_download(gid).followed_by_ids: |
49 | 30 | self.gid = api.get_download(gid).followed_by_ids[0]
|
| 31 | + download_dict[self._listener.uid] = DownloadStatus(self.gid,self._listener) |
| 32 | + update_all_messages() |
50 | 33 | LOGGER.info(f'Changed gid from {gid} to {self.gid}')
|
51 | 34 | else:
|
52 |
| - self._listener.onDownloadComplete() |
53 |
| - self.__scheduler = None |
| 35 | + self._listener.onDownloadComplete() |
54 | 36 |
|
55 | 37 | def __onDownloadPause(self, api, gid):
|
56 | 38 | if self.gid == gid:
|
| 39 | + LOGGER.info("Called onDownloadPause") |
57 | 40 | self._listener.onDownloadError('Download stopped by user!')
|
58 | 41 |
|
59 | 42 | def __onDownloadStopped(self, api, gid):
|
60 | 43 | if self.gid == gid:
|
61 |
| - self._listener.onDownloadError() |
| 44 | + LOGGER.info("Called on_download_stop") |
62 | 45 |
|
63 | 46 | def __onDownloadError(self, api, gid):
|
64 | 47 | with self._resource_lock:
|
65 | 48 | if self.gid == gid:
|
66 | 49 | download = api.get_download(gid)
|
67 | 50 | error = download.error_message
|
| 51 | + LOGGER.info(f"Download Error: {error}") |
68 | 52 | self._listener.onDownloadError(error)
|
69 | 53 |
|
70 | 54 | def add_download(self, link: str, path):
|
71 | 55 | if is_magnet(link):
|
72 | 56 | download = aria2.add_magnet(link, {'dir': path})
|
73 |
| - self.__is_torrent = True |
74 | 57 | else:
|
75 | 58 | download = aria2.add_uris([link], {'dir': path})
|
76 |
| - if download.name.endswith('.torrent'): |
77 |
| - self.__is_torrent = True |
78 | 59 | self.gid = download.gid
|
| 60 | + with download_dict_lock: |
| 61 | + download_dict[self._listener.uid] = DownloadStatus(self.gid,self._listener) |
| 62 | + if download.error_message: |
| 63 | + self._listener.onDownloadError(download.error_message) |
| 64 | + return |
| 65 | + LOGGER.info(f"Started: {self.gid} DIR:{download.dir} ") |
79 | 66 | aria2.listen_to_notifications(threaded=True, on_download_start=self.__onDownloadStarted,
|
80 |
| - on_download_error=self.__onDownloadError, |
81 |
| - on_download_complete=self.__onDownloadComplete) |
82 |
| - threading.Thread(target=self.__updater).start() |
| 67 | + on_download_error=self.__onDownloadError, |
| 68 | + on_download_pause=self.__onDownloadPause, |
| 69 | + on_download_stop=self.__onDownloadStopped, |
| 70 | + on_download_complete=self.__onDownloadComplete) |
83 | 71 |
|
84 |
| - def cancel_download(self): |
85 |
| - # Returns None if successfully cancelled, else error string |
86 |
| - download = aria2.get_download(self.gid) |
87 |
| - try: |
88 |
| - download.pause(force=True) |
89 |
| - except ClientException: |
90 |
| - return 'Unable to cancel download! Internal error.' |
0 commit comments