def run(self): if not self._is_work: self._mutex.lock() self._is_work = True while True: if not self._tasks: logger.debug(f"upload finished!") break self._furl = list(self._tasks.keys())[0] self._task = self._tasks[self._furl] logger.debug(f"run task: {self._task=}") if not os.path.exists(self._furl): logger.error(f"upload file not exist : {self._furl}") msg = f"<b>ERROR :</b> <font color='red'>文件不存在:{self._furl}</font>" self.code.emit(msg, 3100) continue if os.path.isdir(self._furl): logger.error(f"upload dir : {self._furl}") msg = f"<b>INFO :</b> <font color='#00CC00'>批量上传文件夹:{self._furl}</font>" self.code.emit(msg, 30000) self._disk.upload_dir(self._furl, self._task.id, self._show_progress, None, self._allow_big_file) else: msg = f"<b>INFO :</b> <font color='#00CC00'>上传文件:{self._furl}</font>" self.code.emit(msg, 20000) try: code, fid, isfile = self._disk.upload_file( self._task.furl, self._task.id, self._show_progress, self._allow_big_file) except TimeoutError: msg = "<b>ERROR :</b> <font color='red'>网络连接超时,请重试!</font>" self.code.emit(msg, 3100) self._task = self._task._replace(info="网络连接超时") self.update.emit({self._furl: self._task}) except Exception as e: logger.error(f"UploadWorker error: {e=}") self._task = self._task._replace(info="未知错误") self.update.emit({self._furl: self._task}) else: self._task = self._task._replace(info="上传成功") if code == LanZouCloud.SUCCESS: if self._task.set_pwd: self._disk.set_passwd(fid, self._task.pwd, is_file=isfile) if self._task.set_desc: self._disk.set_desc(fid, self._task.desc, is_file=isfile) del self._tasks[self._furl] self._is_work = False self._mutex.unlock()
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True resp = None try: resp = requests.get(self._api).json() except (requests.RequestException, TimeoutError, requests.exceptions.ConnectionError): logger.debug("chcek update from github error") try: resp = requests.get(self._api_mirror).json() except: logger.debug("chcek update from gitee error") except Exception as e: logger.error(f"CheckUpdateWorker error: {e=}") if resp: try: tag_name, msg = resp['tag_name'], resp['body'] ver = self._ver.replace('v', '').split('-')[0].split('.') ver2 = tag_name.replace('v', '').split('-')[0].split('.') local_version = int(ver[0]) * 100 + int(ver[1]) * 10 + int(ver[2]) remote_version = int(ver2[0]) * 100 + int(ver2[1]) * 10 + int(ver2[2]) if remote_version > local_version: urls = re.findall(r'https?://[-\.a-zA-Z0-9/_#?&%@]+', msg) for url in urls: new_url = f'<a href="{url}">{url}</a>' msg = msg.replace(url, new_url) msg = msg.replace('\n', '<br />') self.infos.emit(tag_name, msg) if not self._manual: # 打开软件时检测更新 self.bg_update_infos.emit(tag_name, msg) elif self._manual: self.infos.emit("0", "目前还没有发布新版本!") except AttributeError: if self._manual: self.infos.emit("v0.0.0", "检查更新时发生异常,请重试!") except Exception as e: logger.error(f"Check Update Version error: {e=}") else: if self._manual: self.infos.emit("v0.0.0", f"检查更新时 <a href='{self._api}'>api.github.com</a>、<a href='{self._api_mirror}'>gitee.com</a> 拒绝连接,请稍后重试!") self._manual = False self._is_work = False self._mutex.unlock() else: if self._manual: self.infos.emit("v0.0.0", "后台正在运行,请稍等!")
def run(self): try: if is_file_url(self.url): # 下载文件 res = self._disk.down_file_by_url(self.url, self.pwd, self.save_path, self._show_progress) elif is_folder_url(self.url): # 下载文件夹 res = self._disk.down_dir_by_url(self.url, self.pwd, self.save_path, self._show_progress, mkdir=True, failed_callback=self._down_failed) else: return if res == 0: self.download_rate.emit(self.url, 1000) else: self.download_failed.emit(self.url, res) logger.debug(f"Download res: {res}") except TimeoutError: logger.error("Download TimeOut") self.download_failed.emit(self.url, "网络连接错误!") except Exception as e: logger.error(f"Download error: {e=}") self.download_failed.emit(self.url, f"未知错误!{e}")
def run(self): try: if self.cookie: res = self._disk.login_by_cookie(self.cookie) if res == LanZouCloud.SUCCESS: self.code.emit( True, "<font color='#00CC00'>通过<b>Cookie</b>登录<b>成功</b>! ≧◉◡◉≦</font>", 5000) return logger.debug(f"login by Cookie err: {res=}") if (not self.username or not self.password) and not self.cookie: logger.debug("login err: No UserName、No cookie") self.code.emit(False, "<font color='red'>登录失败: 没有用户或密码</font>", 3000) else: res = self._disk.login(self.username, self.password) if res == LanZouCloud.SUCCESS: self.code.emit( True, "<font color='#00CC00'>登录<b>成功</b>! ≧◉◡◉≦</font>", 5000) _cookie = self._disk.get_cookie() self.update_cookie.emit(_cookie, str(self.username)) else: logger.debug(f"login err: {res=}") self.code.emit( False, "<font color='red'>登录失败,可能是用户名或密码错误!</font>", 8000) self.update_cookie.emit(None, str(self.username)) except TimeoutError: self.code.emit(False, "<font color='red'>网络超时!</font>", 3000) except Exception as e: logger.error(f"LoginLuncher error: {e=}")
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True while True: if not self._tasks: break while self._count >= self._thread: self.sleep(1) self._count += 1 url = list(self._tasks.keys())[0] task = self._tasks[url] logger.debug(f"DownloadMgr run: {task=}") self.downloaders[url] = Downloader() self.downloaders[url].set_disk(self._disk) self.downloaders_msg.emit( "准备下载:<font color='#FFA500'>{}</font>".format(task.name), 8000) try: self.downloaders[url].finished.connect( lambda: self._add_thread(url)) self.downloaders[url].download_proc.connect( self._ahead_msg) self.downloaders[url].download_rate.connect( self._ahead_rate) self.downloaders[url].folder_file_failed.connect( self._ahead_folder_error) self.downloaders[url].download_failed.connect( self._ahead_error) self._dl_ing[url] = task._replace(run=True) self.downloaders[url].set_values(task.name, task.url, task.pwd, task.path) except Exception as exp: logger.error(f"DownloadMgr Error: {exp=}") del self._tasks[url] self._is_work = False self._mutex.unlock()
def add_tasks(self, tasks: dict): logger.debug(f"upload add tasks: {tasks.values()}") self._tasks.update(tasks) self.start()
def add_task(self, task): if task.furl not in self._tasks.keys(): logger.debug(f"upload add one task: {task}") self._tasks[task.furl] = task self.start()
def _add_thread(self, url): logger.debug(f"DownloadMgr count: {self._count}") self._count -= 1 del self.downloaders[url]
def del_task(self, url): logger.debug(f"DownloadMgr del: {url=}") if url in self._dl_ing: del self._dl_ing[url] if url in self.downloaders: del self.downloaders[url]
def add_tasks(self, tasks: dict): logger.debug(f"DownloadMgr add: {tasks=}") self._tasks.update(tasks) self.start()
def add_task(self, task): if task.url not in self._tasks.keys(): logger.debug(f"DownloadMgr add one: {task=}") self._tasks[task.url] = task self.start()
def stop_task(self, task): if self.downloaders[task.url].isRunning(): self.downloaders[task.url].stop() self._dl_ing[task.url] = self._dl_ing[task.url]._replace(run=False) logger.debug(f"Stop job: {task}") self.update.emit(self._dl_ing)