@@ -14,7 +14,7 @@ const piperObservable = rxjs.defer(() => {
1414 rxjs . shareReplay ( { bufferSize : 1 , refCount : false } )
1515 )
1616const piperCallbacks = new rxjs . Subject ( )
17- const domDispatcher = makeDispatcher ( "piper-host" , {
17+ const piperDispatcher = makeDispatcher ( "piper-host" , {
1818 advertiseVoices ( { voices} , sender ) {
1919 updateSettings ( { piperVoices : voices } )
2020 piperSubject . next ( sender )
@@ -25,16 +25,44 @@ const domDispatcher = makeDispatcher("piper-host", {
2525 onEnd : args => piperCallbacks . next ( { type : "end" , ...args } ) ,
2626 onError : args => piperCallbacks . next ( { type : "error" , ...args } ) ,
2727} )
28+
29+
30+ const fasttextSubject = new rxjs . Subject ( )
31+ const fasttextObservable = rxjs . defer ( ( ) => {
32+ createFasttextFrame ( )
33+ return rxjs . race (
34+ fasttextSubject ,
35+ rxjs . timer ( 3000 ) . pipe ( rxjs . map ( ( ) => null ) )
36+ )
37+ } )
38+ . pipe (
39+ rxjs . shareReplay ( { bufferSize : 1 , refCount : false } )
40+ )
41+ const fasttextDispatcher = makeDispatcher ( "fasttext-host" , {
42+ onServiceReady ( args , sender ) {
43+ fasttextSubject . next ( sender )
44+ }
45+ } )
46+
47+
2848window . addEventListener ( "message" , event => {
2949 const send = message => event . source . postMessage ( message , { targetOrigin : event . origin } )
30- const sender = {
50+
51+ piperDispatcher . dispatch ( event . data , {
3152 sendRequest ( method , args ) {
3253 const id = String ( Math . random ( ) )
33- send ( { to : "piper-service" , type : "request" , id, method, args} )
34- return domDispatcher . waitForResponse ( id )
54+ send ( { from : "piper-host" , to : "piper-service" , type : "request" , id, method, args} )
55+ return piperDispatcher . waitForResponse ( id )
3556 }
36- }
37- domDispatcher . dispatch ( event . data , sender , send )
57+ } , send )
58+
59+ fasttextDispatcher . dispatch ( event . data , {
60+ sendRequest ( method , args ) {
61+ const id = String ( Math . random ( ) )
62+ send ( { from : "fasttext-host" , to : "fasttext-service" , type : "request" , id, method, args} )
63+ return fasttextDispatcher . waitForResponse ( id )
64+ }
65+ } , send )
3866} )
3967
4068
@@ -346,3 +374,12 @@ function createPiperFrame() {
346374 f . style . borderWidth = "0"
347375 document . body . appendChild ( f )
348376}
377+
378+ function createFasttextFrame ( ) {
379+ const f = document . createElement ( "iframe" )
380+ f . id = "fasttext-frame"
381+ f . src = "https://ttstool.com/fasttext/index.html"
382+ f . allow = "cross-origin-isolated"
383+ f . style . display = "none"
384+ document . body . appendChild ( f )
385+ }
0 commit comments