package Ġcn . yi ig ux ing . plugin . translate . trans Ċ Ċ import Ġcn . yi ig ux ing . plugin . translate . Settings Ċ import Ġcn . yi ig ux ing . plugin . translate . Settings ChangeListener Ċ import Ġcn . yi ig ux ing . plugin . translate . trans . ali . Ali Translator Ċ import Ġcn . yi ig ux ing . plugin . translate . trans . baidu . B aid u Translator Ċ import Ġcn . yi ig ux ing . plugin . translate . trans . google . Google Translator Ċ import Ġcn . yi ig ux ing . plugin . translate . trans . you dao . You dao Translator Ċ import Ġcn . yi ig ux ing . plugin . translate . ui . settings . Translation Engine Ċ import Ġcn . yi ig ux ing . plugin . translate . util .* Ċ import Ġcn . yi ig ux ing . plugin . translate . word book . Word Book Item Ċ import Ġcn . yi ig ux ing . plugin . translate . word book . Word Book Listener Ċ import Ġcn . yi ig ux ing . plugin . translate . word book . Word Book Service Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . application . Modal ity State Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . util . messages . Message Bus Connection ĊĊ Ċ /** Ċ Ġ* ĠTranslate Service Ċ Ġ*/ Ċ class ĠTranslate Service Ġprivate Ġconstructor () Ġ: ĠDis posable Ġ{ ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġvar Ġtranslator : ĠTrans lator Ġ= ĠDEFAULT _ TRANSL ATOR ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= Ġmutable Map Of < Listener Key , ĠMutable Set < Translate Listener >>() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Translator ( Settings . instance . translator ) ĊĠĠĠĠĠĠĠ ĠApplication . message Bus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Settings Topic () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Word Book Topic () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Translator ( new Translator : ĠTranslation Engine ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( new Translator . id Ġ!= Ġtranslator . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtranslator Ġ= Ġwhen Ġ( new Translator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTranslation Engine . YO UDA O Ġ-> ĠYou dao Translator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTranslation Engine . BA ID U Ġ-> ĠB aid u Translator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTranslation Engine . ALI Ġ-> ĠAli Translator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDEFAULT _ TRANSL ATOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Cache ( text : ĠString , Ġsrc Lang : ĠLang , Ġtarget Lang : ĠLang ): ĠTranslation ? Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Thread () ĊĠĠĠĠĠĠĠ Ġreturn ĠCache Service . get Memory Cache ( text , Ġsrc Lang , Ġtarget Lang , Ġtranslator . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtranslate ( text : ĠString , Ġsrc Lang : ĠLang , Ġtarget Lang : ĠLang , Ġlistener : ĠTranslate Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Thread () ĊĠĠĠĠĠĠĠ ĠCache Service . get Memory Cache ( text , Ġsrc Lang , Ġtarget Lang , Ġtranslator . id )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠListener Key ( text , Ġsrc Lang , Ġtarget Lang ) ĊĠĠĠĠĠĠĠ Ġlisteners [ key ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ+= Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlisteners [ key ] Ġ= Ġmutable Set Of ( listener ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmod ality State Ġ= ĠMod ality State . current () ĊĠĠĠĠĠĠĠ Ġexecute On P ooled Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( translator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( text , Ġsrc Lang , Ġtarget Lang ). let Ġ{ Ġtranslation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation . favorite Id Ġ= ĠWord Book Service . instance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isInitialized Ġ&& Ġit . can AddTo Word book ( text ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿ĻéĩĮ çļĦ ` source Language ` åıĤæķ° ä¸įèĥ½ çĽ´æİ¥ ä½¿çĶ¨ ` src Lang `ï¼Į åĽłä¸º ` src Lang ` çļĦåĢ¼ åı¯èĥ½ ä¸º ` Lang . AUTO ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Word Id ( text , Ġtranslation . src Lang , Ġtranslation . target Lang ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Service . put Memory Cache ( text , Ġsrc Lang , Ġtarget Lang , Ġid , Ġtranslation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Later ( modal ity State ) Ġ{ Ġlisteners . run ( key ) Ġ{ ĠonSuccess ( translation ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġis ĠTranslate Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å·² çŁ¥ å¼Ĥå¸¸ ï¼Į ä»ħ è®°å½ķ æĹ¥å¿Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . w (" Translation Ġerror ", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ å¼Ĥå¸¸ åĨĻåħ¥ IDE å¼Ĥå¸¸ æ±ł ï¼Į ä»¥ ä¾¿ çĶ¨æĪ· åıį é¦ Ī ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvestigate ( text , Ġsrc Lang , Ġtarget Lang , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Later ( modal ity State ) Ġ{ Ġlisteners . run ( key ) Ġ{ ĠonError ( error ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinvestigate ( request Text : ĠString , Ġsrc Lang : ĠLang , Ġtarget Lang : ĠLang , Ġerror : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Attachment Ġ= ĠTranslation Attachment Factory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Request Attachment ( translator , Ġrequest Text , Ġsrc Lang , Ġtarget Lang ) ĊĠĠĠĠĠĠĠ ĠLOG . error (" Translation Ġerror [ ${ translator . id } ]: Ġ${ error . message }", Ġerror , Ġrequest Attachment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun ĠMutable Map < Listener Key , ĠMutable Set < Translate Listener >> . run ( ĊĠĠĠĠĠĠĠ Ġkey : ĠListener Key , ĊĠĠĠĠĠĠĠ Ġaction : ĠTranslate Listener . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove ( key )?. forEach Ġ{ Ġit . action () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Favorite Added ( item : ĠWord Book Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Thread () ĊĠĠĠĠĠĠĠ Ġfor Ġ(( _, Ġtranslation ) Ġin ĠCache Service . get Memory Cache Snapshot ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( translation . favorite Id Ġ== Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation . src Lang Ġ== Ġitem . source Language Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation . target Lang Ġ== Ġitem . target Language Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation . original . equals ( item . word , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation . favorite Id Ġ= Ġitem . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Favorite Removed ( favorite Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Thread () ĊĠĠĠĠĠĠĠ Ġfor Ġ(( _, Ġtranslation ) Ġin ĠCache Service . get Memory Cache Snapshot ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( translation . favorite Id Ġ== Ġfavorite Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation . favorite Id Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMessage Bus Connection . subscribe Settings Topic () Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribe ( Settings ChangeListener . TOPIC , Ġobject Ġ: ĠSettings ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Translator Changed ( settings : ĠSettings , Ġtranslation Engine : ĠTranslation Engine ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Translator ( translation Engine ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMessage Bus Connection . subscribe Word Book Topic () Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribe ( Word Book Listener . TOPIC , Ġobject Ġ: ĠWord Book Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Word Added ( service : ĠWord Book Service , Ġword Book Item : ĠWord Book Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Favorite Added ( word Book Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Word Removed ( service : ĠWord Book Service , Ġid : ĠLong ) Ġ= Ġnotify Favorite Removed ( id ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠListener Key ( val Ġtext : ĠString , Ġval Ġsrc Lang : ĠLang , Ġval Ġtarget Lang : ĠLang ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ TRANSL ATOR : ĠTrans lator Ġ= ĠGoogle Translator ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠTranslate Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠApplication Manager . getApplication (). getService ( Translate Service :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLogger . getInstance ( Translate Service :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck Thread () Ġ= Ġcheck Dispatch Thread ( Translate Service :: class . java ) ĊĠĠĠ Ġ} Ċ }