def create_dir(): path_to_create = ( BGMI_PATH, SAVE_PATH, TMP_PATH, SCRIPT_PATH, TOOLS_PATH, FRONT_STATIC_PATH, ) if not os.environ.get("HOME", os.environ.get("USERPROFILE", "")): print_warning("$HOME not set, use '/tmp/'") # bgmi home dir try: for path in path_to_create: if not os.path.exists(path): os.makedirs(path) print_success("%s created successfully" % path) OLD = os.path.join(BGMI_PATH, "old") # create OLD if not exist oninstall if not os.path.exists(OLD): with open(OLD, "w") as f: f.write(__version__) except OSError as e: print_error("Error: {}".format(str(e)))
def delete(name='', clear_all=False, batch=False): """ :param name: :type name: unicode :param clear_all: :type clear_all: bool :param batch: :type batch: bool :return: """ # action delete # just delete subscribed bangumi or clear all the subscribed bangumi result = {} logger.debug('delete {}'.format(name)) if clear_all: if Followed.delete_followed(batch=batch): result['status'] = "warning" result['message'] = 'all subscriptions have been deleted' else: print_error('user canceled') elif name: try: followed = Followed.get(bangumi_name=name) followed.status = STATUS_DELETED followed.save() result['status'] = 'warning' result['message'] = 'Bangumi {} has been deleted'.format(name) except Followed.DoesNotExist: result['status'] = 'error' result['message'] = 'Bangumi %s does not exist' % name else: result['status'] = 'warning' result['message'] = 'Nothing has been done.' logger.debug(result) return result
def delete(name: str = "", clear_all: bool = False, batch: bool = False) -> ControllerResult: """ :param name: :param clear_all: :param batch: """ # action delete # just delete subscribed bangumi or clear all the subscribed bangumi result = {} logger.debug("delete %s", name) if clear_all: if Followed.delete_followed(batch=batch): result["status"] = "warning" result["message"] = "all subscriptions have been deleted" else: print_error("user canceled") elif name: try: followed = Followed.get(bangumi_name=name) followed.status = STATUS_DELETED followed.save() result["status"] = "warning" result["message"] = f"Bangumi {name} has been deleted" except Followed.DoesNotExist: result["status"] = "error" result["message"] = f"Bangumi {name} does not exist" else: result["status"] = "warning" result["message"] = "Nothing has been done." logger.debug(result) return result
def delete(name='', clear_all=False, batch=False): """ :param name: :type name: unicode :param clear_all: :type clear_all: bool :param batch: :type batch: bool :return: """ # action delete # just delete subscribed bangumi or clear all the subscribed bangumi result = {} if clear_all: if Followed.delete_followed(batch=batch): result['status'] = "warning" result['message'] = 'all subscriptions have been deleted' else: print_error('user canceled') elif name: followed = Followed(bangumi_name=name) if followed.select(): followed.delete() result['status'] = 'warning' result['message'] = 'Bangumi {} has been deleted'.format(name) else: result['status'] = 'error' result['message'] = 'Bangumi %s does not exist' % name else: result['status'] = 'warning' result['message'] = 'Nothing has been done.' return result
def download_prepare(data): """ list[dict] dict[ name:str, keyword you use when search title:str, title of episode episode:int, episode of bangumi download:str, link to download ] :param data: :return: """ queue = save_to_bangumi_download_queue(data) for download in queue: save_path = os.path.join(os.path.join(SAVE_PATH, download.name), str(download.episode)) if not glob.glob(save_path): os.makedirs(save_path) # mark as downloading download.status = STATUS_DOWNLOADING download.save() try: # start download download_class = get_download_class(download_obj=download, save_path=save_path) download_class.download() download_class.check_download(download.name) # mark as downloaded download.delete() except Exception as e: print_error('Error: {0}'.format(e), exit_=False) download.status = STATUS_NOT_DOWNLOAD download.save()
def delete(name='', clear_all=False, batch=False): """ :param name: :type name: unicode :param clear_all: :type clear_all: bool :param batch: :type batch: bool :return: """ # action delete # just delete subscribed bangumi or clear all the subscribed bangumi result = {} logger.debug('delete {}'.format(name)) if clear_all: if Followed.delete_followed(batch=batch): result['status'] = "warning" result['message'] = 'all subscriptions have been deleted' else: print_error('user canceled') elif name: try: followed = Followed.get(bangumi_name=name) followed.status = STATUS_DELETED followed.save() result['status'] = 'warning' result['message'] = 'Bangumi {} has been deleted'.format(name) except Followed.DoesNotExist: result['status'] = 'error' result['message'] = 'Bangumi %s does not exist' % name else: result['status'] = 'warning' result['message'] = 'Nothing has been done.' logger.debug(result) return result
def delete(name="", clear_all=False, batch=False): """ :param name: :type name: unicode :param clear_all: :type clear_all: bool :param batch: :type batch: bool :return: """ # action delete # just delete subscribed bangumi or clear all the subscribed bangumi result = {} logger.debug("delete {}".format(name)) if clear_all: if Followed.delete_followed(batch=batch): result["status"] = "warning" result["message"] = "all subscriptions have been deleted" else: print_error("user canceled") elif name: try: followed = Followed.get(bangumi_name=name) followed.status = STATUS_DELETED followed.save() result["status"] = "warning" result["message"] = "Bangumi {} has been deleted".format(name) except Followed.DoesNotExist: result["status"] = "error" result["message"] = "Bangumi %s does not exist" % name else: result["status"] = "warning" result["message"] = "Nothing has been done." logger.debug(result) return result
def download_prepare(data: List[Episode]) -> None: queue = save_to_bangumi_download_queue(data) driver = get_download_driver(DOWNLOAD_DELEGATE) for download in queue: save_path = os.path.join( os.path.join(SAVE_PATH, normalize_path(download.name)), str(download.episode), ) if not os.path.exists(save_path): os.makedirs(save_path) # mark as downloading download.status = STATUS_DOWNLOADING download.save() try: driver.add_download(url=download.download, save_path=save_path) print_info("Add torrent into the download queue, " f"the file will be saved at {save_path}") except Exception as e: if os.getenv("DEBUG"): # pragma: no cover traceback.print_exc() raise e print_error(f"Error: {e}", exit_=False) download.status = STATUS_NOT_DOWNLOAD download.save()
def fetch_url(url, **kwargs): ret = None try: ret = requests.get(url, **kwargs).text except requests.ConnectionError: print_error('Create connection to {site}... failed'.format(site=base_url)) return ret
def exec_sql(sql: str, db: str = DB_PATH) -> None: try: print_info(f"Execute {sql}") conn = sqlite3.connect(db) conn.execute(sql) conn.commit() conn.close() except sqlite3.OperationalError: # pragma: no cover print_error("Execute SQL statement failed", exit_=False)
def exec_sql(sql, db=DB_PATH): try: print_info('Execute {}'.format(sql)) conn = sqlite3.connect(db) conn.execute(sql) conn.commit() conn.close() except sqlite3.OperationalError: # pragma: no cover print_error('Execute SQL statement failed', exit_=False)
def get_download_class(download_obj=None, save_path='', overwrite=True, instance=True): if DOWNLOAD_DELEGATE not in DOWNLOAD_DELEGATE_DICT: print_error('unexpected delegate {0}'.format(DOWNLOAD_DELEGATE)) delegate = DOWNLOAD_DELEGATE_DICT.get(DOWNLOAD_DELEGATE) if instance: delegate = delegate(download_obj=download_obj, overwrite=overwrite, save_path=save_path) return delegate
def fetch_url(url, **kwargs): ret = None try: ret = requests.get(url, **kwargs).text except requests.ConnectionError: print_error('Create connection to {site}... failed'.format(site=SHARE_DMHY_URL), exit_=False) print_error( 'Check internet connection or try to set a DMHY mirror site via: bgmi config SHARE_DMHY_URL <site url>') return ret
def get_download_class(download_obj=None, save_path='', overwrite=True, instance=True): if DOWNLOAD_DELEGATE not in DOWNLOAD_DELEGATE_DICT: print_error('unexpected delegate {0}'.format(DOWNLOAD_DELEGATE)) delegate = DOWNLOAD_DELEGATE_DICT.get(DOWNLOAD_DELEGATE) if instance: delegate = delegate(download_obj=download_obj, overwrite=overwrite, save_path=save_path) return delegate
def get_download_driver(delegate: str) -> BaseDownloadService: try: return cast( BaseDownloadService, stevedore.DriverManager(namespace.DOWNLOAD_DELEGATE, name=delegate, invoke_on_load=True).driver, ) except NoMatches: print_error(f"can't load download delegate {delegate}") raise
def _call(self, methods, params): r = self._session.post(DELUGE_RPC_URL, headers={'Content-Type': 'application/json'}, json={"method": methods, "params": params, "id": self._id}, timeout=10) self._id += 1 e = r.json() if not e['result']: print_error('deluge error, reason: {}'.format(e['error']['message']), exit_=False) return e
def get_response(url, method='GET', **kwargs): # kwargs['proxies'] = {'http': "http://*****:*****@gmail.com')
def download_manager(ret: Any) -> None: if ret.id: # 没有入口.. download_id = ret.id status = ret.status if download_id is None or status is None: print_error("No id or status specified.") print_success("Download status has been marked as {}".format( DOWNLOAD_CHOICE_LIST_DICT.get(int(status)))) else: status = ret.status status = int(status) if status is not None else None delegate = get_download_class() delegate.download_status(status=status)
def get_response(url, method="GET", **kwargs): if os.environ.get("DEBUG"): # pragma: no cover print_info(f"Request URL: {url}") try: r = requests.request(method.lower(), url, **kwargs) if os.environ.get("DEBUG"): # pragma: no cover print(r.text) return r.json() except requests.ConnectionError: print_error("error: failed to establish a new connection") except ValueError: print_error( "error: server returned data maybe not be json," " please create a issue at https://github.com/BGmi/BGmi/issues")
def fetch_url(url, **kwargs): ret = None try: ret = requests.get(url, **kwargs).text except requests.ConnectionError: print_error( f"Create connection to {SHARE_DMHY_URL}... failed", exit_=False, ) print_error( "Check internet connection or try to set a DMHY mirror site via: " "bgmi config SHARE_DMHY_URL <site url>") return ret
def check_aria2c_version(self): url = config.ARIA2_RPC_URL.split("/") url[2] = config.ARIA2_RPC_TOKEN + "@" + url[2] url = "/".join(url) s = xmlrpc.client.ServerProxy(url) r = s.aria2.getVersion(config.ARIA2_RPC_TOKEN) version = r["version"] if version: old_version = [int(x) for x in version.split(".")] < [1, 18, 4] if old_version: print_error( "you are using old aria2 version, please upgrade to it >1.18.4" ) else: print_warning("Get aria2c version failed")
def create_dir(): path_to_create = (BGMI_PATH, SAVE_PATH, TMP_PATH, SCRIPT_PATH, TOOLS_PATH, FRONT_STATIC_PATH) if not os.environ.get('HOME', os.environ.get('USERPROFILE', '')): print_warning('$HOME not set, use \'/tmp/\'') # bgmi home dir try: for path in path_to_create: if not os.path.exists(path): os.makedirs(path) print_success('%s created successfully' % path) except OSError as e: print_error('Error: {0}'.format(str(e)))
def get_response(url, method='GET', **kwargs): # kwargs['proxies'] = {'http': "http://*****:*****@gmail.com')
def get_download_url(self): # fetch and return dict resp = requests.get('http://www.kirikiri.tv/?m=vod-play-id-4414-src-1-num-2.html').text data = re.findall("mac_url=unescape\('(.*)?'\)", resp) if not data: print_error('No data found, maybe the script is out-of-date.', exit_=False) return {} data = unquote(json.loads('["{}"]'.format(data[0].replace('%u', '\\u')))[0]) ret = {} for i in data.split('#'): title, url = i.split('$') ret[parse_episode(title)] = url return ret
def get_response(url, method="GET", **kwargs): # kwargs['proxies'] = {'http': "http://*****:*****@gmail.com" )
def _call(self, methods, params): r = self._session.post(DELUGE_RPC_URL, headers={'Content-Type': 'application/json'}, json={ "method": methods, "params": params, "id": self._id }, timeout=10) self._id += 1 e = r.json() if not e['result']: print_error('deluge error, reason: {}'.format( e['error']['message']), exit_=False) return e
def create_dir(): if not os.environ.get('HOME', ''): print_warning('$HOME not set, use \'/tmp/\'') tools_path = os.path.join(BGMI_PATH, 'tools') # bgmi home dir path_to_create = (BGMI_PATH, SAVE_PATH, TMP_PATH, SCRIPT_PATH, tools_path, FRONT_STATIC_PATH) try: for path in path_to_create: if not os.path.exists(path): print_success('%s created successfully' % path) os.mkdir(path) else: print_warning('%s already exists' % path) except OSError as e: print_error('Error: {0}'.format(str(e)))
def download_prepare(data): """ list[dict] dict[ name:str, keyword you use when search title:str, title of episode episode:int, episode of bangumi download:str, link to download ] :param data: :return: """ queue = save_to_bangumi_download_queue(data) for download in queue: save_path = os.path.join( os.path.join(SAVE_PATH, normalize_path(download.name)), str(download.episode), ) if not os.path.exists(save_path): os.makedirs(save_path) # mark as downloading download.status = STATUS_DOWNLOADING download.save() try: # start download download_class = get_download_class( download_obj=download, save_path=save_path ) download_class.download() download_class.check_download(download.name) # mark as downloaded download.downloaded() except Exception as e: if os.getenv("DEBUG"): # pragma: no cover import traceback traceback.print_exc() raise e print_error("Error: {}".format(e), exit_=False) download.status = STATUS_NOT_DOWNLOAD download.save()
def init_db(): try: # bangumi.db conn = sqlite3.connect(DB_PATH) conn.execute(CREATE_TABLE_BANGUMI) conn.execute(CREATE_TABLE_FOLLOWED) conn.execute(CREATE_TABLE_DOWNLOAD) conn.execute(CREATE_TABLE_FOLLOWED_FILTER) conn.execute(CREATE_TABLE_SUBTITLE) conn.commit() conn.close() # script.db conn = sqlite3.connect(SCRIPT_DB_PATH) conn.execute(CREATE_TABLE_SCRIPT) conn.commit() conn.close() except sqlite3.OperationalError: print_error('Open database file failed, path %s is not writable.' % BGMI_PATH)
def init_db(): try: # bangumi.db conn = sqlite3.connect(DB_PATH) conn.execute(CREATE_TABLE_BANGUMI) conn.execute(CREATE_TABLE_FOLLOWED) conn.execute(CREATE_TABLE_DOWNLOAD) conn.execute(CREATE_TABLE_FOLLOWED_FILTER) conn.execute(CREATE_TABLE_SUBTITLE) conn.commit() conn.close() # script.db conn = sqlite3.connect(SCRIPT_DB_PATH) conn.execute(CREATE_TABLE_SCRIPT) conn.commit() conn.close() except sqlite3.OperationalError: print_error('Open database file failed, path %s is not writable.' % BGMI_PATH)
def get_download_url(self): # fetch and return dict resp = requests.get( 'http://www.kirikiri.tv/?m=vod-play-id-4414-src-1-num-2.html').text data = re.findall("mac_url=unescape\('(.*)?'\)", resp) if not data: print_error('No data found, maybe the script is out-of-date.', exit_=False) return {} data = unquote( json.loads('["{}"]'.format(data[0].replace('%u', '\\u')))[0]) ret = {} for i in data.split('#'): title, url = i.split('$') ret[parse_episode(title)] = url return ret
def create_dir(): path_to_create = (BGMI_PATH, SAVE_PATH, TMP_PATH, SCRIPT_PATH, TOOLS_PATH, FRONT_STATIC_PATH) if not os.environ.get('HOME', os.environ.get('USERPROFILE', '')): print_warning('$HOME not set, use \'/tmp/\'') # bgmi home dir try: for path in path_to_create: if not os.path.exists(path): os.makedirs(path) print_success('%s created successfully' % path) OLD = os.path.join(BGMI_PATH, 'old') # create OLD if not exist oninstall if not os.path.exists(OLD): with open(OLD, 'w') as f: f.write(__version__) except OSError as e: print_error('Error: {0}'.format(str(e)))
def create_dir(): path_to_create = (BGMI_PATH, SAVE_PATH, TMP_PATH, SCRIPT_PATH, TOOLS_PATH, FRONT_STATIC_PATH) if not os.environ.get('HOME', os.environ.get('USERPROFILE', '')): print_warning('$HOME not set, use \'/tmp/\'') # bgmi home dir try: for path in path_to_create: if not os.path.exists(path): os.makedirs(path) print_success('%s created successfully' % path) OLD = os.path.join(BGMI_PATH, 'old') # create OLD if not exist oninstall if not os.path.exists(OLD): with open(OLD, 'w') as f: f.write(__version__) except OSError as e: print_error('Error: {0}'.format(str(e)))
def _call(self, methods, params): r = self._session.post( DELUGE_RPC_URL, headers={"Content-Type": "application/json"}, json={ "method": methods, "params": params, "id": self._id }, timeout=10, ) self._id += 1 e = r.json() if not e["result"]: print_error("deluge error, reason: {}".format( e["error"]["message"]), exit_=False) return e
def download_manager(ret): if ret.id: # 没有入口.. download_id = ret.id status = ret.status if download_id is None or status is None: print_error('No id or status specified.') # download_obj = NeoDownload.get(_id=download_id) # if not download_obj: # print_error('Download object does not exist.') # print_info('Download Object <{0} - {1}>, Status: {2}'.format(download_obj.name, download_obj.episode, # download_obj.status)) # download_obj.status = status # download_obj.save() print_success('Download status has been marked as {0}'.format( DOWNLOAD_CHOICE_LIST_DICT.get(int(status)))) else: status = ret.status status = int(status) if status is not None else None delegate = get_download_class(instance=False) delegate.download_status(status=status)
def fetch_(ret): bangumi_obj = Bangumi(name=ret.name) bangumi_obj.select_obj() followed_obj = Followed(bangumi_name=bangumi_obj.name) followed_obj.select_obj() followed_filter_obj = Filter(bangumi_name=ret.name) followed_filter_obj.select_obj() print_filter(followed_filter_obj) if bangumi_obj: print_info('Fetch bangumi {0} ...'.format(bangumi_obj.name)) _, data = website.get_maximum_episode( bangumi_obj, ignore_old_row=False if ret.not_ignore else True) if not data: print_warning('Nothing.') for i in data: print_success(i['title']) else: print_error('Bangumi {0} not exist'.format(ret.name))
def download_manager(ret): if ret.id: # 没有入口.. download_id = ret.id status = ret.status if download_id is None or status is None: print_error('No id or status specified.') # download_obj = NeoDownload.get(_id=download_id) # if not download_obj: # print_error('Download object does not exist.') # print_info('Download Object <{0} - {1}>, Status: {2}'.format(download_obj.name, download_obj.episode, # download_obj.status)) # download_obj.status = status # download_obj.save() print_success('Download status has been marked as {0}'.format( DOWNLOAD_CHOICE_LIST_DICT.get(int(status)))) else: status = ret.status status = int(status) if status is not None else None delegate = get_download_class(instance=False) delegate.download_status(status=status)
def download_prepare(data): """ list[dict] dict[ name:str, keyword you use when search title:str, title of episode episode:int, episode of bangumi download:str, link to download ] :param data: :return: """ queue = save_to_bangumi_download_queue(data) for download in queue: save_path = os.path.join(os.path.join(SAVE_PATH, normalize_path(download.name)), str(download.episode)) if not os.path.exists(save_path): os.makedirs(save_path) # mark as downloading download.status = STATUS_DOWNLOADING download.save() try: # start download download_class = get_download_class(download_obj=download, save_path=save_path) download_class.download() download_class.check_download(download.name) # mark as downloaded download.downloaded() except Exception as e: if os.getenv('DEBUG'): # pragma: no cover import traceback traceback.print_exc() raise e print_error('Error: {0}'.format(e), exit_=False) download.status = STATUS_NOT_DOWNLOAD download.save()
def download_status(status=None): Aria2DownloadRPC.check_aria2c_version() print_info("Print download status in database") BaseDownloadService.download_status(status=status) print() print_info("Print download status in aria2c-rpc") try: server = xmlrpc.client.ServerProxy(config.ARIA2_RPC_URL) # self.server.aria2 status_dict = { STATUS_DOWNLOADING: ["tellActive"], STATUS_NOT_DOWNLOAD: ["tellWaiting"], STATUS_DOWNLOADED: ["tellStopped"], None: ["tellStopped", "tellWaiting", "tellActive"], } for method in status_dict.get(status): if method not in ("tellActive",): params = (0, 1000) else: params = () if Aria2DownloadRPC.old_version: data = getattr(server.aria2, method)(*params) else: data = getattr(server.aria2, method)( config.ARIA2_RPC_TOKEN, *params ) if data: print_warning(f"RPC {method}:", indicator=False) for row in data: print_success("- {}".format(row["dir"]), indicator=False) for file_ in row["files"]: print_info(" * {}".format(file_["path"]), indicator=False) except Exception: print_error("Cannot connect to aria2-rpc server")
def fetch_(ret): try: bangumi_obj = Bangumi.get(name=ret.name) except Bangumi.DoesNotExist: print_error('Bangumi {0} not exist'.format(ret.name)) return try: Followed.get(bangumi_name=bangumi_obj.name) except Followed.DoesNotExist: print_error('Bangumi {0} is not followed'.format(ret.name)) return followed_filter_obj = Filter.get(bangumi_name=ret.name) print_filter(followed_filter_obj) print_info('Fetch bangumi {0} ...'.format(bangumi_obj.name)) _, data = website.get_maximum_episode(bangumi_obj, ignore_old_row=False if ret.not_ignore else True) if not data: print_warning('Nothing.') for i in data: print_success(i['title'])
def download_status(status=None): Aria2DownloadRPC.check_aria2c_version() print_info('Print download status in database') BaseDownloadService.download_status(status=status) print() print_info('Print download status in aria2c-rpc') try: server = PatchedServerProxy(ARIA2_RPC_URL) # self.server.aria2 status_dict = { STATUS_DOWNLOADING: ['tellActive'], STATUS_NOT_DOWNLOAD: ['tellWaiting'], STATUS_DOWNLOADED: ['tellStopped'], None: ['tellStopped', 'tellWaiting', 'tellActive'], } for method in status_dict.get(status): if method not in ('tellActive', ): params = (0, 1000) else: params = () if Aria2DownloadRPC.old_version: data = server.aria2[method](*params) else: data = server.aria2[method](ARIA2_RPC_TOKEN, *params) if data: print_warning('RPC {0}:'.format(method), indicator=False) for row in data: print_success('- {0}'.format(row['dir']), indicator=False) for file_ in row['files']: print_info(' * {0}'.format(file_['path']), indicator=False) except Exception as e: print_error('Cannot connect to aria2-rpc server')
def wrap(*args, **kwargs): print_error('date source "{}" in config is wrong, please edit it manually'.format(DATA_SOURCE))
def update(name, download=None, not_ignore=False): logger.debug('updating bangumi info with args: download: {}'.format(download)) result = {'status': 'info', 'message': '', 'data': {'updated': [], 'downloaded': []}} ignore = not bool(not_ignore) print_info('marking bangumi status ...') now = int(time.time()) for i in Followed.get_all_followed(): if i['updated_time'] and int(i['updated_time'] + 60 * 60 * 24) < now: followed_obj = Followed.get(bangumi_name=i['bangumi_name']) followed_obj.status = STATUS_FOLLOWED followed_obj.save() for script in ScriptRunner().scripts: obj = script.Model().obj if obj.updated_time and int(obj.updated_time + 60 * 60 * 24) < now: obj.status = STATUS_FOLLOWED obj.save() print_info('updating subscriptions ...') download_queue = [] if download: if not name: print_warning('No specified bangumi, ignore `--download` option') if len(name) > 1: print_warning('Multiple specified bangumi, ignore `--download` option') if not name: updated_bangumi_obj = Followed.get_all_followed() else: updated_bangumi_obj = [] for i in name: try: f = Followed.get(bangumi_name=i) f = model_to_dict(f) updated_bangumi_obj.append(f) except DoesNotExist: pass runner = ScriptRunner() script_download_queue = runner.run() for subscribe in updated_bangumi_obj: print_info('fetching %s ...' % subscribe['bangumi_name']) try: bangumi_obj = Bangumi.get(name=subscribe['bangumi_name']) except Bangumi.DoesNotExist: print_error('Bangumi<{0}> does not exists.'.format(subscribe['bangumi_name']), exit_=False) continue try: followed_obj = Followed.get(bangumi_name=subscribe['bangumi_name']) except Followed.DoesNotExist: print_error('Bangumi<{0}> is not followed.'.format(subscribe['bangumi_name']), exit_=False) continue episode, all_episode_data = website.get_maximum_episode(bangumi=bangumi_obj, ignore_old_row=ignore, max_page=1) if (episode.get('episode') > subscribe['episode']) or (len(name) == 1 and download): if len(name) == 1 and download: episode_range = download else: episode_range = range( subscribe['episode'] + 1, episode.get('episode', 0) + 1) print_success('%s updated, episode: %d' % (subscribe['bangumi_name'], episode['episode'])) followed_obj.episode = episode['episode'] followed_obj.status = STATUS_UPDATED followed_obj.updated_time = int(time.time()) followed_obj.save() result['data']['updated'].append({'bangumi': subscribe['bangumi_name'], 'episode': episode['episode']}) for i in episode_range: for epi in all_episode_data: if epi['episode'] == i: download_queue.append(epi) break if download is not None: result['data']['downloaded'] = download_queue download_prepare(download_queue) download_prepare(script_download_queue) print_info('Re-downloading ...') download_prepare(Download.get_all_downloads( status=STATUS_NOT_DOWNLOAD)) return result