diff --git a/LunaTranslator/LunaTranslator/LunaTranslator.py b/LunaTranslator/LunaTranslator/LunaTranslator.py index 2c7e026d..aeb84c0d 100644 --- a/LunaTranslator/LunaTranslator/LunaTranslator.py +++ b/LunaTranslator/LunaTranslator/LunaTranslator.py @@ -43,7 +43,6 @@ import winsharedutils from winsharedutils import pid_running from myutils.post import POSTSOLVE -from gui.usefulwidget import Prompt class _autolock: @@ -112,7 +111,6 @@ def using(self): except: print_exc() - def solvebeforetrans(self, content): contexts = [] self.zhanweifu = 0 @@ -819,7 +817,6 @@ def mainuiloadafter(self): self.startoutputer() self.settin_ui = Settin(self.translation_ui) self.transhis = gui.transhist.transhist(self.settin_ui) - gobject.baseobject.Prompt = Prompt() self.startreader() self.edittextui = gui.edittext.edittext(self.settin_ui) diff --git a/LunaTranslator/LunaTranslator/gui/dialog_savedgame.py b/LunaTranslator/LunaTranslator/gui/dialog_savedgame.py index d839aa3e..2873fe5f 100644 --- a/LunaTranslator/LunaTranslator/gui/dialog_savedgame.py +++ b/LunaTranslator/LunaTranslator/gui/dialog_savedgame.py @@ -1,4 +1,4 @@ -import functools, time, qtawesome, platform +import functools, time from datetime import datetime, timedelta from gui.specialwidget import ScrollFlow, chartwidget, lazyscrollflow from PyQt5.QtWidgets import ( @@ -22,7 +22,7 @@ ) import windows from PyQt5.QtCore import QRect, QSize, Qt, pyqtSignal, QObject -import os, hashlib +import os from PyQt5.QtWidgets import ( QApplication, QSizePolicy, @@ -39,7 +39,7 @@ QPainter, QPen, ) -from PyQt5.QtCore import Qt, QPoint +from PyQt5.QtCore import Qt from gui.usefulwidget import ( getsimplecombobox, getspinbox, @@ -58,10 +58,15 @@ import gobject from myutils.config import _TR, _TRL, globalconfig, static_data import winsharedutils -from myutils.wrapper import Singleton_close, Singleton, threader +from myutils.wrapper import Singleton_close, Singleton, threader, tryprint from myutils.utils import checkifnewgame, vidchangedtask -from myutils.proxy import getproxy -from gui.usefulwidget import yuitsu_switch, saveposwindow, getboxlayout +from gui.usefulwidget import ( + yuitsu_switch, + saveposwindow, + getboxlayout, + auto_select_webview, + Prompt_dialog, +) from myutils.vndb import parsehtmlmethod from gui.inputdialog import noundictconfigdialog1 @@ -242,99 +247,333 @@ def mousePressEvent(self, event): super().mousePressEvent(event) -@Singleton -class browserdialog(QDialog): +class ClickableLabel(QLabel): + def __init__(self): + super().__init__() + self.setClickable(True) + + def setClickable(self, clickable): + self._clickable = clickable + + def mousePressEvent(self, event): + if self._clickable and event.button() == Qt.LeftButton: + self.clicked.emit() + + clicked = pyqtSignal() + + +class tagitem(QWidget): + # website + TYPE_GLOABL_LIKE = 3 + TYPE_GAME_LIKE = 1 + # search game + TYPE_RAND = 0 + TYPE_DEVELOPER = 1 + TYPE_TAG = 2 + TYPE_USERTAG = 3 + TYPE_EXISTS = 4 + removesignal = pyqtSignal(tuple) + labelclicked = pyqtSignal(tuple) + + def remove(self): + self.hide() + _lay = self.layout() + _ws = [] + for i in range(_lay.count()): + witem = _lay.itemAt(i) + _ws.append(witem.widget()) + for w in _ws: + _lay.removeWidget(w) + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + if self._type == tagitem.TYPE_RAND: + border_color = Qt.black + elif self._type == tagitem.TYPE_DEVELOPER: + border_color = Qt.red + elif self._type == tagitem.TYPE_TAG: + border_color = Qt.green + elif self._type == tagitem.TYPE_USERTAG: + border_color = Qt.blue + elif self._type == tagitem.TYPE_EXISTS: + border_color = Qt.yellow + border_width = 1 + pen = QPen(border_color) + pen.setWidth(border_width) + painter.setPen(pen) + painter.drawRect(self.rect()) + + def __init__(self, tag, removeable=True, _type=TYPE_RAND, refdata=None) -> None: + super().__init__() + tagLayout = QHBoxLayout() + tagLayout.setContentsMargins(0, 0, 0, 0) + self._type = _type + key = (tag, _type, refdata) + self.setLayout(tagLayout) + lb = ClickableLabel() + lb.setText(tag) + lb.clicked.connect(functools.partial(self.labelclicked.emit, key)) + tagLayout.addWidget(lb) + if removeable: + button = getcolorbutton( + None, + None, + functools.partial(self.removesignal.emit, key), # self.removeTag(tag), + icon="fa.times", + constcolor="#FF69B4", + sizefixed=True, + ) + tagLayout.addWidget(button) + + +class TagWidget(QWidget): + tagschanged = pyqtSignal(tuple) # ((tag,type,refdata),) + linepressedenter = pyqtSignal(str) + tagclicked = pyqtSignal(tuple) # tag,type,refdata + + def __init__(self, parent=None): + super().__init__(parent) + + layout = QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + + self.setLayout(layout) + + self.lineEdit = QComboBox() + self.lineEdit.setLineEdit(QLineEdit()) - def parsehtml(self, exepath): + self.lineEdit.lineEdit().returnPressed.connect( + lambda: self.linepressedenter.emit(self.lineEdit.currentText()) + ) + + self.lineEdit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) + + layout.addWidget(self.lineEdit) + self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) + + self.tag2widget = {} + + def addTags(self, tags, signal=True): + for key in tags: + self.__addTag(key) + self.__calltagschanged(signal) + + @tryprint + def __addTag(self, key): + tag, _type, refdata = key + if not tag: + return + if key in self.tag2widget: + return + qw = tagitem(tag, _type=_type, refdata=refdata) + qw.removesignal.connect(self.removeTag) + qw.labelclicked.connect(self.tagclicked.emit) + layout = self.layout() + layout.insertWidget(layout.count() - 1, qw) + self.tag2widget[key] = qw + self.lineEdit.setFocus() + + def addTag(self, tag, _type, refdata=None, signal=True): + self.__addTag((tag, _type, refdata)) + self.__calltagschanged(signal) + + @tryprint + def __removeTag(self, key): + _w = self.tag2widget[key] + _w.remove() + + self.layout().removeWidget(_w) + self.tag2widget.pop(key) + + def removeTag(self, key, signal=True): + self.__removeTag(key) + self.__calltagschanged(signal) + + def __calltagschanged(self, signal): + if signal: + self.tagschanged.emit(tuple(self.tag2widget.keys())) + + def clearTag(self, signal=True): + for key in self.tag2widget.copy(): + self.__removeTag(key) + self.__calltagschanged(signal) + + +class _browserdialog(saveposwindow): + seturlsignal = pyqtSignal(str) + + def parsehtml(self, url): try: - newpath = parsehtmlmethod(savehook_new_data[exepath]["infopath"]) + newpath = parsehtmlmethod(url) except: print_exc() - newpath = savehook_new_data[exepath]["infopath"] + newpath = url if newpath[:4].lower() != "http": newpath = os.path.abspath(newpath) return newpath - def resizeEvent(self, a0: QResizeEvent) -> None: - if self._resizable == False: - return - self.nettab.resize(a0.size().width(), self.nettab.height()) - rate = QApplication.instance().devicePixelRatio() - rect = ( - 0, - int(rate * self.nettab.height()), - int(rate * a0.size().width()), - int(rate * (a0.size().height() - self.nettab.height())), - ) - if self.webviewv == 0: - self.browser.resize(*rect) - elif self.webviewv == 1: - # self.browser.set_geo(*rect) - from webviewpy import webview_native_handle_kind_t - - hwnd = self.browser.get_native_handle( - webview_native_handle_kind_t.WEBVIEW_NATIVE_HANDLE_KIND_UI_WIDGET - ) - windows.MoveWindow(hwnd, rect[0], rect[1], rect[2], rect[3], True) + def startupsettitle(self, exepath): - def __init__(self, parent, textsource_or_exepath) -> None: - super().__init__(parent, Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint) - if isinstance(textsource_or_exepath, str): - self.exepath = textsource_or_exepath + if exepath: + title = savehook_new_data[exepath]["title"] else: - try: - self.exepath = textsource_or_exepath.pname - except: - self.exepath = "0" - self._resizable = False - - self.webviewv = globalconfig["usewebview"] - if self.webviewv == 0: - self.browser = winsharedutils.HTMLBrowser(int(self.winId())) - elif self.webviewv == 1: - from webviewpy import Webview, declare_library_path, webview_exception - - declare_library_path( - os.path.abspath( - os.path.join( - "files/plugins/", - ("DLL32", "DLL64")[platform.architecture()[0] == "64bit"], - "webview", + title = "LunaTranslator" + self.setWindowTitle(title) + + def loadalllinks(self, exepath): + items = [] + if exepath: + self.setWindowTitle(savehook_new_data[exepath]["title"]) + + for link in globalconfig["relationlinks"]: + items.append((link[0], tagitem.TYPE_GLOABL_LIKE, link[1])) + if exepath: + for link in savehook_new_data[self.exepath]["relationlinks"]: + items.append((link[0], tagitem.TYPE_GAME_LIKE, link[1])) + + self.tagswidget.clearTag(False) + self.tagswidget.addTags(items) + + def startupnavi(self, exepath): + for idx in range(1, 100): + if idx == 1: + if exepath: + hasvndb = bool( + savehook_new_data[exepath]["infopath"] + and os.path.exists(savehook_new_data[exepath]["infopath"]) ) - ) - ) - try: - self.browser = Webview(False, int(self.winId())) - except webview_exception: - self.browser = winsharedutils.HTMLBrowser(int(self.winId())) - self.webviewv = 0 - self.setWindowTitle(savehook_new_data[self.exepath]["title"]) - self.nettab = QTabWidget(self) - self.nettab.setFixedHeight(self.nettab.tabBar().height()) - tabBar = CustomTabBar(self) - self.nettab.setTabBar(tabBar) - tabBar.lastclick.connect(self.lastclicked) - # self.nettab.setSizePolicy( QSizePolicy.Preferred,QSizePolicy.Fixed) - self.hasvndb = bool( - savehook_new_data[self.exepath]["infopath"] - and os.path.exists(savehook_new_data[self.exepath]["infopath"]) + if hasvndb: + navitarget = self.parsehtml( + savehook_new_data[exepath]["infopath"] + ) + break + elif idx == 2: + + if exepath: + if len(savehook_new_data[exepath]["relationlinks"]): + navitarget = savehook_new_data[exepath]["relationlinks"][-1][1] + break + elif idx == 3: + if len(globalconfig["relationlinks"]): + navitarget = globalconfig["relationlinks"][-1][1] + break + else: + navitarget = None + break + if navitarget: + self.browser.navigate(navitarget) + self.urlchanged(navitarget) + + def urlchanged(self, url): + self.tagswidget.lineEdit.setCurrentText(url) + self.current = url + + def likelink(self): + _dia = Prompt_dialog( + gobject.baseobject.settin_ui, + _TR("收藏"), + "", + [ + [ + _TR("名称"), + ( + self.current.split("/")[-1] + if len(self.current.split("/")) + else "?" + ), + ], + [_TR("网址"), self.current], + ], ) - if self.hasvndb: - self.nettab.addTab(QWidget(), "vndb") - for lnk in savehook_new_data[self.exepath]["relationlinks"]: - self.nettab.addTab(QWidget(), lnk[0]) - self.nettab.addTab(QWidget(), "+") - self.nettab.currentChanged.connect(self.changetab) - self.nettab.setContextMenuPolicy(Qt.CustomContextMenu) - self.nettab.customContextMenuRequested.connect(self.showmenu) - if self.hasvndb + len(savehook_new_data[self.exepath]["relationlinks"]): - self.changetab(0) - # vbox.addWidget(self.nettab) - # vbox.addWidget(qww) - self._resizable = True - self.resize(1300, 800) - self.show() + _dia.exec() + + text = [] + for _t in _dia.text: + text.append(_t.text()) + if self.exepath: + savehook_new_data[self.exepath]["relationlinks"].append(text) + self.tagswidget.addTag(text[0], tagitem.TYPE_GAME_LIKE, text[1]) + else: + globalconfig["relationlinks"].append(text) + self.tagswidget.addTag(text[0], tagitem.TYPE_GLOABL_LIKE, text[1]) + + def tagschanged(self, tags): + __ = [] + __2 = [] + for _name, _type, _url in tags: + if _type == tagitem.TYPE_GLOABL_LIKE: + __.append([_name, _url]) + elif _type == tagitem.TYPE_GAME_LIKE: + __2.append([_name, _url]) + globalconfig["relationlinks"] = __ + if self.exepath: + savehook_new_data[self.exepath]["relationlinks"] = __2 + + def reinit(self, exepath=None): + + self.exepath = exepath + self.loadalllinks(exepath) + self.startupnavi(exepath) + self.startupsettitle(exepath) + + def closeEvent(self, event: QCloseEvent): + self.hide() + event.ignore() + + def __init__(self, parent) -> None: + super().__init__(parent, globalconfig, "browserwidget") + + self.browser = auto_select_webview(self) + + self.tagswidget = TagWidget(self) + self.tagswidget.tagschanged.connect(self.tagschanged) + + self.tagswidget.tagclicked.connect(self.urlclicked) + self.tagswidget.linepressedenter.connect(self.browser.navigate) + self.browser.on_load.connect(self.urlchanged) + + hlay = QHBoxLayout() + hlay.addWidget(self.tagswidget) + + hlay.addWidget( + getcolorbutton( + "", + "", + lambda _: self.likelink(), + icon="fa.heart", + constcolor="#FF69B4", + sizefixed=True, + ) + ) + hlay.addWidget( + getcolorbutton( + "", + "", + lambda _: self.urlclicked((None, None, self.current)), + icon="fa.repeat", + constcolor="#FF69B4", + sizefixed=True, + ) + ) + _topw = QWidget() + _topw.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + _topw.setLayout(hlay) + layout = QVBoxLayout() + layout.setContentsMargins(*(0 for i in range(4))) + hlay.setContentsMargins(*(0 for i in range(4))) + layout.addWidget(_topw) + layout.addWidget(self.browser) + __w = QWidget() + __w.setLayout(layout) + self.setCentralWidget(__w) + + def urlclicked(self, _): + tag, _, url = _ + if url.startswith("./cache/vndb"): + url = self.parsehtml(url) + self.browser.navigate(url) def showmenu(self, p): tab_index = self.nettab.tabBar().tabAt(p) @@ -351,33 +590,25 @@ def showmenu(self, p): tab_index - self.hasvndb ) - def lastclicked(self): - def callback(texts): - if len(texts[0].strip()) and len(texts[1].strip()): - savehook_new_data[self.exepath]["relationlinks"].append(texts) - self.nettab.insertTab(self.nettab.count() - 1, QWidget(), texts[0]) - - gobject.baseobject.Prompt.call.emit( - _TR("添加关联页面"), - _TR("页面类型_页面链接"), - [["vndb/2df/..."], "about:blank"], - [callback], - ) - def changetab(self, idx): - if self.hasvndb and idx == 0: - try: - self.browser.navigate((self.parsehtml(self.exepath))) - except: - self.browser.navigate("about:blank") - else: - lnks = savehook_new_data[self.exepath]["relationlinks"][idx - self.hasvndb] - if len(lnks) == 3 and os.path.exists(lnks[2]): - link = os.path.abspath(lnks[2]) - else: - link = lnks[1] - print(link) - self.browser.navigate(link) +_global_single_browser = (None, None) +_browser_lock = threading.Lock() + + +def browserdialog(parent, exepath=None): + + # webview2两次启动之间间隔不能太短。。。不然会在清理的时候又再次加载会崩溃 + with _browser_lock: + global _global_single_browser + if (_global_single_browser[0] != globalconfig["usewebview"]) or ( + _global_single_browser[1] is None + ): + _global_single_browser = ( + globalconfig["usewebview"], + _browserdialog(parent), + ) + _global_single_browser[1].reinit(exepath) + _global_single_browser[1].show() def getvndbrealtags(vndbtags_naive): @@ -789,7 +1020,8 @@ def getlabelsetting(self, exepath): def newitem(text, removeable, first=False, _type=tagitem.TYPE_RAND): qw = tagitem(text, removeable, _type) - def __(_qw, t, _type): + def __(_qw, _): + t, _type, _ = _ _qw.remove() i = savehook_new_data[exepath]["usertags"].index(t) self.labelflow.removeidx(i) @@ -798,13 +1030,9 @@ def __(_qw, t, _type): if removeable: qw.removesignal.connect(functools.partial(__, qw)) - def _lbclick(tp, t): - try: - _global_dialog_savedgame_new.tagswidget.addTag(t, tp) - except: - pass - - qw.labelclicked.connect(functools.partial(_lbclick, _type)) + qw.labelclicked.connect( + lambda _: _global_dialog_savedgame_new.tagswidget.addTag(*_) + ) if first: self.labelflow.insertwidget(0, qw) else: @@ -1233,179 +1461,6 @@ def newline(self, row, k): ) -class ClickableLabel(QLabel): - def __init__(self): - super().__init__() - self.setClickable(True) - - def setClickable(self, clickable): - self._clickable = clickable - - def mousePressEvent(self, event): - if self._clickable and event.button() == Qt.LeftButton: - self.clicked.emit() - - clicked = pyqtSignal() - - -class tagitem(QWidget): - TYPE_RAND = 0 - TYPE_DEVELOPER = 1 - TYPE_TAG = 2 - TYPE_USERTAG = 3 - TYPE_EXISTS = 4 - removesignal = pyqtSignal(str, int) - labelclicked = pyqtSignal(str) - - def remove(self): - self.hide() - _lay = self.layout() - _ws = [] - for i in range(_lay.count()): - witem = _lay.itemAt(i) - _ws.append(witem.widget()) - for w in _ws: - _lay.removeWidget(w) - - def paintEvent(self, event): - painter = QPainter(self) - painter.setRenderHint(QPainter.Antialiasing) - if self._type == tagitem.TYPE_RAND: - border_color = Qt.black - elif self._type == tagitem.TYPE_DEVELOPER: - border_color = Qt.red - elif self._type == tagitem.TYPE_TAG: - border_color = Qt.green - elif self._type == tagitem.TYPE_USERTAG: - border_color = Qt.blue - elif self._type == tagitem.TYPE_EXISTS: - border_color = Qt.yellow - border_width = 1 - pen = QPen(border_color) - pen.setWidth(border_width) - painter.setPen(pen) - painter.drawRect(self.rect()) - - def __init__(self, tag, removeable=True, _type=TYPE_RAND) -> None: - super().__init__() - tagLayout = QHBoxLayout() - tagLayout.setContentsMargins(0, 0, 0, 0) - self._type = _type - self.setLayout(tagLayout) - - lb = ClickableLabel() - lb.setText(tag) - lb.clicked.connect(lambda: self.labelclicked.emit(tag)) - tagLayout.addWidget(lb) - if removeable: - button = getcolorbutton( - None, - None, - lambda: self.removesignal.emit(tag, self._type), # self.removeTag(tag), - qicon=qtawesome.icon( - "fa.times", - color="#FF69B4", - ), - sizefixed=True, - ) - tagLayout.addWidget(button) - - -class TagWidget(QWidget): - tagschanged = pyqtSignal(tuple) - - def __init__(self, parent=None): - super().__init__(parent) - self.tags = [] - - layout = QHBoxLayout() - layout.setContentsMargins(0, 0, 0, 0) - - layout.addWidget(QLabel(_TR("过滤"))) - layout.addWidget( - getcolorbutton( - "", - "", - lambda _: listediter( - parent, - _TR("标签集"), - _TRL( - [ - "删除", - "标签", - ] - ), - globalconfig["labelset"], - closecallback=refreshcombo, - ), - icon="fa.gear", - constcolor="#FF69B4", - ), - ) - self.setLayout(layout) - - self.lineEdit = QComboBox() - self.lineEdit.setLineEdit(QLineEdit()) - - def callback(): - t = self.lineEdit.currentText() - - if t in globalconfig["labelset"]: - tp = tagitem.TYPE_USERTAG - else: - tp = tagitem.TYPE_RAND - self.addTag(self.lineEdit.currentText(), tp) - self.lineEdit.clear() - self.lineEdit.addItems(globalconfig["labelset"]) - self.lineEdit.clearEditText() - - self.lineEdit.lineEdit().returnPressed.connect(callback) - - self.lineEdit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) - - layout.addWidget(self.lineEdit) - self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) - - self.tag2widget = {} - - def refreshcombo(): - _ = self.lineEdit.currentText() - self.lineEdit.clear() - self.lineEdit.addItems(globalconfig["labelset"]) - self.lineEdit.setCurrentText(_) - - refreshcombo() - - def addTag(self, tag, _type): - try: - if not tag: - return - if (tag, _type) in self.tag2widget: - return - self.tags.append(tag) - qw = tagitem(tag, _type=_type) - qw.removesignal.connect(self.removeTag) - - layout = self.layout() - # layout.insertLayout(layout.count() - 1, tagLayout) - layout.insertWidget(layout.count() - 1, qw) - self.tag2widget[(tag, _type)] = qw - self.lineEdit.clearEditText() - self.lineEdit.setFocus() - self.tagschanged.emit(tuple(self.tag2widget.keys())) - except: - print_exc() - - def removeTag(self, tag, _type): - _w = self.tag2widget[(tag, _type)] - _w.remove() - - self.layout().removeWidget(_w) - self.tag2widget.pop((tag, _type)) - self.lineEdit.setFocus() - self.tagschanged.emit(tuple(self.tag2widget.keys())) - - @Singleton_close class dialog_savedgame_new(saveposwindow): def startgame(self, game): @@ -1471,7 +1526,7 @@ def tagschanged(self, tags): if newtags != self.currtags: break notshow = False - for tag, _type in tags: + for tag, _type, _ in tags: if _type == tagitem.TYPE_EXISTS: if os.path.exists(k) == False: notshow = True @@ -1552,10 +1607,55 @@ def __init__(self, parent) -> None: if globalconfig["showintab_sub"]: showintab(int(self.winId()), True) formLayout = QVBoxLayout() + + layout = QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(QLabel(_TR("过滤"))) + + def refreshcombo(): + _ = self.tagswidget.lineEdit.currentText() + self.tagswidget.lineEdit.clear() + self.tagswidget.lineEdit.addItems(globalconfig["labelset"]) + self.tagswidget.lineEdit.setCurrentText(_) + + layout.addWidget( + getcolorbutton( + "", + "", + lambda _: listediter( + parent, + _TR("标签集"), + _TRL( + [ + "删除", + "标签", + ] + ), + globalconfig["labelset"], + closecallback=refreshcombo, + ), + icon="fa.gear", + constcolor="#FF69B4", + ), + ) + + def callback(t): + if t in globalconfig["labelset"]: + tp = tagitem.TYPE_USERTAG + else: + tp = tagitem.TYPE_RAND + self.tagswidget.addTag(t, tp) + + self.tagswidget.lineEdit.clear() + self.tagswidget.lineEdit.addItems(globalconfig["labelset"]) + self.tagswidget.lineEdit.clearEditText() + self.tagswidget = TagWidget(self) + self.tagswidget.linepressedenter.connect(callback) self.currtags = tuple() self.tagswidget.tagschanged.connect(self.tagschanged) - formLayout.addWidget(self.tagswidget) + layout.addWidget(self.tagswidget) + formLayout.addLayout(layout) self.flow = lazyscrollflow() self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.showmenu) diff --git a/LunaTranslator/LunaTranslator/gui/settingpage_xianshishezhi.py b/LunaTranslator/LunaTranslator/gui/settingpage_xianshishezhi.py index fae465be..11550a30 100644 --- a/LunaTranslator/LunaTranslator/gui/settingpage_xianshishezhi.py +++ b/LunaTranslator/LunaTranslator/gui/settingpage_xianshishezhi.py @@ -176,6 +176,7 @@ def __init__(self, parent, dict, key) -> None: self.show() def selectcallback(self, _): + print(_) self.dict[self.key] = _ self.close() diff --git a/LunaTranslator/LunaTranslator/gui/translatorUI.py b/LunaTranslator/LunaTranslator/gui/translatorUI.py index 6b4c0a09..d716914d 100644 --- a/LunaTranslator/LunaTranslator/gui/translatorUI.py +++ b/LunaTranslator/LunaTranslator/gui/translatorUI.py @@ -11,7 +11,7 @@ from PyQt5.QtGui import QCursor from PyQt5.QtWidgets import QLabel, QPushButton, QSystemTrayIcon import gobject -from myutils.wrapper import threader +from myutils.wrapper import threader, trypass import winsharedutils from myutils.config import globalconfig, saveallconfig, _TR, static_data from myutils.subproc import endsubprocs @@ -494,7 +494,8 @@ def simulate_key_ctrl(): ( "open_relative_link", lambda: browserdialog( - gobject.baseobject.settin_ui, gobject.baseobject.textsource + gobject.baseobject.settin_ui, + trypass(lambda: gobject.baseobject.textsource.pname)(), ), ), ( diff --git a/LunaTranslator/LunaTranslator/gui/usefulwidget.py b/LunaTranslator/LunaTranslator/gui/usefulwidget.py index cbdb73b6..ac70f6fd 100644 --- a/LunaTranslator/LunaTranslator/gui/usefulwidget.py +++ b/LunaTranslator/LunaTranslator/gui/usefulwidget.py @@ -8,9 +8,12 @@ QLabel, QSizePolicy, QHBoxLayout, + QWidget, ) -from PyQt5.QtGui import QCursor, QCloseEvent, QColor, QTextCursor -from PyQt5.QtCore import Qt, pyqtSignal, QSize, QObject + +from webviewpy import webview_native_handle_kind_t, Webview, declare_library_path +from PyQt5.QtGui import QCursor, QCloseEvent, QColor, QTextCursor, QResizeEvent +from PyQt5.QtCore import Qt, pyqtSignal, QSize from myutils.config import _TR, globalconfig from PyQt5.QtWidgets import ( QColorDialog, @@ -25,9 +28,10 @@ QVBoxLayout, ) from traceback import print_exc -import qtawesome, functools, gobject +import qtawesome, functools, threading, time, json from myutils.wrapper import Singleton -from winsharedutils import showintab +from winsharedutils import showintab, HTMLBrowser +import windows, os, platform @Singleton @@ -337,7 +341,7 @@ def mouseReleaseEvent(self, QMouseEvent): class Prompt_dialog(QDialog): - def __init__(self, parent, title, info, default="") -> None: + def __init__(self, parent, title, info, items) -> None: super().__init__(parent) self.setWindowFlags( self.windowFlags() @@ -353,14 +357,15 @@ def __init__(self, parent, title, info, default="") -> None: _layout.addWidget(QLabel(info)) self.text = [] - for _ in default: - if isinstance(_, str): - self.text.append(QLineEdit(_)) - else: - le = QLineEdit() - le.setPlaceholderText(_[0]) - self.text.append((le)) - _layout.addWidget(self.text[-1]) + for _ in items: + + le = QLineEdit() + le.setText(_[1]) + self.text.append((le)) + hl = QHBoxLayout() + hl.addWidget(QLabel(_[0])) + hl.addWidget(le) + _layout.addLayout(hl) button = QDialogButtonBox(QDialogButtonBox.Ok) button.accepted.connect(self.accept) _layout.addWidget(button) @@ -376,25 +381,6 @@ def __init__(self, parent, title, info, default="") -> None: break -class Prompt(QObject): - call = pyqtSignal(str, str, list, list) - - def __init__(self) -> None: - super().__init__() - self.call.connect(self.getinputfunc) - - def getinputfunc(self, title, info, default, callback): - - _dia = Prompt_dialog(gobject.baseobject.settin_ui, title, info, default) - - _dia.exec() - - text = [] - for _t in _dia.text: - text.append(_t.text()) - callback[0](text) - - def callbackwrap(d, k, call, _): d[k] = _ if call: @@ -534,3 +520,82 @@ def textbrowappendandmovetoend(textOutput, sentence, addspace=True): ) if atBottom: scrollbar.setValue(scrollbar.maximum()) + + +def getscaledrect(size: QSize): + rate = QApplication.instance().devicePixelRatio() + rect = ( + int(rate * size.width()), + int(rate * (size.height())), + ) + return rect + + +class WebivewWidget(QWidget): + on_load = pyqtSignal(str) + + def __init__(self, parent=None, debug=False) -> None: + super().__init__(parent) + declare_library_path( + os.path.abspath( + os.path.join( + "files/plugins/", + ("DLL32", "DLL64")[platform.architecture()[0] == "64bit"], + "webview", + ) + ) + ) + self.webview = Webview(debug=debug, window=int(self.winId())) + + self.webview.bind("__on_load", self._on_load) + self.webview.init("""window.__on_load(window.location.href)""") + + def _on_load(self, _, href): + self.on_load.emit(json.loads(href)[0]) + + def __getattr__(self, name): + return getattr(self.webview, (name)) + + def resizeEvent(self, a0: QResizeEvent) -> None: + hwnd = self.webview.get_native_handle( + webview_native_handle_kind_t.WEBVIEW_NATIVE_HANDLE_KIND_UI_WIDGET + ) + size = getscaledrect(a0.size()) + windows.MoveWindow(hwnd, 0, 0, size[0], size[1], True) + + +class mshtmlWidget(QWidget): + on_load = pyqtSignal(str) + + def __init__(self, parent=None) -> None: + super().__init__(parent) + self.browser = HTMLBrowser(int(self.winId())) + threading.Thread(target=self.__getcurrenturl).start() + + def __getcurrenturl(self): + url = None + while True: + _u = self.browser.get_current_url() + if url != _u: + url = _u + self.on_load.emit(_u) + time.sleep(0.5) + + def __getattr__(self, name): + return getattr(self.browser, (name)) + + def resizeEvent(self, a0: QResizeEvent) -> None: + size = getscaledrect(a0.size()) + self.browser.resize(0, 0, size[0], size[1]) + + +def auto_select_webview(parent): + + if globalconfig["usewebview"] == 0: + browser = mshtmlWidget(parent) + elif globalconfig["usewebview"] == 1: + try: + browser = WebivewWidget(parent, True) + except Exception: + browser = mshtmlWidget(parent) + return browser diff --git a/LunaTranslator/LunaTranslator/myutils/utils.py b/LunaTranslator/LunaTranslator/myutils/utils.py index 00a5cbfc..95f2e1dc 100644 --- a/LunaTranslator/LunaTranslator/myutils/utils.py +++ b/LunaTranslator/LunaTranslator/myutils/utils.py @@ -134,8 +134,8 @@ def everymethodsthread(): except: print_exc() continue - saveimg = data.get("imagepath", None) - saveinfo = data.get("infopath", None) + imagepath = data.get("imagepath", None) + infopath = data.get("infopath", None) vid = data.get("vid", None) title = data.get("title", None) namemap = data.get("namemap", None) @@ -145,12 +145,24 @@ def everymethodsthread(): continue print(data) savehook_new_data[gamepath]["vid"] = int(vid[1:]) - if saveimg and (not savehook_new_data[gamepath]["isimagepathusersetted"]): - savehook_new_data[gamepath]["imagepath"] = saveimg + if imagepath and (not savehook_new_data[gamepath]["isimagepathusersetted"]): + savehook_new_data[gamepath]["imagepath"] = imagepath if title and (not savehook_new_data[gamepath]["istitlesetted"]): savehook_new_data[gamepath]["title"] = title - if saveinfo: - savehook_new_data[gamepath]["infopath"] = saveinfo + if infopath: + savehook_new_data[gamepath]["infopath"] = infopath + + found = False + for link in savehook_new_data[gamepath]["relationlinks"]: + if link[1] == found: + found = True + if not found: + savehook_new_data[gamepath]["relationlinks"].append( + [vid, f"https://vndb.org/{vid}"] + ) + savehook_new_data[gamepath]["relationlinks"].append( + [vid + "_static", infopath] + ) if namemap: savehook_new_data[gamepath]["namemap"] = namemap if vndbtags: diff --git a/LunaTranslator/LunaTranslator/winsharedutils.py b/LunaTranslator/LunaTranslator/winsharedutils.py index 66b25d27..6bb1cd69 100644 --- a/LunaTranslator/LunaTranslator/winsharedutils.py +++ b/LunaTranslator/LunaTranslator/winsharedutils.py @@ -167,6 +167,8 @@ def clipboard_get(): html_resize.argtypes = c_void_p, c_uint, c_uint, c_uint, c_uint html_release = utilsdll.html_release html_release.argtypes = (c_void_p,) +html_get_current_url = utilsdll.html_get_current_url +html_get_current_url.argtypes = c_void_p, c_wchar_p class HTMLBrowser: @@ -185,6 +187,11 @@ def resize( def navigate(self, url): html_navigate(self.html, url) + def get_current_url(self): + w = create_unicode_buffer(65536) + html_get_current_url(self.html, w) + return w.value + def __del__(self): html_release(self.html) diff --git a/LunaTranslator/files/defaultconfig/config.json b/LunaTranslator/files/defaultconfig/config.json index 788a9eba..64d52271 100644 --- a/LunaTranslator/files/defaultconfig/config.json +++ b/LunaTranslator/files/defaultconfig/config.json @@ -15,6 +15,7 @@ "network":1, "hookmagpie":true, "imagewrapmode":0, + "relationlinks":[["LunaTranslator","https://github.com/HIllya51/LunaTranslator"],["vndb","https://vndb.org/"]], "hooklossless":true, "direct_filterrepeat":false, "allow_set_text_name":false, @@ -111,6 +112,12 @@ 1200, 600 ], + "browserwidget": [ + 100, + 100, + 1300, + 800 + ], "sw_geo": [ 100, 100, diff --git a/LunaTranslator/files/defaultconfig/static_data.json b/LunaTranslator/files/defaultconfig/static_data.json index b9412a9a..288fd3e4 100644 --- a/LunaTranslator/files/defaultconfig/static_data.json +++ b/LunaTranslator/files/defaultconfig/static_data.json @@ -1,5 +1,5 @@ { - "version":"v2.46.1", + "version":"v2.46.2", "themes":{ "dark":[ {"file":"dark1.qss","name":"PyQtDarkTheme"}, diff --git a/LunaTranslator/files/lang/ar.json b/LunaTranslator/files/lang/ar.json index b8831230..c0c28ff0 100644 --- a/LunaTranslator/files/lang/ar.json +++ b/LunaTranslator/files/lang/ar.json @@ -675,7 +675,6 @@ "缩放方式": "طريقة التكبير", "缩放/恢复游戏窗口": "التكبير / استعادة نافذة اللعبة", "打开关联页面": "فتح صفحة الارتباط", - "添加关联页面": "إضافة ارتباط الصفحة", "页面类型": "نوع الصفحة", "页面链接": "رابط الصفحة", "缓存": "مخابئ", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "بدء اللعبة دون تعديل النظام", "使用自定义优化": "استخدام التخصيص الأمثل", "游戏管理": "إدارة الألعاب", - "显示标题": "عرض العنوان" + "显示标题": "عرض العنوان", + "收藏": "جمع", + "名称": "الإسم", + "网址": "عنوان الموقع" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/cht.json b/LunaTranslator/files/lang/cht.json index 911f6591..9525c830 100644 --- a/LunaTranslator/files/lang/cht.json +++ b/LunaTranslator/files/lang/cht.json @@ -675,7 +675,6 @@ "缩放方式": "縮放管道", "缩放/恢复游戏窗口": "縮放/恢復遊戲視窗", "打开关联页面": "打開關聯頁面", - "添加关联页面": "添加關聯頁面", "页面类型": "頁面類型", "页面链接": "頁面連結", "缓存": "緩存", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "啟動遊戲不修改順序", "使用自定义优化": "使用自定義優化", "游戏管理": "遊戲管理", - "显示标题": "顯示標題" + "显示标题": "顯示標題", + "收藏": "收藏", + "名称": "名稱", + "网址": "網址" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/en.json b/LunaTranslator/files/lang/en.json index b9dd1d8b..4c8add60 100644 --- a/LunaTranslator/files/lang/en.json +++ b/LunaTranslator/files/lang/en.json @@ -675,7 +675,6 @@ "缩放方式": "Zoom method", "缩放/恢复游戏窗口": "Zoom/Restore Game Window", "打开关联页面": "Open the associated page", - "添加关联页面": "Add associated page", "页面类型": "Page Type", "页面链接": "Page Link", "缓存": "cache", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Start the game without changing the order", "使用自定义优化": "Use custom optimization", "游戏管理": "Game Management", - "显示标题": "show heading" + "显示标题": "show heading", + "收藏": "collection", + "名称": "name", + "网址": "Website" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/es.json b/LunaTranslator/files/lang/es.json index c260293e..e44cda61 100644 --- a/LunaTranslator/files/lang/es.json +++ b/LunaTranslator/files/lang/es.json @@ -675,7 +675,6 @@ "缩放方式": "Modo de zoom", "缩放/恢复游戏窗口": "Ampliar / restaurar la ventana del juego", "打开关联页面": "Abrir página asociada", - "添加关联页面": "Añadir página asociada", "页面类型": "Tipo de página", "页面链接": "Enlace de página", "缓存": "Caché", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Iniciar el juego sin modificar el orden", "使用自定义优化": "Usar optimizaciones personalizadas", "游戏管理": "Gestión de juegos", - "显示标题": "Mostrar título" + "显示标题": "Mostrar título", + "收藏": "Colección", + "名称": "Nombre", + "网址": "Sitio web" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/fr.json b/LunaTranslator/files/lang/fr.json index 49558e25..cbdae19a 100644 --- a/LunaTranslator/files/lang/fr.json +++ b/LunaTranslator/files/lang/fr.json @@ -675,7 +675,6 @@ "缩放方式": "Mode de zoom", "缩放/恢复游戏窗口": "Zoom / restaurer la fenêtre de jeu", "打开关联页面": "Ouvrir la page associée", - "添加关联页面": "Ajouter une page associée", "页面类型": "Type de page", "页面链接": "Liens vers les pages", "缓存": "Cache", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Lancer le jeu sans modifier l'ordre", "使用自定义优化": "Utiliser l'optimisation personnalisée", "游戏管理": "Gestion des jeux", - "显示标题": "Afficher le titre" + "显示标题": "Afficher le titre", + "收藏": "Collections", + "名称": "Le nom", + "网址": "Adresse Web" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/it.json b/LunaTranslator/files/lang/it.json index d4da2ead..cd1f6dde 100644 --- a/LunaTranslator/files/lang/it.json +++ b/LunaTranslator/files/lang/it.json @@ -675,7 +675,6 @@ "缩放方式": "Metodo zoom", "缩放/恢复游戏窗口": "Zoom/ripristina finestra di gioco", "打开关联页面": "Apri la pagina associata", - "添加关联页面": "Aggiungi pagina associata", "页面类型": "Tipo di pagina", "页面链接": "Link pagina", "缓存": "cache", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Inizia il gioco senza cambiare l'ordine", "使用自定义优化": "Usa ottimizzazione personalizzata", "游戏管理": "Gestione giochi", - "显示标题": "mostra intestazione" + "显示标题": "mostra intestazione", + "收藏": "raccolta", + "名称": "nome", + "网址": "Sito web" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/ja.json b/LunaTranslator/files/lang/ja.json index 25d5c548..4dfca4b3 100644 --- a/LunaTranslator/files/lang/ja.json +++ b/LunaTranslator/files/lang/ja.json @@ -675,7 +675,6 @@ "缩放方式": "スケール方法", "缩放/恢复游戏窗口": "ゲームウィンドウのズーム/復元", "打开关联页面": "関連ページを開く", - "添加关联页面": "関連ページの追加", "页面类型": "ページタイプ", "页面链接": "ページリンク", "缓存": "キャッシュ", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "ゲームを起動しても順序は変更されません", "使用自定义优化": "カスタム最適化の使用", "游戏管理": "ゲーム管理", - "显示标题": "タイトルを表示" + "显示标题": "タイトルを表示", + "收藏": "コレクション", + "名称": "の名前をあげる", + "网址": "Webサイト" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/ko.json b/LunaTranslator/files/lang/ko.json index c3e5478a..a5b195cf 100644 --- a/LunaTranslator/files/lang/ko.json +++ b/LunaTranslator/files/lang/ko.json @@ -675,7 +675,6 @@ "缩放方式": "배율 조정 방법", "缩放/恢复游戏窗口": "게임 창 확대 / 복원", "打开关联页面": "연관 페이지 열기", - "添加关联页面": "연관 페이지 추가", "页面类型": "페이지 유형", "页面链接": "페이지 링크", "缓存": "캐시", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "게임을 시작하면 순서를 수정하지 않습니다.", "使用自定义优化": "사용자 정의 최적화 사용", "游戏管理": "게임 관리", - "显示标题": "제목 표시" + "显示标题": "제목 표시", + "收藏": "모음집", + "名称": "이름", + "网址": "웹 주소" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/pl.json b/LunaTranslator/files/lang/pl.json index 4df81e97..e15cdd0d 100644 --- a/LunaTranslator/files/lang/pl.json +++ b/LunaTranslator/files/lang/pl.json @@ -675,7 +675,6 @@ "缩放方式": "Metoda powiększania", "缩放/恢复游戏窗口": "Powiększ/przywróć okno gry", "打开关联页面": "Otwórz powiązaną stronę", - "添加关联页面": "Dodaj powiązaną stronę", "页面类型": "Typ strony", "页面链接": "Link do strony", "缓存": "pamięć podręczna", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Rozpocznij grę bez zmiany kolejności", "使用自定义优化": "Użyj niestandardowej optymalizacji", "游戏管理": "Zarządzanie grą", - "显示标题": "pokaż nagłówek" + "显示标题": "pokaż nagłówek", + "收藏": "kolekcja", + "名称": "nazwa", + "网址": "Strona internetowa" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/ru.json b/LunaTranslator/files/lang/ru.json index fce6f1fc..c515efbe 100644 --- a/LunaTranslator/files/lang/ru.json +++ b/LunaTranslator/files/lang/ru.json @@ -675,7 +675,6 @@ "缩放方式": "Режим масштабирования", "缩放/恢复游戏窗口": "Увеличить / восстановить игровое окно", "打开关联页面": "Открыть страницу", - "添加关联页面": "Добавить ассоциированную страницу", "页面类型": "Тип страницы", "页面链接": "Ссылка на страницу", "缓存": "Кэш", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Запустить игру без изменения порядка", "使用自定义优化": "Использовать пользовательскую оптимизацию", "游戏管理": "Управление играми", - "显示标题": "Показать заголовок" + "显示标题": "Показать заголовок", + "收藏": "Коллекция", + "名称": "Имя", + "网址": "Веб - сайт" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/th.json b/LunaTranslator/files/lang/th.json index a6314ff8..75c2be06 100644 --- a/LunaTranslator/files/lang/th.json +++ b/LunaTranslator/files/lang/th.json @@ -675,7 +675,6 @@ "缩放方式": "โหมดซูม", "缩放/恢复游戏窗口": "ซูม / กู้คืนหน้าต่างเกม", "打开关联页面": "เปิดหน้าพันธมิตร", - "添加关联页面": "เพิ่มหน้าพันธมิตร", "页面类型": "ประเภทหน้า", "页面链接": "ลิงค์หน้า", "缓存": "แคช", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "เริ่มเกมโดยไม่มีการปรับเปลี่ยนลำดับ", "使用自定义优化": "ใช้การปรับแต่งให้เหมาะสม", "游戏管理": "การจัดการเกม", - "显示标题": "แสดงหัวเรื่อง" + "显示标题": "แสดงหัวเรื่อง", + "收藏": "คอลเลกชัน", + "名称": "ชื่อ", + "网址": "ที่อยู่เว็บไซต์" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/tr.json b/LunaTranslator/files/lang/tr.json index faee93a9..ecb71dc3 100644 --- a/LunaTranslator/files/lang/tr.json +++ b/LunaTranslator/files/lang/tr.json @@ -675,7 +675,6 @@ "缩放方式": "Yakınlaştırma yöntemi", "缩放/恢复游戏窗口": "Oyun Penceresini Yakınlaştır/Geri Döndür", "打开关联页面": "İlişkili sayfanı aç", - "添加关联页面": "İlişkili sayfa ekle", "页面类型": "Sayfa Türü", "页面链接": "Sayfa Bağlantısı", "缓存": "cache", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Düzeni değiştirmeden oyunu başlat", "使用自定义优化": "Özel optimizasyon kullan", "游戏管理": "Oyun Yönetimi", - "显示标题": "başlığı göster" + "显示标题": "başlığı göster", + "收藏": "koleksiyon", + "名称": "isim", + "网址": "Web sitesi" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/uk.json b/LunaTranslator/files/lang/uk.json index a5ff0514..714de15b 100644 --- a/LunaTranslator/files/lang/uk.json +++ b/LunaTranslator/files/lang/uk.json @@ -675,7 +675,6 @@ "缩放方式": "Метод масштабу", "缩放/恢复游戏窗口": "Збільшити/відновити вікно гри", "打开关联页面": "Відкрити пов’ язану сторінку", - "添加关联页面": "Додати пов’ язану сторінку", "页面类型": "Тип сторінки", "页面链接": "Посилання сторінки", "缓存": "кеш", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Почати гру без зміни порядку", "使用自定义优化": "Використовувати нетипову оптимізацію", "游戏管理": "Керування грами", - "显示标题": "показувати заголовок" + "显示标题": "показувати заголовок", + "收藏": "збірка", + "名称": "назва", + "网址": "Веб- сайт" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/vi.json b/LunaTranslator/files/lang/vi.json index daadc9be..885d19ef 100644 --- a/LunaTranslator/files/lang/vi.json +++ b/LunaTranslator/files/lang/vi.json @@ -675,7 +675,6 @@ "缩放方式": "Cách thu phóng", "缩放/恢复游戏窗口": "Thu phóng/khôi phục cửa sổ trò chơi", "打开关联页面": "Mở trang liên kết", - "添加关联页面": "Thêm trang liên kết", "页面类型": "Loại trang", "页面链接": "Liên kết trang", "缓存": "Bộ nhớ tạm", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "Bắt đầu trò chơi Không thay đổi thứ tự", "使用自定义优化": "Sử dụng Custom Optimization", "游戏管理": "Quản lý trò chơi", - "显示标题": "Hiện tiêu đề" + "显示标题": "Hiện tiêu đề", + "收藏": "Bộ sưu tập", + "名称": "Tên", + "网址": "Trang chủ" } \ No newline at end of file diff --git a/LunaTranslator/files/lang/zh.json b/LunaTranslator/files/lang/zh.json index 4a03983c..847991bd 100644 --- a/LunaTranslator/files/lang/zh.json +++ b/LunaTranslator/files/lang/zh.json @@ -675,7 +675,6 @@ "缩放方式": "", "缩放/恢复游戏窗口": "", "打开关联页面": "", - "添加关联页面": "", "页面类型": "", "页面链接": "", "缓存": "", @@ -765,5 +764,8 @@ "启动游戏不修改顺序": "", "使用自定义优化": "", "游戏管理": "", - "显示标题": "" + "显示标题": "", + "收藏": "", + "名称": "", + "网址": "" } \ No newline at end of file diff --git a/LunaTranslator/requirements.txt b/LunaTranslator/requirements.txt index ff2a5314..acfbf414 100644 --- a/LunaTranslator/requirements.txt +++ b/LunaTranslator/requirements.txt @@ -1,6 +1,6 @@ PyQt5==5.15.10 PyQt5-Qt5==5.15.2 -webviewpy==1.0.2 +webviewpy==1.0.4 nuitka==2.0.5 imageio pefile \ No newline at end of file diff --git a/plugins/winsharedutils/SimpleBrowser.cpp b/plugins/winsharedutils/SimpleBrowser.cpp index 3740fdbf..7fd049e5 100644 --- a/plugins/winsharedutils/SimpleBrowser.cpp +++ b/plugins/winsharedutils/SimpleBrowser.cpp @@ -161,4 +161,15 @@ extern "C" __declspec(dllexport) void html_release(void *web) auto ww = static_cast(web); ww->Destroy(); // ww->Release(); Destroy减少引用计数,自动del -} \ No newline at end of file +} + +extern "C" __declspec(dllexport) void html_get_current_url(void *web, wchar_t *url) +{ + if (!web) + return; + auto ww = static_cast(web); + ww->Destroy(); + wchar_t *_u; + ww->get_LocationURL(&_u); + wcscpy(url, _u); +}