issues/558

This commit is contained in:
恍兮惚兮 2024-03-06 13:55:50 +08:00
parent 951268095f
commit a9a9160d3b
4 changed files with 125 additions and 57 deletions

View File

@ -43,7 +43,6 @@ class MAINUI() :
self.lasttranslatorindex=0
self.translators={}
self.cishus={}
self.iterresstatus={}
self.reader=None
self.textsource_p=None
self.currentmd5='0'
@ -153,7 +152,7 @@ class MAINUI() :
self.currentsignature=time.time()
if type(text)==str:
if text.startswith('<notrans>'):
self.translation_ui.displayres.emit('',globalconfig['rawtextcolor'],text[len('<notrans>'):],onlytrans,[])
self.translation_ui.displayres.emit(dict(color=globalconfig['rawtextcolor'],res=text[len('<notrans>'):],onlytrans=onlytrans))
self.currenttext=text
self.currentread=text
return
@ -250,7 +249,7 @@ class MAINUI() :
_colork=k
else:
_colork='premt'
self.GetTranslationCallback(onlytrans,_colork,self.currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,text,res[k],embedcallback,False)
self.GetTranslationCallback(onlytrans,_colork,self.currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,text,res[k],embedcallback,0)
except:
print_exc()
@ -265,7 +264,6 @@ class MAINUI() :
keys=list(self.translators.keys())+list(self.translators.keys())
keys=keys[self.lasttranslatorindex:self.lasttranslatorindex+_len]
#print(keys,usenum,self.lasttranslatorindex)
self.iterresstatus.clear()
for engine in keys:
if engine not in self.premtalready:
self.translators[engine].gettask((partial(self.GetTranslationCallback,onlytrans,engine,self.currentsignature, optimization_params,_showrawfunction,_showrawfunction_sig,text),text,text_solved,skip,embedcallback,is_auto_run,hira))
@ -275,13 +273,13 @@ class MAINUI() :
break
def GetTranslationCallback(self,onlytrans,classname,currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,contentraw,res,embedcallback,is_iter_res):
def GetTranslationCallback(self,onlytrans,classname,currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,contentraw,res,embedcallback,iter_res_status):
if classname in self.usefultranslators:
self.usefultranslators.remove(classname)
if embedcallback is None and currentsignature!=self.currentsignature:return
embedtrans=self.GetTranslationCallback_(onlytrans,classname,currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,contentraw,res,is_iter_res)
embedtrans=self.GetTranslationCallback_(onlytrans,classname,currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,contentraw,res,iter_res_status)
if embedtrans is None and len(self.usefultranslators)==0:
@ -289,7 +287,7 @@ class MAINUI() :
if embedcallback and embedtrans is not None:
embedcallback(embedtrans)
def GetTranslationCallback_(self,onlytrans,classname,currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,contentraw,res,is_iter_res):
def GetTranslationCallback_(self,onlytrans,classname,currentsignature,optimization_params,_showrawfunction,_showrawfunction_sig,contentraw,res,iter_res_status):
if type(res)==str:
@ -311,19 +309,17 @@ class MAINUI() :
_showrawfunction()
if currentsignature==self.currentsignature and globalconfig['showfanyi']:
if is_iter_res:
if classname not in self.iterresstatus:
self.iterresstatus[classname]=1
self.translation_ui.displayres.emit(globalconfig['fanyi'][classname]['name'],globalconfig['fanyi'][classname]['color'],res,onlytrans,[True,classname])
else:
self.translation_ui.displayres.emit(globalconfig['fanyi'][classname]['name'],globalconfig['fanyi'][classname]['color'],res,onlytrans,[False,classname])
else:
self.translation_ui.displayres.emit(globalconfig['fanyi'][classname]['name'],globalconfig['fanyi'][classname]['color'],res,onlytrans,[])
displayreskwargs=dict(name=globalconfig['fanyi'][classname]['name'],color=globalconfig['fanyi'][classname]['color'],res=res,onlytrans=onlytrans)
if iter_res_status:
displayreskwargs.update(iter_context=(iter_res_status,classname))
self.translation_ui.displayres.emit(displayreskwargs)
try:
self.textsource.sqlqueueput((contentraw,classname,res))
except:pass
if iter_res_status in (0,2):#0为普通1为iter2为iter终止3为起始
self.textsource.sqlqueueput((contentraw,classname,res))
except:
pass
if globalconfig['embedded']['as_fast_as_posible'] or classname==list(globalconfig['fanyi'])[globalconfig['embedded']['translator']]:

View File

@ -121,6 +121,7 @@ class Textbrowser( ):
self.setselectable()
self.blockcount=0
self.needdouble=False
self.iteryinyinglabelsave={}
def setselectable(self):
self.masklabel.setHidden(globalconfig['selectable'])
self.toplabel2.setHidden(globalconfig['selectable'] and globalconfig['zitiyangshi']!=3)
@ -187,7 +188,7 @@ class Textbrowser( ):
else:
self.align=False
def append(self,x ,tag,origin ):
def append(self,x,tag,origin):
if self.cleared:
_space=''
@ -243,6 +244,44 @@ class Textbrowser( ):
self.textcursor.setPosition(p1,QTextCursor.MoveAnchor)
self.textcursor.setPosition(p2,QTextCursor.KeepAnchor)
self.textcursor.removeSelectedText()
def showyinyingtext2(self,color,iter_context_class,pos,text):
if iter_context_class not in self.iteryinyinglabelsave:
self.iteryinyinglabelsave[iter_context_class]=[]
for label in self.iteryinyinglabelsave[iter_context_class]:
label.hide()
subtext=[]
subpos=[]
lastpos=None
posx=pos
for i in range(len(text)):
if text[i] =='\n':continue
self.textcursor.setPosition(posx)
posx+=1
tl1=self.textbrowser.cursorRect(self.textcursor).topLeft()
if lastpos is None or tl1.y()!=lastpos.y():
lastpos=tl1
subpos.append(lastpos)
subtext.append('')
subtext[-1]+=text[i]
if (len(subtext))>len(self.iteryinyinglabelsave[iter_context_class]):
_newlabels=[QLabel(self.toplabel2) for i in range(len(subtext)-len(self.iteryinyinglabelsave[iter_context_class]))]
self.iteryinyinglabelsave[iter_context_class]+=_newlabels
for lb in _newlabels:
lb.setTextFormat(Qt.PlainText)
for i in range(len(subtext)):
_=self.iteryinyinglabelsave[iter_context_class][i]
_.move(subpos[i])
_.setText(subtext[i])
_.setFont(self.textbrowser.currentCharFormat().font())
_.setStyleSheet("color:{}; background-color:rgba(0,0,0,0)".format(globalconfig['miaobiancolor']))
_.setGraphicsEffect(self.geteffect(globalconfig['fontsize'],color,globalconfig['shadowforce']))
_.show()
def showyinyingtext(self,color ):
linei=self.yinyingposline
@ -610,6 +649,9 @@ class Textbrowser( ):
label.hide()
for label in self.yinyinglabels:
label.hide()
for klass,labels in self.iteryinyinglabelsave.items():
for label in labels:
label.hide()
# self.textbrowser.clear()
# self.textbrowserback.clear()
self.yinyingpos=0

View File

@ -28,8 +28,8 @@ from gui.rangeselect import moveresizegame ,rangeselct_function
from gui.usefulwidget import resizableframeless
from gui.dialog_savedgame import browserdialog
class QUnFrameWindow(resizableframeless):
displayres = pyqtSignal(str,str,str ,bool,list)
displayraw1 = pyqtSignal(list, str,str,bool)
displayres=pyqtSignal(dict)
displayraw1=pyqtSignal(list, str,str,bool)
displaystatus=pyqtSignal(str,str,bool,bool)
showhideuisignal=pyqtSignal()
hookfollowsignal=pyqtSignal(int,tuple)
@ -71,18 +71,22 @@ class QUnFrameWindow(resizableframeless):
pass
self.move(self.pos().x()+ other[0],self.pos().y()+ other[1])
def showres(self,name,color,res,onlyshowhist,iter_res_info):
def showres(self,kwargs):#name,color,res,onlyshowhist,iter_context):
try:
if len(iter_res_info):
starting,klass=iter_res_info
if not starting and klass in self.saveiterclasspointer:
if res=='\0':#清除前面的输出
self.translate_text.deletebetween(self.saveiterclasspointer[klass]['start'],self.translate_text.getcurrpointer())
else:
self.translate_text.insertatpointer(self.saveiterclasspointer[klass]['curr'],res)
self.saveiterclasspointer[klass]['curr']=self.translate_text.getcurrpointer()
name=kwargs.get('name','')
color=kwargs.get('color')
res=kwargs.get('res')
onlyshowhist=kwargs.get('onlyshowhist')
iter_context=kwargs.get('iter_context',None)
if iter_context:
iter_res_status,iter_context_class=iter_context
if iter_res_status==2: #iter结束
gobject.baseobject.transhis.getnewtranssignal.emit(name,res)
return
gobject.baseobject.transhis.getnewtranssignal.emit(name,res)
else:
gobject.baseobject.transhis.getnewtranssignal.emit(name,res)
if onlyshowhist:
return
clear=name==''
@ -90,15 +94,13 @@ class QUnFrameWindow(resizableframeless):
_res=res[:globalconfig['maxoriginlength']]+'……'
else:
_res=res
if globalconfig['showfanyisource']:
_showtext=name+' '+_res
else:
_showtext=_res
self.showline(clear,[None,_showtext],color,1,False)
self.showline(clear=clear,text=_showtext,color=color,origin=False,iter_context=iter_context)
if len(iter_res_info) and starting:
self.saveiterclasspointer[klass]={'curr':self.translate_text.getcurrpointer()+len(_showtext),'start':self.translate_text.getcurrpointer()+len(_showtext)-len(res)}
except:
print_exc()
def showraw(self,hira,res,color ,onlyshowhist):
@ -111,22 +113,30 @@ class QUnFrameWindow(resizableframeless):
else:
_res=res
if globalconfig['isshowhira'] and globalconfig['isshowrawtext']:
self.showline(clear,[hira,_res],color , 2 )
self.showline(clear=clear,text=_res,hira=hira,color=color)
elif globalconfig['isshowrawtext']:
self.showline(clear,[hira,_res],color,1)
self.showline(clear=clear,text=_res,color=color)
else:
self.showline(clear,None,None,1)
self.showline(clear=clear)
gobject.baseobject.edittextui.getnewsentencesignal.emit(res)
def showstatus(self,res,color,clear,origin):
self.showline(clear,[None,res],color,1,origin)
def showline (self,clear,res,color ,type_=1,origin=True):
self.showline(clear=clear,text=res,color=color,origin=origin)
def showline (self,**kwargs):# clear,res,color ,type_=1,origin=True):
clear=kwargs.get('clear',True)
origin=kwargs.get('origin',True)
text=kwargs.get('text',None)
color=kwargs.get('color',None)
hira=kwargs.get('hira',[])
iter_context=kwargs.get('iter_context',None)
if clear:
self.translate_text.clear()
self.translate_text.setnextfont(origin)
if res is None:
if text is None:
return
self.translate_text.setnextfont(origin)
if globalconfig['showatcenter']:
self.translate_text.setAlignment(Qt.AlignCenter)
else:
@ -142,20 +152,33 @@ class QUnFrameWindow(resizableframeless):
elif globalconfig['zitiyangshi'] ==0:
self.translate_text.simplecharformat(color)
elif globalconfig['zitiyangshi'] ==3:
self.translate_text.simplecharformat(color)
if type_==1:
self.translate_text.append (res[1],[],origin)
else:
self.translate_text.append (res[1],res[0],origin)
if globalconfig['zitiyangshi'] ==3:
self.translate_text.showyinyingtext(color )
if (globalconfig['usesearchword'] or globalconfig['usecopyword'] or globalconfig['show_fenci'] ) and res[0]:
self.translate_text.simplecharformat(color)
if iter_context:
iter_res_status,iter_context_class=iter_context
if iter_res_status==3:
self.translate_text.append(text,hira,origin)
self.saveiterclasspointer[iter_context_class]={'curr':self.translate_text.getcurrpointer()+len(text),'start':self.translate_text.getcurrpointer()}
else:
self.translate_text.deletebetween(self.saveiterclasspointer[iter_context_class]['start'],self.saveiterclasspointer[iter_context_class]['curr'])
self.translate_text.insertatpointer(self.saveiterclasspointer[iter_context_class]['start'],text)
self.saveiterclasspointer[iter_context_class]['curr']=self.translate_text.getcurrpointer()
if globalconfig['zitiyangshi'] ==3:
self.translate_text.showyinyingtext2(color,iter_context_class,self.saveiterclasspointer[iter_context_class]['start'],text)
return
else:
self.translate_text.append(text,hira,origin)
if globalconfig['zitiyangshi'] ==3:
self.translate_text.showyinyingtext(color)
if (globalconfig['usesearchword'] or globalconfig['usecopyword'] or globalconfig['show_fenci'] ) and hira:
def callback(word):
if globalconfig['usecopyword'] :
winsharedutils.clipboard_set(word)
if globalconfig['usesearchword']:
gobject.baseobject.searchwordW.getnewsentencesignal.emit(word)
self.translate_text.addsearchwordmask(res[0],res[1],callback )
self.translate_text.addsearchwordmask(hira,text,callback)
if globalconfig['autodisappear']:
@ -165,7 +188,7 @@ class QUnFrameWindow(resizableframeless):
if flag:
self.show_()
self.lastrefreshtime=time.time()
self.autohidestart=True
self.autohidestart=True
def autohidedelaythread(self):
while True:
if globalconfig['autodisappear'] and self.autohidestart:
@ -313,7 +336,7 @@ class QUnFrameWindow(resizableframeless):
windows.SetForegroundWindow(int(self.winId()))
def showEvent(self, a0 ) -> None:
if self.isfirstshow:
self.showline(True,[None,_TR('欢迎使用')],'',1,False)
self.showline(clear=True,text=_TR('欢迎使用'),origin=False)
showAction = QAction(_TR("&显示"), self, triggered = self.show_and_enableautohide)

View File

@ -261,19 +261,26 @@ class basetrans(commonbase):
collectiterres=[]
def __callback(_,is_iter_res):
if self.needzhconv:
_=zhconv.convert(_, 'zh-tw' )
callback(_,embedcallback,is_iter_res)
collectiterres.append(_)
_=zhconv.convert(_, 'zh-tw' )
if _=='\0':#清除前面的输出
collectiterres.clear()
pass
else:
collectiterres.append(_)
callback(''.join(collectiterres),embedcallback,is_iter_res)
if isinstance(res,types.GeneratorType):
def _iterget():
rid=self.requestid
__callback('',3)
for _res in res:
if self.requestid!=rid:break
__callback(_res,True)
__callback(_res,1)
__callback('',2)
timeoutfunction(_iterget,checktutukufunction=checktutukufunction )
else:
__callback(res,False)
__callback(res,0)
self.cachesetatend(contentsolved,''.join(collectiterres))
except Exception as e:
if self.using and globalconfig['showtranexception']: