def run(self): if not self._is_work: self._mutex.lock() self._is_work = True emit_infos = {} # 传递更新内容 emit_infos['r'] = {'fid': self._fid, 'files': self.r_files, 'folders': self.r_folders, 'path': self.r_path} try: if self.r_files: info = {i.name: [i.id, i.name, i.size, i.time, i.downs, i.has_pwd, i.has_des] for i in self._disk.get_file_list(self._fid)} emit_infos['file_list'] = {key: info.get(key) for key in sorted(info.keys())} # {name-[id,...]} if self.r_folders: folders, full_path = self._disk.get_dir_list(self._fid) info = {i.name: [i.id, i.name, "", "", "", i.has_pwd, i.desc] for i in folders} emit_infos['folder_list'] = {key: info.get(key) for key in sorted(info.keys())} # {name-[id,...]} emit_infos['path_list'] = full_path except TimeoutError: self.err_msg.emit("网络超时,无法更新目录,稍后再试!", 7000) except Exception as e: self.err_msg.emit("未知错误,无法更新目录,稍后再试!", 7000) logger.error(f"ListRefresher error: {e=}") else: self.infos.emit(emit_infos) self._is_work = False self._mutex.unlock()
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True try: if self._folder_id: file_lists = self._disk.get_rec_file_list( folder_id=self._folder_id) self._folder_id = None self.folders.emit(file_lists) raise UserWarning dir_lists = self._disk.get_rec_dir_list() file_lists = self._disk.get_rec_file_list(folder_id=-1) self.infos.emit(dir_lists, file_lists) self.msg.emit("刷新列表成功!", 2000) except TimeoutError: self.msg.emit("网络超时,请稍后重试!", 6000) except UserWarning: pass except Exception as e: logger.error(f"GetRecListsWorker error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
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 run(self): if not self._is_work: self._mutex.lock() self._is_work = True if self.move_infos: # 移动文件 no_err = False r_files = False r_folders = False for info in self.move_infos: try: no_err, r_files, r_folders = self.move_file_folder( info, no_err, r_files, r_folders) except TimeoutError: self.msg.emit(f"移动文件(夹) {info[2]} 失败,网络超时!请稍后重试", 5000) except Exception as e: logger.error(f"GetAllFoldersWorker error: {e=}") self.msg.emit(f"移动文件(夹) {info[2]} 失败,未知错误!", 5000) if no_err: # 没有错误就更新ui sleep(2.1) # 等一段时间后才更新文件列表 self.moved.emit(r_files, r_folders, False) else: # 获取所有文件夹 try: self.msg.emit("网络请求中,请稍后……", 0) all_dirs_dict = self._disk.get_move_folders().name_id self.infos.emit(self.org_infos, all_dirs_dict) self.msg.emit("", 0) # 删除提示信息 except TimeoutError: self.msg.emit("网络超时!稍后重试", 6000) except Exception as e: logger.error(f"GetAllFoldersWorker error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
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 fid = self.infos[0] new_pass = self.infos[1] try: if self.infos[2]: # 文件 is_file = True if 2 > len(new_pass) >= 1 or len(new_pass) > 6: self.msg.emit("文件提取码为2-6位字符,关闭请留空!", 4000) raise UserWarning else: # 文件夹 is_file = False if 2 > len(new_pass) >= 1 or len(new_pass) > 12: self.msg.emit("文件夹提取码为0-12位字符,关闭请留空!", 4000) raise UserWarning res = self._disk.set_passwd(fid, new_pass, is_file) if res == LanZouCloud.SUCCESS: self.msg.emit("提取码变更成功!♬", 3000) elif res == LanZouCloud.NETWORK_ERROR: self.msg.emit("网络错误,稍后重试!☒", 4000) else: self.msg.emit("提取码变更失败❀╳❀:{},请勿使用特殊符号!".format(res), 4000) self.update.emit(self._work_id, is_file, not is_file, False) except TimeoutError: self.msg.emit("网络超时,请稍后重试!", 6000) except UserWarning: pass except Exception as e: logger.error(f"SetPwdWorker error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True action = self.infos[0] try: if action == 'new': # 新建文件夹 new_name = self.infos[1] new_des = self.infos[2] if new_name in self._folder_list.keys(): self.msg.emit(f"文件夹已存在:{new_name}", 7000) else: res = self._disk.mkdir(self._work_id, new_name, new_des) if res == LanZouCloud.MKDIR_ERROR: self.msg.emit(f"创建文件夹失败:{new_name}", 7000) else: sleep(1.5) # 暂停一下,否则无法获取新建的文件夹 self.update.emit(self._work_id, False, True, False) # 此处仅更新文件夹,并显示 self.msg.emit(f"成功创建文件夹:{new_name}", 4000) else: # 重命名、修改简介 has_file = False has_folder = False failed = False for info in self.infos[1]: if info.is_file: # 修改文件描述 res = self._disk.set_desc(info.id, info.new_des, is_file=info.is_file) if res == LanZouCloud.SUCCESS: has_file = True else: failed = True else: # 修改文件夹,action == "folder" name = info.new_name or info.nmae res = self._disk._set_dir_info( info.id, str(name), str(info.new_des)) if res == LanZouCloud.SUCCESS: has_folder = True else: failed = True self.update.emit(self._work_id, has_file, has_folder, False) if failed: self.msg.emit("有发生错误!", 6000) else: self.msg.emit("修改成功!", 4000) except TimeoutError: self.msg.emit("网络超时,请稍后重试!", 6000) except Exception as e: logger.error(f"RenameMikdirWorker error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
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): if not self._is_work: self._mutex.lock() self._is_work = True action = self.infos[0] fid = self.infos[1] new_name = self.infos[2] new_desc = self.infos[3] try: if not fid: # 新建文件夹 if new_name in self._folder_list.keys(): self.msg.emit(f"文件夹已存在:{new_name}", 7000) else: res = self._disk.mkdir(self._work_id, new_name, new_desc) if res == LanZouCloud.MKDIR_ERROR: self.msg.emit(f"创建文件夹失败:{new_name}", 7000) else: sleep(1.5) # 暂停一下,否则无法获取新建的文件夹 self.update.emit(self._work_id, False, True, False) # 此处仅更新文件夹,并显示 self.msg.emit(f"成功创建文件夹:{new_name}", 4000) else: # 重命名、修改简介 if action == "file": # 修改文件描述 res = self._disk.set_desc(fid, str(new_desc), is_file=True) else: # 修改文件夹,action == "folder" _res = self._disk.get_share_info(fid, is_file=False) if _res.code == LanZouCloud.SUCCESS: res = self._disk._set_dir_info( fid, str(new_name), str(new_desc)) else: res = _res.code if res == LanZouCloud.SUCCESS: if action == "file": # 只更新文件列表 self.update.emit(self._work_id, True, False, False) else: # 只更新文件夹列表 self.update.emit(self._work_id, False, True, False) self.msg.emit("修改成功!", 4000) elif res == LanZouCloud.FAILED: self.msg.emit("失败:发生错误!", 6000) except TimeoutError: self.msg.emit("网络超时,请稍后重试!", 6000) except Exception as e: logger.error(f"RenameMikdirWorker error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True try: if self._action == "recovery": if self._files or self._folders: res = self._disk.recovery_multi( self._files, self._folders) if res == LanZouCloud.SUCCESS: self.msg.emit("选定文件(夹)恢复成功,即将刷新列表", 2500) elif self._action == "delete": if self._files or self._folders: if self._files or self._folders: res = self._disk.delete_rec_multi( self._files, self._folders) if res == LanZouCloud.SUCCESS: self.msg.emit("选定文件(夹)彻底删除成功,即将刷新列表", 2500) elif self._action == "clean": res = self._disk.clean_rec() if res == LanZouCloud.SUCCESS: self.msg.emit("清空回收站成功,即将刷新列表", 2500) elif self._action == "recovery_all": res = self._disk.recovery_all() if res == LanZouCloud.SUCCESS: self.msg.emit("文件(夹)全部还原成功,即将刷新列表", 2500) if isinstance(res, int): if res == LanZouCloud.FAILED: self.msg.emit("失败,请重试!", 4500) elif res == LanZouCloud.NETWORK_ERROR: self.msg.emit("网络错误,请稍后重试!", 4500) else: sleep(2.6) self.successed.emit() except TimeoutError: self.msg.emit("网络超时,请稍后重试!", 6000) except Exception as e: logger.error(f"RecManipulator error: {e=}") self._is_work = False self._action = None self._folders = [] self._files = [] self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True try: if not self.infos: raise UserWarning _tasks = {} _infos = [] for info in self.infos: if info.id: # disk 运行 if info.is_file: # 文件 res = self._disk.get_share_info(info.id, is_file=True) else: # 文件夹 res = self._disk.get_share_info(info.id, is_file=False) if res.code == LanZouCloud.SUCCESS: info.pwd = res.pwd info.url = res.url info.desc = res.desc elif res.code == LanZouCloud.NETWORK_ERROR: self.msg.emit("网络错误,请稍后重试!", 6000) continue _infos.append(info) _tasks[info.url] = DlJob(name=info.name, url=info.url, pwd=info.pwd, path=self.dl_path) if self.download: self.tasks.emit(_tasks) else: # 激发简介更新 self.desc.emit(_infos) except TimeoutError: self.msg.emit("网络超时,请稍后重试!", 6000) except UserWarning: pass except Exception as e: logger.error(f"GetPwdFetcher error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行指令!请稍后重试", 3100)
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True try: has_file = False has_folder = False failed = False for infos in self.infos: if infos.is_file: # 文件 has_file = True new_pwd = infos.new_pwd if 2 > len(new_pwd) >= 1 or len(new_pwd) > 6: self.msg.emit("文件提取码为2-6位字符,关闭请留空!", 4000) raise UserWarning else: # 文件夹 has_folder = True new_pwd = infos.new_pwd if 2 > len(new_pwd) >= 1 or len(new_pwd) > 12: self.msg.emit("文件夹提取码为0-12位字符,关闭请留空!", 4000) raise UserWarning res = self._disk.set_passwd(infos.id, infos.new_pwd, infos.is_file) if res != LanZouCloud.SUCCESS: failed = True if failed: self.msg.emit("部分提取码变更失败❀╳❀:{},请勿使用特殊符号!".format(res), 4000) else: self.msg.emit("提取码变更成功!♬", 3000) self.update.emit(self._work_id, has_file, has_folder, False) except TimeoutError: self.msg.emit("网络超时,请稍后重试!", 6000) except UserWarning: pass except Exception as e: logger.error(f"SetPwdWorker error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True if not self.infos: self._is_work = False self._mutex.unlock() return for i in self.infos: try: self._disk.delete(i['fid'], i['is_file']) except TimeoutError: self.msg.emit(f"删除 {i['name']} 因网络超时失败!", 3000) except Exception as e: logger.error(f"RemoveFileWorker error: {e=}") self.finished.emit() self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行删除指令!", 3100)
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True try: if self.is_file: # 链接为文件 _infos = self._disk.get_share_info_by_url(self.share_url, self.pwd) self.emit_msg(_infos) elif self.is_folder: # 链接为文件夹 _infos = self._disk.get_folder_info_by_url(self.share_url, self.pwd) self.emit_msg(_infos) self.infos.emit(_infos) except TimeoutError: self.msg.emit("font color='red'>网络超时!请稍后重试</font>", 5000) except Exception as e: logger.error(f"GetShareInfo error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("<font color='blue'>后台正在运行,稍后重试!</font>", 4000)
def run(self): if not self._is_work: self._mutex.lock() self._is_work = True try: res = self._disk.logout() if res == LanZouCloud.SUCCESS: if self.update_ui: self.successed.emit() self.msg.emit("已经退出登录!", 4000) else: self.msg.emit("失败,请重试!", 5000) except TimeoutError: self.msg.emit("网络超时,请稍后重试!", 6000) except Exception as e: logger.error(f"LogoutWorker error: {e=}") self._is_work = False self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
def run(self): # infos: ID/None,文件名,大小,日期,下载次数(dl_count),提取码(pwd),描述(desc),|链接(share-url) if not self._is_work and self.emit_infos: self._mutex.lock() self._is_work = True try: if not self._url: # 获取普通星系 if self.emit_infos[0]: # 从 disk 运行 self.msg.emit("网络请求中,请稍后……", 0) if self.emit_infos[2]: # 文件 _info = self._disk.get_share_info( self.emit_infos[0], is_file=True) else: # 文件夹 _info = self._disk.get_share_info( self.emit_infos[0], is_file=False) self.emit_infos[5] = _info.pwd self.emit_infos[6] = _info.desc self.emit_infos.append(_info.url) self.msg.emit("", 0) # 删除提示信息 self.infos.emit(self.emit_infos) else: # 获取下载直链 res = self._disk.get_file_info_by_url(self._url, self._pwd) if res.code == LanZouCloud.SUCCESS: self.dl_link.emit("{}".format(res.durl or "无")) # 下载直链 elif res.code == LanZouCloud.NETWORK_ERROR: self.dl_link.emit("网络错误!获取失败") # 下载直链 else: self.dl_link.emit("其它错误!") # 下载直链 except TimeoutError: self.msg.emit("网络超时!稍后重试", 6000) except Exception as e: logger.error(f"GetMoreInfoWorker error: {e=}") self._is_work = False self._url = '' self._pwd = '' self._mutex.unlock() else: self.msg.emit("后台正在运行,请稍后重试!", 3100)
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()