예제 #1
0
 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)
예제 #2
0
 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
예제 #3
0
 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
예제 #4
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}")
예제 #5
0
 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
예제 #6
0
 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
예제 #7
0
 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)
예제 #8
0
 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('(。>︿<) 该分享链接无效')
예제 #9
0
def test_is_file_url():
    # 确保每个备案的域名都能正确判定
    for domain in LanZouCloud().available_domains:
        assert is_file_url(f"https://pan.{domain}/i1234abcd")