mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2025-01-13 07:33:53 +08:00
.
This commit is contained in:
parent
ac0806e8e5
commit
facbf0c400
@ -1,7 +1,7 @@
|
||||
|
||||
set(VERSION_MAJOR 6)
|
||||
set(VERSION_MINOR 17)
|
||||
set(VERSION_PATCH 5)
|
||||
set(VERSION_PATCH 6)
|
||||
set(VERSION_REVISION 0)
|
||||
set(LUNA_VERSION "{${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_REVISION}}")
|
||||
add_library(VERSION_DEF ${CMAKE_CURRENT_LIST_DIR}/version_def.cpp)
|
||||
|
@ -2,7 +2,7 @@ from qtsymbols import *
|
||||
import json, time, functools, os, base64, uuid
|
||||
from urllib.parse import quote
|
||||
from traceback import print_exc
|
||||
import qtawesome, requests, gobject, windows
|
||||
import qtawesome, requests, gobject, windows, hashlib
|
||||
import myutils.ankiconnect as anki
|
||||
from myutils.hwnd import grabwindow
|
||||
from myutils.config import globalconfig, static_data, _TR
|
||||
@ -20,6 +20,8 @@ from gui.usefulwidget import (
|
||||
statusbutton,
|
||||
getQMessageBox,
|
||||
auto_select_webview,
|
||||
WebivewWidget,
|
||||
mshtmlWidget,
|
||||
getboxlayout,
|
||||
getspinbox,
|
||||
getsimplecombobox,
|
||||
@ -36,16 +38,7 @@ from gui.usefulwidget import (
|
||||
tabadd_lazy,
|
||||
VisLFormLayout,
|
||||
)
|
||||
from gui.dynalang import (
|
||||
LPushButton,
|
||||
LLabel,
|
||||
LTabWidget,
|
||||
LTabBar,
|
||||
LFormLayout,
|
||||
LLabel,
|
||||
LMainWindow,
|
||||
LAction,
|
||||
)
|
||||
from gui.dynalang import LPushButton, LLabel, LTabWidget, LTabBar, LAction
|
||||
from myutils.audioplayer import bass_code_cast
|
||||
|
||||
|
||||
@ -1069,6 +1062,70 @@ class showdiction(QWidget):
|
||||
root.setData(len(rows) > 0, DeterminedhasChildren)
|
||||
|
||||
|
||||
class showwordfastwebview(auto_select_webview):
|
||||
def reloaddata(self):
|
||||
if isinstance(self.internal, mshtmlWidget):
|
||||
super().reloaddata()
|
||||
|
||||
def _maybecreate_internal(self):
|
||||
self.needreset = True
|
||||
super()._maybecreate_internal()
|
||||
if isinstance(self.internal, WebivewWidget):
|
||||
if self.lastaction:
|
||||
super().reloaddata()
|
||||
else:
|
||||
self.setframework()
|
||||
|
||||
def __init__(self, parent, dyna=False):
|
||||
self.needreset = False
|
||||
super().__init__(parent, dyna)
|
||||
self.on_load.connect(self.checkurlchange)
|
||||
|
||||
def setframework(self, html=None):
|
||||
path = os.path.join(os.path.dirname(__file__), "showwordfast.html")
|
||||
if html:
|
||||
with open(path, "r", encoding="utf8") as ff:
|
||||
html = ff.read().replace(
|
||||
'<div id="luna_root_div"></div>',
|
||||
'<div id="luna_root_div">{}</div>'.format(html),
|
||||
)
|
||||
md5 = hashlib.md5(html.encode("utf8", errors="ignore")).hexdigest()
|
||||
path = gobject.gettempdir(md5 + ".html")
|
||||
with open(path, "w", encoding="utf8") as ff:
|
||||
ff.write(html)
|
||||
self.internal.navigate(os.path.abspath(path))
|
||||
|
||||
def checkurlchange(self, url: str):
|
||||
if url == "about:blank":
|
||||
pass
|
||||
elif not url.startswith("file:"):
|
||||
self.needreset = True
|
||||
|
||||
def setHtml(self, html):
|
||||
# webview2 sethtml谜之很慢,navigate和eval比较快
|
||||
if isinstance(self.internal, mshtmlWidget):
|
||||
super().setHtml(html)
|
||||
elif isinstance(self.internal, WebivewWidget):
|
||||
self.lastaction = 1, html
|
||||
self.internal.set_zoom(self.internalsavedzoom)
|
||||
if self.needreset:
|
||||
self.needreset = False
|
||||
self.setframework(html)
|
||||
else:
|
||||
self.internal.eval("_clear_all()")
|
||||
self.internal.eval("_set_extra_html('{}')".format(quote(html)))
|
||||
|
||||
def clear(self):
|
||||
if isinstance(self.internal, mshtmlWidget):
|
||||
super().clear()
|
||||
elif isinstance(self.internal, WebivewWidget):
|
||||
self.lastaction = None
|
||||
if self.needreset:
|
||||
self.needreset = False
|
||||
self.setframework()
|
||||
self.internal.eval("_clear_all()")
|
||||
|
||||
|
||||
class searchwordW(closeashidewindow):
|
||||
search_word = pyqtSignal(str, bool)
|
||||
show_dict_result = pyqtSignal(float, str, str)
|
||||
@ -1144,7 +1201,8 @@ class searchwordW(closeashidewindow):
|
||||
html = self.cache_results[self.tabks[idx]]
|
||||
except:
|
||||
return
|
||||
self.textOutput.setHtml("<style>body{margin:0}</style>" + html)
|
||||
html = "<style>body{margin:0}</style>" + html
|
||||
self.textOutput.setHtml(html)
|
||||
|
||||
def searchwinnewwindow(self, word):
|
||||
|
||||
@ -1251,7 +1309,7 @@ class searchwordW(closeashidewindow):
|
||||
self.tab.currentChanged.connect(__)
|
||||
self.tabks = []
|
||||
self.setCentralWidget(ww)
|
||||
self.textOutput = auto_select_webview(self, True)
|
||||
self.textOutput = showwordfastwebview(self, True)
|
||||
self.textOutput.add_menu(
|
||||
0, _TR("查词"), lambda w: self.search_word.emit(w, False)
|
||||
)
|
||||
@ -1401,7 +1459,6 @@ class searchwordW(closeashidewindow):
|
||||
self.tabks.clear()
|
||||
self.textOutput.clear()
|
||||
self.cache_results.clear()
|
||||
|
||||
self.thisps.clear()
|
||||
self.hasclicked = False
|
||||
pxx = 999
|
||||
|
47
py/LunaTranslator/gui/showwordfast.html
Normal file
47
py/LunaTranslator/gui/showwordfast.html
Normal file
@ -0,0 +1,47 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: rgb(44, 44, 44);
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<div id="luna_root_div"></div>
|
||||
<script>
|
||||
const rootdivid = 'luna_root_div';
|
||||
function _clear_all() {
|
||||
document.getElementById(rootdivid).innerHTML = "";
|
||||
}
|
||||
|
||||
function _runScript(script) {
|
||||
let newScript = document.createElement('script');
|
||||
newScript.innerHTML = script.innerHTML;
|
||||
let src = script.getAttribute('src');
|
||||
if (src) newScript.setAttribute('src', src);
|
||||
document.head.appendChild(newScript);
|
||||
document.head.removeChild(newScript);
|
||||
}
|
||||
|
||||
function _setHTMLWithScript(container, rawHTML) {
|
||||
container.innerHTML = rawHTML;
|
||||
let scripts = container.querySelectorAll('script');
|
||||
for (let script of scripts) {
|
||||
_runScript(script);
|
||||
}
|
||||
}
|
||||
function _set_extra_html(htmlx) {
|
||||
_setHTMLWithScript(document.getElementById(rootdivid), decodeURIComponent(htmlx))
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
</html>
|
@ -1,5 +1,5 @@
|
||||
from qtsymbols import *
|
||||
import os, re, functools, uuid, json, math, csv, io, pickle
|
||||
import os, re, functools, hashlib, json, math, csv, io, pickle
|
||||
from traceback import print_exc
|
||||
import windows, qtawesome, winsharedutils, gobject
|
||||
from webviewpy import webview_native_handle_kind_t, Webview
|
||||
@ -1503,6 +1503,10 @@ class auto_select_webview(QWidget):
|
||||
on_load = pyqtSignal(str)
|
||||
on_ZoomFactorChanged = pyqtSignal(float)
|
||||
|
||||
def eval(self, js):
|
||||
self.internal.eval(js)
|
||||
self.evals.append(js)
|
||||
|
||||
def bind(self, funcname, function):
|
||||
self.bindinfo.append((funcname, function))
|
||||
self.internal.bind(funcname, function)
|
||||
@ -1527,7 +1531,8 @@ class auto_select_webview(QWidget):
|
||||
if len(html) < self.internal.html_limit:
|
||||
self.internal.setHtml(html)
|
||||
else:
|
||||
lastcachehtml = gobject.gettempdir(str(uuid.uuid4()) + ".html")
|
||||
md5 = hashlib.md5(html.encode("utf8", errors="ignore")).hexdigest()
|
||||
lastcachehtml = gobject.gettempdir(md5 + ".html")
|
||||
with open(lastcachehtml, "w", encoding="utf8") as ff:
|
||||
ff.write(html)
|
||||
self.internal.navigate(lastcachehtml)
|
||||
@ -1542,6 +1547,7 @@ class auto_select_webview(QWidget):
|
||||
def __init__(self, parent, dyna=False) -> None:
|
||||
super().__init__(parent)
|
||||
self.addmenuinfo = []
|
||||
self.evals = []
|
||||
self.bindinfo = []
|
||||
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
||||
self.internal = None
|
||||
@ -1571,6 +1577,15 @@ class auto_select_webview(QWidget):
|
||||
self.internal.on_load.connect(self.on_load)
|
||||
self.internal.on_ZoomFactorChanged.connect(self.internalzoomchanged)
|
||||
self.layout().addWidget(self.internal)
|
||||
for _ in self.addmenuinfo:
|
||||
self.internal.add_menu(*_)
|
||||
for _ in self.bindinfo:
|
||||
self.internal.bind(*_)
|
||||
for _ in self.evals:
|
||||
self.internal.eval(_)
|
||||
self.reloaddata()
|
||||
|
||||
def reloaddata(self):
|
||||
if self.lastaction:
|
||||
action, arg = self.lastaction
|
||||
if action == 0:
|
||||
@ -1579,10 +1594,6 @@ class auto_select_webview(QWidget):
|
||||
self.setHtml(arg)
|
||||
else:
|
||||
self.clear()
|
||||
for _ in self.addmenuinfo:
|
||||
self.internal.add_menu(*_)
|
||||
for _ in self.bindinfo:
|
||||
self.internal.bind(*_)
|
||||
|
||||
def _createwebview(self):
|
||||
contex = globalconfig["usewebview"]
|
||||
|
@ -275,7 +275,7 @@
|
||||
},
|
||||
{
|
||||
"name": "unidic",
|
||||
"link": "https://clrd.ninjal.ac.jp/unidic/en/"
|
||||
"link": "https://clrd.ninjal.ac.jp/unidic/"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user