mirror of
https://github.com/p-stream/p-stream.git
synced 2026-01-11 20:10:32 +00:00
Track XPrime ad script load state in player
Adds xprimeAdScriptLoaded state and setter to the player store. Updates XPrimeAdOverlay to only show when the ad script is loaded, and base display logic to set the load state based on script events. This ensures the overlay only appears when the ad script is ready.
This commit is contained in:
parent
454271c72c
commit
c50bdd9ad8
3 changed files with 25 additions and 2 deletions
|
|
@ -7,9 +7,10 @@ import { usePlayerStore } from "@/stores/player/store";
|
|||
import { usePreferencesStore } from "@/stores/preferences";
|
||||
|
||||
export function XPrimeAdOverlay() {
|
||||
const { sourceId, status } = usePlayerStore((s) => ({
|
||||
const { sourceId, status, xprimeAdScriptLoaded } = usePlayerStore((s) => ({
|
||||
sourceId: s.sourceId,
|
||||
status: s.status,
|
||||
xprimeAdScriptLoaded: s.xprimeAdScriptLoaded,
|
||||
}));
|
||||
const disableXPrimeAds = usePreferencesStore((s) => s.disableXPrimeAds);
|
||||
const [show, setShow] = useState(false);
|
||||
|
|
@ -17,7 +18,10 @@ export function XPrimeAdOverlay() {
|
|||
useEffect(() => {
|
||||
// Only show overlay when all conditions are met
|
||||
const shouldShow =
|
||||
sourceId === "xprimetv" && status === "playing" && !disableXPrimeAds;
|
||||
sourceId === "xprimetv" &&
|
||||
status === "playing" &&
|
||||
!disableXPrimeAds &&
|
||||
xprimeAdScriptLoaded;
|
||||
if (shouldShow && !show) {
|
||||
setShow(true);
|
||||
const timer = setTimeout(() => {
|
||||
|
|
|
|||
|
|
@ -123,6 +123,17 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
|
|||
script.async = true;
|
||||
script.type = "text/javascript";
|
||||
script.src = "//jg.prisagedibbuk.com/r47OViiCQMeGnyQ/131974";
|
||||
|
||||
// Track script loading status
|
||||
script.addEventListener("load", () => {
|
||||
console.log("XPrime ad script loaded successfully");
|
||||
usePlayerStore.getState().setXPrimeAdScriptLoaded(true);
|
||||
});
|
||||
script.addEventListener("error", () => {
|
||||
console.log("XPrime ad script failed to load");
|
||||
usePlayerStore.getState().setXPrimeAdScriptLoaded(false);
|
||||
});
|
||||
|
||||
document.head.appendChild(script);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ export interface SourceSlice {
|
|||
currentAudioTrack: AudioTrack | null;
|
||||
captionList: CaptionListItem[];
|
||||
isLoadingExternalSubtitles: boolean;
|
||||
xprimeAdScriptLoaded: boolean;
|
||||
caption: {
|
||||
selected: Caption | null;
|
||||
asTrack: boolean;
|
||||
|
|
@ -103,6 +104,7 @@ export interface SourceSlice {
|
|||
enableAutomaticQuality(): void;
|
||||
redisplaySource(startAt: number): void;
|
||||
setCaptionAsTrack(asTrack: boolean): void;
|
||||
setXPrimeAdScriptLoaded(loaded: boolean): void;
|
||||
addExternalSubtitles(): Promise<void>;
|
||||
}
|
||||
|
||||
|
|
@ -137,6 +139,7 @@ export const createSourceSlice: MakeSlice<SourceSlice> = (set, get) => ({
|
|||
audioTracks: [],
|
||||
captionList: [],
|
||||
isLoadingExternalSubtitles: false,
|
||||
xprimeAdScriptLoaded: false,
|
||||
currentQuality: null,
|
||||
currentAudioTrack: null,
|
||||
status: playerStatus.IDLE,
|
||||
|
|
@ -256,6 +259,11 @@ export const createSourceSlice: MakeSlice<SourceSlice> = (set, get) => ({
|
|||
s.caption.asTrack = asTrack;
|
||||
});
|
||||
},
|
||||
setXPrimeAdScriptLoaded(loaded: boolean) {
|
||||
set((s) => {
|
||||
s.xprimeAdScriptLoaded = loaded;
|
||||
});
|
||||
},
|
||||
async addExternalSubtitles() {
|
||||
const store = get();
|
||||
if (!store.meta) return;
|
||||
|
|
|
|||
Loading…
Reference in a new issue