コード例 #1
0
 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()
コード例 #2
0
ファイル: workers.py プロジェクト: HumanMusicX/lanzou-gui
 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", "后台正在运行,请稍等!")
コード例 #3
0
ファイル: workers.py プロジェクト: HumanMusicX/lanzou-gui
 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}")
コード例 #4
0
 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=}")
コード例 #5
0
 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()
コード例 #6
0
 def add_tasks(self, tasks: dict):
     logger.debug(f"upload add tasks: {tasks.values()}")
     self._tasks.update(tasks)
     self.start()
コード例 #7
0
 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()
コード例 #8
0
 def _add_thread(self, url):
     logger.debug(f"DownloadMgr count: {self._count}")
     self._count -= 1
     del self.downloaders[url]
コード例 #9
0
 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]
コード例 #10
0
 def add_tasks(self, tasks: dict):
     logger.debug(f"DownloadMgr add: {tasks=}")
     self._tasks.update(tasks)
     self.start()
コード例 #11
0
 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()
コード例 #12
0
 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)