def run(self): if not self._task: logger.error("Download task is empty!") return None self._task.run = True try: if is_file_url(self._task.url): # 下载文件 res = self._disk.down_file_by_url(self._task.url, self._task, self._callback) elif is_folder_url(self._task.url): # 下载文件夹 res = self._disk.down_dir_by_url(self._task, self._callback) else: raise UserWarning if res == 0: self._task.rate = 1000 # 回调线程可能在休眠 self.update.emit() else: self._task.info = why_error(res) logger.debug(f"Download : res={res}") self.failed.emit() except TimeoutError: self._task.info = "网络连接错误!" logger.error("Download TimeOut") self.failed.emit() except Exception as err: self._task.info = f"未知错误!err={err}" logger.error(f"Download error: err={err}") self.failed.emit() except UserWarning: pass self._task.run = False self.finished_.emit(self._task)
def set_values(self, text): '''获取分享链接信息''' if not text: return for share_url, _, pwd in re.findall(self._pat, text): if is_file_url(share_url): # 文件链接 is_file = True is_folder = False self.msg.emit("正在获取文件链接信息……", 0) elif is_folder_url(share_url): # 文件夹链接 is_folder = True is_file = False self.msg.emit("正在获取文件夹链接信息,可能需要几秒钟,请稍后……", 0) else: self.msg.emit(f"{share_url} 为非法链接!", 0) self.btn_extract.setEnabled(True) self.line_share_url.setEnabled(True) return self.update.emit() # 清理旧的显示信息 self.share_url = share_url self.pwd = pwd self.is_file = is_file self.is_folder = is_folder self.start() break
def set_values(self, text): '''获取分享链接信息''' text = text.strip() if not text: self.update.emit() return None for share_url, _, pwd in re.findall(self._pat, text): if is_file_url(share_url): # 文件链接 is_file = True is_folder = False self.msg.emit("正在获取文件链接信息……", 20000) elif is_folder_url(share_url): # 文件夹链接 is_folder = True is_file = False self.msg.emit("正在获取文件夹链接信息,可能需要几秒钟,请稍候……", 500000) else: self.msg.emit(f"{share_url} 为非法链接!", 0) self.update.emit() return None self.clean.emit() # 清理旧的显示信息 self.share_url = share_url if pwd: self.pwd = pwd else: # 一个或两个汉字的提取码 pwd_ = text.split(' ')[-1].split(':')[-1].split(':')[-1] self.pwd = pwd_ if 1<= len(pwd_) <= 2 else '' self.is_file = is_file self.is_folder = is_folder self.start() break
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 set_values(self, text): '''获取分享链接信息''' if not text: self.update.emit() return None for share_url, _, pwd in re.findall(self._pat, text): if is_file_url(share_url): # 文件链接 is_file = True is_folder = False self.msg.emit("正在获取文件链接信息……", 20000) elif is_folder_url(share_url): # 文件夹链接 is_folder = True is_file = False self.msg.emit("正在获取文件夹链接信息,可能需要几秒钟,请稍候……", 30000) else: self.msg.emit(f"{share_url} 为非法链接!", 0) self.update.emit() return None self.clean.emit() # 清理旧的显示信息 self.share_url = share_url self.pwd = pwd self.is_file = is_file self.is_folder = is_folder self.start() break
def set_url(self, url): """设置 URL 下载任务""" if is_file_url(url): # 如果是文件 self._down_args = url self._down_type = DownType.FILE_URL elif is_folder_url(url): self._down_args = url self._down_type = DownType.FOLDER_URL else: self._down_type = DownType.INVALID_URL
def run(self): if is_file_url(self.url): # 下载文件 self._disk.down_file_by_url(self.url, self.pwd, self.save_path, self._show_progress) elif is_folder_url(self.url): # 下载文件夹 folder_path = self.save_path + os.sep + self.name os.makedirs(folder_path, exist_ok=True) self.save_path = folder_path self._disk.down_dir_by_url(self.url, self.pwd, self.save_path, self._show_progress, mkdir=True, failed_callback=self._show_down_failed)
def _down_by_url(self, url): """通过 url 下载""" save_path = config.save_path if is_file_url(url): # 如果是文件 code = self._disk.down_file_by_url(url, '', save_path, show_progress) if code == LanZouCloud.LACK_PASSWORD: pwd = input('输入该文件的提取码 : ') or '' code2 = self._disk.down_file_by_url(url, str(pwd), save_path, show_progress) if code2 != LanZouCloud.SUCCESS: error(f"下载失败,原因: {why_error(code2)}") elif code != LanZouCloud.SUCCESS: error(f"下载失败,原因: {why_error(code)}") elif is_folder_url(url): # 如果是文件夹 code = self._disk.down_dir_by_url(url, '', save_path, callback=show_progress, mkdir=True, failed_callback=show_down_failed) if code == LanZouCloud.LACK_PASSWORD: pwd = input('输入该文件夹的提取码 : ') or '' code2 = self._disk.down_dir_by_url( url, str(pwd), save_path, callback=show_progress, mkdir=True, failed_callback=show_down_failed) if code2 != LanZouCloud.SUCCESS: error(f"下载失败,原因: {why_error(code2)}") elif code != LanZouCloud.SUCCESS: error(f"下载失败,原因: {why_error(code)}") else: # 链接无效 error('(。>︿<) 该分享链接无效')
def test_is_file_url(): # 确保每个备案的域名都能正确判定 for domain in LanZouCloud().available_domains: assert is_file_url(f"https://pan.{domain}/i1234abcd")