homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge.
5 lines • 4.72 kB
JavaScript
import{a as E}from"./chunk-D39XL-zh.js";import{Un as g,Vt as U3,mt as P,rn as Wf,v as C,zt as Ts}from"./chunk-D96TCRAL.js";import{t as ds}from"./chunk-CiY-LsUw.js";import{n as bn,r as kn,t as Mn}from"./chunk-CLsCjV2Q.js";var L=(()=>{class n{$ws=g(ds);$api=g(U3);io;fitAddon;webLinksAddon;resize;elementResize;dataDisposable=null;isInitializing=!1;hasUserTyped=!1;autoFocusOnStart=!0;destroy$=new P;term;destroyTerminal(){this.destroy$.next(),this.destroy$.complete(),this.dataDisposable&&(this.dataDisposable.dispose(),this.dataDisposable=null),this.io&&this.io.socket&&(this.io.socket.removeAllListeners(`disconnect`),this.io.socket.removeAllListeners(`stdout`),this.io.socket.removeAllListeners(`process-exit`)),this.io&&this.io.end(),this.term&&(this.term.dispose(),this.term=null),this.resize&&this.resize.complete(),this.elementResize&&this.elementResize.complete(),this.destroy$=new P,this.isInitializing=!1,this.hasUserTyped=!1}destroyPersistentSession(){return E(this,null,function*(){this.destroyTerminal();try{yield this.$api.post(`/platform-tools/terminal/destroy-persistent-session`,{})}catch(s){console.error(`Failed to destroy persistent session:`,s)}})}detachTerminal(){this.destroy$.next(),this.destroy$.complete(),this.dataDisposable&&(this.dataDisposable.dispose(),this.dataDisposable=null),this.term&&this.term.dispose(),this.resize&&this.resize.complete(),this.elementResize&&this.elementResize.complete(),this.destroy$=new P,this.isInitializing=!1}hasActiveSession(){return this.io&&this.io.socket&&this.io.socket.connected}hasUserTypedInSession(){return this.hasUserTyped}isTerminalReady(){return this.term&&!this.isInitializing}activateTerminal(){this.isTerminalReady()&&this.term&&this.term.focus()}touchStartY=null;onTouchStart(s){this.touchStartY=s.touches[0].clientY}onTouchEnd(s){if(this.touchStartY===null)return;let i=Math.abs(s.changedTouches[0].clientY-this.touchStartY);this.touchStartY=null,i<10&&this.activateTerminal()}reconnectTerminal(s,i={},h,a=!0){return this.isInitializing?!1:(this.isInitializing=!0,this.autoFocusOnStart=a,this.elementResize=h,this.io&&this.io.socket&&this.io.socket.connected?(this.fitAddon=new bn,this.webLinksAddon=new kn,this.term=new Mn(i),this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon),this.resize=new P,this.term.open(s.nativeElement),setTimeout(()=>{this.fitAddon.fit()}),this.io.socket.removeAllListeners(`stdout`),this.io.socket.removeAllListeners(`process-exit`),this.io.socket.on(`stdout`,t=>{this.term.write(t)}),this.io.socket.on(`process-exit`,()=>{this.startSession()}),this.dataDisposable&&this.dataDisposable.dispose(),this.dataDisposable=this.term.onData(t=>{this.hasUserTyped=!0,this.io.socket.emit(`stdin`,t)}),this.term.onResize(t=>{this.resize.next(t)}),this.resize.pipe(Wf(500),Ts(this.destroy$)).subscribe(t=>{this.io.socket.emit(`resize`,t)}),this.elementResize&&this.elementResize.pipe(Wf(100),Ts(this.destroy$)).subscribe({next:()=>{this.fitAddon.fit()}}),this.io.socket.emit(`start-session`,{cols:this.term.cols,rows:this.term.rows}),this.isInitializing=!1,!0):this.startTerminal(s,i,h,a))}startTerminal(s,i={},h,a=!0){return this.isInitializing?!1:(this.isInitializing=!0,this.autoFocusOnStart=a,this.elementResize=h,this.io=this.$ws.connectToNamespace(`platform-tools/terminal`),this.fitAddon=new bn,this.webLinksAddon=new kn,this.term=new Mn(i),this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon),this.resize=new P,this.term.open(s.nativeElement),setTimeout(()=>{this.fitAddon.fit()}),this.io.connected.pipe(Wf(200),Ts(this.destroy$)).subscribe(()=>{this.startSession()}),this.io.socket.removeAllListeners(`disconnect`),this.io.socket.removeAllListeners(`process-exit`),this.io.socket.removeAllListeners(`stdout`),this.io.socket.on(`disconnect`,()=>{this.term?.write(`
\r
\rTerminal disconnected. Is the server running?
\r
\r`)}),this.io.socket.on(`process-exit`,()=>{this.startSession()}),this.resize.pipe(Wf(500),Ts(this.destroy$)).subscribe(t=>{this.io.socket.emit(`resize`,t)}),this.io.socket.on(`stdout`,t=>{this.term.write(t)}),this.dataDisposable=this.term.onData(t=>{this.hasUserTyped=!0,this.io.socket.emit(`stdin`,t)}),this.term.onResize(t=>{this.resize.next(t)}),this.elementResize&&this.elementResize.pipe(Wf(100),Ts(this.destroy$)).subscribe({next:()=>{this.fitAddon.fit()}}),!0)}startSession(){this.term.reset(),this.hasUserTyped=!1,this.io.socket.emit(`start-session`,{cols:this.term.cols,rows:this.term.rows}),this.resize.next({cols:this.term.cols,rows:this.term.rows}),this.isInitializing=!1,this.autoFocusOnStart&&this.term.focus()}static ɵfac=function(i){return new(i||n)};static ɵprov=C({token:n,factory:n.ɵfac,providedIn:`root`})}return n})();export{L as t};