{"version":3,"file":"PlayerStore-RdllLZKS.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\ninterface Transcript {\n  actual: number;\n  actualText: string;\n  value: Array<{ endTime: number; startTime: number; text: 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?: Transcript;\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(): string {\n      return this.playerTranscript?.actualText ?? \"\";\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?: Transcript) {\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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"}