def _Download(self, task): try: if not isinstance(task.req, req.SpeedTestReq): for cachePath in [task.cacheAndLoadPath, task.loadPath]: if cachePath and task.bakParam: data = ToolUtil.LoadCachePicture(cachePath) if data: from src.qt.util.qttask import QtTask QtTask().downloadBack.emit(task.bakParam, len(data), data) QtTask().downloadBack.emit(task.bakParam, 0, b"") return request = task.req if request.params == None: request.params = {} if request.headers == None: request.headers = {} r = self.session.get(request.url, proxies=request.proxy, headers=request.headers, stream=True, timeout=task.timeout, verify=False) # task.res = res.BaseRes(r) task.res = r except Exception as es: task.status = Status.NetError self.handler.get(task.req.__class__)(task) if task.res: task.res.close()
def __call__(self, backData): if backData.status != Status.Ok: if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, "") else: r = backData.res try: if r.status_code != 200: if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, "") return fileSize = int(r.headers.get('Content-Length', 0)) getSize = 0 now = time.time() consume = 1 for chunk in r.iter_content(chunk_size=10240): getSize += len(chunk) consume = time.time() - now if consume >= 2: break downloadSize = getSize / consume speed = ToolUtil.GetDownloadSize(downloadSize) if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, speed) except Exception as es: Log.Error(es) if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, "")
def __call__(self, backData): if backData.status != Status.Ok: if backData.bakParam: QtTask().downloadBack.emit(backData.bakParam, -1, b"") else: r = backData.res try: if r.status_code != 200: if backData.bakParam: QtTask().downloadBack.emit(backData.bakParam, -1, b"") return fileSize = int(r.headers.get('Content-Length', 0)) getSize = 0 data = b"" for chunk in r.iter_content(chunk_size=1024): if backData.bakParam: QtTask().downloadBack.emit(backData.bakParam, fileSize-getSize, chunk) getSize += len(chunk) data += chunk if backData.bakParam: QtTask().downloadBack.emit(backData.bakParam, 0, b"") # Log.Info("size:{}, url:{}".format(ToolUtil.GetDownloadSize(fileSize), backData.req.url)) if backData.cacheAndLoadPath and config.IsUseCache and len(data) > 0: filePath = backData.cacheAndLoadPath fileDir = os.path.dirname(filePath) if not os.path.isdir(fileDir): os.makedirs(fileDir) with open(filePath, "wb+") as f: f.write(data) Log.Debug("add download cache, cachePath:{}".format(filePath)) except Exception as es: Log.Error(es) if backData.bakParam: QtTask().downloadBack.emit(backData.bakParam, -1, b"")
def _RecvBroadcastMsg(self, data): msg = data.get("message", "") name = data.get("name", "") info = QtChatRoomMsg() info.commentLabel.setText(msg) info.nameLabel.setText(name) info.numLabel.setText("{}楼".format(str(self.indexMsgId + 1))) imageData = data.get("image") if not imageData: replay = data.get("reply", "") replayName = data.get("reply_name", "") if replay and replayName: info.replayLabel.setText(replayName + "\n" + replay) info.replayLabel.setVisible(True) else: info.replayLabel.setVisible(False) else: info.replayLabel.setVisible(False) image = QPixmap() imageData = imageData.split(",", 1) if len(imageData) >= 2: byte = base64.b64decode(imageData[1]) image.loadFromData(byte) width = info.commentLabel.width() height = info.commentLabel.height() image.scaled(width, height, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) info.commentLabel.setPixmap(image) url = data.get("avatar") if url and config.IsLoadingPicture: if isinstance(url, dict): QtTask().AddDownloadTask(url.get("fileServer"), url.get("path"), None, self.LoadingPictureComplete, True, self.indexMsgId, True, self.GetName()) else: QtTask().AddDownloadTask(url, "", None, self.LoadingPictureComplete, True, self.indexMsgId, True, self.GetName()) self.verticalLayout_2.addWidget(info) self.msgInfo[self.indexMsgId] = info self.indexMsgId += 1 if len(self.msgInfo) > self.maxMsgInfo: removeInfo = self.msgInfo.get(self.removeMsgId) if removeInfo: removeInfo.setParent(None) self.msgInfo.pop(self.removeMsgId) self.removeMsgId += 1 return
def Clear(self): self.qtTool.UpdateText("") self.qtTool.UpdateProcessBar(None) self.bookId = "" self.epsId = 0 self.maxPic = 0 self.curIndex = 0 self.frame.scaleCnt = 0 self.pictureData.clear() self.waifu2xIdToIndex.clear() self.indexToWaifu2xId.clear() self.waitWaifuPicData.clear() self.waitPicData.clear() QtTask().CancelTasks(self.closeFlag) QtTask().CancelConver(self.closeFlag)
def __call__(self, backData): from src.index.book import BookMgr st = BookMgr().AddBookEpsPicInfoBack(backData) if st == Status.WaitLoad: return if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, st)
def AddUserItem(self, commnetId, commentsCount, likesCount, content, name, createdTime, floor, url="", path="", originalName="", title="", level=1): index = self.count() iwidget = QtComment(self) iwidget.id = commnetId iwidget.commentLabel.setText(content) iwidget.nameLabel.setText(name) iwidget.numLabel.setText("({})".format(commentsCount)) iwidget.starLabel.setText("({})".format(likesCount)) iwidget.levelLabel.setText(" LV" + str(level) + " ") iwidget.titleLabel.setText(" " + title + " ") if createdTime: timeArray, day = ToolUtil.GetDateStr(createdTime) if day >= 1: iwidget.dateLabel.setText("{}天前".format(str(day))) else: strTime = "{}:{}:{}".format(timeArray.tm_hour, timeArray.tm_min, timeArray.tm_sec) iwidget.dateLabel.setText("{}".format(strTime)) iwidget.indexLabel.setText("{}楼".format(str(floor))) item = QListWidgetItem(self) item.setSizeHint(iwidget.sizeHint()) self.setItemWidget(item, iwidget) if url and config.IsLoadingPicture: QtTask().AddDownloadTask(url, path, None, self.LoadingPictureComplete, True, index, True, self.GetName()) pass
def StartSpeedTest(self): if len(self.speedTest) <= self.speedIndex: self.testSpeedButton.setEnabled(True) self.loginButton.setEnabled(True) self.registerButton.setEnabled(True) return address, httpProxy = self.speedTest[self.speedIndex] if httpProxy and not config.HttpProxy: row = self.speedIndex // 2 + 1 col = self.speedIndex % 2 + 1 item = self.gridLayout_4.itemAtPosition(row, col) if item: item.widget().setText("无代理") else: label = QLabel("无代理") label.setAlignment(Qt.AlignCenter) self.gridLayout_4.addWidget(label, row, col, 1, 1) self.speedIndex += 1 self.StartSpeedTest() return request = req.SpeedTestReq() # token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MDEyMjg3YzYxYWFlODJmZDJjMGQzNTUiLCJlbWFpbCI6InRvbnF1ZXIyIiwicm9sZSI6Im1lbWJlciIsIm5hbWUiOiJ0b25xdWVyMiIsInZlcnNpb24iOiIyLjIuMS4zLjMuNCIsImJ1aWxkVmVyc2lvbiI6IjQ1IiwicGxhdGZvcm0iOiJhbmRyb2lkIiwiaWF0IjoxNjE0MjQxODY1LCJleHAiOjE2MTQ4NDY2NjV9.ZUmRP319zREBHk3ax_dJh-qeUDFLmOg_RQBPAMWN8II" testIp = address index = self.speedIndex if httpProxy: request.proxy = {"http": config.HttpProxy, "https": config.HttpProxy} else: request.proxy = "" QtTask().AddHttpTask(lambda x: Server().TestSpeed(request, x, testIp), self.SpeedTestBack, index) return
def AddConvert(self): savePath = os.path.join(self.parent.savePath, ToolUtil.GetCanSaveName(self.epsTitle)) filePath = os.path.join( savePath, "{:04}.{}".format(self.curPreConvertId + 1, "jpg")) if not os.path.isfile(filePath): self.status = DownloadInfo.NotFound self.parent.SetConvertStatu(self.status) return isConvertNext = True while self.curPreConvertId < self.picCnt: if os.path.isfile(self.curConvertPath): self.curPreConvertId += 1 else: isConvertNext = False f = open(filePath, "rb") data = f.read() f.close() w, h = ToolUtil.GetPictureSize(data) model = ToolUtil.GetDownloadScaleModel(w, h) QtTask().AddConvertTask("", data, model, self.AddConvertBack, cleanFlag="download_{}".format( self.parent.bookId)) break self.parent.UpdateTableItem() if isConvertNext: self.StartConvert() return
def Login(self): self.SetSelectIp() userId = self.userIdEdit.text() passwd = self.passwdEdit.text() User().SetUserInfo(userId, passwd) QtTask().AddHttpTask(lambda x: User().Login(x), self.LoginBack) self.owner().loadingForm.show()
def __call__(self, backData): if backData.res.code == 200: if backData.res.data.get("action") == "un_favourite": pass else: pass if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, Status.Ok)
def ShowImg(self, data): if data: self.data = data self.waifu2xData = b"" QtTask().CancelConver("QtImg") self._ShowImg(data) elif self.data: self._ShowImg(self.data) else: pass
def AddCovertData(self, picInfo, i): info = self.pictureData[i] if not info and info.data: return assert isinstance(info, QtFileData) # path = self.owner().downloadForm.GetConvertFilePath(self.bookId, self.epsId, i) QtTask().AddConvertTask(picInfo.path + info.model, info.data, info.model, self.Waifu2xBack, i, self.closeFlag) self.waitWaifuPicData.add(i)
def AddBookItem(self, _id, title, info="", url="", path="", param="", originalName=""): index = self.count() iwidget = ItemWidget(_id, title, str(index+1), info, param, self) item = QListWidgetItem(self) item.setSizeHint(iwidget.sizeHint()) self.setItemWidget(item, iwidget) iwidget.picIcon.setText("图片加载中...") if url and path and config.IsLoadingPicture: QtTask().AddDownloadTask(url, path, None, self.LoadingPictureComplete, True, index, True, self.GetName()) pass
def StartWaifu2x(self): if not QtImgMgr().data: return self.comboBox.setEnabled(False) self.changeButton.setEnabled(False) self.index = self.comboBox.currentIndex() index = self.comboBox.currentIndex() model = ToolUtil.GetModelByIndex(index) QtTask().AddConvertTask("", QtImgMgr().data, model, self.AddConvertBack, cleanFlag="QtImg") self.changeButton.setText("正在转换") return
def AddDownload(self): bookInfo = BookMgr().books.get(self.parent.bookId) epsInfo = bookInfo.eps[self.epsId] picInfo = epsInfo.pics[self.curPreDownloadIndex] self.picCnt = len(epsInfo.pics) if os.path.isfile(self.curSavePath): self.curPreDownloadIndex += 1 return self.StartDownload() QtTask().AddDownloadTask(picInfo.fileServer, picInfo.path, downloadCallBack=self.AddDownloadBack, completeCallBack=self.AddDownloadCompleteBack, isSaveCache=False, cleanFlag="download_".format(self.parent.bookId))
def AddDownloadTask(self, i, picInfo): path = self.owner().downloadForm.GetDonwloadFilePath( self.bookId, self.epsId, i) QtTask().AddDownloadTask(picInfo.fileServer, picInfo.path, downloadCallBack=self.UpdateProcessBar, completeCallBack=self.CompleteDownloadPic, backParam=i, isSaveCache=True, cleanFlag=self.closeFlag, filePath=path) self.waitPicData.add(i) if i not in self.pictureData: data = QtFileData() self.pictureData[i] = data
def __call__(self, backData): updateInfo = re.findall(r"<meta property=\"og:description\" content=\"([^\"]*)\"", backData.res.raw.text) if updateInfo: data = updateInfo[0] else: data = "" info = re.findall(r"\d+\d*", os.path.basename(backData.res.raw.url)) 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 data = "\n\nv" + ".".join(info) + "\n" + data if version > curversion: if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, data)
def StartWaifu2x(self, format): if not self.data: return False if not config.CanWaifu2x: return False from waifu2x_vulkan import waifu2x_vulkan self.SetStatus(False) self.index = self.comboBox.currentIndex() index = self.comboBox.currentIndex() noise = int(self.noiseCombox.currentText()) if index == 0: modelName = "CUNET" elif index == 1: modelName = "PHOTO" elif index == 2: modelName = "ANIME_STYLE_ART_RGB" else: return False if noise == -1: noiseName = "NO_NOISE" else: noiseName = "NOISE"+str(noise) if modelName == "CUNET" and self.scaleRadio.isChecked() and round(float(self.scaleEdit.text()), 1) <= 1: modelInsence = "MODEL_{}_NO_SCALE_{}".format(modelName, noiseName) else: modelInsence = "MODEL_{}_{}".format(modelName, noiseName) if self.ttaModel.isChecked(): modelInsence += "_TTA" model = { "model": getattr(waifu2x_vulkan, modelInsence), } if self.scaleRadio.isChecked(): model['scale'] = round(float(self.scaleEdit.text()), 1) else: model['width'] = int(self.widthEdit.text()) model['high'] = int(self.heighEdit.text()) model['format'] = format self.backStatus = self.GetStatus() QtTask().AddConvertTask(self.data, model, self.AddConvertBack, cleanFlag="QtImg") self.changeLabel.setText(self.tr("正在转换")) return True
def AddConvert(self): savePath = os.path.join(self.parent.savePath, ToolUtil.GetCanSaveName(self.epsTitle)) filePath = os.path.join(savePath, "{:04}.{}".format(self.curPreConvertId + 1, "jpg")) if not os.path.isfile(filePath): self.status = DownloadInfo.Error self.parent.SetConvertStatu(self.status) return if os.path.isfile(self.curConvertPath): self.curPreConvertId += 1 return self.StartConvert() f = open(filePath, "rb") data = f.read() f.close() w, h = ToolUtil.GetPictureSize(data) model = ToolUtil.GetDownloadScaleModel(w, h) QtTask().AddConvertTask("", data, model, self.AddConvertBack, cleanFlag="download_".format(self.parent.bookId)) return
def ShowImg(self, data): if data: self.data = data self.waifu2xData = None QtTask().CancelConver("QtImg") self.obj.comboBox.setEnabled(True) self.obj.changeButton.setEnabled(True) self.obj.changeButton.setText("转换") self.obj.ShowImg(data) elif self.data: self.obj.comboBox.setEnabled(True) self.obj.changeButton.setEnabled(True) self.obj.changeButton.setText("转换") self.obj.ShowImg(self.data) else: self.obj.comboBox.setEnabled(True) self.obj.changeButton.setEnabled(True) self.obj.changeButton.setText("转换") self.obj.show()
def AddDownload(self): bookInfo = BookMgr().books.get(self.parent.bookId) epsInfo = bookInfo.eps[self.epsId] isDownloadNext = True while self.curPreDownloadIndex < len(epsInfo.pics): bookInfo = BookMgr().books.get(self.parent.bookId) epsInfo = bookInfo.eps[self.epsId] picInfo = epsInfo.pics[self.curPreDownloadIndex] self.picCnt = len(epsInfo.pics) if os.path.isfile(self.curSavePath): self.curPreDownloadIndex += 1 else: isDownloadNext = False QtTask().AddDownloadTask( picInfo.fileServer, picInfo.path, downloadCallBack=self.AddDownloadBack, completeCallBack=self.AddDownloadCompleteBack, isSaveCache=False, cleanFlag="download_{}".format(self.parent.bookId)) break self.parent.UpdateTableItem() if isDownloadNext: self.StartDownload()
def Init(self): self.owner().loadingForm.show() QtTask().AddHttpTask(lambda x: User().Init(x), self.InitBack) return
def __call__(self, backData): from src.user.user import User st = User().RegisterBack(backData) time.sleep(0.1) if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, st)
def __call__(self, backData): if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, backData.res.raw.text)
def __call__(self, backData): from src.user.user import User st = User().PunchedBack(backData) if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, st)
def __init__(self): QtWidgets.QMainWindow.__init__(self) Ui_MainWindow.__init__(self) self.userInfo = None self.setupUi(self) self.setWindowTitle("哔咔漫画") self.msgForm = QtBubbleLabel(self) self.qtTask = QtTask() icon = QIcon() pic = QPixmap() pic.loadFromData(resources.DataMgr.GetData("logo_round")) icon.addPixmap(pic, QIcon.Normal, QIcon.Off) self.setWindowIcon(icon) self.aboutForm = QtAbout(self) self.indexForm = QtIndex(self) self.searchForm = QtSearch(self) self.favoriteForm = QtFavorite(self) self.downloadForm = QtDownload(self) self.categoryForm = QtCategory(self) self.loadingForm = QtLoading(self) self.leaveMsgForm = QtLeaveMsg(self) self.chatForm = QtChat(self) self.rankForm = QtRank(self) self.loginForm = QtLogin(self) self.registerForm = QtRegister(self) self.historyForm = QtHistory(self) self.qtReadImg = QtReadImg(self) self.userForm = QtUser(self) self.bookInfoForm = QtBookInfo(self) self.epsInfoForm = QtEpsInfo(self) self.task = QtTask() self.task.SetOwner(self) self.timer = QTimer(self) self.timer.setInterval(100) # self.timer.timeout.connect(self.OnTimeOut) # self.timer.start() self.stackedWidget.addWidget(self.loginForm) self.stackedWidget.addWidget(self.userForm) self.settingForm = QtSetting(self) self.settingForm.LoadSetting() self.resize(self.settingForm.mainSize) self.bookInfoForm.resize(self.settingForm.bookSize) self.qtReadImg.resize(self.settingForm.readSize) self.loginForm.userIdEdit.setText(self.settingForm.userId) self.loginForm.passwdEdit.setText(self.settingForm.passwd) self.menusetting.triggered.connect(self.OpenSetting) self.menuabout.triggered.connect(self.OpenAbout)
class BikaQtMainWindow(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) Ui_MainWindow.__init__(self) self.userInfo = None self.setupUi(self) self.setWindowTitle("哔咔漫画") self.msgForm = QtBubbleLabel(self) self.qtTask = QtTask() icon = QIcon() pic = QPixmap() pic.loadFromData(resources.DataMgr.GetData("logo_round")) icon.addPixmap(pic, QIcon.Normal, QIcon.Off) self.setWindowIcon(icon) self.aboutForm = QtAbout(self) self.indexForm = QtIndex(self) self.searchForm = QtSearch(self) self.favoriteForm = QtFavorite(self) self.downloadForm = QtDownload(self) self.categoryForm = QtCategory(self) self.loadingForm = QtLoading(self) self.leaveMsgForm = QtLeaveMsg(self) self.chatForm = QtChat(self) self.rankForm = QtRank(self) self.loginForm = QtLogin(self) self.registerForm = QtRegister(self) self.historyForm = QtHistory(self) self.qtReadImg = QtReadImg(self) self.userForm = QtUser(self) self.bookInfoForm = QtBookInfo(self) self.epsInfoForm = QtEpsInfo(self) self.task = QtTask() self.task.SetOwner(self) self.timer = QTimer(self) self.timer.setInterval(100) # self.timer.timeout.connect(self.OnTimeOut) # self.timer.start() self.stackedWidget.addWidget(self.loginForm) self.stackedWidget.addWidget(self.userForm) self.settingForm = QtSetting(self) self.settingForm.LoadSetting() self.resize(self.settingForm.mainSize) self.bookInfoForm.resize(self.settingForm.bookSize) self.qtReadImg.resize(self.settingForm.readSize) self.loginForm.userIdEdit.setText(self.settingForm.userId) self.loginForm.passwdEdit.setText(self.settingForm.passwd) self.menusetting.triggered.connect(self.OpenSetting) self.menuabout.triggered.connect(self.OpenAbout) # def ClearExpiredCache(self): # try: # toPath = os.path.join(config.SavePath, config.CachePathDir) # for root, dirs, names in os.walk(toPath): # for name in names: # isDel = False # filename = os.path.join(root, name) # with open(filename, "rb") as f: # nameSize = int().from_bytes(f.read(2), byteorder='little') # timeTick = int().from_bytes(f.read(4), byteorder='little') # # if int(time.time()) - timeTick >= config.CacheExpired: # # isDel = True # # if isDel: # os.remove(filename) # # except Exception as es: # Log.Error(es) # def OnTimeOut(self): # self.task.run() def closeEvent(self, a0: QtGui.QCloseEvent) -> None: super().closeEvent(a0) userId = self.loginForm.userIdEdit.text() passwd = self.loginForm.passwdEdit.text() self.bookInfoForm.close() self.settingForm.ExitSaveSetting(self.size(), self.bookInfoForm.size(), self.qtReadImg.size(), userId, passwd) def Init(self): if config.CanWaifu2x: import waifu2x stat = waifu2x.Init(config.Encode, config.Waifu2xThread) if stat < 0: self.msgForm.ShowError("waifu2x初始化错误") gpuInfo = waifu2x.GetGpuInfo() if gpuInfo: self.settingForm.SetGpuInfos(gpuInfo) Log.Info("waifu2x初始化: " + str(stat) + " encode: " + str(config.Encode)) else: self.msgForm.ShowError("waifu2x无法启用, "+config.ErrorMsg) self.settingForm.checkBox.setEnabled(False) self.qtReadImg.frame.qtTool.checkBox.setEnabled(False) self.downloadForm.autoConvert = False self.downloadForm.radioButton.setEnabled(False) QtImgMgr().obj.radioButton.setEnabled(False) QtImgMgr().obj.changeButton.setEnabled(False) QtImgMgr().obj.changeButton.setEnabled(False) QtImgMgr().obj.comboBox.setEnabled(False) config.IsOpenWaifu = 0 self.InitUpdate() self.loginForm.Init() return def OpenSetting(self): self.settingForm.show() pass def OpenAbout(self, action): if action.text() == "about": self.aboutForm.show() elif action.text() == "img convert": QtImgMgr().ShowImg("") pass def InitUpdate(self): self.qtTask.AddHttpTask(lambda x: Server().Send(req.CheckUpdateReq(), bakParam=x), self.InitUpdateBack) 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)
def __call__(self, backData): from src.index.category import CateGoryMgr CateGoryMgr().UpdateCateGoryBack(backData) if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, Status.Ok)
def __call__(self, backData): from src.user.user import User st, page = User().UpdateFavoritesBack(backData) time.sleep(0.1) if backData.bakParam: QtTask().taskBack.emit(backData.bakParam, st)