{"version":3,"file":"PlayerStore-60cKerrm.mjs","names":[],"sources":["../src/helper/durationHelper.ts","../src/stores/PlayerStore.ts"],"sourcesContent":["\nconst TIMESTAMP_REGEX = /(?:(\\d{1,2}):)?([0-5]?\\d):([0-5]\\d)(?:.(\\d{3}))?$/;\n\n/**\n * Convert a timestamp to seconds\n */\nfunction convertTimestamptoSeconds(timestamp: string): number|null {\n    const matches = timestamp.match(TIMESTAMP_REGEX);\n    if (matches) {\n        const [, hours, minutes, seconds, nanoseconds] = matches;\n        return Number(hours ?? 0) * 60 * 60 + Number(minutes ?? 0) * 60 + Number(seconds ?? 0) + Number(nanoseconds ?? 0) / 1000;\n    } else {\n        return null;\n    }\n}\n\nfunction formatToString(value: number) {\n    if (value < 10) {\n        return \"0\" + value;\n    }\n    return value.toString();\n}\n\nfunction formatDuration(\n    totalSeconds: number | null,\n    separator = \":\",\n    isLast = false,\n): string {\n    if (null === totalSeconds) {\n        return \"00:00\";\n    }\n    const hours = Math.floor(totalSeconds / 3600);\n    const minutes = Math.floor((totalSeconds - hours * 3600) / 60);\n    const seconds = totalSeconds - hours * 3600 - minutes * 60;\n\n    // In case seconds have decimal, round to 3 decimals, otherwise do not use decimals\n    const secondsStr = Math.round(seconds) == seconds ?\n        this.formatToString(seconds) :\n        this.formatToString(seconds.toFixed(3));\n\n    return (\n        (hours > 0 ? this.formatToString(hours) + separator : \"\") +\n        this.formatToString(minutes) +\n        separator +\n        secondsStr +\n        (isLast ? separator : \"\")\n    );\n}\n\nexport default {\n    TIMESTAMP_REGEX,\n\n    convertTimestamptoSeconds,\n    formatDuration,\n    formatToString\n}","import DurationHelper from \"../helper/durationHelper\";\nimport { Media } from \"@/stores/class/general/media\";\nimport {\n    MediaRadio,\n    NextAdvertising,\n    Radio,\n} from \"@/stores/class/general/player\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { defineStore } from \"pinia\";\nimport { Chaptering, ChapteringPercent } from \"./class/chaptering/chaptering\";\nimport classicApi from \"../api/classicApi\";\n\nimport { state as sdkParams } from \"./ParamSdkStore\";\nimport { Canal } from \"./class/radio/canal\";\nimport { Conference } from \"./class/conference/conference\";\n\nexport interface PlayerTranscript {\n    current: number;\n    currentText: Array<string>;\n    value: Array<{ endTime: number; startTime: number; text: Array<string> }>;\n}\n\nexport enum PlayerStatus {\n    STOPPED = \"STOPPED\",\n    LOADING = \"LOADING\",\n    PLAYING = \"PLAYING\",\n    PAUSED = \"PAUSED\"\n}\n\ninterface PlayerState {\n    playerCurrentChange: number | null;\n    playerStatus: PlayerStatus;\n    playerPodcast: Podcast | undefined;\n    playerVolume?: number; //From 0 to 1\n    playerElapsed: number; //From 0 to 1\n    playerTotal: number;\n    playerMedia: Media | undefined;\n    playerLive: Podcast | undefined;\n    playerRadio: Radio | undefined;\n    playerStop?: boolean;\n    playerSeekTime?: number;\n    playerTranscript?: PlayerTranscript;\n    playerLargeVersion: boolean;\n    playerVideo: boolean;\n    playerChaptering?: Chaptering;\n    playerDelayStitching: number;\n    playerHlsUrl?: string;\n    playerHlsIdentifier?:string;\n}\nexport const usePlayerStore = defineStore(\"PlayerStore\", {\n    state: (): PlayerState => ({\n        playerCurrentChange: null,\n        playerStatus: PlayerStatus.STOPPED,\n        playerPodcast: undefined,\n        playerVolume: 1,\n        playerElapsed: 0,\n        playerTotal: 0,\n        playerMedia: undefined,\n        playerLive: undefined,\n        playerRadio: undefined,\n        playerSeekTime: 0,\n        playerLargeVersion: false,\n        playerVideo: false,\n        playerChaptering: undefined,\n        playerDelayStitching: 0,\n        playerHlsIdentifier: undefined,\n    }),\n    getters: {\n        playerChapteringPercent(): ChapteringPercent | undefined {\n            if (!this.playerChaptering || 0 === this.playerTotal) {\n                return;\n            }\n            const chapteringPercent: ChapteringPercent = [];\n            for (\n                let i = 0, len = this.playerChaptering.chapters.length;\n                i < len;\n                i++\n            ) {\n                const startTime = this.playerChaptering.chapters[i].startTime;\n                chapteringPercent.push({\n                    startTime: startTime,\n                    startDisplay: DurationHelper.formatDuration(startTime, \":\", false),\n                    startPercent: (startTime * 100) / Math.round(this.playerTotal),\n                    endPercent: 100,\n                    title: this.playerChaptering.chapters[i].title,\n                });\n            }\n            for (let i = 0, len = chapteringPercent.length; i < len; i++) {\n                chapteringPercent[i].endPercent =\n                    chapteringPercent[i].startPercent +\n          ((chapteringPercent[i + 1]?.startPercent ?? 100) -\n            chapteringPercent[i].startPercent);\n            }\n            return chapteringPercent;\n        },\n        playerHeight() {\n            if (\"STOPPED\" === this.playerStatus) {\n                return '0px';\n            }\n            if (this.playerVideo) {\n                return \"0px\" /* \"281px\" */;\n            }\n            if (this.playerLargeVersion) {\n                return \"27rem\";\n            }\n            if (window.innerWidth > 450) {\n                return \"6rem\";\n            }\n            return \"3.5rem\";\n        },\n\n        playerElapsedSeconds(): number {\n            if (\n                this.playerElapsed &&\n        this.playerElapsed > 0 &&\n        this.playerTotal &&\n        this.playerTotal > 0\n            ) {\n                return this.playerElapsed * this.playerTotal;\n            } else {\n                return -1;\n            }\n        },\n\n        /** Returning remaining time in seconds */\n        playerRemainingSeconds(): number {\n            const elapsed = this.playerElapsedSeconds;\n            if (elapsed >= 0) {\n                return this.playerTotal - elapsed;\n            } else {\n                return -1;\n            }\n        },\n    \n        playedTime(): string {\n            if (-1 !== this.playerElapsedSeconds) {\n                return DurationHelper.formatDuration(\n                    Math.round(this.playerElapsedSeconds),\n                );\n            }\n            return \"--:--\";\n        },\n        totalTime(): string {\n            if (\n                this.playerElapsed &&\n        this.playerElapsed > 0 &&\n        this.playerTotal &&\n        this.playerTotal > 0\n            ) {\n                return DurationHelper.formatDuration(Math.round(this.playerTotal));\n            }\n            return \"--:--\";\n        },\n        isPlaying(): boolean {\n            return \"PLAYING\" === this.playerStatus;\n        },\n        isPaused(): boolean {\n            return \"PAUSED\" === this.playerStatus;\n        },\n        podcastImage(): string {\n            if (this.playerRadio) {\n                return this.playerRadio.podcast?.imageUrl ?? \"\";\n            }\n            return this.playerPodcast?.imageUrl ?? \"\";\n        },\n        emissionName(): string {\n            return this.playerPodcast?.emission?.name ?? \"\";\n        },\n        transcriptText(): Array<string> {\n            return this.playerTranscript?.currentText ?? [];\n        },\n        radioUrl(): string | undefined {\n            return this.playerRadio?.url ?? undefined;\n        },\n    },\n    actions: {\n        stop(): void {\n            this.playerCurrentChange = null;\n            this.playerStatus = \"STOPPED\";\n            this.playerPodcast = undefined;\n            this.playerMedia = undefined;\n            this.playerLive = undefined;\n            this.playerHlsIdentifier = undefined;\n            this.playerRadio = undefined;\n            this.playerElapsed = 0;\n            this.playerVideo = false;\n            this.playerChaptering = undefined;\n        },\n        /**\n     * Start playing audio/video\n     * Without parameters, stop playing\n     * @param param The data\n     * @param isVideo If true, enable video mode\n     */\n        async playerPlay(param?: Podcast|Media|Canal|Conference, isVideo = false) {\n            if (!param) {\n                this.stop();\n                return;\n            }\n            if (\n                (\n                    this.playerPodcast &&\n          'podcastId' in param &&\n          this.playerPodcast.podcastId === param.podcastId &&\n          isVideo === this.playerVideo\n                ) || (\n                    this.playerMedia &&\n          'mediaId' in param &&\n          this.playerMedia.mediaId === param.mediaId\n                ) || (\n                    this.playerLive &&\n          'conferenceId' in param &&\n          this.playerLive.conferenceId === param.conferenceId &&\n          isVideo === this.playerVideo\n                )\n            ) {\n                //Do nothing\n                return;\n            }\n\n            if (sdkParams.player.startLarge === true && this.playerStatus === 'STOPPED') {\n                this.playerUpdateLargeVersion(true);\n            }\n      \n            this.playerStatus = \"LOADING\";\n            this.playerPodcast = undefined;\n            this.playerMedia = undefined;\n            this.playerLive = undefined;\n            this.playerHlsIdentifier = undefined;\n            this.playerRadio = undefined;\n            this.playerVideo = isVideo;\n            this.playerElapsed = 0;\n            this.playerChaptering = undefined;\n\n            if (\n                'conferenceId' in param &&\n        param.conferenceId &&\n        (!param.podcastId || param.processingStatus !== \"READY\")\n            ) {\n                this.playerLive = param;\n                this.playerHlsIdentifier = param.hlsIdentifier;\n                this.playerCurrentChange = null;\n                return;\n            }\n\n            if ('podcastId' in param && param.podcastId) {\n                const podcast = param as Podcast;\n                this.playerPodcast = podcast;\n                this.playerCurrentChange = podcast.podcastId;\n                if (podcast.annotations?.chaptering) {\n                    this.playerChaptering = await classicApi.fetchData<Chaptering>({\n                        api: 4,\n                        path: podcast.annotations.chaptering as string,\n                        isNotAuth: true\n                    });\n                }\n                return;\n            }\n\n            if ('mediaId' in param && param.mediaId) {\n                this.playerMedia = param;\n                this.playerCurrentChange = null;\n                return;\n            }\n\n            if ('canalId' in param && param.canalId) {\n                this.playerRadio = { ...param, isInit: false };\n                this.playerCurrentChange = -param.canalId;\n            }\n        },\n\n        playerChangeStatus(isPause: boolean) {\n            this.playerStatus = isPause? \"PAUSED\" : \"PLAYING\";\n        },\n\n        playerUpdateSeekTime(seekTime: number) {\n            this.playerSeekTime = seekTime;\n        },\n        playerMetadata(metadata: MediaRadio|undefined, history: Array<MediaRadio>) {\n            if (!this.playerRadio) {\n                return;\n            }\n            this.playerRadio.metadata = metadata;\n            this.playerRadio.history = history;\n        },\n        playerRadioUpdateNextAdvertising(nextAdvertising: NextAdvertising) {\n            if (!this.playerRadio) {\n                return;\n            }\n            this.playerRadio.nextAdvertising = nextAdvertising;\n        },\n        playerRadioPodcast(podcast: Podcast | undefined) {\n            if (!this.playerRadio) {\n                return;\n            }\n            this.playerRadio.podcast = podcast;\n        },\n\n        playerUpdateElapsed(elapsed: number, total?: number) {\n            this.playerElapsed = elapsed;\n            if (total) {\n                this.playerTotal = total;\n            }\n        },\n\n        playerUpdateTranscript(transcript?: PlayerTranscript) {\n            this.playerTranscript = transcript;\n        },\n        playerUpdateLargeVersion(largeVersion: boolean) {\n            this.playerLargeVersion = largeVersion;\n        },\n        playerUpdateChaptering(chaptering?: Chaptering) {\n            this.playerChaptering = chaptering;\n        },\n        playerUpdateDelayStitching(delay: number) {\n            this.playerDelayStitching = delay;\n        },\n        playerUpdatePlayerHlsUrl(hlsUrl: string|undefined) {\n            this.playerHlsUrl = hlsUrl;\n        },\n    },\n});\n"],"mappings":"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"}