1import{l,e as g,f as E,K as y,$ as d,o as T,D as u,p as o}from"../chunks/vidstack-DDS6k7mb.js";import{T as h}from"../chunks/vidstack-3eKtzibe.js";import{R as v}from"../chunks/vidstack-BopiEIrS.js";import{L as k}from"../chunks/vidstack-UVfmP_-r.js";import{g as b,a as C,b as S,h as p,l as w,c as L}from"../chunks/vidstack-BH31_Spl.js";import"../chunks/vidstack-CNKoXbhJ.js";class D{constructor(t){this.Ul=new chrome.cast.media.MediaInfo(t.src,t.type)}build(){return this.Ul}Xl(t){return t.includes("live")?this.Ul.streamType=chrome.cast.media.StreamType.LIVE:this.Ul.streamType=chrome.cast.media.StreamType.BUFFERED,this}Yl(t){return this.Ul.tracks=t.map(this.Il),this}Zl(t,s){return this.Ul.metadata=new chrome.cast.media.GenericMediaMetadata,this.Ul.metadata.title=t,this.Ul.metadata.images=[{url:s}],this}Il(t,s){const e=new chrome.cast.media.Track(s,chrome.cast.media.TrackType.TEXT);return e.name=t.label,e.trackContentId=t.src,e.trackContentType="text/vtt",e.language=t.language,e.subtype=t.kind.toUpperCase(),e}}const c=chrome.cast.media.TrackType.TEXT,f=chrome.cast.media.TrackType.AUDIO;class A{constructor(t,s,e){this.xm=t,this.b=s,this.zm=e}Hm(){const t=this.Km.bind(this);l(this.b.audioTracks,"change",t),l(this.b.textTracks,"mode-change",t),g(this.Lm.bind(this))}wm(){return this.b.$state.textTracks().filter(t=>t.src&&t.type==="vtt")}Cm(){return this.b.$state.audioTracks()}Wl(t){const s=this.xm.mediaInfo?.tracks??[];return t?s.filter(e=>e.type===t):s}Dm(){const t=[],s=this.Cm().find(a=>a.selected),e=this.wm().filter(a=>a.mode==="showing");if(s){const a=this.Wl(f),i=this.ym(a,s);i&&t.push(i.trackId)}if(e?.length){const a=this.Wl(c);if(a.length)for(const i of e){const r=this.ym(a,i);r&&t.push(r.trackId)}}return t}Lm(){const t=this.wm();if(!this.xm.isMediaLoaded)return;const s=this.Wl(c);for(const e of t)if(!this.ym(s,e)){E(()=>this.zm?.());break}}Mm(t){if(!this.xm.isMediaLoaded)return;const s=this.Cm(),e=this.wm(),a=this.Wl(f),i=this.Wl(c);for(const r of a){if(this.Em(s,r))continue;const n={id:r.trackId.toString(),label:r.name,language:r.language,kind:r.subtype??"main",selected:!1};this.b.audioTracks[k.oa](n,t)}for(const r of i){if(this.Em(e,r))continue;const n={id:r.trackId.toString(),src:r.trackContentId,label:r.name,language:r.language,kind:r.subtype.toLowerCase()};this.b.textTracks.add(n,t)}}Km(t){if(!this.xm.isMediaLoaded)return;const s=this.Dm(),e=new chrome.cast.media.EditTracksInfoRequest(s);this.Jm(e).catch(a=>{})}Jm(t){const s=b();return new Promise((e,a)=>s?.editTracksInfo(t,e,a))}Em(t,s){return t.find(e=>this.Fm(e,s))}ym(t,s){return t.find(e=>this.Fm(s,e))}Fm(t,s){return s.name===t.label&&s.language===t.language&&s.subtype.toLowerCase()===t.kind.toLowerCase()}}class I{constructor(t,s){this.aa=t,this.b=s,this.$$PROVIDER_TYPE="GOOGLE_CAST",this.scope=y(),this.V=null,this.mc="disconnected",this.Va=0,this.Fa=0,this.Ga=new h(0,0),this.Hb=new h(0,0),this.Da=new v(this.bd.bind(this)),this.vm=null,this.Am=!1,this.yb=new A(this.aa,this.b,this.zm.bind(this))}get c(){return this.b.delegate.c}get type(){return"google-cast"}get currentSrc(){return this.V}get player(){return this.aa}get cast(){return C()}get session(){return S()}get media(){return b()}get hasActiveSession(){return p(this.V)}setup(){this.sm(),this.tm(),this.yb.Hm(),this.c("provider-setup",this)}sm(){w(cast.framework.CastContextEventType.CAST_STATE_CHANGED,this.qm.bind(this))}tm(){const t=cast.framework.RemotePlayerEventType,s={[t.IS_CONNECTED_CHANGED]:this.qm,[t.IS_MEDIA_LOADED_CHANGED]:this.Jl,[t.CAN_CONTROL_VOLUME_CHANGED]:this.em,[t.CAN_SEEK_CHANGED]:this.fm,[t.DURATION_CHANGED]:this.wg,[t.IS_MUTED_CHANGED]:this.ab,[t.VOLUME_LEVEL_CHANGED]:this.ab,[t.IS_PAUSED_CHANGED]:this.jm,[t.LIVE_SEEKABLE_RANGE_CHANGED]:this.ic,[t.PLAYER_STATE_CHANGED]:this.km};this.dm=s;const e=this.lm.bind(this);for(const a of d(s))this.aa.controller.addEventListener(a,e);T(()=>{for(const a of d(s))this.aa.controller.removeEventListener(a,e)})}async play(){if(!(!this.aa.isPaused&&!this.Am)){if(this.Am){await this.Gm(!1,0);return}this.aa.controller?.playOrPause()}}async pause(){this.aa.isPaused||this.aa.controller?.playOrPause()}getMediaStatus(t){return new Promise((s,e)=>{this.media?.getStatus(t,s,e)})}setMuted(t){(t&&!this.aa.isMuted||!t&&this.aa.isMuted)&&this.aa.controller?.muteOr
1Unmute()}setCurrentTime(t){this.aa.currentTime=t,this.c("seeking",t),this.aa.controller?.seek()}setVolume(t){this.aa.volumeLevel=t,this.aa.controller?.setVolumeLevel()}async loadSource(t){if(this.vm?.src!==t&&(this.vm=null),p(t)){this.um(),this.V=t;return}this.c("load-start");const s=this.am(t),e=await this.session.loadMedia(s);if(e){this.V=null,this.c("error",Error(L(e)));return}this.V=t}destroy(){this.H(),this.rm()}H(){this.vm||(this.Fa=0,this.Ga=new h(0,0),this.Hb=new h(0,0)),this.Da.ra(),this.Va=0,this.vm=null}um(){const t=new u("resume-session",{detail:this.session});this.Jl(t);const{muted:s,volume:e,remotePlaybackInfo:a}=this.b.$state,i=a();this.setCurrentTime(Math.max(this.aa.currentTime,i?.savedState?.currentTime??0)),this.setMuted(s()),this.setVolume(e()),i?.savedState?.paused===!1&&this.play()}rm(){this.cast.endCurrentSession(!0);const{remotePlaybackLoader:t}=this.b.$state;t.set(null)}Ml(){this.b.$state.remotePlaybackInfo.set({savedState:{paused:this.aa.isPaused,currentTime:this.aa.currentTime}}),this.rm()}bd(){this.im()}lm(t){this.dm[t.type].call(this,t)}qm(t){const s=this.cast.getCastState(),e=s===cast.framework.CastState.CONNECTED?"connected":s===cast.framework.CastState.CONNECTING?"connecting":"disconnected";if(this.mc===e)return;const a={type:"google-cast",state:e},i=this.Vl(t);this.mc=e,this.c("remote-playback-change",a,i),e==="disconnected"&&this.Ml()}Jl(t){if(!this.aa.isMediaLoaded)return;const s=o(this.b.$state.source);Promise.resolve().then(()=>{if(s!==o(this.b.$state.source)||!this.aa.isMediaLoaded)return;this.H();const e=this.aa.duration;this.Hb=new h(0,e);const a={provider:this,duration:e,buffered:this.Ga,seekable:this.gm()},i=this.Vl(t);this.c("loaded-metadata",void 0,i),this.c("loaded-data",void 0,i),this.c("can-play",a,i),this.em(),this.fm(t);const{volume:r,muted:n}=this.b.$state;this.setVolume(r()),this.setMuted(n()),this.Da.Bb(),this.yb.Mm(i),this.yb.Km(i)})}em(){this.b.$state.canSetVolume.set(this.aa.canControlVolume)}fm(t){const s=this.Vl(t);this.c("stream-type-change",this.mm(),s)}mm(){return this.aa.mediaInfo?.streamType===chrome.cast.media.StreamType.LIVE?this.aa.canSeek?"live:dvr":"live":"on-demand"}im(){if(this.vm)return;const t=this.aa.currentTime;if(t===this.Va)return;const s=this.Fa,e=this.cm(t),a={currentTime:t,played:e};this.c("time-update",a),t>s&&this.ic(),this.b.$state.seeking()&&this.c("seeked",t),this.Va=t}cm(t){return this.Fa>=t?this.Ga:this.Ga=new h(0,this.Fa=t)}wg(t){if(!this.aa.isMediaLoaded||this.vm)return;const s=this.aa.duration,e=this.Vl(t);this.Hb=new h(0,s),this.c("duration-change",s,e)}ab(t){if(!this.aa.isMediaLoaded)return;const s={muted:this.aa.isMuted,volume:this.aa.volumeLevel},e=this.Vl(t);this.c("volume-change",s,e)}jm(t){const s=this.Vl(t);this.aa.isPaused?this.c("pause",void 0,s):this.c("play",void 0,s)}ic(t){const s={seekable:this.gm(),buffered:this.Ga},e=t?this.Vl(t):void 0;this.c("progress",s,e)}km(t){const s=this.aa.playerState,e=chrome.cast.media.PlayerState;if(this.Am=s===e.IDLE,s===e.PAUSED)return;const a=this.Vl(t);switch(s){case e.PLAYING:this.c("playing",void 0,a);break;case e.BUFFERING:this.c("waiting",void 0,a);break;case e.IDLE:this.Da.ra(),this.c("pause"),this.c("end");break}}gm(){return this.aa.liveSeekableRange?new h(this.aa.liveSeekableRange.start,this.aa.liveSeekableRange.end):this.Hb}Vl(t){return t instanceof Event?t:new u(t.type,{detail:t})}Dl(t){const{streamType:s,title:e,poster:a}=this.b.$state;return new D(t).Zl(e(),a()).Xl(s()).Yl(this.yb.wm()).build()}am(t){const s=this.Dl(t),e=new chrome.cast.media.LoadRequest(s),a=this.b.$state.remotePlaybackInfo();return e.autoplay=(this.vm?.paused??a?.savedState?.paused)===!1,e.currentTime=this.vm?.time??a?.savedState?.currentTime??0,e}async Gm(t,s){const e=o(this.b.$state.source);this.vm={src:e,paused:t,time:s},await this.loadSource(e)}zm(){this.Gm(this.aa.isPaused,this.aa.currentTime).catch(t=>{})}}export{I as GoogleCastProvider};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.