Exemple #1
0
    def HandlerDownloadTask(self,
                            downlodaId,
                            laveFileSize,
                            data,
                            isCallBack=True):
        info = self.downloadTask.get(downlodaId)
        if not info:
            return
        assert isinstance(info, QtDownloadTask)
        if laveFileSize == -1 and data == b"":
            try:
                if info.downloadCompleteBack:
                    if info.backParam is not None:
                        info.downloadCompleteBack(
                            self.GetDownloadData(downlodaId), Status.Error,
                            info.backParam)
                    else:
                        info.downloadCompleteBack(
                            self.GetDownloadData(downlodaId), Status.Error)
            except Exception as es:
                Log.Error(es)
            self.ClearDownloadTask(downlodaId)
            return

        if info.isSaveData:
            info.saveData += data

        if info.downloadCallBack:
            try:
                if info.backParam is not None:
                    info.downloadCallBack(data, laveFileSize, info.backParam)
                else:
                    info.downloadCallBack(data, laveFileSize)
            except Exception as es:
                Log.Error(es)
        if laveFileSize == 0 and data == b"":
            if info.downloadCompleteBack:
                try:
                    if info.cleanFlag:
                        taskIds = self.flagToIds.get(info.cleanFlag, set())
                        taskIds.discard(info.downloadId)
                    if info.backParam is not None:
                        info.downloadCompleteBack(
                            self.GetDownloadData(downlodaId), Status.Ok,
                            info.backParam)
                    else:
                        info.downloadCompleteBack(
                            self.GetDownloadData(downlodaId), Status.Ok)
                except Exception as es:
                    Log.Error(es)
            self.ClearDownloadTask(downlodaId)
Exemple #2
0
    def InitUpdateBack(self, data):
        try:
            info = re.findall(r"\d+\d*", os.path.basename(data))
            version = int(info[0]) * 100 + int(info[1]) * 10 + int(info[2]) * 1

            info2 = re.findall(r"\d+\d*",
                               os.path.basename(config.UpdateVersion))
            curversion = int(info2[0]) * 100 + int(info2[1]) * 10 + int(
                info2[2]) * 1
            if version > curversion:
                r = QMessageBox.information(
                    self, "更新",
                    "当前版本{} ,检查到更新{},是否前往更新".format(config.UpdateVersion,
                                                    info),
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
                if r == QMessageBox.Yes:
                    QDesktopServices.openUrl(
                        QUrl(
                            "https://github.com/tonquer/picacg-windows/releases"
                        ))
        except Exception as Es:
            import sys
            cur_tb = sys.exc_info()[
                2]  # return (exc_type, exc_value, traceback)
            e = sys.exc_info()[1]
            Log.Error(cur_tb, e)
    def DelRecordingAndFile(self):
        selected = self.tableWidget.selectedIndexes()
        selectRows = set()
        for index in selected:
            selectRows.add(index.row())
        if not selectRows:
            return
        try:
            selectRows = list(selectRows)
            selectRows.sort(reverse=True)
            for row in selectRows:
                col = 0
                bookId = self.tableWidget.item(row, col).text()
                bookInfo = self.downloadDict.get(bookId)
                if not bookInfo:
                    continue
                self.RemoveRecord(bookId)
                if os.path.isdir(bookInfo.savePath):
                    shutil.rmtree(bookInfo.savePath)

        except Exception as es:
            import sys
            cur_tb = sys.exc_info()[
                2]  # return (exc_type, exc_value, traceback)
            e = sys.exc_info()[1]
            Log.Error(cur_tb, e)
        self.UpdateTableRow()
Exemple #4
0
 def UpdateFavoritesBack(self, backData):
     try:
         if backData.status != Status.Ok:
             return backData.status, self.page
         if backData.res.code == 200:
             info = backData.res.data.get("comics", {})
             self.total = info["total"]
             self.page = info["page"]
             self.pages = info["pages"]
             self.category[self.page] = []
             for bookInfo in info["docs"]:
                 data = CategoryInfo()
                 ToolUtil.ParseFromData(data, bookInfo)
                 self.category[self.page].append(data)
             Log.Info("收藏夹加载成功, page:{}, pages:{}, num:{}".format(
                 self.page, self.pages, self.total))
             return Status.Ok, self.page
         else:
             return Status.Error + backData.res.message, self.page
     except Exception as e:
         import sys
         cur_tb = sys.exc_info()[
             2]  # return (exc_type, exc_value, traceback)
         e = sys.exc_info()[1]
         Log.Error(cur_tb, e)
         return Status.Error + e, self.page
 def AddConvertBack(self, data, waifuId, backParam, tick):
     try:
         if data:
             savePath = os.path.dirname(self.curConvertPath)
             if not os.path.isdir(savePath):
                 os.makedirs(savePath)
             f = open(self.curConvertPath, "wb+")
             f.write(data)
             f.close()
             self.tick = tick
             self.resetConvertCnt = 0
             self.curPreConvertId += 1
             self.StartConvert()
         else:
             self.resetConvertCnt += 1
             if self.resetConvertCnt >= 3:
                 self.status = DownloadInfo.Error
                 self.parent.SetConvertStatu(DownloadInfo.Error)
             else:
                 self.StartConvert()
     except Exception as es:
         Log.Error(es)
         self.status = DownloadInfo.Error
         self.parent.SetConvertStatu(DownloadInfo.Error)
     return
Exemple #6
0
 def ParseFromData(desc, src):
     try:
         if isinstance(src, str):
             src = json.loads(src)
         for k, v in src.items():
             setattr(desc, k, v)
     except Exception as es:
         Log.Error(es)
Exemple #7
0
 def _Send(self, task):
     try:
         if task.req.method.lower() == "post":
             self.Post(task)
         elif task.req.method.lower() == "get":
             self.Get(task)
         else:
             return
     except Exception as es:
         task.status = Status.NetError
         Log.Error(es)
     try:
         self.handler.get(task.req.__class__)(task)
         if task.res.raw:
             task.res.raw.close()
     except Exception as es:
         Log.Error(es)
Exemple #8
0
 def InitUpdateBack(self, data):
     try:
         r = QMessageBox.information(self, "更新", "当前版本{} ,检查到更新,是否前往更新\n{}".format(config.UpdateVersion,
                                                                                     data),
                                      QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
         if r == QMessageBox.Yes:
             QDesktopServices.openUrl(QUrl(config.UpdateUrl2))
     except Exception as es:
         Log.Error(es)
Exemple #9
0
 def RunDownload(self):
     while True:
         task = self._downloadQueue.get(True)
         self._downloadQueue.task_done()
         try:
             self._Download(task)
         except Exception as es:
             Log.Error(es)
     pass
Exemple #10
0
 def InitUpdateBack(self, data):
     try:
         r = QMessageBox.information(
             self, "更新",
             "当前版本{} ,检查到更新,是否前往更新\n{}".format(config.UpdateVersion, data),
             QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
         if r == QMessageBox.Yes:
             QDesktopServices.openUrl(
                 QUrl("https://github.com/tonquer/picacg-windows/releases"))
     except Exception as es:
         Log.Error(es)
Exemple #11
0
 def LoadCachePicture(filePath):
     try:
         c = CTime()
         if not os.path.isfile(filePath):
             return None
         with open(filePath, "rb") as f:
             data = f.read()
             c.Refresh("LoadCache", filePath)
             return data
     except Exception as es:
         Log.Error(es)
     return None
Exemple #12
0
 def ParseFromData(desc, src):
     try:
         if isinstance(src, str):
             src = json.loads(src)
         for k, v in src.items():
             setattr(desc, k, v)
     except Exception as E:
         import sys
         cur_tb = sys.exc_info()[
             2]  # return (exc_type, exc_value, traceback)
         e = sys.exc_info()[1]
         Log.Error(cur_tb, e)
 def OpenPicture(self):
     try:
         filename = QFileDialog.getOpenFileName(self, "Open Image", ".", "Image Files(*.jpg *.png)")
         if filename and len(filename) >= 1:
             name = filename[0]
             if os.path.isfile(name):
                 f = open(name, "rb")
                 data = f.read()
                 f.close()
                 self.ShowImg(data)
     except Exception as ex:
         Log.Error(ex)
     return
Exemple #14
0
 def Run(self):
     while True:
         try:
             task = self._inQueue.get(True)
         except Exception as es:
             continue
             pass
         self._inQueue.task_done()
         try:
             self._Send(task)
         except Exception as es:
             Log.Error(es)
     pass
Exemple #15
0
 def RunDownload(self):
     while True:
         task = self._downloadQueue.get(True)
         self._downloadQueue.task_done()
         try:
             self._Download(task)
         except Exception as es:
             import sys
             cur_tb = sys.exc_info()[2]  # return (exc_type, exc_value, traceback)
             e = sys.exc_info()[1]
             Log.Error(cur_tb, e)
         time.sleep(1)
     pass
Exemple #16
0
 def Waifu2xBack(self, data, waifu2xId, index, tick):
     self.waitWaifuPicData.discard(index)
     if waifu2xId > 0:
         self.waifu2xIdToIndex[waifu2xId] = index
         self.indexToWaifu2xId[index] = waifu2xId
     if waifu2xId not in self.waifu2xIdToIndex:
         Log.Error("Not found waifu2xId :{}, index: {}".format(
             str(waifu2xId), str(index)))
         return
     p = self.pictureData.get(index)
     p.SetWaifuData(data, round(tick, 2))
     if index == self.curIndex:
         self.ShowImg()
Exemple #17
0
 def RegisterBack(self, backData):
     try:
         if backData.status != Status.Ok:
             return backData.status
         if backData.res.code == 200:
             Log.Info("注册成功: {}".format(backData.res.raw.text))
             return Status.Ok
         else:
             Log.Info("注册失败!!!, userId:{}, msg:{}".format(
                 self.userId, backData.res.message))
             return Status.RegisterError + backData.res.message
     except Exception as es:
         Log.Error(es)
         return Status.NetError
Exemple #18
0
 def _Send(self, task):
     try:
         if task.req.method.lower() == "post":
             self.Post(task)
         elif task.req.method.lower() == "get":
             self.Get(task)
         else:
             return
     except Exception as es:
         task.status = Status.NetError
         import sys
         cur_tb = sys.exc_info()[2]  # return (exc_type, exc_value, traceback)
         e = sys.exc_info()[1]
         Log.Error(cur_tb, e)
     try:
         self.handler.get(task.req.__class__)(task)
         if task.res.raw:
             task.res.raw.close()
     except Exception as es:
         import sys
         cur_tb = sys.exc_info()[2]  # return (exc_type, exc_value, traceback)
         e = sys.exc_info()[1]
         Log.Error(cur_tb, e)
Exemple #19
0
 def AddBookByIdBack(self, backData):
     try:
         if backData.res.data.get("comic"):
             info = self.books.get(backData.res.data['comic']['_id'])
             if not info:
                 info = Book()
             ToolUtil.ParseFromData(info, backData.res.data['comic'])
             self.books[info.id] = info
             return Status.Ok
         else:
             Log.Warn("未找到书籍, bookId:{}".format(backData))
             return Status.NotFoundBook
     except Exception as es:
         Log.Error(es)
         return Status.NetError
Exemple #20
0
 def InitBack(self, backData):
     try:
         if backData.status == Status.Ok and backData.res.status == "ok":
             if len(backData.res.addresses) > 0:
                 self.addresss = backData.res.addresses[:]
             #     self.address = backData.res.addresses[0]
             Log.Info("初始化成功,  Ips:{}".format(self.addresss))
             self.initRes = backData.res
             return Status.Ok
         else:
             Log.Info("初始化失败, info:{}".format(backData.res))
             return Status.Error
     except Exception as es:
         Log.Error(es)
         return Status.Error
Exemple #21
0
 def SavePicture(self):
     data = QtImgMgr().waifu2xData if QtImgMgr().waifu2xData else QtImgMgr().data
     if not data:
         return
     try:
         today = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
         filepath = QFileDialog.getSaveFileName(self, "保存", "{}.jpg".format(today))
         if filepath and len(filepath) >= 1:
             name = filepath[0]
             f = open(name, "wb")
             f.write(data)
             f.close()
     except Exception as es:
         Log.Error(es)
     return
 def SavePicture(self):
     data = self.waifu2xData if self.waifu2xData else self.data
     if not data:
         return
     try:
         today = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
         picFormat = self.format if self.format else "jpg"
         filepath = QFileDialog.getSaveFileName(self, "Save", "{}.{}".format(today, picFormat))
         if filepath and len(filepath) >= 1 and filepath[0]:
             name = filepath[0]
             f = open(name, "wb")
             f.write(data)
             f.close()
     except Exception as es:
         Log.Error(es)
     return
Exemple #23
0
    def InitImageServer(self, backData):
        try:
            if backData.res.code == 200:
                # 选择了分流才设置
                if self.server.address:
                    self.server.imageServer = ToolUtil.GetUrlHost(
                        backData.res.data["imageServer"])
                    Log.Info("初始化图片服务器成功, info:{}".format(
                        self.server.imageServer))

                return Status.Ok
            else:
                return Status.Error
        except Exception as es:
            Log.Error(es)
            return Status.Error
Exemple #24
0
 def UpdateUserInfoBack(self, backData):
     try:
         if backData.res.code == 200:
             self.userInfo = backData.res.data["user"]
             self.name = backData.res.data["user"]["name"]
             self.level = backData.res.data["user"]["level"]
             self.exp = backData.res.data["user"]["exp"]
             self.created = backData.res.data["user"]["created_at"]
             self.gender = backData.res.data["user"]["gender"]
             self.title = backData.res.data["user"]["title"]
             self.title = backData.res.data["user"]["title"]
             self.isPunched = backData.res.data["user"]["isPunched"]
             self.avatar = backData.res.data["user"].get("avatar")
     except Exception as es:
         Log.Error(es)
         return Status.NetError
Exemple #25
0
    def AddBookEpsPicInfoBack(self, backData):
        # 此处在线程中加载后续分页 TODO 分页太多时会导致太慢
        try:
            r = backData.res
            bookId = backData.req.bookId
            epsId = backData.req.epsId

            bookInfo = self.books.get(bookId)

            epsInfo = bookInfo.eps[epsId - 1]
            page = r.data['pages']["page"]
            pages = r.data['pages']["pages"]
            limit = r.data['pages']["limit"]

            # 重新初始化
            # if page == 1:
            #     del epsInfo.pics[:]

            for i, data in enumerate(r.data['pages']['docs']):
                index = (page - 1) * limit + i
                if len(epsInfo.pics) > index:
                    picInfo = epsInfo.pics[index]
                else:
                    picInfo = Picture()
                    epsInfo.pics.append(picInfo)
                ToolUtil.ParseFromData(picInfo, data['media'])

            loadPage = int((len(epsInfo.pics) - 1) / limit + 1)
            nextPage = page + 1
            # 如果已经有了,则从最后那一页加载起就可以了
            if loadPage > nextPage:
                nextPage = loadPage

            if nextPage <= pages:
                self.server.Send(req.GetComicsBookOrderReq(
                    bookId, epsId, nextPage),
                                 bakParam=backData.bakParam,
                                 isASync=False)
                return Status.WaitLoad
            return Status.Ok
        except Exception as es:
            import sys
            cur_tb = sys.exc_info()[
                2]  # return (exc_type, exc_value, traceback)
            e = sys.exc_info()[1]
            Log.Error(cur_tb, e)
            return Status.Error
 def GetSettingV(self, key, defV=None):
     v = self.settings.value(key)
     try:
         if v:
             if isinstance(defV, int):
                 if v == "true" or v == "True":
                     return 1
                 elif v == "false" or v == "False":
                     return 0
                 return int(v)
             elif isinstance(defV, float):
                 return float(v)
             else:
                 return v
         return defV
     except Exception as es:
         Log.Error(es)
     return v
Exemple #27
0
 def RegisterBack(self, backData):
     try:
         if backData.status != Status.Ok:
             return backData.status
         if backData.res.code == 200:
             Log.Info("注册成功: {}".format(backData.res.raw.text))
             return Status.Ok
         else:
             Log.Info("注册失败!!!, userId:{}, msg:{}".format(
                 self.userId, backData.res.message))
             return Status.RegisterError + backData.res.message
     except Exception as es:
         import sys
         cur_tb = sys.exc_info()[
             2]  # return (exc_type, exc_value, traceback)
         e = sys.exc_info()[1]
         Log.Error(cur_tb, e)
         return Status.NetError
Exemple #28
0
    def AddBookEpsInfoBack(self, backData):
        # 此处在线程中加载后续章节 TODO 章节太多时会导致太慢
        try:
            r = backData.res
            bookId = backData.req.bookId
            info = self.books.get(bookId)
            info.epsCount = r.data['eps']["total"]
            page = r.data['eps']["page"]

            # 重新初始化
            pages = r.data['eps']["pages"]
            limit = r.data['eps']["limit"]
            # 优化,如果分页已经加载好了,只需要重新加载更新最后一页即可

            for i, data in enumerate(r.data['eps']['docs']):
                index = (page - 1) * limit + i
                if len(info.eps) > index:
                    epsInfo = info.eps[index]
                else:
                    epsInfo = BookEps()
                    info.eps.append(epsInfo)
                ToolUtil.ParseFromData(epsInfo, data)

            loadPage = int((len(info.eps) - 1) / limit + 1)
            nextPage = page + 1
            # 如果已经有了,则从最后那一页加载起就可以了
            if loadPage > nextPage:
                nextPage = loadPage

            info.eps.sort(key=lambda a: a.order)

            if nextPage <= pages:
                self.server.Send(req.GetComicsBookEpsReq(bookId, nextPage),
                                 bakParam=backData.bakParam,
                                 isASync=False)
                return Status.WaitLoad
            return Status.Ok
        except Exception as es:
            import sys
            cur_tb = sys.exc_info()[
                2]  # return (exc_type, exc_value, traceback)
            e = sys.exc_info()[1]
            Log.Error(cur_tb, e)
            return Status.Error
Exemple #29
0
    def AddBookEpsInfoBack(self, backData):
        # 此处在线程中加载后续章节 TODO 章节太多时会导致太慢
        try:
            r = backData.res
            bookId = backData.req.bookId
            info = self.books.get(bookId)
            info.epsCount = r.data['eps']["total"]
            page = r.data['eps']["page"]

            # 重新初始化
            pages = r.data['eps']["pages"]
            limit = r.data['eps']["limit"]
            # 优化,如果分页已经加载好了,只需要重新加载更新最后一页即可

            for i, data2 in enumerate(r.data['eps']['docs']):
                # index = (page -1) * limit + i
                epsId = data2.get('id')
                if epsId in info.epsDict:
                    epsInfo = info.epsDict[epsId]
                else:
                    epsInfo = BookEps()
                    info.epsDict[epsId] = epsInfo
                    # info.eps.append(epsInfo)
                ToolUtil.ParseFromData(epsInfo, data2)

            loadPage = int((len(info.epsDict) - 1) / limit + 1)
            nextPage = page + 1
            # 如果已经有了,则从最后那一页加载起就可以了
            if loadPage > nextPage:
                nextPage = loadPage

            info.eps = list(info.epsDict.values())
            info.eps.sort(key=lambda a: a.order)

            if nextPage <= pages:
                self.server.Send(req.GetComicsBookEpsReq(bookId, nextPage),
                                 bakParam=backData.bakParam,
                                 isASync=False)
                return Status.WaitLoad
            return Status.Ok
        except Exception as es:
            Log.Error(es)
            return Status.Error
Exemple #30
0
 def AddBookByIdBack(self, backData):
     try:
         if backData.res.data.get("comic"):
             info = self.books.get(backData.res.data['comic']['_id'])
             if not info:
                 info = Book()
             ToolUtil.ParseFromData(info, backData.res.data['comic'])
             self.books[info.id] = info
             return Status.Ok
         else:
             Log.Warn("未找到书籍, bookId:{}".format(backData))
             return Status.NotFoundBook
     except Exception as es:
         import sys
         cur_tb = sys.exc_info()[
             2]  # return (exc_type, exc_value, traceback)
         e = sys.exc_info()[1]
         Log.Error(cur_tb, e)
         return Status.NetError