mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2024-12-29 16:44:13 +08:00
some
This commit is contained in:
parent
83b352da6d
commit
01d2354e45
@ -10,6 +10,7 @@ from myutils.config import (
|
|||||||
savegametaged,
|
savegametaged,
|
||||||
_TR,
|
_TR,
|
||||||
_TRL,
|
_TRL,
|
||||||
|
postprocessconfig,
|
||||||
globalconfig,
|
globalconfig,
|
||||||
static_data,
|
static_data,
|
||||||
)
|
)
|
||||||
@ -20,9 +21,16 @@ from myutils.utils import (
|
|||||||
str2rgba,
|
str2rgba,
|
||||||
gamdidchangedtask,
|
gamdidchangedtask,
|
||||||
titlechangedtask,
|
titlechangedtask,
|
||||||
|
selectdebugfile,
|
||||||
targetmod,
|
targetmod,
|
||||||
)
|
)
|
||||||
from gui.inputdialog import noundictconfigdialog1, autoinitdialog
|
from gui.codeacceptdialog import codeacceptdialog
|
||||||
|
from gui.inputdialog import (
|
||||||
|
noundictconfigdialog1,
|
||||||
|
autoinitdialog,
|
||||||
|
autoinitdialog_items,
|
||||||
|
postconfigdialog,
|
||||||
|
)
|
||||||
from gui.specialwidget import (
|
from gui.specialwidget import (
|
||||||
ScrollFlow,
|
ScrollFlow,
|
||||||
chartwidget,
|
chartwidget,
|
||||||
@ -47,6 +55,7 @@ from gui.usefulwidget import (
|
|||||||
makesubtab_lazy,
|
makesubtab_lazy,
|
||||||
tabadd_lazy,
|
tabadd_lazy,
|
||||||
getsimpleswitch,
|
getsimpleswitch,
|
||||||
|
threebuttons,
|
||||||
getspinbox,
|
getspinbox,
|
||||||
selectcolor,
|
selectcolor,
|
||||||
listediter,
|
listediter,
|
||||||
@ -407,20 +416,8 @@ class browserdialog(saveposwindow):
|
|||||||
self.tagswidget.addTags(items)
|
self.tagswidget.addTags(items)
|
||||||
|
|
||||||
def startupnavi(self, exepath):
|
def startupnavi(self, exepath):
|
||||||
for idx in range(1, 100):
|
for idx in range(2, 100):
|
||||||
if idx == 1:
|
if idx == 2:
|
||||||
if exepath:
|
|
||||||
hasvndb = bool(
|
|
||||||
savehook_new_data[exepath]["infopath"]
|
|
||||||
and os.path.exists(savehook_new_data[exepath]["infopath"])
|
|
||||||
)
|
|
||||||
if hasvndb:
|
|
||||||
navitarget = self.parsehtml(
|
|
||||||
savehook_new_data[exepath]["infopath"]
|
|
||||||
)
|
|
||||||
break
|
|
||||||
elif idx == 2:
|
|
||||||
|
|
||||||
if exepath:
|
if exepath:
|
||||||
if len(savehook_new_data[exepath]["relationlinks"]):
|
if len(savehook_new_data[exepath]["relationlinks"]):
|
||||||
navitarget = savehook_new_data[exepath]["relationlinks"][-1][1]
|
navitarget = savehook_new_data[exepath]["relationlinks"][-1][1]
|
||||||
@ -568,6 +565,67 @@ def calculate_centered_rect(original_rect: QRect, size: QSize) -> QRect:
|
|||||||
return new_rect
|
return new_rect
|
||||||
|
|
||||||
|
|
||||||
|
def maybehavebutton(self, game, post):
|
||||||
|
if post == "_11":
|
||||||
|
savehook_new_data[game]["save_text_process_info"]["mypost"] = str(
|
||||||
|
uuid.uuid4()
|
||||||
|
).replace("-", "_")
|
||||||
|
return getcolorbutton(
|
||||||
|
globalconfig,
|
||||||
|
"",
|
||||||
|
callback=functools.partial(
|
||||||
|
selectdebugfile,
|
||||||
|
savehook_new_data[game]["save_text_process_info"]["mypost"],
|
||||||
|
ismypost=True,
|
||||||
|
),
|
||||||
|
icon="fa.gear",
|
||||||
|
constcolor="#FF69B4",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if post not in postprocessconfig:
|
||||||
|
return
|
||||||
|
if post == "_remove_chaos":
|
||||||
|
return getcolorbutton(
|
||||||
|
globalconfig,
|
||||||
|
"",
|
||||||
|
icon="fa.gear",
|
||||||
|
constcolor="#FF69B4",
|
||||||
|
callback=lambda: codeacceptdialog(self),
|
||||||
|
)
|
||||||
|
elif "args" in postprocessconfig[post]:
|
||||||
|
if isinstance(list(postprocessconfig[post]["args"].values())[0], dict):
|
||||||
|
callback = functools.partial(
|
||||||
|
postconfigdialog,
|
||||||
|
self,
|
||||||
|
savehook_new_data[game]["save_text_process_info"][
|
||||||
|
"postprocessconfig"
|
||||||
|
][post]["args"],
|
||||||
|
postprocessconfig[post]["name"],
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
items = autoinitdialog_items(
|
||||||
|
savehook_new_data[game]["save_text_process_info"][
|
||||||
|
"postprocessconfig"
|
||||||
|
][post]
|
||||||
|
)
|
||||||
|
callback = functools.partial(
|
||||||
|
autoinitdialog,
|
||||||
|
self,
|
||||||
|
postprocessconfig[post]["name"],
|
||||||
|
600,
|
||||||
|
items,
|
||||||
|
)
|
||||||
|
return getcolorbutton(
|
||||||
|
globalconfig,
|
||||||
|
"",
|
||||||
|
callback=callback,
|
||||||
|
icon="fa.gear",
|
||||||
|
constcolor="#FF69B4",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class dialog_setting_game_internal(QWidget):
|
class dialog_setting_game_internal(QWidget):
|
||||||
def selectexe(self):
|
def selectexe(self):
|
||||||
f = QFileDialog.getOpenFileName(directory=self.exepath)
|
f = QFileDialog.getOpenFileName(directory=self.exepath)
|
||||||
@ -626,30 +684,47 @@ class dialog_setting_game_internal(QWidget):
|
|||||||
functools.partial(savehook_new_data[exepath].__setitem__, "title")
|
functools.partial(savehook_new_data[exepath].__setitem__, "title")
|
||||||
)
|
)
|
||||||
titleedit.returnPressed.connect(_titlechange)
|
titleedit.returnPressed.connect(_titlechange)
|
||||||
formLayout.addRow(_TR("标题"), titleedit)
|
|
||||||
|
formLayout.addRow(
|
||||||
|
_TR("标题"),
|
||||||
|
getboxlayout(
|
||||||
|
[
|
||||||
|
titleedit,
|
||||||
|
getcolorbutton(
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
_titlechange,
|
||||||
|
icon="fa.search",
|
||||||
|
constcolor="#FF69B4",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
),
|
||||||
|
)
|
||||||
methodtab, do = makesubtab_lazy(
|
methodtab, do = makesubtab_lazy(
|
||||||
_TRL(
|
_TRL(
|
||||||
[
|
[
|
||||||
"启动",
|
"启动",
|
||||||
"HOOK",
|
"HOOK",
|
||||||
|
"文本处理",
|
||||||
"画廊",
|
"画廊",
|
||||||
"标签",
|
"标签",
|
||||||
"元数据",
|
"元数据",
|
||||||
"统计",
|
"统计",
|
||||||
"预翻译",
|
|
||||||
"语音",
|
"语音",
|
||||||
|
"预翻译",
|
||||||
"存档备份",
|
"存档备份",
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
[
|
[
|
||||||
functools.partial(self.doaddtab, self.starttab, exepath),
|
functools.partial(self.doaddtab, self.starttab, exepath),
|
||||||
functools.partial(self.doaddtab, self.gethooktab, exepath),
|
functools.partial(self.doaddtab, self.gethooktab, exepath),
|
||||||
|
functools.partial(self.doaddtab, self.gettextproc, exepath),
|
||||||
functools.partial(self.doaddtab, self.fengmiantab, exepath),
|
functools.partial(self.doaddtab, self.fengmiantab, exepath),
|
||||||
functools.partial(self.doaddtab, self.getlabelsetting, exepath),
|
functools.partial(self.doaddtab, self.getlabelsetting, exepath),
|
||||||
functools.partial(self.doaddtab, self.metadataorigin, exepath),
|
functools.partial(self.doaddtab, self.metadataorigin, exepath),
|
||||||
functools.partial(self.doaddtab, self.getstatistic, exepath),
|
functools.partial(self.doaddtab, self.getstatistic, exepath),
|
||||||
functools.partial(self.doaddtab, self.getpretranstab, exepath),
|
|
||||||
functools.partial(self.doaddtab, self.getttssetting, exepath),
|
functools.partial(self.doaddtab, self.getttssetting, exepath),
|
||||||
|
functools.partial(self.doaddtab, self.getpretranstab, exepath),
|
||||||
functools.partial(self.doaddtab, self.getbackup, exepath),
|
functools.partial(self.doaddtab, self.getbackup, exepath),
|
||||||
],
|
],
|
||||||
delay=True,
|
delay=True,
|
||||||
@ -690,30 +765,41 @@ class dialog_setting_game_internal(QWidget):
|
|||||||
vndbid.returnPressed.connect(
|
vndbid.returnPressed.connect(
|
||||||
functools.partial(gamdidchangedtask, key, idname, exepath)
|
functools.partial(gamdidchangedtask, key, idname, exepath)
|
||||||
)
|
)
|
||||||
|
_vbox_internal = [
|
||||||
|
vndbid,
|
||||||
|
getcolorbutton(
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
functools.partial(self.openrefmainpage, key, idname, exepath),
|
||||||
|
icon="fa.chrome",
|
||||||
|
constcolor="#FF69B4",
|
||||||
|
),
|
||||||
|
getcolorbutton(
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
functools.partial(gamdidchangedtask, key, idname, exepath),
|
||||||
|
icon="fa.search",
|
||||||
|
constcolor="#FF69B4",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
try:
|
||||||
|
__settting = targetmod[key].querysettingwindow
|
||||||
|
_vbox_internal.insert(
|
||||||
|
1,
|
||||||
|
getcolorbutton(
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
functools.partial(__settting, self),
|
||||||
|
icon="fa.gear",
|
||||||
|
constcolor="#FF69B4",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
formLayout.addRow(
|
formLayout.addRow(
|
||||||
key,
|
key,
|
||||||
getboxlayout(
|
getboxlayout(_vbox_internal),
|
||||||
[
|
|
||||||
vndbid,
|
|
||||||
getcolorbutton(
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
functools.partial(
|
|
||||||
self.openrefmainpage, key, idname, exepath
|
|
||||||
),
|
|
||||||
icon="fa.chrome",
|
|
||||||
constcolor="#FF69B4",
|
|
||||||
),
|
|
||||||
getcolorbutton(
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
functools.partial(gamdidchangedtask, key, idname, exepath),
|
|
||||||
icon="fa.search",
|
|
||||||
constcolor="#FF69B4",
|
|
||||||
),
|
|
||||||
]
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
return _w
|
return _w
|
||||||
|
|
||||||
@ -1068,24 +1154,171 @@ class dialog_setting_game_internal(QWidget):
|
|||||||
)
|
)
|
||||||
return _w
|
return _w
|
||||||
|
|
||||||
|
def gettextproc(self, exepath):
|
||||||
|
_w = QWidget()
|
||||||
|
|
||||||
|
formLayout = QFormLayout()
|
||||||
|
_w.setLayout(formLayout)
|
||||||
|
__extra = QWidget()
|
||||||
|
|
||||||
|
def __function(_):
|
||||||
|
__extra.setEnabled(not _)
|
||||||
|
|
||||||
|
formLayout.addRow(
|
||||||
|
_TR("跟随默认"),
|
||||||
|
getsimpleswitch(
|
||||||
|
savehook_new_data[exepath],
|
||||||
|
"textproc_follow_default",
|
||||||
|
callback=__function,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
__extra.setEnabled(not savehook_new_data[exepath]["textproc_follow_default"])
|
||||||
|
vbox = QVBoxLayout()
|
||||||
|
vbox.setContentsMargins(0, 0, 0, 0)
|
||||||
|
__extra.setLayout(vbox)
|
||||||
|
formLayout.addWidget(__extra)
|
||||||
|
|
||||||
|
model = QStandardItemModel()
|
||||||
|
model.setHorizontalHeaderLabels(_TRL(["使用", "预处理方法", "设置"]))
|
||||||
|
|
||||||
|
table = QTableView()
|
||||||
|
|
||||||
|
table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
|
||||||
|
table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
|
||||||
|
table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
|
||||||
|
table.setSelectionMode((QAbstractItemView.SelectionMode.SingleSelection))
|
||||||
|
table.setWordWrap(False)
|
||||||
|
table.setModel(model)
|
||||||
|
|
||||||
|
table.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||||
|
table.customContextMenuRequested.connect(self.__privatetextproc_showmenu)
|
||||||
|
self.__textprocinternaltable = table
|
||||||
|
self.__textprocinternalmodel = model
|
||||||
|
self.__privatetextproc_exe = exepath
|
||||||
|
for row, k in enumerate(
|
||||||
|
savehook_new_data[exepath]["save_text_process_info"]["rank"]
|
||||||
|
): # 2
|
||||||
|
self.__checkaddnewmethod(row, k)
|
||||||
|
vbox.addWidget(table)
|
||||||
|
buttons = threebuttons(btns=2, texts=_TRL(["添加行", "删除行"]))
|
||||||
|
buttons.btn1clicked.connect(self.__privatetextproc_btn1)
|
||||||
|
buttons.btn2clicked.connect(self.__privatetextproc_btn2)
|
||||||
|
vbox.addWidget(buttons)
|
||||||
|
return _w
|
||||||
|
|
||||||
|
def __privatetextproc_showmenu(self, p):
|
||||||
|
r = self.__textprocinternaltable.currentIndex().row()
|
||||||
|
if r < 0:
|
||||||
|
return
|
||||||
|
menu = QMenu(self.__textprocinternaltable)
|
||||||
|
remove = QAction(_TR("删除"))
|
||||||
|
up = QAction(_TR("上移"))
|
||||||
|
down = QAction(_TR("下移"))
|
||||||
|
menu.addAction(remove)
|
||||||
|
menu.addAction(up)
|
||||||
|
menu.addAction(down)
|
||||||
|
action = menu.exec(self.__textprocinternaltable.cursor().pos())
|
||||||
|
|
||||||
|
if action == remove:
|
||||||
|
self.__privatetextproc_btn2()
|
||||||
|
elif action == up:
|
||||||
|
self.__privatetextproc_moverank(-1)
|
||||||
|
elif action == down:
|
||||||
|
self.__privatetextproc_moverank(1)
|
||||||
|
|
||||||
|
def __privatetextproc_moverank(self, dy):
|
||||||
|
__row = self.__textprocinternaltable.currentIndex().row()
|
||||||
|
|
||||||
|
__list = savehook_new_data[self.__privatetextproc_exe][
|
||||||
|
"save_text_process_info"
|
||||||
|
]["rank"]
|
||||||
|
game = __list[__row]
|
||||||
|
idx1 = __list.index(game)
|
||||||
|
idx2 = (idx1 + dy) % len(__list)
|
||||||
|
__list.insert(idx2, __list.pop(idx1))
|
||||||
|
self.__textprocinternalmodel.removeRow(idx1)
|
||||||
|
self.__checkaddnewmethod(idx2, game)
|
||||||
|
self.__textprocinternaltable.setCurrentIndex(
|
||||||
|
self.__textprocinternalmodel.index(__row, 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
def __checkaddnewmethod(self, row, _internal):
|
||||||
|
self.__textprocinternalmodel.insertRow(
|
||||||
|
row,
|
||||||
|
[
|
||||||
|
QStandardItem(),
|
||||||
|
QStandardItem(postprocessconfig[_internal]["name"]),
|
||||||
|
QStandardItem(),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
__dict = savehook_new_data[self.__privatetextproc_exe][
|
||||||
|
"save_text_process_info"
|
||||||
|
]["postprocessconfig"]
|
||||||
|
if _internal not in __dict:
|
||||||
|
__dict[_internal] = postprocessconfig[_internal]
|
||||||
|
__dict[_internal]["use"] = True
|
||||||
|
btn = maybehavebutton(self, self.__privatetextproc_exe, _internal)
|
||||||
|
|
||||||
|
self.__textprocinternaltable.setIndexWidget(
|
||||||
|
self.__textprocinternalmodel.index(row, 0),
|
||||||
|
getsimpleswitch(__dict[_internal], "use"),
|
||||||
|
)
|
||||||
|
if btn:
|
||||||
|
self.__textprocinternaltable.setIndexWidget(
|
||||||
|
self.__textprocinternalmodel.index(row, 2),
|
||||||
|
btn,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __privatetextproc_btn2(self):
|
||||||
|
row = self.__textprocinternaltable.currentIndex().row()
|
||||||
|
if row < 0:
|
||||||
|
return
|
||||||
|
self.__textprocinternalmodel.removeRow(row)
|
||||||
|
_dict = savehook_new_data[self.__privatetextproc_exe]["save_text_process_info"]
|
||||||
|
post = _dict["rank"][row]
|
||||||
|
_dict["rank"].pop(row)
|
||||||
|
if post in _dict["postprocessconfig"]:
|
||||||
|
_dict["postprocessconfig"].pop(post)
|
||||||
|
|
||||||
|
def __privatetextproc_btn1(self):
|
||||||
|
__viss = [
|
||||||
|
postprocessconfig[_internal]["name"] for _internal in postprocessconfig
|
||||||
|
]
|
||||||
|
|
||||||
|
def __callback(d):
|
||||||
|
__ = list(postprocessconfig.keys())[d["k"]]
|
||||||
|
__list = savehook_new_data[self.__privatetextproc_exe][
|
||||||
|
"save_text_process_info"
|
||||||
|
]["rank"]
|
||||||
|
if __ in __list:
|
||||||
|
return
|
||||||
|
__list.insert(0, __)
|
||||||
|
self.__checkaddnewmethod(0, __)
|
||||||
|
|
||||||
|
__d = {"k": 0}
|
||||||
|
autoinitdialog(
|
||||||
|
self,
|
||||||
|
_TR("预处理方法"),
|
||||||
|
400,
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "combo",
|
||||||
|
"name": _TR("预处理方法"),
|
||||||
|
"d": __d,
|
||||||
|
"k": "k",
|
||||||
|
"list": __viss,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "okcancel",
|
||||||
|
"callback": functools.partial(__callback, __d),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
def gethooktab(self, exepath):
|
def gethooktab(self, exepath):
|
||||||
_w = QWidget()
|
_w = QWidget()
|
||||||
formLayout = QFormLayout()
|
formLayout = QFormLayout()
|
||||||
_w.setLayout(formLayout)
|
_w.setLayout(formLayout)
|
||||||
formLayout.addRow(
|
|
||||||
_TR("代码页"),
|
|
||||||
getsimplecombobox(
|
|
||||||
_TRL(static_data["codepage_display"]),
|
|
||||||
savehook_new_data[exepath],
|
|
||||||
"codepage_index",
|
|
||||||
lambda x: gobject.baseobject.textsource.setsettings(),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
formLayout.addRow(
|
|
||||||
_TR("移除非选定hook"),
|
|
||||||
getsimpleswitch(savehook_new_data[exepath], "removeuseless"),
|
|
||||||
)
|
|
||||||
|
|
||||||
formLayout.addRow(
|
formLayout.addRow(
|
||||||
_TR("特殊码"),
|
_TR("特殊码"),
|
||||||
@ -1100,14 +1333,120 @@ class dialog_setting_game_internal(QWidget):
|
|||||||
_TR("插入特殊码延迟(ms)"),
|
_TR("插入特殊码延迟(ms)"),
|
||||||
getspinbox(0, 1000000, savehook_new_data[exepath], "inserthooktimeout"),
|
getspinbox(0, 1000000, savehook_new_data[exepath], "inserthooktimeout"),
|
||||||
)
|
)
|
||||||
if (
|
__extraw = QWidget()
|
||||||
savehook_new_data[exepath]["use_saved_text_process"]
|
|
||||||
or "save_text_process_info" in savehook_new_data[exepath]
|
def __function(_):
|
||||||
):
|
__extraw.setEnabled(not _)
|
||||||
formLayout.addRow(
|
try:
|
||||||
_TR("使用保存的文本处理流程"),
|
gobject.baseobject.textsource.setsettings()
|
||||||
getsimpleswitch(savehook_new_data[exepath], "use_saved_text_process"),
|
except:
|
||||||
)
|
pass
|
||||||
|
|
||||||
|
formLayout.addRow(
|
||||||
|
_TR("跟随默认"),
|
||||||
|
getsimpleswitch(
|
||||||
|
savehook_new_data[exepath],
|
||||||
|
"hooksetting_follow_default",
|
||||||
|
callback=__function,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
__extraw.setEnabled(
|
||||||
|
not savehook_new_data[exepath]["hooksetting_follow_default"]
|
||||||
|
)
|
||||||
|
|
||||||
|
for k in [
|
||||||
|
"codepage_index",
|
||||||
|
"removeuseless",
|
||||||
|
"direct_filterrepeat",
|
||||||
|
"textthreaddelay",
|
||||||
|
"maxBufferSize",
|
||||||
|
"maxHistorySize",
|
||||||
|
"filter_chaos_code",
|
||||||
|
"allow_set_text_name",
|
||||||
|
"use_yapi",
|
||||||
|
]:
|
||||||
|
if k not in savehook_new_data[exepath]["hooksetting_private"]:
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"][k] = globalconfig[k]
|
||||||
|
formLayout.addWidget(__extraw)
|
||||||
|
formLayout2 = QFormLayout()
|
||||||
|
formLayout2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
__extraw.setLayout(formLayout2)
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("代码页"),
|
||||||
|
getsimplecombobox(
|
||||||
|
_TRL(static_data["codepage_display"]),
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"],
|
||||||
|
"codepage_index",
|
||||||
|
lambda x: gobject.baseobject.textsource.setsettings(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("过滤反复刷新的句子"),
|
||||||
|
getsimpleswitch(
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"],
|
||||||
|
"direct_filterrepeat",
|
||||||
|
callback=lambda x: gobject.baseobject.textsource.setsettings(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("移除非选定hook"),
|
||||||
|
getsimpleswitch(
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"], "removeuseless"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("刷新延迟(ms)"),
|
||||||
|
getspinbox(
|
||||||
|
0,
|
||||||
|
10000,
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"],
|
||||||
|
"textthreaddelay",
|
||||||
|
callback=lambda x: gobject.baseobject.textsource.setsettings(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("最大缓冲区长度"),
|
||||||
|
getspinbox(
|
||||||
|
0,
|
||||||
|
1000000,
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"],
|
||||||
|
"maxBufferSize",
|
||||||
|
callback=lambda x: gobject.baseobject.textsource.setsettings(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("最大缓存文本长度"),
|
||||||
|
getspinbox(
|
||||||
|
0,
|
||||||
|
1000000000,
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"],
|
||||||
|
"maxHistorySize",
|
||||||
|
callback=lambda x: gobject.baseobject.textsource.setsettings(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("过滤包含乱码的文本行"),
|
||||||
|
getsimpleswitch(
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"],
|
||||||
|
"filter_chaos_code",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("区分人名和文本"),
|
||||||
|
getsimpleswitch(
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"],
|
||||||
|
"allow_set_text_name",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
formLayout2.addRow(
|
||||||
|
_TR("使用YAPI注入"),
|
||||||
|
getsimpleswitch(
|
||||||
|
savehook_new_data[exepath]["hooksetting_private"],
|
||||||
|
"use_yapi",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
return _w
|
return _w
|
||||||
|
|
||||||
|
|
||||||
@ -2091,18 +2430,20 @@ class pixwrapper(QWidget):
|
|||||||
self.visidx()
|
self.visidx()
|
||||||
|
|
||||||
def visidx(self):
|
def visidx(self):
|
||||||
if self.k and len(self.pixmaps) == 0:
|
if len(self.pixmaps) == 0:
|
||||||
|
if not self.k:
|
||||||
|
return
|
||||||
pixmap = getExeIcon(self.k, False, cache=True)
|
pixmap = getExeIcon(self.k, False, cache=True)
|
||||||
pixmap.setDevicePixelRatio(self.devicePixelRatioF())
|
pixmap.setDevicePixelRatio(self.devicePixelRatioF())
|
||||||
self.pixview.setPixmap(self.scalepix(pixmap))
|
self.pixview.setPixmap(self.scalepix(pixmap))
|
||||||
elif self.pixmapi < len(self.pixmaps):
|
else:
|
||||||
pixmap = self.pixmaps[self.pixmapi]
|
self.pixmapi = min(len(self.pixmaps) - 1, self.pixmapi)
|
||||||
|
pixmap_ = self.pixmaps[self.pixmapi]
|
||||||
savehook_new_data[self.k]["currentvisimage"] = pixmap
|
pixmap = QPixmap.fromImage(QImage(pixmap_))
|
||||||
pixmap = QPixmap.fromImage(QImage(pixmap))
|
|
||||||
if pixmap is None or pixmap.isNull():
|
if pixmap is None or pixmap.isNull():
|
||||||
self.pixmaps.pop(self.pixmapi)
|
self.pixmaps.pop(self.pixmapi)
|
||||||
return self.visidx()
|
return self.visidx()
|
||||||
|
savehook_new_data[self.k]["currentvisimage"] = pixmap_
|
||||||
pixmap.setDevicePixelRatio(self.devicePixelRatioF())
|
pixmap.setDevicePixelRatio(self.devicePixelRatioF())
|
||||||
self.pixview.setPixmap(self.scalepix(pixmap))
|
self.pixview.setPixmap(self.scalepix(pixmap))
|
||||||
|
|
||||||
|
@ -2,7 +2,14 @@ from qtsymbols import *
|
|||||||
import functools, os, json
|
import functools, os, json
|
||||||
import windows, gobject
|
import windows, gobject
|
||||||
from myutils.utils import makehtml, getfilemd5
|
from myutils.utils import makehtml, getfilemd5
|
||||||
from myutils.config import globalconfig, _TR, _TRL, savehook_new_data, savehook_new_list
|
from myutils.config import (
|
||||||
|
globalconfig,
|
||||||
|
_TR,
|
||||||
|
_TRL,
|
||||||
|
savehook_new_data,
|
||||||
|
savehook_new_list,
|
||||||
|
static_data,
|
||||||
|
)
|
||||||
from gui.pretransfile import sqlite2json2
|
from gui.pretransfile import sqlite2json2
|
||||||
from gui.codeacceptdialog import codeacceptdialog
|
from gui.codeacceptdialog import codeacceptdialog
|
||||||
from gui.setting_textinput_ocr import getocrgrid
|
from gui.setting_textinput_ocr import getocrgrid
|
||||||
@ -73,6 +80,22 @@ def gethookgrid(self):
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
[],
|
[],
|
||||||
|
[
|
||||||
|
("代码页", 5),
|
||||||
|
(
|
||||||
|
D_getsimplecombobox(
|
||||||
|
_TRL(static_data["codepage_display"]),
|
||||||
|
globalconfig,
|
||||||
|
"codepage_index",
|
||||||
|
lambda x: gobject.baseobject.textsource.setsettings(),
|
||||||
|
),
|
||||||
|
8,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
("移除非选定hook", 5),
|
||||||
|
(D_getsimpleswitch(globalconfig, "removeuseless"), 1),
|
||||||
|
],
|
||||||
[
|
[
|
||||||
("过滤反复刷新的句子", 5),
|
("过滤反复刷新的句子", 5),
|
||||||
(D_getsimpleswitch(globalconfig, "direct_filterrepeat"), 1),
|
(D_getsimpleswitch(globalconfig, "direct_filterrepeat"), 1),
|
||||||
@ -116,7 +139,6 @@ def gethookgrid(self):
|
|||||||
3,
|
3,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
[],
|
|
||||||
[
|
[
|
||||||
("过滤包含乱码的文本行", 5),
|
("过滤包含乱码的文本行", 5),
|
||||||
(D_getsimpleswitch(globalconfig, "filter_chaos_code"), 1),
|
(D_getsimpleswitch(globalconfig, "filter_chaos_code"), 1),
|
||||||
@ -131,7 +153,6 @@ def gethookgrid(self):
|
|||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
[],
|
|
||||||
[("区分人名和文本", 5), D_getsimpleswitch(globalconfig, "allow_set_text_name")],
|
[("区分人名和文本", 5), D_getsimpleswitch(globalconfig, "allow_set_text_name")],
|
||||||
[("使用YAPI注入", 5), D_getsimpleswitch(globalconfig, "use_yapi")],
|
[("使用YAPI注入", 5), D_getsimpleswitch(globalconfig, "use_yapi")],
|
||||||
]
|
]
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
from qtsymbols import *
|
from qtsymbols import *
|
||||||
import functools, copy, os
|
import functools
|
||||||
from traceback import print_exc
|
|
||||||
import gobject
|
|
||||||
from myutils.post import POSTSOLVE
|
from myutils.post import POSTSOLVE
|
||||||
from myutils.utils import (
|
from myutils.utils import (
|
||||||
selectdebugfile,
|
selectdebugfile,
|
||||||
@ -13,8 +11,6 @@ from myutils.config import (
|
|||||||
postprocessconfig,
|
postprocessconfig,
|
||||||
static_data,
|
static_data,
|
||||||
_TRL,
|
_TRL,
|
||||||
savehook_new_data,
|
|
||||||
_TR,
|
|
||||||
)
|
)
|
||||||
from gui.codeacceptdialog import codeacceptdialog
|
from gui.codeacceptdialog import codeacceptdialog
|
||||||
from gui.usefulwidget import (
|
from gui.usefulwidget import (
|
||||||
@ -32,40 +28,6 @@ from gui.inputdialog import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def savegameprocesstext():
|
|
||||||
try:
|
|
||||||
try:
|
|
||||||
with open("./userconfig/mypost.py", "r", encoding="utf8") as ff:
|
|
||||||
_mypost = ff.read()
|
|
||||||
os.makedirs("./userconfig/posts", exist_ok=True)
|
|
||||||
with open(
|
|
||||||
"./userconfig/posts/{}.py".format(gobject.baseobject.textsource.uuname),
|
|
||||||
"w",
|
|
||||||
encoding="utf8",
|
|
||||||
) as ff:
|
|
||||||
ff.write(_mypost)
|
|
||||||
except:
|
|
||||||
_mypost = None
|
|
||||||
ranklist = []
|
|
||||||
postargs = {}
|
|
||||||
for postitem in globalconfig["postprocess_rank"]:
|
|
||||||
if postitem not in postprocessconfig:
|
|
||||||
continue
|
|
||||||
if postprocessconfig[postitem]["use"]:
|
|
||||||
ranklist.append(postitem)
|
|
||||||
postargs[postitem] = copy.deepcopy(postprocessconfig[postitem])
|
|
||||||
exepath = gobject.baseobject.textsource.pname
|
|
||||||
savehook_new_data[exepath]["save_text_process_info"] = {
|
|
||||||
"postprocessconfig": postargs,
|
|
||||||
"rank": ranklist,
|
|
||||||
"mypost": gobject.baseobject.textsource.uuname,
|
|
||||||
}
|
|
||||||
if savehook_new_data[exepath]["use_saved_text_process"] == False:
|
|
||||||
savehook_new_data[exepath]["use_saved_text_process"] = True
|
|
||||||
except:
|
|
||||||
print_exc()
|
|
||||||
|
|
||||||
|
|
||||||
def delaysetcomparetext(self, s):
|
def delaysetcomparetext(self, s):
|
||||||
try:
|
try:
|
||||||
self.__fromtext.setPlainText(s)
|
self.__fromtext.setPlainText(s)
|
||||||
@ -234,24 +196,7 @@ def setTab7_lazy(self, basel):
|
|||||||
def ___(lay):
|
def ___(lay):
|
||||||
vboxw, vbox = getvboxwidget()
|
vboxw, vbox = getvboxwidget()
|
||||||
lay.addWidget(vboxw)
|
lay.addWidget(vboxw)
|
||||||
_w = makescrollgrid(grids, vbox, True, savelist, savelay)
|
makescrollgrid(grids, vbox, True, savelist, savelay)
|
||||||
_w.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
|
||||||
|
|
||||||
def showmenu(p: QPoint):
|
|
||||||
|
|
||||||
try:
|
|
||||||
gobject.baseobject.textsource.pname # 检查是否为texthook
|
|
||||||
|
|
||||||
menu = QMenu(_w)
|
|
||||||
save = QAction(_TR("保存当前游戏的文本处理流程"))
|
|
||||||
menu.addAction(save)
|
|
||||||
action = menu.exec(_w.cursor().pos())
|
|
||||||
if action == save:
|
|
||||||
savegameprocesstext()
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
_w.customContextMenuRequested.connect(showmenu)
|
|
||||||
|
|
||||||
vbox.addWidget(getcomparelayout(self))
|
vbox.addWidget(getcomparelayout(self))
|
||||||
|
|
||||||
|
@ -892,22 +892,31 @@ class threebuttons(QWidget):
|
|||||||
btn2clicked = pyqtSignal()
|
btn2clicked = pyqtSignal()
|
||||||
btn3clicked = pyqtSignal()
|
btn3clicked = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, btns=3):
|
def __init__(self, btns=3, texts=None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
layout = QHBoxLayout()
|
layout = QHBoxLayout()
|
||||||
layout.setContentsMargins(0, 0, 0, 0)
|
layout.setContentsMargins(0, 0, 0, 0)
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
button = QPushButton(self)
|
button = QPushButton(self)
|
||||||
button.setText(_TR("添加行"))
|
if texts:
|
||||||
|
button.setText(texts[0])
|
||||||
|
else:
|
||||||
|
button.setText(_TR("添加行"))
|
||||||
button.clicked.connect(self.btn1clicked)
|
button.clicked.connect(self.btn1clicked)
|
||||||
button2 = QPushButton(self)
|
button2 = QPushButton(self)
|
||||||
button2.setText(_TR("删除选中行"))
|
if texts:
|
||||||
|
button2.setText(texts[1])
|
||||||
|
else:
|
||||||
|
button2.setText(_TR("删除行"))
|
||||||
button2.clicked.connect(self.btn2clicked)
|
button2.clicked.connect(self.btn2clicked)
|
||||||
layout.addWidget(button)
|
layout.addWidget(button)
|
||||||
layout.addWidget(button2)
|
layout.addWidget(button2)
|
||||||
if btns == 3:
|
if btns == 3:
|
||||||
button3 = QPushButton(self)
|
button3 = QPushButton(self)
|
||||||
button3.setText(_TR("立即应用"))
|
if texts:
|
||||||
|
button3.setText(texts[2])
|
||||||
|
else:
|
||||||
|
button3.setText(_TR("立即应用"))
|
||||||
button3.clicked.connect(self.btn3clicked)
|
button3.clicked.connect(self.btn3clicked)
|
||||||
layout.addWidget(button3)
|
layout.addWidget(button3)
|
||||||
|
|
||||||
|
@ -17,6 +17,21 @@ class common:
|
|||||||
def getidbytitle(title):
|
def getidbytitle(title):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def config(self):
|
||||||
|
return self.config_all["args"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def config_all(self):
|
||||||
|
try:
|
||||||
|
return globalconfig["metadata"][self.typename]
|
||||||
|
except:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self.config_all.get("name", self.typename)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def proxy(self):
|
def proxy(self):
|
||||||
return getproxy(("metadata", self.typename))
|
return getproxy(("metadata", self.typename))
|
@ -1,7 +1,11 @@
|
|||||||
from myutils.metadata.abstract import common
|
from metadata.abstract import common
|
||||||
|
from gui.inputdialog import autoinitdialog, autoinitdialog_items
|
||||||
|
|
||||||
|
|
||||||
class searcher(common):
|
class searcher(common):
|
||||||
|
def querysettingwindow(self, parent):
|
||||||
|
items = autoinitdialog_items(self.config_all)
|
||||||
|
autoinitdialog(parent, self.name, 800, items)
|
||||||
|
|
||||||
def getidbytitle(self, title):
|
def getidbytitle(self, title):
|
||||||
|
|
||||||
@ -36,7 +40,8 @@ class searcher(common):
|
|||||||
"accept": "application/json",
|
"accept": "application/json",
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
|
||||||
}
|
}
|
||||||
|
if self.config["access-token"].strip() != "":
|
||||||
|
headers["Authorization"] = ("Bearer " + self.config["access-token"],)
|
||||||
response = self.proxysession.get(
|
response = self.proxysession.get(
|
||||||
f"https://api.bgm.tv/v0/subjects/{sid}", headers=headers
|
f"https://api.bgm.tv/v0/subjects/{sid}", headers=headers
|
||||||
)
|
)
|
||||||
@ -59,7 +64,6 @@ class searcher(common):
|
|||||||
return {
|
return {
|
||||||
# "namemap": namemap,
|
# "namemap": namemap,
|
||||||
"title": response["name_cn"],
|
"title": response["name_cn"],
|
||||||
# "infopath": parsehtmlmethod(vndbdowloadinfo(vid)),
|
|
||||||
"imagepath_all": [imagepath],
|
"imagepath_all": [imagepath],
|
||||||
"webtags": vndbtags,
|
"webtags": vndbtags,
|
||||||
"developers": developers,
|
"developers": developers,
|
@ -2,7 +2,7 @@ import requests, re
|
|||||||
from myutils.utils import simplehtmlparser
|
from myutils.utils import simplehtmlparser
|
||||||
|
|
||||||
|
|
||||||
from myutils.metadata.abstract import common
|
from metadata.abstract import common
|
||||||
|
|
||||||
|
|
||||||
class searcher(common):
|
class searcher(common):
|
||||||
@ -115,7 +115,6 @@ class searcher(common):
|
|||||||
return {
|
return {
|
||||||
# "namemap": namemap,
|
# "namemap": namemap,
|
||||||
"title": title,
|
"title": title,
|
||||||
# "infopath": parsehtmlmethod(vndbdowloadinfo(vid)),
|
|
||||||
"imagepath_all": [self.dispatchdownloadtask(_) for _ in imags1 + imags2],
|
"imagepath_all": [self.dispatchdownloadtask(_) for _ in imags1 + imags2],
|
||||||
"webtags": tags,
|
"webtags": tags,
|
||||||
"developers": [devp],
|
"developers": [devp],
|
181
LunaTranslator/LunaTranslator/metadata/fanza.py
Normal file
181
LunaTranslator/LunaTranslator/metadata/fanza.py
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
import requests, re
|
||||||
|
from myutils.utils import simplehtmlparser
|
||||||
|
|
||||||
|
|
||||||
|
from metadata.abstract import common
|
||||||
|
|
||||||
|
|
||||||
|
class searcher(common):
|
||||||
|
def getidbytitle(self, title):
|
||||||
|
cookies = {
|
||||||
|
"top_pv_uid": "764317a4-3d99-46be-8f5a-6e6762b6059d",
|
||||||
|
"top_dummy": "d1776405-0683-4936-824a-d48d2660ccd2",
|
||||||
|
"guest_id": "DRNHXB5TDV9XVA__",
|
||||||
|
"ckcy": "1",
|
||||||
|
"mbox": "check#true#1717923986|session#1717923925784-847103#1717925786",
|
||||||
|
"is_intarnal": "true",
|
||||||
|
"__utma": "125690133.86996065.1717923926.1717923926.1717923926.1",
|
||||||
|
"__utmb": "125690133.0.10.1717923926",
|
||||||
|
"__utmc": "125690133",
|
||||||
|
"__utmz": "125690133.1717923926.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)",
|
||||||
|
"_gcl_au": "1.1.745157082.1717923927",
|
||||||
|
"rieSh3Ee_ga": "GA1.1.1543544133.1717923927",
|
||||||
|
"AMP_TOKEN": "%24NOT_FOUND",
|
||||||
|
"_dga": "GA1.3.86996065.1717923926",
|
||||||
|
"_dga_gid": "GA1.3.1715736403.1717923928",
|
||||||
|
"_dc_gtm_UA-48257133-2": "1",
|
||||||
|
"i3_ab": "93b99577-b74d-4fef-bba7-7ba426cf40ae",
|
||||||
|
"age_check_done": "1",
|
||||||
|
"dlsoft_check_item_history": "WyJuYXZlbF8wMDEzQDAiXQ%3D%3D",
|
||||||
|
"cklg": "ja",
|
||||||
|
"_yjsu_yjad": "1717923940.9d45754c-50f7-4219-8b50-e541815f4906",
|
||||||
|
"_dga": "GA1.4.86996065.1717923926",
|
||||||
|
"_dga_gid": "GA1.4.1715736403.1717923928",
|
||||||
|
"__rtbh.uid": "%7B%22eventType%22%3A%22uid%22%2C%22id%22%3A%22unknown%22%7D",
|
||||||
|
"rieSh3Ee_ga_KQYE0DE5JW": "GS1.1.1717923926.1.1.1717923942.0.0.405570256",
|
||||||
|
"cto_bundle": "yi6GA19QYzZmZHhXT0tWaFZZN2o4Y2NBb0lFSUFiWCUyQmJ3OWlTZ05VaWtEeXpoR201SnEyYnVIU3BqRENGeXJDN1VLUU5GOGxVRCUyRjVBa2dZUGFSc2kzSHNoa1FlUGx5Z2xoTElmTE5uc0l1WXpFclFGV1B0TiUyRldXT2ZaV0lXUEV5a2k4and0c2cxJTJGUDZCMWpNV0Q3bExiQktKZyUzRCUzRA",
|
||||||
|
"XSRF-TOKEN": "eyJpdiI6ImIyY21vbVJQZloxOUR3ZmJyaWhRdUE9PSIsInZhbHVlIjoiWTRaZ1VTOUw4UmFidnhvbWJkaU11SjZGRmljeWRiQ0cwODIybXI3T29VVmt2VXpub2dZdnBEUTFtN0pZa1BSeWZUQVhzOGR5UXlhVWxPUm1CN2Rwc3c9PSIsIm1hYyI6IjY5OTQ0ZjRmZjBhMGViZGRlN2VlMTQ2M2U3MDRiYjZlODllZWUyMDNlODg4YjQxOTA3ZmQyZDkzZWFhMjM0NmIiLCJ0YWciOiIifQ%3D%3D",
|
||||||
|
"laravel_session": "eyJpdiI6Ik41QzkzTkg1alBGVVVmeUdXOWpQWGc9PSIsInZhbHVlIjoia3lYNzVMOEZ3dm15SFNCb3RlYXNQTU9vZkZCeXBzK3BVOVF2dUY0d1c3QktQczVsU2ZRdTUxdkQ4VlBTcmdjdklQMHV3cFVsRVVcL3BCRGIybTNkVUhRPT0iLCJtYWMiOiJhYjkzMjNhZDg2OWI0ZjkyMTlmNzkzNTExOTlmZTBjNDU3NmJlZWUyYmM5ZTQ5NWI4MjAxZDdmNjZiZDA5NTJjIn0%3D",
|
||||||
|
"_dd_s": "logs=0&expire=1717924840754",
|
||||||
|
}
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||||
|
"Accept-Language": "zh-CN,zh;q=0.9,ar;q=0.8,sq;q=0.7,ru;q=0.6",
|
||||||
|
"Cache-Control": "max-age=0",
|
||||||
|
"Connection": "keep-alive",
|
||||||
|
"Referer": "https://www.dmm.co.jp/",
|
||||||
|
"Sec-Fetch-Dest": "document",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
"Sec-Fetch-Site": "same-site",
|
||||||
|
"Sec-Fetch-User": "?1",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
|
||||||
|
"sec-ch-ua": '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
|
||||||
|
"sec-ch-ua-mobile": "?0",
|
||||||
|
"sec-ch-ua-platform": '"Windows"',
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.proxysession.get(
|
||||||
|
f"https://dlsoft.dmm.co.jp/search/?floor=digital_pcgame&searchstr={title}&service=pcgame",
|
||||||
|
headers=headers,
|
||||||
|
cookies=cookies,
|
||||||
|
)
|
||||||
|
_id = re.search(
|
||||||
|
"https://pics.dmm.co.jp/digital/pcgame/(.*?)/", response.text
|
||||||
|
).groups()[0]
|
||||||
|
return _id
|
||||||
|
|
||||||
|
def refmainpage(self, _id):
|
||||||
|
return f"https://dlsoft.dmm.co.jp/detail/{_id}/"
|
||||||
|
|
||||||
|
def searchfordata(self, RJ):
|
||||||
|
cookies = {
|
||||||
|
"top_pv_uid": "764317a4-3d99-46be-8f5a-6e6762b6059d",
|
||||||
|
"top_dummy": "d1776405-0683-4936-824a-d48d2660ccd2",
|
||||||
|
"guest_id": "DRNHXB5TDV9XVA__",
|
||||||
|
"ckcy": "1",
|
||||||
|
"mbox": "check#true#1717923986|session#1717923925784-847103#1717925786",
|
||||||
|
"is_intarnal": "true",
|
||||||
|
"__utma": "125690133.86996065.1717923926.1717923926.1717923926.1",
|
||||||
|
"__utmb": "125690133.0.10.1717923926",
|
||||||
|
"__utmc": "125690133",
|
||||||
|
"__utmz": "125690133.1717923926.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)",
|
||||||
|
"_gcl_au": "1.1.745157082.1717923927",
|
||||||
|
"rieSh3Ee_ga": "GA1.1.1543544133.1717923927",
|
||||||
|
"AMP_TOKEN": "%24NOT_FOUND",
|
||||||
|
"_dga": "GA1.3.86996065.1717923926",
|
||||||
|
"_dga_gid": "GA1.3.1715736403.1717923928",
|
||||||
|
"_dc_gtm_UA-48257133-2": "1",
|
||||||
|
"i3_ab": "93b99577-b74d-4fef-bba7-7ba426cf40ae",
|
||||||
|
"age_check_done": "1",
|
||||||
|
"dlsoft_check_item_history": "WyJuYXZlbF8wMDEzQDAiXQ%3D%3D",
|
||||||
|
"cklg": "ja",
|
||||||
|
"_yjsu_yjad": "1717923940.9d45754c-50f7-4219-8b50-e541815f4906",
|
||||||
|
"_dga": "GA1.4.86996065.1717923926",
|
||||||
|
"_dga_gid": "GA1.4.1715736403.1717923928",
|
||||||
|
"__rtbh.uid": "%7B%22eventType%22%3A%22uid%22%2C%22id%22%3A%22unknown%22%7D",
|
||||||
|
"rieSh3Ee_ga_KQYE0DE5JW": "GS1.1.1717923926.1.1.1717923942.0.0.405570256",
|
||||||
|
"cto_bundle": "yi6GA19QYzZmZHhXT0tWaFZZN2o4Y2NBb0lFSUFiWCUyQmJ3OWlTZ05VaWtEeXpoR201SnEyYnVIU3BqRENGeXJDN1VLUU5GOGxVRCUyRjVBa2dZUGFSc2kzSHNoa1FlUGx5Z2xoTElmTE5uc0l1WXpFclFGV1B0TiUyRldXT2ZaV0lXUEV5a2k4and0c2cxJTJGUDZCMWpNV0Q3bExiQktKZyUzRCUzRA",
|
||||||
|
"XSRF-TOKEN": "eyJpdiI6ImIyY21vbVJQZloxOUR3ZmJyaWhRdUE9PSIsInZhbHVlIjoiWTRaZ1VTOUw4UmFidnhvbWJkaU11SjZGRmljeWRiQ0cwODIybXI3T29VVmt2VXpub2dZdnBEUTFtN0pZa1BSeWZUQVhzOGR5UXlhVWxPUm1CN2Rwc3c9PSIsIm1hYyI6IjY5OTQ0ZjRmZjBhMGViZGRlN2VlMTQ2M2U3MDRiYjZlODllZWUyMDNlODg4YjQxOTA3ZmQyZDkzZWFhMjM0NmIiLCJ0YWciOiIifQ%3D%3D",
|
||||||
|
"laravel_session": "eyJpdiI6Ik41QzkzTkg1alBGVVVmeUdXOWpQWGc9PSIsInZhbHVlIjoia3lYNzVMOEZ3dm15SFNCb3RlYXNQTU9vZkZCeXBzK3BVOVF2dUY0d1c3QktQczVsU2ZRdTUxdkQ4VlBTcmdjdklQMHV3cFVsRVVcL3BCRGIybTNkVUhRPT0iLCJtYWMiOiJhYjkzMjNhZDg2OWI0ZjkyMTlmNzkzNTExOTlmZTBjNDU3NmJlZWUyYmM5ZTQ5NWI4MjAxZDdmNjZiZDA5NTJjIn0%3D",
|
||||||
|
"_dd_s": "logs=0&expire=1717924840754",
|
||||||
|
}
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||||
|
"Accept-Language": "zh-CN,zh;q=0.9,ar;q=0.8,sq;q=0.7,ru;q=0.6",
|
||||||
|
"Cache-Control": "max-age=0",
|
||||||
|
"Connection": "keep-alive",
|
||||||
|
"Referer": "https://www.dmm.co.jp/",
|
||||||
|
"Sec-Fetch-Dest": "document",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
"Sec-Fetch-Site": "same-site",
|
||||||
|
"Sec-Fetch-User": "?1",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
|
||||||
|
"sec-ch-ua": '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
|
||||||
|
"sec-ch-ua-mobile": "?0",
|
||||||
|
"sec-ch-ua-platform": '"Windows"',
|
||||||
|
}
|
||||||
|
print(self.refmainpage(RJ))
|
||||||
|
response = self.proxysession.get(
|
||||||
|
self.refmainpage(RJ), headers=headers, cookies=cookies
|
||||||
|
)
|
||||||
|
|
||||||
|
title = re.search(
|
||||||
|
'<h1 class="productTitle__headline"(.*?)>(.*?)</h1>', response.text
|
||||||
|
).groups()[1]
|
||||||
|
print(title)
|
||||||
|
devp = re.findall(
|
||||||
|
"<li>([\\s\\S]*?)</li>",
|
||||||
|
response.text,
|
||||||
|
)[2]
|
||||||
|
print(devp)
|
||||||
|
devp = (
|
||||||
|
re.search("<a (.*?)>([\\s\\S]*?)</a>", devp)
|
||||||
|
.groups()[1]
|
||||||
|
.replace("\n", "")
|
||||||
|
.strip()
|
||||||
|
)
|
||||||
|
print(devp)
|
||||||
|
|
||||||
|
__text = response.text
|
||||||
|
tags = []
|
||||||
|
while True:
|
||||||
|
if __text.find('<tr class="contentsDetailBottom__tableRow">') == -1:
|
||||||
|
break
|
||||||
|
__text = __text[
|
||||||
|
__text.find('<tr class="contentsDetailBottom__tableRow">') :
|
||||||
|
]
|
||||||
|
tags = simplehtmlparser(
|
||||||
|
__text,
|
||||||
|
"tr",
|
||||||
|
'<tr class="contentsDetailBottom__tableRow">',
|
||||||
|
)
|
||||||
|
__text = __text[1:]
|
||||||
|
if "ジャンル" not in tags:
|
||||||
|
continue
|
||||||
|
tags = re.findall(">(.*?)</a>", tags)
|
||||||
|
break
|
||||||
|
|
||||||
|
inner = simplehtmlparser(
|
||||||
|
response.text,
|
||||||
|
"div",
|
||||||
|
'<div class="main-area-left">',
|
||||||
|
)
|
||||||
|
|
||||||
|
imags2 = [_[0] for _ in re.findall('<img src="(.*?)"(.*?)>', inner)]
|
||||||
|
print(imags2)
|
||||||
|
|
||||||
|
inner = simplehtmlparser(response.text, "div", '<div ref="product_slider_data"')
|
||||||
|
|
||||||
|
return {
|
||||||
|
# "namemap": namemap,
|
||||||
|
"title": title,
|
||||||
|
"imagepath_all": [
|
||||||
|
self.dispatchdownloadtask(_.replace("js-", "jp-")) for _ in imags2
|
||||||
|
],
|
||||||
|
"webtags": tags,
|
||||||
|
"developers": devp,
|
||||||
|
}
|
@ -1,10 +1,9 @@
|
|||||||
import time, requests, re, os
|
import requests, re, os
|
||||||
from myutils.config import globalconfig, tryreadconfig, safesave
|
from myutils.config import tryreadconfig, safesave
|
||||||
from threading import Thread
|
|
||||||
import gzip, json
|
import gzip, json
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from myutils.metadata.abstract import common
|
from metadata.abstract import common
|
||||||
|
|
||||||
|
|
||||||
def safegetvndbjson(proxy, url, json, getter):
|
def safegetvndbjson(proxy, url, json, getter):
|
||||||
@ -216,39 +215,6 @@ def getvntagsbyid(proxy, vid):
|
|||||||
return tags
|
return tags
|
||||||
|
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
|
|
||||||
def parsehtmlmethod(infopath):
|
|
||||||
with open(infopath, "r", encoding="utf8") as ff:
|
|
||||||
text = ff.read()
|
|
||||||
##隐藏横向滚动
|
|
||||||
text = text.replace("<body>", '<body style="overflow-x: hidden;">')
|
|
||||||
##删除header
|
|
||||||
text = re.sub("<header>([\\s\\S]*?)</header>", "", text)
|
|
||||||
text = re.sub("<footer>([\\s\\S]*?)</footer>", "", text)
|
|
||||||
text = re.sub('<article class="vnreleases"([\\s\\S]*?)</article>', "", text)
|
|
||||||
text = re.sub('<article class="vnstaff"([\\s\\S]*?)</article>', "", text)
|
|
||||||
text = re.sub('<article id="stats"([\\s\\S]*?)</article>', "", text)
|
|
||||||
|
|
||||||
text = re.sub("<nav>([\\s\\S]*?)</nav>", "", text)
|
|
||||||
text = re.sub('<p class="itemmsg">([\\s\\S]*?)</p>', "", text)
|
|
||||||
text = re.sub('<div id="vntags">([\\s\\S]*?)</div>', "", text)
|
|
||||||
text = re.sub('<div id="tagops">([\\s\\S]*?)</div>', "", text)
|
|
||||||
resavepath = infopath + "parsed.html"
|
|
||||||
|
|
||||||
if globalconfig["languageuse"] == 0:
|
|
||||||
text = re.sub(
|
|
||||||
'<a href="(.*?)" lang="ja-Latn" title="(.*?)">(.*?)</a>',
|
|
||||||
'<a href="\\1" lang="ja-Latn" title="\\3">\\2</a>',
|
|
||||||
text,
|
|
||||||
)
|
|
||||||
|
|
||||||
with open(resavepath, "w", encoding="utf8") as ff:
|
|
||||||
ff.write(text)
|
|
||||||
|
|
||||||
return resavepath
|
|
||||||
|
|
||||||
|
|
||||||
def gettagfromhtml(path):
|
def gettagfromhtml(path):
|
||||||
if path and os.path.exists(path):
|
if path and os.path.exists(path):
|
||||||
@ -302,11 +268,6 @@ class searcher(common):
|
|||||||
return {
|
return {
|
||||||
"namemap": namemap,
|
"namemap": namemap,
|
||||||
"title": title,
|
"title": title,
|
||||||
"infopath": parsehtmlmethod(
|
|
||||||
self.dispatchdownloadtask(
|
|
||||||
self.refmainpage(_vid), ishtml=True, delay=False
|
|
||||||
)
|
|
||||||
),
|
|
||||||
"imagepath_all": __,
|
"imagepath_all": __,
|
||||||
"webtags": vndbtags,
|
"webtags": vndbtags,
|
||||||
"developers": developers,
|
"developers": developers,
|
@ -1,5 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
import os, time
|
import os, time, uuid
|
||||||
from traceback import print_exc
|
from traceback import print_exc
|
||||||
|
|
||||||
|
|
||||||
@ -60,6 +60,14 @@ ocrsetting = tryreadconfig("ocrsetting.json")
|
|||||||
|
|
||||||
def getdefaultsavehook(gamepath, title=None):
|
def getdefaultsavehook(gamepath, title=None):
|
||||||
default = {
|
default = {
|
||||||
|
"hooksetting_follow_default": True,
|
||||||
|
"hooksetting_private": {}, # 显示时再加载,缺省用global中的键
|
||||||
|
"textproc_follow_default": True,
|
||||||
|
"save_text_process_info": {
|
||||||
|
"postprocessconfig": {},
|
||||||
|
"rank": [],
|
||||||
|
# "mypost":
|
||||||
|
},
|
||||||
"localeswitcher": 0,
|
"localeswitcher": 0,
|
||||||
"onloadautochangemode2": 0,
|
"onloadautochangemode2": 0,
|
||||||
"onloadautoswitchsrclang": 0,
|
"onloadautoswitchsrclang": 0,
|
||||||
@ -74,8 +82,6 @@ def getdefaultsavehook(gamepath, title=None):
|
|||||||
"hook": [],
|
"hook": [],
|
||||||
"inserthooktimeout": 0,
|
"inserthooktimeout": 0,
|
||||||
"needinserthookcode": [],
|
"needinserthookcode": [],
|
||||||
"removeuseless": False,
|
|
||||||
"codepage_index": 0,
|
|
||||||
# "allow_tts_auto_names": "",#->v4
|
# "allow_tts_auto_names": "",#->v4
|
||||||
"allow_tts_auto_names_v4": [],
|
"allow_tts_auto_names_v4": [],
|
||||||
"tts_repair": False,
|
"tts_repair": False,
|
||||||
@ -101,14 +107,16 @@ def getdefaultsavehook(gamepath, title=None):
|
|||||||
#
|
#
|
||||||
"vid": 0,
|
"vid": 0,
|
||||||
"bgmsid": 0,
|
"bgmsid": 0,
|
||||||
"dlsiteid": 'RJ',
|
"dlsiteid": "RJ/VJXXXX",
|
||||||
|
"fanzaid": "",
|
||||||
|
|
||||||
"title": "",
|
"title": "",
|
||||||
# "imagepath": None, # 封面->imagepath_all[0]
|
# "imagepath": None, # 封面->imagepath_all[0]
|
||||||
# "imagepath_much2": [], # 截图->imagepath_all[1:]
|
# "imagepath_much2": [], # 截图->imagepath_all[1:]
|
||||||
"imagepath_all": [],
|
"imagepath_all": [],
|
||||||
"developers": [],
|
"developers": [],
|
||||||
"webtags": [], # 标签
|
"webtags": [], # 标签
|
||||||
"infopath": None, # 离线存储的主页
|
# "infopath": None, # 离线存储的主页
|
||||||
}
|
}
|
||||||
if title and len(title):
|
if title and len(title):
|
||||||
default["title"] = title # metadata
|
default["title"] = title # metadata
|
||||||
|
@ -357,7 +357,7 @@ def POSTSOLVE(line):
|
|||||||
try:
|
try:
|
||||||
if "pname" in dir(gobject.baseobject.textsource):
|
if "pname" in dir(gobject.baseobject.textsource):
|
||||||
exepath = gobject.baseobject.textsource.pname
|
exepath = gobject.baseobject.textsource.pname
|
||||||
if savehook_new_data[exepath]["use_saved_text_process"]:
|
if not savehook_new_data[exepath]["textproc_follow_default"]:
|
||||||
useranklist = savehook_new_data[exepath]["save_text_process_info"][
|
useranklist = savehook_new_data[exepath]["save_text_process_info"][
|
||||||
"rank"
|
"rank"
|
||||||
]
|
]
|
||||||
@ -398,7 +398,7 @@ def POSTSOLVE(line):
|
|||||||
if usedpostprocessconfig[postitem]["use"]:
|
if usedpostprocessconfig[postitem]["use"]:
|
||||||
try:
|
try:
|
||||||
_f = functions[postitem]
|
_f = functions[postitem]
|
||||||
|
|
||||||
sig = inspect.signature(_f)
|
sig = inspect.signature(_f)
|
||||||
np = len(sig.parameters)
|
np = len(sig.parameters)
|
||||||
if np == 1:
|
if np == 1:
|
||||||
|
@ -98,21 +98,6 @@ class PriorityQueue:
|
|||||||
searchvndbqueue = PriorityQueue()
|
searchvndbqueue = PriorityQueue()
|
||||||
|
|
||||||
|
|
||||||
def checkinfo(gamepath):
|
|
||||||
return (savehook_new_data[gamepath]["infopath"] is None) or (
|
|
||||||
(savehook_new_data[gamepath]["infopath"][:4].lower() != "http")
|
|
||||||
and os.path.exists(savehook_new_data[gamepath]["infopath"]) == False
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def checkvid(gamepath):
|
|
||||||
|
|
||||||
return checkinfo(gamepath) or (
|
|
||||||
(len(savehook_new_data[gamepath]["webtags"]) == 0)
|
|
||||||
and (len(savehook_new_data[gamepath]["developers"]) == 0)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def guessmaybetitle(gamepath):
|
def guessmaybetitle(gamepath):
|
||||||
|
|
||||||
__t = []
|
__t = []
|
||||||
@ -145,8 +130,6 @@ def guessmaybetitle(gamepath):
|
|||||||
|
|
||||||
|
|
||||||
targetmod = {}
|
targetmod = {}
|
||||||
for k in globalconfig["metadata"]:
|
|
||||||
targetmod[k] = importlib.import_module(f"myutils.metadata.{k}").searcher(k)
|
|
||||||
|
|
||||||
|
|
||||||
def trysearchforid(gamepath, searchargs: list):
|
def trysearchforid(gamepath, searchargs: list):
|
||||||
@ -181,8 +164,8 @@ def trysearchfordata(gamepath, arg):
|
|||||||
try:
|
try:
|
||||||
data = targetmod[key].searchfordata(vid)
|
data = targetmod[key].searchfordata(vid)
|
||||||
except:
|
except:
|
||||||
|
print_exc()
|
||||||
data = {}
|
data = {}
|
||||||
infopath = data.get("infopath", None)
|
|
||||||
title = data.get("title", None)
|
title = data.get("title", None)
|
||||||
namemap = data.get("namemap", None)
|
namemap = data.get("namemap", None)
|
||||||
developers = data.get("developers", [])
|
developers = data.get("developers", [])
|
||||||
@ -194,10 +177,16 @@ def trysearchfordata(gamepath, arg):
|
|||||||
continue
|
continue
|
||||||
if _ not in savehook_new_data[gamepath]["imagepath_all"]:
|
if _ not in savehook_new_data[gamepath]["imagepath_all"]:
|
||||||
savehook_new_data[gamepath]["imagepath_all"].append(_)
|
savehook_new_data[gamepath]["imagepath_all"].append(_)
|
||||||
if title and (not savehook_new_data[gamepath]["istitlesetted"]):
|
if title:
|
||||||
savehook_new_data[gamepath]["title"] = title
|
if not savehook_new_data[gamepath]["istitlesetted"]:
|
||||||
if infopath:
|
savehook_new_data[gamepath]["title"] = title
|
||||||
savehook_new_data[gamepath]["infopath"] = infopath
|
_vis = globalconfig["metadata"][key]["name"]
|
||||||
|
_url = targetmod[key].refmainpage(vid)
|
||||||
|
_urls = [_[1] for _ in savehook_new_data[gamepath]["relationlinks"]]
|
||||||
|
if _url not in _urls:
|
||||||
|
savehook_new_data[gamepath]["relationlinks"].append(
|
||||||
|
(_vis, targetmod[key].refmainpage(vid))
|
||||||
|
)
|
||||||
if namemap:
|
if namemap:
|
||||||
savehook_new_data[gamepath]["namemap"] = namemap
|
savehook_new_data[gamepath]["namemap"] = namemap
|
||||||
if len(webtags):
|
if len(webtags):
|
||||||
@ -228,9 +217,6 @@ def everymethodsthread():
|
|||||||
print_exc()
|
print_exc()
|
||||||
|
|
||||||
|
|
||||||
threading.Thread(target=everymethodsthread).start()
|
|
||||||
|
|
||||||
|
|
||||||
def gamdidchangedtask(key, idname, gamepath):
|
def gamdidchangedtask(key, idname, gamepath):
|
||||||
vid = savehook_new_data[gamepath][idname]
|
vid = savehook_new_data[gamepath][idname]
|
||||||
if vid == "":
|
if vid == "":
|
||||||
@ -256,8 +242,8 @@ def titlechangedtask(gamepath, title):
|
|||||||
|
|
||||||
|
|
||||||
def checkifnewgame(targetlist, gamepath, title=None):
|
def checkifnewgame(targetlist, gamepath, title=None):
|
||||||
isnew = gamepath in targetlist
|
isnew = gamepath not in targetlist
|
||||||
if not isnew:
|
if isnew:
|
||||||
targetlist.insert(0, gamepath)
|
targetlist.insert(0, gamepath)
|
||||||
if gamepath not in savehook_new_data:
|
if gamepath not in savehook_new_data:
|
||||||
savehook_new_data[gamepath] = getdefaultsavehook(gamepath, title)
|
savehook_new_data[gamepath] = getdefaultsavehook(gamepath, title)
|
||||||
@ -368,9 +354,11 @@ class wavmp3player:
|
|||||||
return durationms
|
return durationms
|
||||||
|
|
||||||
|
|
||||||
def selectdebugfile(path):
|
def selectdebugfile(path: str, ismypost=False):
|
||||||
|
if ismypost:
|
||||||
|
path = f"./userconfig/posts/{path}.py"
|
||||||
p = os.path.abspath((path))
|
p = os.path.abspath((path))
|
||||||
|
os.makedirs(os.path.dirname(p), exist_ok=True)
|
||||||
|
|
||||||
if os.path.exists(p) == False:
|
if os.path.exists(p) == False:
|
||||||
with open(p, "w", encoding="utf8") as ff:
|
with open(p, "w", encoding="utf8") as ff:
|
||||||
@ -385,7 +373,7 @@ class TS(basetrans):
|
|||||||
return content
|
return content
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
elif path == "./userconfig/mypost.py":
|
elif path == "./userconfig/mypost.py" or ismypost:
|
||||||
ff.write(
|
ff.write(
|
||||||
"""
|
"""
|
||||||
def POSTSOLVE(line):
|
def POSTSOLVE(line):
|
||||||
@ -740,3 +728,10 @@ class LRUCache:
|
|||||||
if not _:
|
if not _:
|
||||||
self.put(key)
|
self.put(key)
|
||||||
return _
|
return _
|
||||||
|
|
||||||
|
|
||||||
|
for k in globalconfig["metadata"]:
|
||||||
|
targetmod[k] = importlib.import_module(f"metadata.{k}").searcher(k)
|
||||||
|
|
||||||
|
|
||||||
|
threading.Thread(target=everymethodsthread).start()
|
||||||
|
@ -83,6 +83,21 @@ EmbedCallback = CFUNCTYPE(None, c_wchar_p, ThreadParam)
|
|||||||
|
|
||||||
|
|
||||||
class texthook(basetext):
|
class texthook(basetext):
|
||||||
|
@property
|
||||||
|
def config(self):
|
||||||
|
if savehook_new_data[self.pname]["hooksetting_follow_default"]:
|
||||||
|
return globalconfig
|
||||||
|
else:
|
||||||
|
|
||||||
|
class __shitdict(dict):
|
||||||
|
def __getitem__(self, key):
|
||||||
|
if key in self:
|
||||||
|
return super().__getitem__(key)
|
||||||
|
else:
|
||||||
|
return globalconfig[key]
|
||||||
|
|
||||||
|
return __shitdict(savehook_new_data[self.pname]["hooksetting_private"])
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, pids, hwnd, pname, autostarthookcode=None, needinserthookcode=None
|
self, pids, hwnd, pname, autostarthookcode=None, needinserthookcode=None
|
||||||
):
|
):
|
||||||
@ -90,6 +105,9 @@ class texthook(basetext):
|
|||||||
autostarthookcode = []
|
autostarthookcode = []
|
||||||
if needinserthookcode is None:
|
if needinserthookcode is None:
|
||||||
needinserthookcode = []
|
needinserthookcode = []
|
||||||
|
self.pname = pname
|
||||||
|
self.pids = pids
|
||||||
|
self.hwnd = hwnd
|
||||||
self.keepref = []
|
self.keepref = []
|
||||||
self.newline = Queue()
|
self.newline = Queue()
|
||||||
self.newline_delaywait = Queue()
|
self.newline_delaywait = Queue()
|
||||||
@ -102,15 +120,12 @@ class texthook(basetext):
|
|||||||
self.selectinghook = None
|
self.selectinghook = None
|
||||||
self.selectedhook = []
|
self.selectedhook = []
|
||||||
self.selectedhookidx = []
|
self.selectedhookidx = []
|
||||||
self.allow_set_text_name = globalconfig["allow_set_text_name"]
|
self.allow_set_text_name = self.config["allow_set_text_name"]
|
||||||
|
|
||||||
self.pids = pids
|
|
||||||
self.connectedpids = []
|
self.connectedpids = []
|
||||||
self.pname = pname
|
|
||||||
self.hwnd = hwnd
|
|
||||||
self.runonce_line = ""
|
self.runonce_line = ""
|
||||||
self.autostarthookcode = [self.deserial(__) for __ in autostarthookcode]
|
self.autostarthookcode = [self.deserial(__) for __ in autostarthookcode]
|
||||||
self.isremoveuseless = savehook_new_data[self.pname]["removeuseless"] and len(
|
self.isremoveuseless = self.config["removeuseless"] and len(
|
||||||
self.autostarthookcode
|
self.autostarthookcode
|
||||||
)
|
)
|
||||||
self.needinserthookcode = needinserthookcode
|
self.needinserthookcode = needinserthookcode
|
||||||
@ -221,7 +236,7 @@ class texthook(basetext):
|
|||||||
|
|
||||||
injectpids = []
|
injectpids = []
|
||||||
for pid in self.pids:
|
for pid in self.pids:
|
||||||
if globalconfig["use_yapi"]:
|
if self.config["use_yapi"]:
|
||||||
self.Luna_Inject(pid, os.path.abspath("./files/plugins/LunaHook"))
|
self.Luna_Inject(pid, os.path.abspath("./files/plugins/LunaHook"))
|
||||||
else:
|
else:
|
||||||
if self.Luna_CreatePipeAndCheck(pid):
|
if self.Luna_CreatePipeAndCheck(pid):
|
||||||
@ -347,16 +362,16 @@ class texthook(basetext):
|
|||||||
|
|
||||||
def setsettings(self):
|
def setsettings(self):
|
||||||
self.Luna_Settings(
|
self.Luna_Settings(
|
||||||
globalconfig["textthreaddelay"],
|
self.config["textthreaddelay"],
|
||||||
globalconfig["direct_filterrepeat"],
|
self.config["direct_filterrepeat"],
|
||||||
self.codepage(),
|
self.codepage(),
|
||||||
globalconfig["maxBufferSize"],
|
self.config["maxBufferSize"],
|
||||||
globalconfig["maxHistorySize"],
|
self.config["maxHistorySize"],
|
||||||
)
|
)
|
||||||
|
|
||||||
def codepage(self):
|
def codepage(self):
|
||||||
try:
|
try:
|
||||||
cpi = savehook_new_data[self.pname]["codepage_index"]
|
cpi = self.config["codepage_index"]
|
||||||
cp = static_data["codepage_real"][cpi]
|
cp = static_data["codepage_real"][cpi]
|
||||||
except:
|
except:
|
||||||
cp = 932
|
cp = 932
|
||||||
@ -427,7 +442,7 @@ class texthook(basetext):
|
|||||||
@threader
|
@threader
|
||||||
def delaycollectallselectedoutput(self):
|
def delaycollectallselectedoutput(self):
|
||||||
while True:
|
while True:
|
||||||
time.sleep(globalconfig["textthreaddelay"] / 1000)
|
time.sleep(self.config["textthreaddelay"] / 1000)
|
||||||
if self.newline_delaywait.empty():
|
if self.newline_delaywait.empty():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -444,7 +459,7 @@ class texthook(basetext):
|
|||||||
|
|
||||||
def handle_output(self, hc, hn, tp, output):
|
def handle_output(self, hc, hn, tp, output):
|
||||||
|
|
||||||
if globalconfig["filter_chaos_code"] and checkchaos(output):
|
if self.config["filter_chaos_code"] and checkchaos(output):
|
||||||
return False
|
return False
|
||||||
key = (hc, hn.decode("utf8"), tp)
|
key = (hc, hn.decode("utf8"), tp)
|
||||||
|
|
||||||
|
@ -38,7 +38,17 @@
|
|||||||
"downloadtasks": [],
|
"downloadtasks": [],
|
||||||
"useproxy": true,
|
"useproxy": true,
|
||||||
"target": "bgmsid",
|
"target": "bgmsid",
|
||||||
"idtype": 0
|
"idtype": 0,
|
||||||
|
"args": {
|
||||||
|
"access-token": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fanza": {
|
||||||
|
"name": "FanzaGames",
|
||||||
|
"downloadtasks": [],
|
||||||
|
"useproxy": true,
|
||||||
|
"target": "fanzaid",
|
||||||
|
"idtype": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relationlinks": [
|
"relationlinks": [
|
||||||
@ -171,8 +181,10 @@
|
|||||||
500,
|
500,
|
||||||
500
|
500
|
||||||
],
|
],
|
||||||
|
"codepage_index": 0,
|
||||||
|
"removeuseless": false,
|
||||||
"vispolicy": 0,
|
"vispolicy": 0,
|
||||||
"currvislistuid" : null,
|
"currvislistuid": null,
|
||||||
"multiregion": false,
|
"multiregion": false,
|
||||||
"rememberocrregions": false,
|
"rememberocrregions": false,
|
||||||
"ocrregions": [],
|
"ocrregions": [],
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
"越南语(CP1258)": "الفيتنامية ( cp1258 ) .",
|
"越南语(CP1258)": "الفيتنامية ( cp1258 ) .",
|
||||||
"游戏失去焦点时窗口隐藏": "لعبة نافذة مخفية عندما يفقد التركيز",
|
"游戏失去焦点时窗口隐藏": "لعبة نافذة مخفية عندما يفقد التركيز",
|
||||||
"选择游戏": "اختيار اللعبة",
|
"选择游戏": "اختيار اللعبة",
|
||||||
"删除选中行": "حذف صف",
|
|
||||||
"百度": "بايدو .",
|
"百度": "بايدو .",
|
||||||
"東北イタコ/东北伊达子": "شمال شرق イコ / شمال شرق عدن",
|
"東北イタコ/东北伊达子": "شمال شرق イコ / شمال شرق عدن",
|
||||||
"琴葉茜": "كين يي تشيان",
|
"琴葉茜": "كين يي تشيان",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "كاتاكانا",
|
"片假名": "كاتاكانا",
|
||||||
"罗马音": "نغمة رومانية",
|
"罗马音": "نغمة رومانية",
|
||||||
"日语注音方案": "نظام صوتي ياباني",
|
"日语注音方案": "نظام صوتي ياباني",
|
||||||
"保存当前游戏的文本处理流程": "حفظ النص الحالي في اللعبة",
|
|
||||||
"使用保存的文本处理流程": "استخدام عملية حفظ النص",
|
"使用保存的文本处理流程": "استخدام عملية حفظ النص",
|
||||||
"Sakura大模型": "ساكورا غراند موديل",
|
"Sakura大模型": "ساكورا غراند موديل",
|
||||||
"Magpie路径": "ماغبي تريل",
|
"Magpie路径": "ماغبي تريل",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "عرض البنود",
|
"显示的项目": "عرض البنود",
|
||||||
"首位的": "أولا",
|
"首位的": "أولا",
|
||||||
"指定的": "محدد",
|
"指定的": "محدد",
|
||||||
"设为显示的项目": "عرض البند"
|
"设为显示的项目": "عرض البند",
|
||||||
|
"跟随默认": "اتبع التقصير",
|
||||||
|
"删除行": "حذف صف",
|
||||||
|
"使用": "إستعمال"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "記號",
|
"記号": "記號",
|
||||||
"选择文件": "選擇檔案",
|
"选择文件": "選擇檔案",
|
||||||
"缩放时禁用窗口大小调整": "縮放時禁用視窗大小調整",
|
"缩放时禁用窗口大小调整": "縮放時禁用視窗大小調整",
|
||||||
"删除选中行": "删除選中行",
|
|
||||||
"图标": "圖標",
|
"图标": "圖標",
|
||||||
"指示詞": "訓示詞",
|
"指示詞": "訓示詞",
|
||||||
"動詞": "動詞",
|
"動詞": "動詞",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "片假名",
|
"片假名": "片假名",
|
||||||
"罗马音": "羅馬音",
|
"罗马音": "羅馬音",
|
||||||
"日语注音方案": "日語注音方案",
|
"日语注音方案": "日語注音方案",
|
||||||
"保存当前游戏的文本处理流程": "保存當前遊戲的文字處理流程",
|
|
||||||
"使用保存的文本处理流程": "使用保存的文字處理流程",
|
"使用保存的文本处理流程": "使用保存的文字處理流程",
|
||||||
"Sakura大模型": "Sakura大模型",
|
"Sakura大模型": "Sakura大模型",
|
||||||
"Magpie路径": "Magpie路徑",
|
"Magpie路径": "Magpie路徑",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "顯示的項目",
|
"显示的项目": "顯示的項目",
|
||||||
"首位的": "首位的",
|
"首位的": "首位的",
|
||||||
"指定的": "指定的",
|
"指定的": "指定的",
|
||||||
"设为显示的项目": "設為顯示的項目"
|
"设为显示的项目": "設為顯示的項目",
|
||||||
|
"跟随默认": "跟隨默認",
|
||||||
|
"删除行": "删除行",
|
||||||
|
"使用": "使用"
|
||||||
}
|
}
|
@ -42,7 +42,6 @@
|
|||||||
"自动朗读": "Automatic reading",
|
"自动朗读": "Automatic reading",
|
||||||
"缩放时禁用窗口大小调整": "Disable window resizing when zooming",
|
"缩放时禁用窗口大小调整": "Disable window resizing when zooming",
|
||||||
"导出sqlite文件为json文件": "Export sqlite file as json file",
|
"导出sqlite文件为json文件": "Export sqlite file as json file",
|
||||||
"删除选中行": "Delete Selected Row",
|
|
||||||
"图标": "Icon",
|
"图标": "Icon",
|
||||||
"游戏失去焦点时窗口隐藏": "The window is hidden when the game loses focus",
|
"游戏失去焦点时窗口隐藏": "The window is hidden when the game loses focus",
|
||||||
"指示詞": "Deictic word",
|
"指示詞": "Deictic word",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "Katakana",
|
"片假名": "Katakana",
|
||||||
"罗马音": "Romanic sound",
|
"罗马音": "Romanic sound",
|
||||||
"日语注音方案": "Japanese phonetic scheme",
|
"日语注音方案": "Japanese phonetic scheme",
|
||||||
"保存当前游戏的文本处理流程": "Save the text processing process for the current game",
|
|
||||||
"使用保存的文本处理流程": "Using a saved text processing process",
|
"使用保存的文本处理流程": "Using a saved text processing process",
|
||||||
"Sakura大模型": "Sakura Large Model",
|
"Sakura大模型": "Sakura Large Model",
|
||||||
"Magpie路径": "Magpie Path",
|
"Magpie路径": "Magpie Path",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Displayed items",
|
"显示的项目": "Displayed items",
|
||||||
"首位的": "First place",
|
"首位的": "First place",
|
||||||
"指定的": "Designated",
|
"指定的": "Designated",
|
||||||
"设为显示的项目": "Set as Displayed Project"
|
"设为显示的项目": "Set as Displayed Project",
|
||||||
|
"跟随默认": "Follow default",
|
||||||
|
"删除行": "Delete Rows",
|
||||||
|
"使用": "apply"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "Marca",
|
"記号": "Marca",
|
||||||
"选择文件": "Seleccionar archivo",
|
"选择文件": "Seleccionar archivo",
|
||||||
"缩放时禁用窗口大小调整": "Desactivar el ajuste de tamaño de la ventana al ampliar",
|
"缩放时禁用窗口大小调整": "Desactivar el ajuste de tamaño de la ventana al ampliar",
|
||||||
"删除选中行": "Eliminar la línea seleccionada",
|
|
||||||
"图标": "Iconos",
|
"图标": "Iconos",
|
||||||
"指示詞": "Instrucción",
|
"指示詞": "Instrucción",
|
||||||
"動詞": "Verbos",
|
"動詞": "Verbos",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "Seudónimo de película",
|
"片假名": "Seudónimo de película",
|
||||||
"罗马音": "Acento Romano",
|
"罗马音": "Acento Romano",
|
||||||
"日语注音方案": "Programa de fonética japonesa",
|
"日语注音方案": "Programa de fonética japonesa",
|
||||||
"保存当前游戏的文本处理流程": "Guardar el proceso de procesamiento de texto del juego actual",
|
|
||||||
"使用保存的文本处理流程": "Usar el proceso de procesamiento de texto guardado",
|
"使用保存的文本处理流程": "Usar el proceso de procesamiento de texto guardado",
|
||||||
"Sakura大模型": "Gran modelo Sakura",
|
"Sakura大模型": "Gran modelo Sakura",
|
||||||
"Magpie路径": "Ruta magpie",
|
"Magpie路径": "Ruta magpie",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Los proyectos mostrados",
|
"显示的项目": "Los proyectos mostrados",
|
||||||
"首位的": "Primero",
|
"首位的": "Primero",
|
||||||
"指定的": "Designado",
|
"指定的": "Designado",
|
||||||
"设为显示的项目": "Artículos configurados para mostrar"
|
"设为显示的项目": "Artículos configurados para mostrar",
|
||||||
|
"跟随默认": "Sigue el predeterminado",
|
||||||
|
"删除行": "Eliminar filas",
|
||||||
|
"使用": "Uso"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "Marque",
|
"記号": "Marque",
|
||||||
"选择文件": "Sélectionner un fichier",
|
"选择文件": "Sélectionner un fichier",
|
||||||
"缩放时禁用窗口大小调整": "Désactiver le redimensionnement de la fenêtre lors du zoom",
|
"缩放时禁用窗口大小调整": "Désactiver le redimensionnement de la fenêtre lors du zoom",
|
||||||
"删除选中行": "Supprimer la ligne sélectionnée",
|
|
||||||
"图标": "Icônes",
|
"图标": "Icônes",
|
||||||
"指示詞": "Mot indicateur",
|
"指示詞": "Mot indicateur",
|
||||||
"動詞": "Verbes",
|
"動詞": "Verbes",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "Nom du film",
|
"片假名": "Nom du film",
|
||||||
"罗马音": "Voix romaine",
|
"罗马音": "Voix romaine",
|
||||||
"日语注音方案": "Programme d'accent japonais",
|
"日语注音方案": "Programme d'accent japonais",
|
||||||
"保存当前游戏的文本处理流程": "Enregistrer le processus de traitement de texte du jeu actuel",
|
|
||||||
"使用保存的文本处理流程": "Utiliser le processus de traitement de texte sauvegardé",
|
"使用保存的文本处理流程": "Utiliser le processus de traitement de texte sauvegardé",
|
||||||
"Sakura大模型": "Sakura Grand Modèle",
|
"Sakura大模型": "Sakura Grand Modèle",
|
||||||
"Magpie路径": "Le chemin Magpie",
|
"Magpie路径": "Le chemin Magpie",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Projets affichés",
|
"显示的项目": "Projets affichés",
|
||||||
"首位的": "La première",
|
"首位的": "La première",
|
||||||
"指定的": "Spécifié",
|
"指定的": "Spécifié",
|
||||||
"设为显示的项目": "Les éléments à afficher"
|
"设为显示的项目": "Les éléments à afficher",
|
||||||
|
"跟随默认": "Suivre par défaut",
|
||||||
|
"删除行": "Supprimer une ligne",
|
||||||
|
"使用": "Utilisation"
|
||||||
}
|
}
|
@ -170,7 +170,6 @@
|
|||||||
"記号": "Simbolo",
|
"記号": "Simbolo",
|
||||||
"选择文件": "Seleziona file",
|
"选择文件": "Seleziona file",
|
||||||
"缩放时禁用窗口大小调整": "Disabilita il ridimensionamento delle finestre durante lo zoom",
|
"缩放时禁用窗口大小调整": "Disabilita il ridimensionamento delle finestre durante lo zoom",
|
||||||
"删除选中行": "Elimina righe selezionate",
|
|
||||||
"图标": "icona",
|
"图标": "icona",
|
||||||
"指示詞": "Parole dimostrative",
|
"指示詞": "Parole dimostrative",
|
||||||
"動詞": "Verbi",
|
"動詞": "Verbi",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "Katakana",
|
"片假名": "Katakana",
|
||||||
"罗马音": "Suono romanico",
|
"罗马音": "Suono romanico",
|
||||||
"日语注音方案": "Schema fonetico giapponese",
|
"日语注音方案": "Schema fonetico giapponese",
|
||||||
"保存当前游戏的文本处理流程": "Salva il processo di elaborazione del testo per il gioco corrente",
|
|
||||||
"使用保存的文本处理流程": "Utilizzo di un processo di elaborazione del testo salvato",
|
"使用保存的文本处理流程": "Utilizzo di un processo di elaborazione del testo salvato",
|
||||||
"Sakura大模型": "Modello Sakura Large",
|
"Sakura大模型": "Modello Sakura Large",
|
||||||
"Magpie路径": "Percorso magpie",
|
"Magpie路径": "Percorso magpie",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Articoli visualizzati",
|
"显示的项目": "Articoli visualizzati",
|
||||||
"首位的": "Primo posto",
|
"首位的": "Primo posto",
|
||||||
"指定的": "Designato",
|
"指定的": "Designato",
|
||||||
"设为显示的项目": "Imposta come progetto visualizzato"
|
"设为显示的项目": "Imposta come progetto visualizzato",
|
||||||
|
"跟随默认": "Segui default",
|
||||||
|
"删除行": "Elimina righe",
|
||||||
|
"使用": "applicare"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "記号",
|
"記号": "記号",
|
||||||
"选择文件": "ファイルを選択",
|
"选择文件": "ファイルを選択",
|
||||||
"缩放时禁用窗口大小调整": "ズーム時にウィンドウのサイズ変更を無効にする",
|
"缩放时禁用窗口大小调整": "ズーム時にウィンドウのサイズ変更を無効にする",
|
||||||
"删除选中行": "選択した行を削除",
|
|
||||||
"图标": "アイコン",
|
"图标": "アイコン",
|
||||||
"指示詞": "指示語",
|
"指示詞": "指示語",
|
||||||
"動詞": "動詞",
|
"動詞": "動詞",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "カタカナ",
|
"片假名": "カタカナ",
|
||||||
"罗马音": "ローマ字",
|
"罗马音": "ローマ字",
|
||||||
"日语注音方案": "日本語の表記方法",
|
"日语注音方案": "日本語の表記方法",
|
||||||
"保存当前游戏的文本处理流程": "現在のゲームを保存するためのテキスト処理の流れ",
|
|
||||||
"使用保存的文本处理流程": "保存されたテキスト処理プロセスの使用",
|
"使用保存的文本处理流程": "保存されたテキスト処理プロセスの使用",
|
||||||
"Sakura大模型": "Sakuraビッグモデル",
|
"Sakura大模型": "Sakuraビッグモデル",
|
||||||
"Magpie路径": "Magpieパス",
|
"Magpie路径": "Magpieパス",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "表示されるアイテム",
|
"显示的项目": "表示されるアイテム",
|
||||||
"首位的": "トップ",
|
"首位的": "トップ",
|
||||||
"指定的": "指定された",
|
"指定的": "指定された",
|
||||||
"设为显示的项目": "表示する項目として設定"
|
"设为显示的项目": "表示する項目として設定",
|
||||||
|
"跟随默认": "デフォルトに従う",
|
||||||
|
"删除行": "行の削除",
|
||||||
|
"使用": "使用"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "기호",
|
"記号": "기호",
|
||||||
"选择文件": "파일 선택",
|
"选择文件": "파일 선택",
|
||||||
"缩放时禁用窗口大小调整": "확대 / 축소 시 창 크기 조정 비활성화",
|
"缩放时禁用窗口大小调整": "확대 / 축소 시 창 크기 조정 비활성화",
|
||||||
"删除选中行": "선택한 행 삭제",
|
|
||||||
"图标": "아이콘",
|
"图标": "아이콘",
|
||||||
"指示詞": "지시어",
|
"指示詞": "지시어",
|
||||||
"動詞": "동사",
|
"動詞": "동사",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "가명",
|
"片假名": "가명",
|
||||||
"罗马音": "로마음",
|
"罗马音": "로마음",
|
||||||
"日语注音方案": "일본어 주음 방안",
|
"日语注音方案": "일본어 주음 방안",
|
||||||
"保存当前游戏的文本处理流程": "현재 게임의 텍스트 처리 프로세스 저장",
|
|
||||||
"使用保存的文本处理流程": "저장된 텍스트 프로세스 사용",
|
"使用保存的文本处理流程": "저장된 텍스트 프로세스 사용",
|
||||||
"Sakura大模型": "Sakura 대형 모델",
|
"Sakura大模型": "Sakura 대형 모델",
|
||||||
"Magpie路径": "Magpie 경로",
|
"Magpie路径": "Magpie 경로",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "표시된 항목",
|
"显示的项目": "표시된 항목",
|
||||||
"首位的": "수위의",
|
"首位的": "수위의",
|
||||||
"指定的": "지정된",
|
"指定的": "지정된",
|
||||||
"设为显示的项目": "표시할 항목으로 설정"
|
"设为显示的项目": "표시할 항목으로 설정",
|
||||||
|
"跟随默认": "기본 따르기",
|
||||||
|
"删除行": "행 삭제",
|
||||||
|
"使用": "사용"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "Symbol",
|
"記号": "Symbol",
|
||||||
"选择文件": "Wybierz plik",
|
"选择文件": "Wybierz plik",
|
||||||
"缩放时禁用窗口大小调整": "Wyłącz zmianę rozmiaru okna podczas powiększania",
|
"缩放时禁用窗口大小调整": "Wyłącz zmianę rozmiaru okna podczas powiększania",
|
||||||
"删除选中行": "Usuń zaznaczone wiersze",
|
|
||||||
"图标": "Ikona",
|
"图标": "Ikona",
|
||||||
"指示詞": "Słowa demonstracyjne",
|
"指示詞": "Słowa demonstracyjne",
|
||||||
"動詞": "Czasowniki",
|
"動詞": "Czasowniki",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "KatakanaName",
|
"片假名": "KatakanaName",
|
||||||
"罗马音": "Dźwięk romański",
|
"罗马音": "Dźwięk romański",
|
||||||
"日语注音方案": "Japoński schemat fonetyczny",
|
"日语注音方案": "Japoński schemat fonetyczny",
|
||||||
"保存当前游戏的文本处理流程": "Zapisz proces przetwarzania tekstu dla bieżącej gry",
|
|
||||||
"使用保存的文本处理流程": "Korzystanie z zapisanego procesu przetwarzania tekstu",
|
"使用保存的文本处理流程": "Korzystanie z zapisanego procesu przetwarzania tekstu",
|
||||||
"Sakura大模型": "Duży model Sakura",
|
"Sakura大模型": "Duży model Sakura",
|
||||||
"Magpie路径": "Ścieżka dla Sraków",
|
"Magpie路径": "Ścieżka dla Sraków",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Wyświetlane elementy",
|
"显示的项目": "Wyświetlane elementy",
|
||||||
"首位的": "Pierwsze miejsce",
|
"首位的": "Pierwsze miejsce",
|
||||||
"指定的": "Wyznaczone",
|
"指定的": "Wyznaczone",
|
||||||
"设为显示的项目": "Ustaw jako wyświetlany projekt"
|
"设为显示的项目": "Ustaw jako wyświetlany projekt",
|
||||||
|
"跟随默认": "Postępuj zgodnie z domyślnym",
|
||||||
|
"删除行": "Usuń wiersze",
|
||||||
|
"使用": "stosować"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "знак",
|
"記号": "знак",
|
||||||
"选择文件": "Выбор файла",
|
"选择文件": "Выбор файла",
|
||||||
"缩放时禁用窗口大小调整": "Отключить изменение размера окна при масштабировании",
|
"缩放时禁用窗口大小调整": "Отключить изменение размера окна при масштабировании",
|
||||||
"删除选中行": "Удалить выделенную запись",
|
|
||||||
"图标": "Значки",
|
"图标": "Значки",
|
||||||
"指示詞": "указательное слово",
|
"指示詞": "указательное слово",
|
||||||
"動詞": "глагол",
|
"動詞": "глагол",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "Фильм под псевдонимом",
|
"片假名": "Фильм под псевдонимом",
|
||||||
"罗马音": "Римские согласные",
|
"罗马音": "Римские согласные",
|
||||||
"日语注音方案": "Японская фонетическая программа",
|
"日语注音方案": "Японская фонетическая программа",
|
||||||
"保存当前游戏的文本处理流程": "Сохранить процесс обработки текста текущей игры",
|
|
||||||
"使用保存的文本处理流程": "Использовать сохраненный процесс обработки текста",
|
"使用保存的文本处理流程": "Использовать сохраненный процесс обработки текста",
|
||||||
"Sakura大模型": "Большая модель Sakura",
|
"Sakura大模型": "Большая модель Sakura",
|
||||||
"Magpie路径": "Путь Magpie",
|
"Magpie路径": "Путь Magpie",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Показать проект",
|
"显示的项目": "Показать проект",
|
||||||
"首位的": "Первый",
|
"首位的": "Первый",
|
||||||
"指定的": "Назначено",
|
"指定的": "Назначено",
|
||||||
"设为显示的项目": "Показать проект"
|
"设为显示的项目": "Показать проект",
|
||||||
|
"跟随默认": "Следуйте по умолчанию",
|
||||||
|
"删除行": "Удалить строку",
|
||||||
|
"使用": "Использование"
|
||||||
}
|
}
|
@ -21,7 +21,6 @@
|
|||||||
"不支持的键位": "คีย์บอร์ดไม่รองรับ",
|
"不支持的键位": "คีย์บอร์ดไม่รองรับ",
|
||||||
"英语(CP437)": "ภาษาไทย (CP437)",
|
"英语(CP437)": "ภาษาไทย (CP437)",
|
||||||
"工具按钮颜色": "สีปุ่มเครื่องมือ",
|
"工具按钮颜色": "สีปุ่มเครื่องมือ",
|
||||||
"删除选中行": "ลบบรรทัดที่เลือก",
|
|
||||||
"模拟按键Enter": "ปุ่มอะนาล็อก Enter",
|
"模拟按键Enter": "ปุ่มอะนาล็อก Enter",
|
||||||
"去除重复行": "ลบแถวที่ซ้ำกัน",
|
"去除重复行": "ลบแถวที่ซ้ำกัน",
|
||||||
"有道": "วิถี",
|
"有道": "วิถี",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "คาตาคานะ",
|
"片假名": "คาตาคานะ",
|
||||||
"罗马音": "เสียงโรมัน",
|
"罗马音": "เสียงโรมัน",
|
||||||
"日语注音方案": "โปรแกรมบันทึกเสียงภาษาญี่ปุ่น",
|
"日语注音方案": "โปรแกรมบันทึกเสียงภาษาญี่ปุ่น",
|
||||||
"保存当前游戏的文本处理流程": "บันทึกกระบวนการประมวลผลข้อความสำหรับเกมปัจจุบัน",
|
|
||||||
"使用保存的文本处理流程": "ใช้กระบวนการประมวลผลข้อความที่บันทึกไว้",
|
"使用保存的文本处理流程": "ใช้กระบวนการประมวลผลข้อความที่บันทึกไว้",
|
||||||
"Sakura大模型": "Sakura ใหญ่ แบบ",
|
"Sakura大模型": "Sakura ใหญ่ แบบ",
|
||||||
"Magpie路径": "เส้นทาง Magpie",
|
"Magpie路径": "เส้นทาง Magpie",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "รายการที่แสดง",
|
"显示的项目": "รายการที่แสดง",
|
||||||
"首位的": "อันดับแรก",
|
"首位的": "อันดับแรก",
|
||||||
"指定的": "ระบุ",
|
"指定的": "ระบุ",
|
||||||
"设为显示的项目": "รายการที่ตั้งเป็นจอแสดงผล"
|
"设为显示的项目": "รายการที่ตั้งเป็นจอแสดงผล",
|
||||||
|
"跟随默认": "ติดตามค่าเริ่มต้น",
|
||||||
|
"删除行": "ลบบรรทัด",
|
||||||
|
"使用": "การใช้"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "Simbol",
|
"記号": "Simbol",
|
||||||
"选择文件": "Dosya Seç",
|
"选择文件": "Dosya Seç",
|
||||||
"缩放时禁用窗口大小调整": "Ulaştırırken pencere ölçüsünü değiştirmeyi etkinleştir",
|
"缩放时禁用窗口大小调整": "Ulaştırırken pencere ölçüsünü değiştirmeyi etkinleştir",
|
||||||
"删除选中行": "Seçili satır sil",
|
|
||||||
"图标": "İşaretçi",
|
"图标": "İşaretçi",
|
||||||
"指示詞": "Deixis",
|
"指示詞": "Deixis",
|
||||||
"動詞": "Verbs",
|
"動詞": "Verbs",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "KatakanaKCharselect unicode block name",
|
"片假名": "KatakanaKCharselect unicode block name",
|
||||||
"罗马音": "Romanik sesi",
|
"罗马音": "Romanik sesi",
|
||||||
"日语注音方案": "Japon fonetik taslağı",
|
"日语注音方案": "Japon fonetik taslağı",
|
||||||
"保存当前游戏的文本处理流程": "Mektup işleme sürecini şu oyun için kaydet",
|
|
||||||
"使用保存的文本处理流程": "Kaydedilen metin işleme sürecini kullanılıyor",
|
"使用保存的文本处理流程": "Kaydedilen metin işleme sürecini kullanılıyor",
|
||||||
"Sakura大模型": "Sakura Büyük Modeli",
|
"Sakura大模型": "Sakura Büyük Modeli",
|
||||||
"Magpie路径": "Magpie Yolu",
|
"Magpie路径": "Magpie Yolu",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Gösterilen öğeler",
|
"显示的项目": "Gösterilen öğeler",
|
||||||
"首位的": "İlk yer",
|
"首位的": "İlk yer",
|
||||||
"指定的": "Tasarlanmış",
|
"指定的": "Tasarlanmış",
|
||||||
"设为显示的项目": "Gösterilen Proje olarak ayarlayın"
|
"设为显示的项目": "Gösterilen Proje olarak ayarlayın",
|
||||||
|
"跟随默认": "Öntanımlı takip et",
|
||||||
|
"删除行": "Satırları Sil",
|
||||||
|
"使用": "uygulama"
|
||||||
}
|
}
|
@ -170,7 +170,6 @@
|
|||||||
"記号": "Символ",
|
"記号": "Символ",
|
||||||
"选择文件": "Виберіть файл",
|
"选择文件": "Виберіть файл",
|
||||||
"缩放时禁用窗口大小调整": "Вимкнути зміну розміру вікна під час масштабу",
|
"缩放时禁用窗口大小调整": "Вимкнути зміну розміру вікна під час масштабу",
|
||||||
"删除选中行": "Вилучити вибрані рядки",
|
|
||||||
"图标": "Піктограма",
|
"图标": "Піктограма",
|
||||||
"指示詞": "Демонстративні слова",
|
"指示詞": "Демонстративні слова",
|
||||||
"動詞": "Дієслова",
|
"動詞": "Дієслова",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "Катаканаzambia_ districts. kgm",
|
"片假名": "Катаканаzambia_ districts. kgm",
|
||||||
"罗马音": "Романський звук",
|
"罗马音": "Романський звук",
|
||||||
"日语注音方案": "Японська фонетична схема",
|
"日语注音方案": "Японська фонетична схема",
|
||||||
"保存当前游戏的文本处理流程": "Зберегти процес обробки тексту для поточної гри",
|
|
||||||
"使用保存的文本处理流程": "Використання збереженого процесу обробки тексту",
|
"使用保存的文本处理流程": "Використання збереженого процесу обробки тексту",
|
||||||
"Sakura大模型": "Великий модель Sakura",
|
"Sakura大模型": "Великий модель Sakura",
|
||||||
"Magpie路径": "Шлях до Magpie",
|
"Magpie路径": "Шлях до Magpie",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Показані елементи",
|
"显示的项目": "Показані елементи",
|
||||||
"首位的": "Перше місце",
|
"首位的": "Перше місце",
|
||||||
"指定的": "Визначено",
|
"指定的": "Визначено",
|
||||||
"设为显示的项目": "Встановити як показаний проект"
|
"设为显示的项目": "Встановити як показаний проект",
|
||||||
|
"跟随默认": "Слідувати типово",
|
||||||
|
"删除行": "Вилучити рядки",
|
||||||
|
"使用": "застосовувати"
|
||||||
}
|
}
|
@ -176,7 +176,6 @@
|
|||||||
"記号": "Đánh dấu",
|
"記号": "Đánh dấu",
|
||||||
"选择文件": "Chọn tập tin",
|
"选择文件": "Chọn tập tin",
|
||||||
"缩放时禁用窗口大小调整": "Tắt thay đổi kích cỡ cửa sổ khi phóng to",
|
"缩放时禁用窗口大小调整": "Tắt thay đổi kích cỡ cửa sổ khi phóng to",
|
||||||
"删除选中行": "Xoá dòng đã chọn",
|
|
||||||
"图标": "Biểu tượng",
|
"图标": "Biểu tượng",
|
||||||
"指示詞": "Từ chỉ dẫn",
|
"指示詞": "Từ chỉ dẫn",
|
||||||
"動詞": "Động từ",
|
"動詞": "Động từ",
|
||||||
@ -626,7 +625,6 @@
|
|||||||
"片假名": "Katakana",
|
"片假名": "Katakana",
|
||||||
"罗马音": "Tiếng La Mã",
|
"罗马音": "Tiếng La Mã",
|
||||||
"日语注音方案": "Chương trình chú thích tiếng Nhật",
|
"日语注音方案": "Chương trình chú thích tiếng Nhật",
|
||||||
"保存当前游戏的文本处理流程": "Lưu luồng xử lý văn bản của trò chơi hiện tại",
|
|
||||||
"使用保存的文本处理流程": "Sử dụng quy trình xử lý văn bản đã lưu",
|
"使用保存的文本处理流程": "Sử dụng quy trình xử lý văn bản đã lưu",
|
||||||
"Sakura大模型": "Sakura Lớn Mô hình",
|
"Sakura大模型": "Sakura Lớn Mô hình",
|
||||||
"Magpie路径": "Đường Magpie",
|
"Magpie路径": "Đường Magpie",
|
||||||
@ -831,5 +829,8 @@
|
|||||||
"显示的项目": "Mục hiển thị",
|
"显示的项目": "Mục hiển thị",
|
||||||
"首位的": "Đầu tiên",
|
"首位的": "Đầu tiên",
|
||||||
"指定的": "Đã xác định",
|
"指定的": "Đã xác định",
|
||||||
"设为显示的项目": "Mục được đặt làm Hiển thị"
|
"设为显示的项目": "Mục được đặt làm Hiển thị",
|
||||||
|
"跟随默认": "Theo mặc định",
|
||||||
|
"删除行": "Xoá dòng",
|
||||||
|
"使用": "Sử dụng"
|
||||||
}
|
}
|
@ -21,7 +21,7 @@
|
|||||||
"不支持的键位": "",
|
"不支持的键位": "",
|
||||||
"英语(CP437)": "",
|
"英语(CP437)": "",
|
||||||
"工具按钮颜色": "",
|
"工具按钮颜色": "",
|
||||||
"删除选中行": "",
|
"删除行": "",
|
||||||
"模拟按键Enter": "",
|
"模拟按键Enter": "",
|
||||||
"去除重复行": "",
|
"去除重复行": "",
|
||||||
"有道": "",
|
"有道": "",
|
||||||
@ -626,7 +626,6 @@
|
|||||||
"片假名": "",
|
"片假名": "",
|
||||||
"罗马音": "",
|
"罗马音": "",
|
||||||
"日语注音方案": "",
|
"日语注音方案": "",
|
||||||
"保存当前游戏的文本处理流程": "",
|
|
||||||
"使用保存的文本处理流程": "",
|
"使用保存的文本处理流程": "",
|
||||||
"Sakura大模型": "",
|
"Sakura大模型": "",
|
||||||
"Magpie路径": "",
|
"Magpie路径": "",
|
||||||
@ -831,5 +830,7 @@
|
|||||||
"显示的项目": "",
|
"显示的项目": "",
|
||||||
"首位的": "",
|
"首位的": "",
|
||||||
"指定的": "",
|
"指定的": "",
|
||||||
"设为显示的项目": ""
|
"设为显示的项目": "",
|
||||||
|
"跟随默认": "",
|
||||||
|
"使用": ""
|
||||||
}
|
}
|
@ -28,8 +28,8 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/version)
|
|||||||
include(generate_product_version)
|
include(generate_product_version)
|
||||||
|
|
||||||
set(VERSION_MAJOR 3)
|
set(VERSION_MAJOR 3)
|
||||||
set(VERSION_MINOR 5)
|
set(VERSION_MINOR 6)
|
||||||
set(VERSION_PATCH 1)
|
set(VERSION_PATCH 0)
|
||||||
|
|
||||||
add_library(pch pch.cpp)
|
add_library(pch pch.cpp)
|
||||||
target_precompile_headers(pch PUBLIC pch.h)
|
target_precompile_headers(pch PUBLIC pch.h)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user