This commit is contained in:
恍兮惚兮 2024-05-04 16:03:15 +08:00
parent 53dedd604a
commit 1930b9895d
5 changed files with 100 additions and 98 deletions

View File

@ -687,8 +687,6 @@ class MAINUI:
zip_directory(path, savedir + "/" + data_head)
def autohookmonitorthread(self):
for game in savehook_new_data:
checkifnewgame(game)
while self.isrunning:
self.onwindowloadautohook()
time.sleep(

View File

@ -59,7 +59,12 @@ import gobject
from myutils.config import _TR, _TRL, globalconfig, static_data
import winsharedutils
from myutils.wrapper import Singleton_close, Singleton, threader, tryprint
from myutils.utils import checkifnewgame, vidchangedtask
from myutils.utils import (
checkifnewgame,
vidchangedtask,
titlechangedtask,
imgchangedtask,
)
from gui.usefulwidget import (
yuitsu_switch,
saveposwindow,
@ -629,7 +634,6 @@ class dialog_setting_game(QDialog):
global _global_dialog_setting_game
_global_dialog_setting_game = self
self.isopened = True
checkifnewgame(exepath)
vbox = QVBoxLayout(self) # 配置layout
self.setLayout(vbox)
formwidget = QWidget()
@ -659,9 +663,7 @@ class dialog_setting_game(QDialog):
titleedit = QLineEdit(savehook_new_data[exepath]["title"])
def _titlechange(x):
savehook_new_data[exepath]["title"] = x
savehook_new_data[exepath]["istitlesetted"] = True
savehook_new_data[exepath]["searchnoresulttime"] = 0
titlechangedtask(exepath, x)
self.setWindowTitle(x)
titleedit.textChanged.connect(_titlechange)
@ -679,8 +681,7 @@ class dialog_setting_game(QDialog):
_pixmap = QPixmap(res)
if _pixmap.isNull() == False:
savehook_new_data[exepath]["imagepath"] = res
savehook_new_data[exepath]["isimagepathusersetted"] = True
imgchangedtask(exepath, res)
imgpath.setText(res)
vndbid = QLineEdit(str(savehook_new_data[exepath]["vid"]))

View File

@ -42,10 +42,9 @@ from gui.usefulwidget import (
dialog_showinfo,
getsimplecombobox,
getsimpleswitch,
getcolorbutton,
textbrowappendandmovetoend,
)
from myutils.utils import checkchaos, checkifnewgame
from myutils.utils import checkchaos
from gui.dialog_savedgame import dialog_setting_game
@ -566,7 +565,6 @@ class hookselect(closeashidewindow):
)
if _isusing:
_text = "取消内嵌翻译"
checkifnewgame(gobject.baseobject.textsource.pname)
if ss[-2][:8] == "UserHook":
needinserthookcode = savehook_new_data[
@ -908,7 +906,6 @@ class hookselect(closeashidewindow):
gobject.baseobject.textsource.lock.acquire()
checkifnewgame(gobject.baseobject.textsource.pname)
if key in gobject.baseobject.textsource.selectedhook:
gobject.baseobject.textsource.selectedhook.remove(key)

View File

@ -21,7 +21,7 @@ from myutils.config import (
)
import threading
import re, heapq
from myutils.vndb import searchforidimage
from myutils.vndb import searchfordata, getvidbytitle
from myutils.wrapper import tryprint
@ -44,6 +44,9 @@ class PriorityQueue:
return bool(len(self._heap) == 0)
searchvndbqueue = PriorityQueue()
def checkimage(gamepath):
return (savehook_new_data[gamepath]["imagepath"] is None) or (
os.path.exists(savehook_new_data[gamepath]["imagepath"]) == False
@ -58,36 +61,32 @@ def checkinfo(gamepath):
def checkvid(gamepath):
if savehook_new_data[gamepath]["vid"]:
return (
checkimage(gamepath)
or checkinfo(gamepath)
or (len(savehook_new_data[gamepath]["vndbtags"]) == 0)
or (len(savehook_new_data[gamepath]["developers"]) == 0)
)
else:
return (
time.time() - savehook_new_data[gamepath]["searchnoresulttime"]
> 3600 * 24 * 7
)
def checkneed(gamepath):
return ((gamepath in savehook_new_data) and (gamepath in savehook_new_list)) and (
(checkvid(gamepath))
return (
checkimage(gamepath)
or checkinfo(gamepath)
or (
(len(savehook_new_data[gamepath]["vndbtags"]) == 0)
and (len(savehook_new_data[gamepath]["developers"]) == 0)
)
)
searchvndbqueue = PriorityQueue()
def dispatachtask(gamepath):
if checkneed(gamepath) == False:
return
__t = []
if savehook_new_data[gamepath]["vid"]:
searchvndbqueue.put((gamepath, [savehook_new_data[gamepath]["vid"]]), 0)
if not checkvid(gamepath):
return
print(gamepath)
searchvndbqueue.put((1, gamepath, savehook_new_data[gamepath]["vid"]))
else:
if (
time.time()
< savehook_new_data[gamepath]["searchnoresulttime"] + 3600 * 24 * 7
):
return
print(gamepath)
for _ in [
savehook_new_data[gamepath]["title"],
os.path.basename(os.path.dirname(gamepath)),
@ -111,56 +110,55 @@ def dispatachtask(gamepath):
if (len(t) < 10) and (all(ord(c) < 128 for c in t)):
continue
lst.append(t)
searchvndbqueue.put((gamepath, lst), 0)
searchvndbqueue.put((0, gamepath, lst))
def parsetask(_type, gamepath, arg):
if _type == 2:
dispatachtask(gamepath)
elif _type == 0:
searchargs = arg
vid = None
for arg in searchargs:
vid = getvidbytitle(arg)
if vid:
break
if not vid:
return
savehook_new_data[gamepath]["vid"] = int(vid[1:])
savehook_new_data[gamepath]["searchnoresulttime"] = time.time()
searchvndbqueue.put((1, gamepath, int(vid[1:])))
elif _type == 1:
vid = arg
data = searchfordata(vid)
imagepath = data.get("imagepath", None)
infopath = data.get("infopath", None)
title = data.get("title", None)
namemap = data.get("namemap", None)
developers = data.get("developers", None)
vndbtags = data.get("vndbtags", None)
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 infopath:
savehook_new_data[gamepath]["infopath"] = infopath
if namemap:
savehook_new_data[gamepath]["namemap"] = namemap
if vndbtags:
savehook_new_data[gamepath]["vndbtags"] = vndbtags
if developers:
savehook_new_data[gamepath]["developers"] = developers
def everymethodsthread():
while True:
_ = searchvndbqueue.get()
if isinstance(_, tuple):
gamepath, searchargs = _
else:
gamepath = _
dispatachtask(gamepath)
continue
if checkneed(gamepath) == False:
continue
print(gamepath)
succ = False
for searcharg in searchargs:
try:
data = searchforidimage(searcharg)
except:
print_exc()
continue
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)
developers = data.get("developers", None)
vndbtags = data.get("vndbtags", None)
if not vid:
continue
print(data)
savehook_new_data[gamepath]["vid"] = int(vid[1:])
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 infopath:
savehook_new_data[gamepath]["infopath"] = infopath
if namemap:
savehook_new_data[gamepath]["namemap"] = namemap
if vndbtags:
savehook_new_data[gamepath]["vndbtags"] = vndbtags
if developers:
savehook_new_data[gamepath]["developers"] = developers
succ = True
break
if succ == False:
savehook_new_data[gamepath]["searchnoresulttime"] = time.time()
_type, gamepath, arg = _
tryprint(parsetask)(_type, gamepath, arg)
threading.Thread(target=everymethodsthread).start()
@ -172,9 +170,18 @@ def vidchangedtask(gamepath, vid):
except:
return
savehook_new_data[gamepath]["vid"] = vid
savehook_new_data[gamepath]["infopath"] = None
savehook_new_data[gamepath]["searchnoresulttime"] = 0
searchvndbqueue.put((gamepath, [vid]), 1)
searchvndbqueue.put((1, gamepath, vid), 1)
def titlechangedtask(gamepath, title):
savehook_new_data[gamepath]["title"] = title
savehook_new_data[gamepath]["istitlesetted"] = True
searchvndbqueue.put((0, gamepath, [title]), 1)
def imgchangedtask(gamepath, res):
savehook_new_data[gamepath]["imagepath"] = res
savehook_new_data[gamepath]["isimagepathusersetted"] = True
def checkifnewgame(gamepath, title=None):
@ -182,7 +189,7 @@ def checkifnewgame(gamepath, title=None):
savehook_new_list.insert(0, gamepath)
if gamepath not in savehook_new_data:
savehook_new_data[gamepath] = getdefaultsavehook(gamepath, title)
searchvndbqueue.put(gamepath)
searchvndbqueue.put((2, gamepath, None))
kanjichs2ja = str.maketrans(static_data["kanjichs2ja"])

View File

@ -135,12 +135,16 @@ def getvidbytitle_vn(title):
def getvidbytitle_release(title):
return safegetvndbjson(
"https://api.vndb.org/kana/release",
{"filters": ["search", "=", title], "fields": "id", "sort": "searchrank"},
lambda js: js["results"][0]["id"],
{
"filters": ["search", "=", title],
"fields": "id,vns.id",
"sort": "searchrank",
},
lambda js: js["results"][0]["vns"][0]["id"],
)
def getdevelopersbyid(vid):
def getdevelopersbyid(vid):
def _js(js):
_ = []
@ -203,7 +207,8 @@ def safedownload():
with open("./cache/vndb/vndb-tags-latest.json.gz", "wb") as ff:
ff.write(resp.content)
decompress_gzip_file(
"./cache/vndb/vndb-tags-latest.json.gz", "./cache/vndb/vndb-tags-latest.json"
"./cache/vndb/vndb-tags-latest.json.gz",
"./cache/vndb/vndb-tags-latest.json",
)
with open("./cache/vndb/vndb-tags-latest.json", "r", encoding="utf8") as ff:
js = json.load(ff)
@ -251,15 +256,10 @@ def getvntagsbyid(vid):
return tags
def searchforidimage(titleorid):
print(titleorid)
def searchfordata(vid):
os.makedirs("./cache/vndb", exist_ok=True)
if isinstance(titleorid, str):
vid = getvidbytitle(titleorid)
if not vid:
return {}
elif isinstance(titleorid, int):
vid = "v{}".format(titleorid)
vid = "v{}".format(vid)
img = getimgbyid(vid)
title = gettitlebyid(vid)
namemap = getcharnamemapbyid(vid)
@ -268,7 +268,6 @@ def searchforidimage(titleorid):
return {
"namemap": namemap,
"title": title,
"vid": vid,
"infopath": vndbdowloadinfo(vid),
"imagepath": vndbdownloadimg(img),
"vndbtags": vndbtags,