cafe-video-player 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/videoPlayerLibrary/helpers/configs/nextConfigs/next.config.js","../src/videoPlayerLibrary/helpers/configs/npmPackage/npmPackage.ts","../src/videoPlayerLibrary/helpers/redux/slices/controllerSlice.ts","../src/videoPlayerLibrary/helpers/redux/slices/videoDataSlice.ts","../src/videoPlayerLibrary/helpers/interfaces/enums.ts","../src/videoPlayerLibrary/helpers/constants.ts","../src/videoPlayerLibrary/helpers/environment.ts","../src/videoPlayerLibrary/helpers/conditions/conditions.ts","../src/videoPlayerLibrary/helpers/helpers.ts","../src/videoPlayerLibrary/helpers/redux/store.ts","../src/videoPlayerLibrary/helpers/redux/slices/popoversSlice.ts","../src/videoPlayerLibrary/helpers/redux/slices/userSlice.ts","../src/videoPlayerLibrary/helpers/services/apiCaller.ts","../src/videoPlayerLibrary/helpers/services/baseUrl.ts","../src/videoPlayerLibrary/helpers/services/services.ts","../src/videoPlayerLibrary/helpers/redux/actions/user.actions.ts","../src/videoPlayerLibrary/helpers/redux/hooks.ts","../src/videoPlayerLibrary/helpers/logs/logs.ts","../src/videoPlayerLibrary/helpers/logs/fluentdLogger.ts","../src/videoPlayerLibrary/helpers/redux/actions/controller.actions.ts","../src/videoPlayerLibrary/helpers/redux/actions/videoData.actions.ts","../src/videoPlayerLibrary/helpers/getDetailsConfigs.ts"],"names":["require_next_config","__commonJSMin","exports","module","init_cjs_shims","npmPackage_exports","__export","isNpmPackage","init_npmPackage","__esmMin","createSlice","ControllerSliceState","controllerSlice","state","action","setPlay","setIsAutoPlay","setDuration","setCurrentTime","setMouseMoveTime","setQualityLevels","setQualityBitrates","setAutoQuality","setActiveElements","setIsLive","setIsLoading","setIsFullScreen","setBufferedTimeWidth","setFirstPlay","setHlsLivePosition","setActivePointerProgressBar","setDelayTurnOffControlbar","setManualQuality","setCanPlayVideo","setLock","setIsEnded","setTooltipTime","setShowMiniPlayer","setClearControllerSlice","setIsClickInnerCard","setLoadedFragmentsCount","controllerSlice_default","VideoDataSliceState","videoDataSlice","setInfo","setPlayerParams","setStreamLinkParams","setMarkers","setLiveId","setVodId","setOnlineViewers","setQuestion","setSelectedOptionId","setEmojis","setAlternative_Lives","setConfig","setIsLiveError","setEmojiList1","setEmojiList2","setGif","setErrorType","setMultiLives","setMultiAudio","setSelectedAudioId","setSubtitles","setSelectedSubtitle","setSubtitleText","setSubtitleColor","setIsComplexPortrait","setIsComplexDesktop","setVideoElementSizeInfo","setRecommendationList","setToken","setIsFetchDetails","setIsValidAddress","setPlayList","setVideoTimelines","setWebListConfig","setChartPoints","setIsReady","setClearVideoDataSlice","setShowScreen","setTrailer","videoDataSlice_default","PopOversSliceState","popoversSlice","setMarkersListPopover","setSettingPopover","setSharePopover","setFeedbackPopover","setMultiLivesPopovers","setPollPopover","setFullRatePopover","setAutoPlayPopover","setRecommendListPopover","setTagsPopover","setSpeedPopover","setCommentPopover","setPlayListPopover","setPlayListCardPopover","setPersonalMarkersPopover","setBookmarksPopover","setChatPopover","setChatEmojisPopover","setTrailerPopover","setLoginPopover","setChatRulesPopover","setQualityLevelsPopover","setClearPopoversSlice","popoversSlice_default","UserSliceState","userSlice","setUserId","setAuthToken","setRefreshToken","setUserInfo","setSelectedPersonalMarker","setUserSettings","setVideoSettings","setBookamrks","setBookmarkId","setPreFactor","setFactor","setShowContinuousePlayback","setClearUserSlice","userSlice_default","configureStore","store","getDefaultMiddleware","store_default","axios","Cookies","envs","getGetAggregatorApiLiveUrl","getSetAggregatorUrl","getRestApiLiveUrl","getRestApiUrl","getRestApiCommentUrl","getFluentdUrl","getEmojiUrl","getMagnix","getZarebinNasle3Url","getChatBaseUrl","uesrTracker","getChatAPIUrl","getLoginBaseUrl","getAccessToken","cookieKey","getCookieKey","cookieValue","apiCaller","url","method","data","headers","retryCount","maxRetryCount","errorMessage","retryPolicy","errorCallback","timeoutCount","axiosConfig","error","generateNewAccessToken","newHeader","newRetryCount","wait","newRetryDelay","newMaxRetryCount","i","anonConfigGenerator","newAnonConfig","updateAnonConfig","getAnonConfig","API","params","details","bookmarkId","quizType","quizId","roomId","videoType","content_id","urlData","conditions","v","id","commentId","user_id","getApiUrls","apiUrl","apiMarkerUrl","type","authToken","value","handleContinuousPlayback","videoSettings","currentTime","videoTag","duration","viewedVideo","handleVideoType","viewedVideosInLocalStorage","viewedVideos","video","handleApplyContinuousPlayback","dispatch","s","resolve","getRemainingTime","timestamp","timePassedInSeconds","rtf","compare","a","b","handlePageTitle","title","getUUID","uuid","uuidGenerator","char","val","customizeInterval","timeCount","cb","isTouchScreen","isTouchScreenLandscape","isFullScreen","isTouchScreenPortrait","handleIsComplexDesktop","isPortrait","isIOS","controllbarIconSize","addZeroBefore","n","secondsToHMS","seconds","h","m","secondsToPersianHMS","second","minute","item","efficientSecondsToPersianHMS","staticFormats","realFormat","addUuidToSrc","src","urlObject","urlSrc","handleSumVotes","question","sumVotes","option","livePoll","poll","checkParentTarget","event","target","unitization","viewers","appendQueryParamsToChunks","link","token","queryParams","hasQuestionMark","inViewPort","element","positionLeft","positionRight","handleIsComplexPortrait","isFullMobilePortrait","videoElementSizeInfo","handleRippleCircle","circle","ripple","handleRipple","size","clientX","clientY","utf8_to_b64","text","responseValidator","status","convertB64ToFile","dataUrl","filename","arr","mime","bstr","u8arr","parseJwt","base64Url","base64","jsonPayload","c","handlePopoverSizeInMiniPlayer","numbersToLetters","handleHasXTokenParamOrSendXToken","getWebEnvConfig","key","config","getDomainFromUrl","splitedUrl","clearRedux","weighted_random","options","weights","random","convertTimeToSeconds","time","imageFormatChecking","handlePageLoadTime","loadingDurationRef","pageLoadTime","highestResolutionSupported","resolutions","width","height","w","filteredResolutions","resolution","getSubtitleLabel","subtitleLanguage","label","getOS","macosPlatforms","windowsPlatforms","iosPlatforms","userAgent","platform","os","deleteQueryParamsInUrl","queryParam","handleRedirectCards","strToObj","flattenObject","input","keyName","result","newKey","findIntersectionBetweenTwoArray","arr1","arr2","trailer","gif","isComplexPortrait","isComplexDesktop","markers","subtitles","emojis","onlineViewers","alternative_Lives","recommendationList","multiAudio","isLiveError","isValidAddress","isFetchDetails","selectedOptionId","emojiList1","emojiList2","selectedSubtitle","playList","chartPoints","isReady","firstPlay","lock","canPlayVideo","qualityLevels","manualQuality","activeElements","isLoading","isLive","isEnded","isAutoPlay","play","autoQuality","showMiniPlayer","trailerPopover","settingPopover","markersListPopover","sharePopover","feedbackPopover","multiLivesPopover","fullRatePopover","autoPlayPopover","recommendListPopover","speedPopover","tagsPopover","personalMarkersPopover","bookmarksPopover","chatPopover","loginPopover","chatEmojisPopover","commentPopover","playListCardPopover","playListPopover","pollPopover","qualityLevelsPopover","isLogin","settings","avatar_url","name","phone_number","showContinuousePlayback","popover","container","activeElementsTime","showLoaderTime","notShowingLoaderTime","continuousePlaybackIntervalTime","footerPadding","progressBar","progressBarWidth","useDispatch","useSelector","useAppDispatch","useAppSelector","speedChangeLog","selectedSpeed","qualityChangeRequestLog","selectedQuality","catchUpLoadingLog","hlsLiveSyncPosition","backwardForwardLog","fullscreenLog","category","brightnessLog","source","volumeLog","lockLog","videoTimelineLog","start","end","autoQualityChangeLog","sourceQuality","targetQuality","diffQuality","pingpongLog","startTimer","qualityHistory","pausePlayLog","isPlay","initLog","loadingTime","waitingTime","bannerLoadingTime","firstChunkPlayingTime","timerRef","totalTime","memory","timing","loadingLog","waitingDuration","qualityLevel","loadingCounterRef","videoEntranceTime","videoTime","previousLoaderDiff","sendFluentLog","_data","handlePlayPause","handleChangeSoundVolume","volume","handleBackwardForward","forwardBackwardCount","handleFullScreen","handleLockOrientation","handleLock","handleVideoTimeline","currentTimeValue","movedTimeValue","videoTimelines","movedTime","handleVideoElementSizeInfo","detailAPI","detailsConfig","nonLiveDetailsConfig","handleDetailsConfig","userId","videoViewCount","contentId","getLiveAndVodDetails","d","detailSetter"],"mappings":"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","sourcesContent":["module.exports = {\r\n NEXT_PUBLIC_HAMRAHI_PLAYER_SERVICES_STATUS: process.env.NEXT_PUBLIC_HAMRAHI_PLAYER_SERVICES_STATUS\r\n ? process.env.NEXT_PUBLIC_HAMRAHI_PLAYER_SERVICES_STATUS\r\n : \"development\",\r\n status: \"development\",\r\n baseUrl: \"https://hamrahi.cloud\",\r\n driveRestAPI: \"https://hamrahi.cloud/api\",\r\n chatBaseUrl: \"wss://hamrahi.cloud/\",\r\n GA_MEASUREMENT_ID: \"G-5JZ2S6WR6D\",\r\n favIconUrl: \"https://hamrahi.cloud/drive/hamrahi.svg\",\r\n zarebinUserConfig: \"https://hamrahi.cloud/get-header\",\r\n trackerRestAPI: \"https://hamrahi.cloud\",\r\n aggregatorBaseUrl: \"https://aggregator.hamrahi.cloud/\",\r\n setAggregatorBaseUrl: \"https://setaggregator.hamrahi.cloud/\",\r\n fluentdUrl: \"https://hamrahi.cloud\",\r\n loginRedirectUrl: \"zarebinlite://login\",\r\n splusLoginRedirectUrl: \"soroush://lookup?key=SplusCampaign\",\r\n splusDownloadAppUrl: \"https://splus.ir/p/download\",\r\n cookieKey: \"HAMRAHI_CLOUD_AUTH_TOKEN\",\r\n whiteListTargets: \"abrehamrahi.ir,hamrahi.cloud,sthamrahi.ir\",\r\n whiteListGeneralUrl: \"hamrahi.cloud,abrehamrahi.ir,zarebin.ir,mohtava.cloud,eshterak.cloud\",\r\n sendXToken: \"true\",\r\n chatAPIBaseUrl: \"https://hamrahi.cloud/chatapi/\",\r\n zarebinNasle3Url: \"https://bw3.zarebin.ir\",\r\n assistant: false,\r\n initialLoadedFragmentCount: \"1\",\r\n filmAndSerialAllowedUsers: JSON.stringify([\r\n {\r\n user_id: 216\r\n },\r\n {\r\n user_id: 196\r\n }\r\n ]),\r\n keshtAllowedUsers: JSON.stringify([\r\n {\r\n user_id: 98735\r\n }\r\n ]),\r\n keshtBasePath: \"/keshavarzi\",\r\n keshtAppName: \"کشت قراردادی\",\r\n filmAndSerialBasePath: \"/film-serial\",\r\n hamrahiCloudLanding: \"https://hamrahi.cloud/\",\r\n commentPanel: \"https://hamrahi.cloud/comments/\"\r\n};\r\n","export const isNpmPackage = false;\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { IControllerSlice } from \"../../interfaces/interfaces\";\r\n\r\nconst ControllerSliceState: IControllerSlice = {\r\n play: false,\r\n isAutoPlay: true,\r\n duration: 0,\r\n currentTime: 0,\r\n mouseMoveTime: 0,\r\n qualityLevels: [],\r\n qualityBitrates: [],\r\n manualQuality: undefined,\r\n autoQuality: undefined,\r\n activeElements: true,\r\n isLive: false,\r\n isLoading: false,\r\n isFullScreen: false,\r\n bufferedTimeWidth: 0,\r\n firstPlay: true,\r\n hlsLiveSyncPosition: 0,\r\n activePointerProgressBar: false,\r\n delayTurnOffControlbar: false,\r\n canPlayVideo: false,\r\n lock: false,\r\n isEnded: false,\r\n tooltipTime: 0,\r\n showMiniPlayer: false,\r\n isClickInnerCard: false,\r\n loadedFragmentsCount: []\r\n};\r\n\r\nexport const controllerSlice = createSlice({\r\n name: \"controller\",\r\n initialState: ControllerSliceState,\r\n reducers: {\r\n setPlay: (state, action: PayloadAction<boolean>) => {\r\n state.play = action.payload;\r\n },\r\n setIsAutoPlay: (state, action: PayloadAction<boolean>) => {\r\n state.isAutoPlay = action.payload;\r\n },\r\n setDuration: (state, action: PayloadAction<number>) => {\r\n state.duration = action.payload;\r\n },\r\n setCurrentTime: (state, action: PayloadAction<number>) => {\r\n state.currentTime = action.payload;\r\n },\r\n setMouseMoveTime: (state, action: PayloadAction<number>) => {\r\n state.mouseMoveTime = action.payload;\r\n },\r\n setManualQuality: (state, action: PayloadAction<number | undefined>) => {\r\n state.manualQuality = action.payload;\r\n },\r\n setAutoQuality: (state, action: PayloadAction<number | undefined>) => {\r\n state.autoQuality = action.payload;\r\n },\r\n setQualityLevels: (state, action: PayloadAction<any[]>) => {\r\n state.qualityLevels = action.payload;\r\n },\r\n setQualityBitrates: (state, action: PayloadAction<string[]>) => {\r\n state.qualityBitrates = action.payload;\r\n },\r\n setActiveElements: (state, action: PayloadAction<boolean>) => {\r\n state.activeElements = action.payload;\r\n },\r\n setIsLive: (state, action: PayloadAction<boolean>) => {\r\n state.isLive = action.payload;\r\n },\r\n setIsLoading: (state, action: PayloadAction<boolean>) => {\r\n state.isLoading = action.payload;\r\n },\r\n setIsFullScreen: (state, action: PayloadAction<boolean>) => {\r\n state.isFullScreen = action.payload;\r\n },\r\n setBufferedTimeWidth: (state, action: PayloadAction<number>) => {\r\n state.bufferedTimeWidth = action.payload;\r\n },\r\n setFirstPlay: (state, action: PayloadAction<boolean>) => {\r\n state.firstPlay = action.payload;\r\n },\r\n setHlsLivePosition: (state, action: PayloadAction<any>) => {\r\n state.hlsLiveSyncPosition = action.payload;\r\n },\r\n setActivePointerProgressBar: (state, action: PayloadAction<boolean>) => {\r\n state.activePointerProgressBar = action.payload;\r\n },\r\n setDelayTurnOffControlbar: (state, action: PayloadAction<boolean>) => {\r\n state.delayTurnOffControlbar = action.payload;\r\n },\r\n setCanPlayVideo: (state, action: PayloadAction<boolean>) => {\r\n state.canPlayVideo = action.payload;\r\n },\r\n setLock: (state, action: PayloadAction<boolean>) => {\r\n state.lock = action.payload;\r\n },\r\n setIsEnded: (state, action: PayloadAction<boolean>) => {\r\n state.isEnded = action.payload;\r\n },\r\n setTooltipTime: (state, action: PayloadAction<number>) => {\r\n state.tooltipTime = action.payload;\r\n },\r\n setShowMiniPlayer: (state, action: PayloadAction<boolean | undefined>) => {\r\n state.showMiniPlayer = action.payload;\r\n },\r\n setIsClickInnerCard: (state, action: PayloadAction<boolean>) => {\r\n state.isClickInnerCard = action.payload;\r\n },\r\n setLoadedFragmentsCount: (state, action: PayloadAction<number[]>) => {\r\n state.loadedFragmentsCount = action.payload;\r\n },\r\n setClearControllerSlice: () => {\r\n return ControllerSliceState;\r\n }\r\n }\r\n});\r\n\r\nexport const {\r\n setPlay,\r\n setIsAutoPlay,\r\n setDuration,\r\n setCurrentTime,\r\n setMouseMoveTime,\r\n setQualityLevels,\r\n setQualityBitrates,\r\n setAutoQuality,\r\n setActiveElements,\r\n setIsLive,\r\n setIsLoading,\r\n setIsFullScreen,\r\n setBufferedTimeWidth,\r\n setFirstPlay,\r\n setHlsLivePosition,\r\n setActivePointerProgressBar,\r\n setDelayTurnOffControlbar,\r\n setManualQuality,\r\n setCanPlayVideo,\r\n setLock,\r\n setIsEnded,\r\n setTooltipTime,\r\n setShowMiniPlayer,\r\n setClearControllerSlice,\r\n setIsClickInnerCard,\r\n setLoadedFragmentsCount\r\n} = controllerSlice.actions;\r\nexport default controllerSlice.reducer;\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { IMarker, IVideoElementSizeInfo, IPlayList, IWebListConfig, IDetails, IVideoDataSlice, ISubtitleColor } from \"../../interfaces/interfaces\";\r\n\r\nexport const VideoDataSliceState: IVideoDataSlice = {\r\n details: {\r\n stream_link: \"\",\r\n type: \"\",\r\n banner: \"\",\r\n id: undefined,\r\n title: undefined,\r\n description: undefined,\r\n viewers: undefined,\r\n live_viewers: undefined,\r\n like: undefined,\r\n start_time: undefined,\r\n tag: undefined,\r\n subtitles: undefined,\r\n vtt: undefined,\r\n vtt_mobile: undefined,\r\n preview_start: null,\r\n preview_end: null,\r\n download_links: [],\r\n pg_state: null,\r\n user_id: null,\r\n online_viewer_threshold: 0,\r\n content_id: undefined,\r\n content_type: null,\r\n imdb_rate: null,\r\n release_year: null,\r\n duration: 0\r\n },\r\n params: {\r\n src: \"\",\r\n type: \"\",\r\n id: \"\",\r\n fullscreen: \"\",\r\n autoplay: \"\",\r\n portrait: \"\",\r\n t: \"\",\r\n h: \"\",\r\n isGeneral: \"\",\r\n raw: \"\",\r\n theme: \"dark\",\r\n provider: \"unknown\",\r\n fullrate: \"false\",\r\n snapshot: \"false\",\r\n cover: \"\",\r\n user_id: \"\",\r\n user_ids: \"\",\r\n preview: \"false\",\r\n isAuth: \"false\",\r\n authentication: \"true\",\r\n site: \"\",\r\n \"e-url\": \"\",\r\n \"e-cover\": \"\",\r\n width: \"\",\r\n height: \"\",\r\n chart: \"false\",\r\n onFinished: undefined,\r\n showModuleTitle: \"false\",\r\n scrollElementId: undefined,\r\n onSnapshot: undefined,\r\n isMarkersChange: false,\r\n quiz: \"false\",\r\n featureSet: undefined,\r\n uuid: \"\",\r\n homeButtonClickFlag: undefined\r\n },\r\n streamLinkParams: \"\",\r\n markers: [],\r\n liveId: undefined,\r\n vodId: undefined,\r\n onlineViewers: undefined,\r\n question: undefined,\r\n options: undefined,\r\n selectedOptionId: null,\r\n emojis: undefined,\r\n alternative_Lives: [],\r\n config: undefined,\r\n isLiveError: true,\r\n emojiList1: [],\r\n emojiList2: [],\r\n gif: null,\r\n multiLives: [],\r\n multiAudio: [],\r\n selectedAudioId: 0,\r\n subtitles: [],\r\n selectedSubtitle: undefined,\r\n subtitleText: undefined,\r\n subtitleColor: undefined,\r\n isComplexPortrait: undefined,\r\n isComplexDesktop: false,\r\n videoElementSizeInfo: {\r\n bottom: 0,\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n width: 0,\r\n height: 0\r\n },\r\n recommendationList: undefined,\r\n token: \"\",\r\n isFetchDetails: false,\r\n isValidAddress: false,\r\n playList: undefined,\r\n videoTimelines: [],\r\n webListConfig: [],\r\n chartPoints: [],\r\n isReady: false,\r\n showScreen: false,\r\n trailer: [],\r\n hlsLiveSyncPosition: 0\r\n};\r\n\r\nexport const videoDataSlice = createSlice({\r\n name: \"videoData\",\r\n initialState: VideoDataSliceState,\r\n reducers: {\r\n setInfo: (state, action: PayloadAction<IDetails>) => {\r\n state.details = action.payload;\r\n },\r\n setPlayerParams: (state, action: PayloadAction<any>) => {\r\n state.params = action.payload;\r\n },\r\n setStreamLinkParams: (state, action: PayloadAction<string>) => {\r\n state.streamLinkParams = action.payload;\r\n },\r\n setMarkers: (state, action: PayloadAction<IMarker[]>) => {\r\n state.markers = action.payload;\r\n },\r\n setLiveId: (state, action: PayloadAction<number>) => {\r\n state.liveId = action.payload;\r\n },\r\n setVodId: (state, action: PayloadAction<number>) => {\r\n state.liveId = action.payload;\r\n },\r\n setOnlineViewers: (state, action: PayloadAction<any>) => {\r\n state.onlineViewers = action.payload;\r\n },\r\n setQuestion: (state, action: PayloadAction<any>) => {\r\n state.question = action.payload;\r\n },\r\n setSelectedOptionId: (state, action: PayloadAction<number | null>) => {\r\n state.selectedOptionId = action.payload;\r\n },\r\n setEmojis: (state, action: PayloadAction<any>) => {\r\n state.emojis = action.payload;\r\n },\r\n setAlternative_Lives: (state, action: PayloadAction<number[]>) => {\r\n state.alternative_Lives = action.payload;\r\n },\r\n setConfig: (state, action: PayloadAction<any>) => {\r\n state.config = action.payload;\r\n },\r\n setIsLiveError: (state, action: PayloadAction<boolean>) => {\r\n state.isLiveError = action.payload;\r\n },\r\n setEmojiList1: (state, action: PayloadAction<string[]>) => {\r\n state.emojiList1 = action.payload;\r\n },\r\n setEmojiList2: (state, action: PayloadAction<string[]>) => {\r\n state.emojiList2 = action.payload;\r\n },\r\n setGif: (state, action: PayloadAction<string | null>) => {\r\n state.gif = action.payload;\r\n },\r\n setErrorType: (state, action: PayloadAction<string | undefined>) => {\r\n state.errorType = action.payload;\r\n },\r\n setMultiLives: (state, action: PayloadAction<any[]>) => {\r\n state.multiLives = action.payload;\r\n },\r\n setMultiAudio: (state, action: PayloadAction<any>) => {\r\n state.multiAudio = JSON.parse(JSON.stringify(action.payload));\r\n },\r\n setSelectedAudioId: (state, action: PayloadAction<number>) => {\r\n state.selectedAudioId = action.payload;\r\n },\r\n setSubtitles: (state, action: PayloadAction<any>) => {\r\n state.subtitles = action.payload;\r\n },\r\n setSelectedSubtitle: (state, action: PayloadAction<any>) => {\r\n state.selectedSubtitle = action.payload;\r\n },\r\n setSubtitleText: (state, action: PayloadAction<string>) => {\r\n state.subtitleText = action.payload;\r\n },\r\n setSubtitleColor: (state, action: PayloadAction<ISubtitleColor>) => {\r\n state.subtitleColor = action.payload;\r\n },\r\n setIsComplexPortrait: (state, action: PayloadAction<boolean>) => {\r\n state.isComplexPortrait = action.payload;\r\n },\r\n setIsComplexDesktop: (state, action: PayloadAction<boolean>) => {\r\n state.isComplexDesktop = action.payload;\r\n },\r\n setVideoElementSizeInfo: (state, action: PayloadAction<IVideoElementSizeInfo>) => {\r\n state.videoElementSizeInfo = action.payload;\r\n },\r\n setRecommendationList: (state, action: PayloadAction<any>) => {\r\n state.recommendationList = action.payload;\r\n },\r\n setToken: (state, action: PayloadAction<string>) => {\r\n state.token = action.payload;\r\n },\r\n setIsFetchDetails: (state, action: PayloadAction<boolean>) => {\r\n state.isFetchDetails = action.payload;\r\n },\r\n setIsValidAddress: (state, action: PayloadAction<boolean>) => {\r\n state.isValidAddress = action.payload;\r\n },\r\n setPlayList: (state, action: PayloadAction<IPlayList[]>) => {\r\n state.playList = action.payload;\r\n },\r\n setVideoTimelines: (state, action: PayloadAction<number[]>) => {\r\n state.videoTimelines = action.payload;\r\n },\r\n setWebListConfig: (state, action: PayloadAction<IWebListConfig[]>) => {\r\n state.webListConfig = action.payload;\r\n },\r\n setChartPoints: (state, action: PayloadAction<number[]>) => {\r\n state.chartPoints = action.payload;\r\n },\r\n setIsReady: (state, action: PayloadAction<boolean>) => {\r\n state.isReady = action.payload;\r\n },\r\n setShowScreen: (state, action: PayloadAction<boolean>) => {\r\n state.showScreen = action.payload;\r\n },\r\n setTrailer: (state, action: PayloadAction<any[]>) => {\r\n state.trailer = action.payload;\r\n },\r\n setClearVideoDataSlice: (state) => {\r\n return (state = VideoDataSliceState);\r\n }\r\n }\r\n});\r\n\r\nexport const {\r\n setInfo,\r\n setPlayerParams,\r\n setStreamLinkParams,\r\n setMarkers,\r\n setLiveId,\r\n setVodId,\r\n setOnlineViewers,\r\n setQuestion,\r\n setSelectedOptionId,\r\n setEmojis,\r\n setAlternative_Lives,\r\n setConfig,\r\n setIsLiveError,\r\n setEmojiList1,\r\n setEmojiList2,\r\n setGif,\r\n setErrorType,\r\n setMultiLives,\r\n setMultiAudio,\r\n setSelectedAudioId,\r\n setSubtitles,\r\n setSelectedSubtitle,\r\n setSubtitleText,\r\n setSubtitleColor,\r\n setIsComplexPortrait,\r\n setIsComplexDesktop,\r\n setVideoElementSizeInfo,\r\n setRecommendationList,\r\n setToken,\r\n setIsFetchDetails,\r\n setIsValidAddress,\r\n setPlayList,\r\n setVideoTimelines,\r\n setWebListConfig,\r\n setChartPoints,\r\n setIsReady,\r\n setClearVideoDataSlice,\r\n setShowScreen,\r\n setTrailer\r\n} = videoDataSlice.actions;\r\nexport default videoDataSlice.reducer;\r\n","export const enum zIndex {\r\n vttDisable = -2,\r\n quizPlayButton = 1,\r\n backwardForwardInActive,\r\n quizHeader,\r\n comments,\r\n videoPlayer,\r\n snapshot,\r\n mainIcons,\r\n emoji,\r\n footer,\r\n mainIconInComplexPortrait,\r\n poll,\r\n liveStatus,\r\n download,\r\n lockIcon,\r\n backwardForwardActive,\r\n fullrate,\r\n autoPlay,\r\n vtt,\r\n tagsFilterPopover,\r\n markers,\r\n videoPlayerInFullScreen = 1000000,\r\n portraitHeader,\r\n emojiPicker,\r\n popoverBlurBackground,\r\n popoverContent,\r\n maxPopover,\r\n videoPlayerInPictureInPicture,\r\n trailer,\r\n commentAnswer\r\n}\r\n\r\nexport const enum ContentTypes {\r\n Vod,\r\n PlayList\r\n}\r\n\r\nexport const enum ContentTypesString {\r\n Vod = \"vod\",\r\n PlayList = \"playlist\"\r\n}\r\n\r\nexport const enum VideoNumberTypeEnum {\r\n Archive = 1,\r\n Vod = 2,\r\n Clip = 3,\r\n FutureLive = 4,\r\n PlayList\r\n}\r\n\r\nexport const enum QuizTypes {\r\n Elimination = 1,\r\n Points = 2\r\n}\r\n\r\nexport const enum UserQuizStatus {\r\n participant = \"participant\",\r\n viewer = \"viewer\",\r\n loser = \"loser\"\r\n}\r\n\r\nexport const enum QuestionStatus {\r\n ANSWER = 1,\r\n UNANSWER = 2,\r\n INACTIVE = 3,\r\n DONE = 4,\r\n READY\r\n}\r\n\r\nexport const enum QuizLoginSteps {\r\n mobileNumber = \"mobileNumber\",\r\n otp = \"otp\"\r\n}\r\n\r\nexport const enum SettingSections {\r\n main = \"main\",\r\n qualityLevels = \"qualityLevels\",\r\n subtitlesSettingMenu = \"subtitlesSettingMenu\",\r\n subtitles = \"subtitles\",\r\n subtitlesBackgroundColors = \"subtitlesBackgroundColors\",\r\n subtitlesTextColors = \"subtitlesTextColors\",\r\n multiAudio = \"multiAudio\",\r\n speed = \"speed\"\r\n}\r\n\r\nexport const enum SubtitleColors {\r\n black = \"سیاه\",\r\n white = \"سفید\",\r\n yellow = \"زرد\",\r\n blue = \"آبی\",\r\n green = \"سبز\"\r\n}\r\n\r\nexport const enum ConditionName {\r\n showHeader = \"showHeader\",\r\n showMain = \"showMain\",\r\n showFooter = \"showFooter\",\r\n showGif = \"showGif\",\r\n showTouchVolumeBrightness = \"showTouchVolumeBrightness\",\r\n showBackwardForward = \"showBackwardForward\",\r\n showLiveStatus = \"showLiveStatus\",\r\n showLiveStatusInComplexPortrait = \"showLiveStatusInComplexPortrait\",\r\n showElapsedTime = \"showElapsedTime\",\r\n showPoll = \"showPoll\",\r\n showFullRate = \"showFullRate\",\r\n showTitle = \"showTitle\",\r\n showSnapShot = \"showSnapShot\",\r\n showInstagramEmoji = \"showInstagramEmoji\",\r\n showOnlineViewers = \"showOnlineViewers\",\r\n showMultiLivePopover = \"showMultiLivePopover\",\r\n showMarkerListPopover = \"showMarkerListPopover\",\r\n showFullRatePopover = \"showFullRatePopover\",\r\n showAutoPlayPopover = \"showAutoPlayPopover\",\r\n showRecommendListPopover = \"showRecommendListPopover\",\r\n showSettingPopover = \"showSettingPopover\",\r\n showSpeedPopover = \"showSpeedPopover\",\r\n showQualityLevelsPopover = \"showQualityLevelsPopover\",\r\n showTagsPopover = \"showTagsPopover\",\r\n showPersonalMarkerPopover = \"showPersonalMarkerPopover\",\r\n showBookmarksPopover = \"showBookmarksPopover\",\r\n showChatPopover = \"showChatPopover\",\r\n showFeedbackPopover = \"showFeedbackPopover\",\r\n showTrailerPopover = \"showTrailerPopover\",\r\n showLoginPopover = \"showLoginPopover\",\r\n showAutoPlayListTouchIcon = \"showAutoPlayListTouchIcon\",\r\n showMultiLive = \"showMultiLive\",\r\n showBigReplayIcon = \"showBigReplayIcon\",\r\n showReplayIcon = \"showReplayIcon\",\r\n showPlayNextIcon = \"showPlayNextIcon\",\r\n showAutoPlayToggleIcon = \"showAutoPlayToggleIcon\",\r\n showSettingIcon = \"showSettingIcon\",\r\n showLikeDislike = \"showLikeDislike\",\r\n showBanner = \"showBanner\",\r\n showBannerStaticFiles = \"showBannerStaticFiles\",\r\n showSpeedIcon = \"showSpeedIcon\",\r\n showShareInSetting = \"showShareInSetting\",\r\n showPlayListIcon = \"showPlayListIcon\",\r\n showPlayListTabTouchscreen = \"showPlayListTabTouchscreen\",\r\n showCommentComponent = \"showCommentComponent\",\r\n showModuleTitle = \"showModuleTitle\",\r\n showProgressbar = \"showProgressbar\",\r\n showAgeClassification = \"showAgeClassification\",\r\n showChat = \"showChat\",\r\n showMiniPlayer = \"showMiniPlayer\",\r\n showPictureInPicture = \"showPictureInPicture\",\r\n showPersonalMarker = \"showPersonalMarker\",\r\n showFeedback = \"showFeedback\",\r\n showTabNavigator = \"showTabNavigator\",\r\n showBookmark = \"showBookmark\",\r\n showVideoUploadTime = \"showVideoUploadTime\",\r\n showVideoViewers = \"showVideoViewers\",\r\n showRecommendationList = \"showRecommendationList\",\r\n showPlaylist = \"showPlaylist\",\r\n show_Chat = \"show_Chat\",\r\n showEmojiComplexPortrait = \"showEmojiComplexPortrait\",\r\n hidePopovers = \"hidePopovers\",\r\n isRaw = \"isRaw\",\r\n isParamsPortrait = \"isParamsPortrait\",\r\n isComplexPortrait = \"isComplexPortrait\",\r\n isComplexDarkModePortrait = \"isComplexDarkModePortrait\",\r\n isComplexDesktop = \"isComplexDesktop\",\r\n isLandscape = \"isLandscape\",\r\n isTouchScreen = \"isTouchScreen\",\r\n isTouchScreenPortrait = \"isTouchScreenPortrait\",\r\n isTouchScreenLandscape = \"isTouchScreenLandscape\",\r\n isActiveElements = \"isActiveElements\",\r\n isPlay = \"isPlay\",\r\n isFirstPlay = \"isFirstPlay\",\r\n isLock = \"isLock\",\r\n isIOS = \"isIOS\",\r\n isIOSLive = \"isIOSLive\",\r\n isLoading = \"isLoading\",\r\n isLive = \"isLive\",\r\n isLiveParam = \"isLiveParam\",\r\n isLiveError = \"isLiveError\",\r\n isDarkMode = \"isDarkMode\",\r\n isStaticFormat = \"isStaticFormat\",\r\n isEnded = \"isEnded\",\r\n isAutoPlay = \"isAutoPlay\",\r\n isFullScreen = \"isFullScreen\",\r\n isGeneral = \"isGeneral\",\r\n isValidAddress = \"isValidAddress\",\r\n isFetchDetails = \"isFetchDetails\",\r\n isAutoQuality = \"isAutoQuality\",\r\n isAuth = \"isAuth\",\r\n isChildClassification = \"isChildClassification\",\r\n isTeenagerClassification = \"isTeenagerClassification\",\r\n isYoungClassification = \"isYoungClassification\",\r\n isSelectedSubtitle = \"isSelectedSubtitle\",\r\n isZarebinSite = \"isZarebinSite\",\r\n isUserIdsParamsEqualAll = \"isUserIdsParamsEqualAll\",\r\n isMiniPlayer = \"isMiniPlayer\",\r\n isFullMobilePortrait = \"isFullMobilePortrait\",\r\n isLogin = \"isLogin\",\r\n isSpinSettingsIcon = \"isSpinSettingsIcon\",\r\n isVttFitHeight = \"isVttFitHeight\",\r\n isBookmark = \"isBookmark\",\r\n isPressKeySpace = \"isPressKeySpace\",\r\n isPressKeyK = \"isPressKeyK\",\r\n isPressKeyI = \"isPressKeyI\",\r\n isPressKeyF = \"isPressKeyF\",\r\n isPressKeyS = \"isPressKeyS\",\r\n isPressKeyC = \"isPressKeyC\",\r\n isPressKeyArrowRight = \"isPressKeyArrowRight\",\r\n isPressKeyArrowLeft = \"isPressKeyArrowLeft\",\r\n isPressKeyL = \"isPressKeyL\",\r\n isPressKeyN = \"isPressKeyN\",\r\n isPressKeyQ = \"isPressKeyQ\",\r\n isPressKeyE = \"isPressKeyE\",\r\n isPressKeyM = \"isPressKeyM\",\r\n isSendTimelineLog = \"isSendTimelineLog\",\r\n isReady = \"isReady\",\r\n isSplusEnvironment = \"isSplusEnvironment\",\r\n isProduction = \"isProduction\",\r\n isPaymentSuccess = \"isPaymentSuccess\",\r\n isPopoverOpen = \"isPopoverOpen\",\r\n isBeforeRequest_Playlist_Chat_Recommendation = \"isBeforeRequest_Playlist_Chat_Recommendation\",\r\n isBeforeRequestComments = \"isBeforeRequestComments\",\r\n isVisibilityChange = \"isVisibilityChange\",\r\n backgroundColorInLightMode = \"backgroundColorInLightMode\",\r\n heightScreen = \"HeightScreen\",\r\n playByClickPoster = \"playByClickPoster\",\r\n hasMarkers = \"hasMarkers\",\r\n hasTitle = \"hasTitle\",\r\n hasDescription = \"hasDescription\",\r\n hasClipboard = \"hasClipboard\",\r\n hasTags = \"hasTags\",\r\n hasRecommendationList = \"hasRecommendationList\",\r\n hasPreviewTime = \"hasPreviewTime\",\r\n hasEmojis = \"hasEmojis\",\r\n hasEmojiList1Or2 = \"hasEmojiList1Or2\",\r\n hasBanner = \"hasBanner\",\r\n hasMultiAudio = \"hasMultiAudio\",\r\n hasDownloadLinks = \"hasDownloadLinks\",\r\n hasStreamLink = \"hasStreamLink\",\r\n hasPoll = \"hasPoll\",\r\n hasUserIds = \"hasUserIds\",\r\n hasAlternativeLives = \"hasAlternativeLives\",\r\n hasManualQuality = \"hasManualQuality\",\r\n hasSound = \"hasSound\",\r\n hasVtt = \"hasVtt\",\r\n hasAutoPlay = \"hasAutoPlay\",\r\n hasPlayList = \"hasPlayList\",\r\n hasXToken = \"hasXToken\",\r\n hasMovieDetails = \"hasMovieDetails\",\r\n hasMovieContentType = \"hasMovieContentType\",\r\n hasMovieReleaseYear = \"hasMovieReleaseYear\",\r\n hasSubtitle = \"hasSubtitle\",\r\n hasIMDB = \"hasIMDB\",\r\n hasSelectedTags = \"hasSelectedTags\",\r\n hasInputTagSearch = \"hasInputTagSearch\",\r\n hasFullScreenParams = \"hasFullScreenParams\",\r\n hasPreviewParams = \"hasPreviewParams\",\r\n hasChart = \"hasChart\",\r\n hasChartPoints = \"hasChartPoints\",\r\n hasOnFinishedParams = \"hasOnFinishedParams\",\r\n hasOnSnapshotParams = \"hasOnSnapshotParams\",\r\n hasXTokenParamOrSendXToken = \"hasXTokenParamOrSendXToken\",\r\n hasUserAvatar = \"hasUserAvatar\",\r\n hasUserName = \"hasUserName\",\r\n hasUserPhoneNumber = \"hasUserPhoneNumber\",\r\n hasScrollElementId = \"hasScrollElementId\",\r\n hasSportProvider = \"hasSportProvider\",\r\n hasSidebar = \"hasSidebar\",\r\n hasTrailer = \"hasTrailer\",\r\n hasHParam = \"hasHParam\",\r\n hasQuizParams = \"hasQuizParams\",\r\n hasPreviewStart = \"hasPreviewStart\",\r\n hasPreviewEnd = \"hasPreviewEnd\",\r\n hasSubtitles = \"hasSubtitles\",\r\n hasHomeButtonClickFlag = \"hasHomeButtonClickFlag\",\r\n hasContinuousPlayback = \"hasContinuousPlayback\",\r\n hasPermittedLoadedFragment = \"hasPermittedLoadedFragment\",\r\n hasAllParams = \"hasAllParams\",\r\n hasDefaultMessages = \"hasDefaultMessages\",\r\n hasPinMessage = \"hasPinMessage\",\r\n hasCommentDefaultMessages = \"hasCommentDefaultMessages\",\r\n getRecommendationList = \"getRecommendationList\",\r\n getLiveDetailsInIntervals = \"getLiveDetailsInIntervals\",\r\n getDetails = \"getDetails\",\r\n getMarkers = \"getMarkers\",\r\n getPlayList = \"getPlayList\",\r\n getUserSetting = \"getUserSetting\",\r\n getVideoMetaData = \"getVideoMetaData\",\r\n getUserProfile = \"getUserProfile\",\r\n firstGetDataIntervalAPI = \"firstGetDataIntervalAPI\",\r\n footerPaddingZero = \"footerPaddingZero\",\r\n manaulPostAPI = \"manaulPostAPI\",\r\n canAccessVideo = \"canAccessVideo\",\r\n canAddComment = \"canAddComment\",\r\n canShowSubmittedComment = \"canShowSubmittedComment\",\r\n canPlayVideo = \"canPlayVideo\",\r\n chatEnabled = \"chatEnabled\",\r\n trackerEnabled = \"trackerEnabled\",\r\n filterLastGif = \"filterLastGif\",\r\n instagramEmojiAnimation = \"instagramEmojiAnimation\",\r\n handleOverflowHidden = \"handleOverflowHidden\",\r\n thresholdOnlineViewers = \"thresholdOnlineViewers\",\r\n\r\n // *** Quiz Conditions Enums ***\r\n showQuizPopover = \"showQuizPopover\",\r\n showUserStatus = \"showUserStatus\",\r\n isQuizStatusEqual1 = \"isQuizStatusEqual1\",\r\n isQuizStatusEqual2 = \"isQuizStatusEqual2\",\r\n isQuizStatusEqual4 = \"isQuizStatusEqual4\",\r\n isQuizEnd = \"isQuizEnd\",\r\n isPointsQuiz = \"isPointsQuiz\",\r\n hasQuiz = \"hasQuiz\",\r\n hasQuizQuestion = \"hasQuizQuestion\",\r\n hasChances = \"hasChances\",\r\n sendUserTrackerRequest = \"sendUserTrackerRequest\"\r\n}\r\n\r\nexport const enum ChatType {\r\n public,\r\n private,\r\n auto\r\n}\r\n","import { footerPadding } from \"./environment\";\r\nimport store from \"./redux/store\";\r\n\r\nexport const LiveDelay = 6; // --> Delay between manifest live point and live point of user's view (for better loading and buffering)\r\nexport const LiveWindow = 12; // --> distance between live point and cursor to determine live red button\r\n\r\nexport const videoTag = () => document.getElementById(\"player-tag\") as HTMLVideoElement;\r\nexport const multiLiveVideo = () => document.getElementById(`multilive-player`) as HTMLVideoElement;\r\nexport const progressBar = () => document.getElementById(\"time-progress-bar\") as any;\r\nexport const progressBarWidth = () => store.getState().videoData.videoElementSizeInfo.width - 2 * footerPadding();\r\n\r\nexport const seenPoll = () => JSON.parse(localStorage.getItem(\"seen-poll\")!);\r\nexport const livePoll = () => JSON.parse(localStorage.getItem(\"live-poll\")!);\r\nexport const popoverHeader = () => document.getElementById(\"popover-header\");\r\n\r\nexport const otpType = \"LOGIN_ANDROID_4\";\r\n","import { conditions } from \"./conditions/conditions\";\r\nimport { ConditionName } from \"./interfaces/enums\";\r\nimport { IEnvironment } from \"./interfaces/interfaces\";\r\n\r\nexport const ENVIRONMENT: IEnvironment = {\r\n reduxDevTool: true\r\n};\r\n\r\nexport const activeElementsTime = 3000;\r\n\r\nexport const showLoaderTime = 5000;\r\nexport const notShowingLoaderTime = 10000;\r\n\r\nexport const livePlayRetryDuration = 3000;\r\n\r\nexport const RetryCountGeneralDataFetch = 3;\r\n\r\nexport const RetryTimeDelayGeneralDataFetch = 5;\r\n\r\nexport const durationWatched = 10;\r\n\r\nexport const continuousePlaybackIntervalTime = 60000;\r\n\r\nexport const footerPadding = () => {\r\n if (conditions(ConditionName.footerPaddingZero)) return 0;\r\n else return 64;\r\n};\r\n\r\nexport const featureToggle = \"ft\";\r\n\r\nexport const sidebarWidth = 357;\r\n","import { isIOS, isFullMobilePortrait, isTouchScreen, isTouchScreenLandscape, isTouchScreenPortrait, staticFormats } from \"../helpers\";\r\nimport { ConditionName } from \"../interfaces/enums\";\r\nimport store from \"../redux/store\";\r\n\r\nexport const conditions = (type: string) => {\r\n const {\r\n trailer,\r\n params,\r\n details,\r\n gif,\r\n isComplexPortrait,\r\n isComplexDesktop,\r\n markers,\r\n subtitles,\r\n question,\r\n emojis,\r\n onlineViewers,\r\n alternative_Lives,\r\n recommendationList,\r\n multiAudio,\r\n isLiveError,\r\n isValidAddress,\r\n isFetchDetails,\r\n token,\r\n selectedOptionId,\r\n emojiList1,\r\n emojiList2,\r\n selectedSubtitle,\r\n playList,\r\n videoElementSizeInfo,\r\n chartPoints,\r\n isReady\r\n } = store.getState().videoData;\r\n const {\r\n firstPlay,\r\n lock,\r\n canPlayVideo,\r\n qualityLevels,\r\n manualQuality,\r\n activeElements,\r\n isLoading,\r\n isLive,\r\n isEnded,\r\n isAutoPlay,\r\n play,\r\n isFullScreen,\r\n autoQuality,\r\n showMiniPlayer,\r\n } = store.getState().controller;\r\n const {\r\n trailerPopover,\r\n settingPopover,\r\n markersListPopover,\r\n sharePopover,\r\n feedbackPopover,\r\n multiLivesPopover,\r\n fullRatePopover,\r\n autoPlayPopover,\r\n recommendListPopover,\r\n speedPopover,\r\n tagsPopover,\r\n personalMarkersPopover,\r\n bookmarksPopover,\r\n chatPopover,\r\n loginPopover,\r\n chatEmojisPopover,\r\n commentPopover,\r\n playListCardPopover,\r\n playListPopover,\r\n pollPopover,\r\n qualityLevelsPopover\r\n } = store.getState().popovers;\r\n const { isLogin, settings, bookmarkId, avatar_url, name, phone_number, videoSettings, showContinuousePlayback } = store.getState().user;\r\n\r\n switch (type) {\r\n case ConditionName.showHeader:\r\n return !firstPlay && canPlayVideo && !autoPlayPopover;\r\n case ConditionName.showMain:\r\n return !lock || firstPlay;\r\n case ConditionName.showFooter:\r\n return !firstPlay && canPlayVideo;\r\n case ConditionName.showGif:\r\n return !firstPlay && params.type === \"live\" && settings.poll_emoji && gif;\r\n case ConditionName.showElapsedTime:\r\n return params.type !== \"live\" || staticFormats(params.type!);\r\n case ConditionName.showLiveStatus:\r\n return params.type === \"live\" && !firstPlay && !lock && ((isIOS() && isTouchScreenPortrait()) || !isIOS()) && !isEnded;\r\n case ConditionName.showLiveStatusInComplexPortrait:\r\n return params.type === \"live\" && !isEnded;\r\n case ConditionName.showTouchVolumeBrightness:\r\n return !firstPlay && isTouchScreenLandscape() && !lock && !isEnded && params.raw !== \"true\";\r\n case ConditionName.showBackwardForward:\r\n return !firstPlay && isTouchScreen() && !lock && params.raw !== \"true\" && (!isEnded || (isEnded && params.type !== \"live\"));\r\n case ConditionName.showPoll:\r\n return (\r\n settings.poll_emoji &&\r\n !firstPlay &&\r\n question &&\r\n question.active &&\r\n !lock &&\r\n params.type === \"live\" &&\r\n ((isIOS() && isTouchScreenPortrait()) || !isIOS())\r\n );\r\n case ConditionName.showFullRate:\r\n return !staticFormats(params.type!) && !firstPlay && params.fullrate === \"true\" && fullRatePopover !== undefined;\r\n case ConditionName.showTitle:\r\n return !staticFormats(params.type!) && isFullScreen && !lock;\r\n case ConditionName.showInstagramEmoji:\r\n return settings.poll_emoji && emojis && params.type === \"live\" && !firstPlay && !isComplexPortrait;\r\n case ConditionName.showEmojiComplexPortrait:\r\n return settings.poll_emoji && emojis && params.type === \"live\";\r\n case ConditionName.showOnlineViewers:\r\n return !!onlineViewers && onlineViewers > 0 && (!isComplexPortrait || params.quiz === \"true\");\r\n case ConditionName.showMultiLivePopover:\r\n return multiLivesPopover;\r\n case ConditionName.showMarkerListPopover:\r\n return markersListPopover;\r\n case ConditionName.showFullRatePopover:\r\n return fullRatePopover;\r\n case ConditionName.showAutoPlayPopover:\r\n return autoPlayPopover && isEnded && params.portrait === \"true\" && !showMiniPlayer && recommendationList && recommendationList.length > 0;\r\n case ConditionName.showRecommendListPopover:\r\n return recommendListPopover;\r\n case ConditionName.showSettingPopover:\r\n return settingPopover;\r\n case ConditionName.showSpeedPopover:\r\n return speedPopover;\r\n case ConditionName.showQualityLevelsPopover:\r\n return qualityLevelsPopover;\r\n case ConditionName.showTagsPopover:\r\n return tagsPopover;\r\n case ConditionName.showPersonalMarkerPopover:\r\n return personalMarkersPopover;\r\n case ConditionName.showBookmarksPopover:\r\n return !!bookmarksPopover;\r\n case ConditionName.showFeedbackPopover:\r\n return feedbackPopover;\r\n case ConditionName.showChatPopover:\r\n return !!chatPopover;\r\n case ConditionName.showTrailerPopover:\r\n return trailerPopover;\r\n case ConditionName.showLoginPopover:\r\n return loginPopover;\r\n case ConditionName.showAutoPlayListTouchIcon:\r\n return (\r\n isEnded &&\r\n !autoPlayPopover &&\r\n isTouchScreenLandscape() &&\r\n params.portrait === \"true\" &&\r\n !isIOS() &&\r\n !lock &&\r\n recommendationList &&\r\n recommendationList.length > 0\r\n );\r\n case ConditionName.showMultiLive:\r\n return alternative_Lives && alternative_Lives.length > 0 && settings.poll_emoji;\r\n case ConditionName.showBigReplayIcon:\r\n return isEnded && params.portrait === \"true\" && isTouchScreen() && ((isIOS() && isTouchScreenPortrait()) || !isIOS());\r\n case ConditionName.showReplayIcon:\r\n return params.portrait === \"true\" && !isIOS() && !isTouchScreen() && showMiniPlayer !== true;\r\n case ConditionName.showPlayNextIcon:\r\n return (\r\n params.portrait === \"true\" &&\r\n !isIOS() &&\r\n (!isTouchScreen() || isTouchScreenLandscape()) &&\r\n params.isGeneral !== \"true\" &&\r\n showMiniPlayer !== true\r\n );\r\n case ConditionName.showAutoPlayToggleIcon:\r\n return (\r\n params.portrait === \"true\" &&\r\n params.isGeneral !== \"true\" &&\r\n ((isIOS() && isTouchScreenPortrait()) || !isIOS()) &&\r\n showMiniPlayer !== true\r\n );\r\n case ConditionName.showSettingIcon:\r\n return !staticFormats(params.type!) && !isIOS() && !isFullScreen;\r\n case ConditionName.showLikeDislike:\r\n return (\r\n !staticFormats(params.type!) && params.portrait === \"true\" && params.isGeneral !== \"true\" && !isComplexDesktop && !isComplexPortrait\r\n );\r\n case ConditionName.showBanner:\r\n return firstPlay && details.banner;\r\n case ConditionName.showBannerStaticFiles:\r\n return firstPlay && params.cover;\r\n case ConditionName.showShareInSetting:\r\n return !isComplexPortrait && !isComplexDesktop;\r\n case ConditionName.showPlayListIcon:\r\n return playList && playList.length > 0 && (isFullScreen || (!isFullScreen && params.portrait !== \"true\")) && showMiniPlayer !== true;\r\n case ConditionName.showPlayListTabTouchscreen:\r\n return playList && playList.length > 0 && isTouchScreen();\r\n case ConditionName.showModuleTitle:\r\n return params.showModuleTitle === \"true\";\r\n case ConditionName.showProgressbar:\r\n return !(isIOS() && params.type === \"live\") && !(params.type === \"live\" && isEnded);\r\n case ConditionName.showAgeClassification:\r\n return details.pg_state && !lock;\r\n case ConditionName.showMiniPlayer:\r\n return showMiniPlayer;\r\n case ConditionName.showPictureInPicture:\r\n return showMiniPlayer !== true && !isIOS() && !isTouchScreen();\r\n case ConditionName.showPersonalMarker:\r\n return params.authentication === \"true\" && (params.featureSet === undefined || params.featureSet.personalMarker !== \"false\");\r\n case ConditionName.showFeedback:\r\n return params.featureSet === undefined || params.featureSet.feedback !== \"false\";\r\n case ConditionName.trackerEnabled:\r\n return (params.featureSet === undefined || params.featureSet.enableTracker !== \"false\") && params.quiz !== \"true\";\r\n case ConditionName.showTabNavigator:\r\n return params.authentication === \"true\" && (params.featureSet === undefined || params.featureSet.profileFooter !== \"false\");\r\n case ConditionName.showBookmark:\r\n return params.authentication === \"true\" && (params.featureSet === undefined || params.featureSet.bookmark !== \"false\");\r\n case ConditionName.showVideoUploadTime:\r\n return params.featureSet === undefined || params.featureSet.videoUploadTime !== \"false\";\r\n case ConditionName.showVideoViewers:\r\n return params.featureSet === undefined || params.featureSet.videoViewers !== \"false\";\r\n case ConditionName.showRecommendationList:\r\n return params.featureSet === undefined || params.featureSet.recommendationList !== \"false\";\r\n case ConditionName.showPlaylist:\r\n return params.featureSet === undefined || params.featureSet.playlist !== \"false\";\r\n case ConditionName.show_Chat:\r\n return params.featureSet === undefined || params.featureSet.chat !== \"false\";\r\n case ConditionName.hidePopovers:\r\n return !markersListPopover && !settingPopover && !feedbackPopover && !sharePopover && !multiLivesPopover;\r\n case ConditionName.isRaw:\r\n return params.raw;\r\n case ConditionName.isParamsPortrait:\r\n return params.portrait === \"true\";\r\n case ConditionName.isComplexPortrait:\r\n return isComplexPortrait;\r\n case ConditionName.isComplexDarkModePortrait:\r\n return isComplexPortrait && params.theme === \"dark\";\r\n case ConditionName.isComplexDesktop:\r\n return isComplexDesktop;\r\n case ConditionName.isLandscape:\r\n return window.innerHeight <= window.innerWidth;\r\n case ConditionName.isTouchScreen:\r\n return isTouchScreen();\r\n case ConditionName.isTouchScreenPortrait:\r\n return isTouchScreenPortrait();\r\n case ConditionName.isTouchScreenLandscape:\r\n return isTouchScreenLandscape();\r\n case ConditionName.isActiveElements:\r\n return activeElements;\r\n case ConditionName.isPlay:\r\n return play;\r\n case ConditionName.isFirstPlay:\r\n return firstPlay;\r\n case ConditionName.isLock:\r\n return lock;\r\n case ConditionName.isIOS:\r\n return isIOS();\r\n case ConditionName.isIOSLive:\r\n return isIOS() && params.type === \"live\";\r\n case ConditionName.isLoading:\r\n return isLoading;\r\n case ConditionName.isLive:\r\n return isLive;\r\n case ConditionName.isLiveParam:\r\n return params.type === \"live\";\r\n case ConditionName.isLiveError:\r\n return isLiveError;\r\n case ConditionName.isDarkMode:\r\n return params.theme === \"dark\";\r\n case ConditionName.isStaticFormat:\r\n return staticFormats(params.type!);\r\n case ConditionName.isEnded:\r\n return isEnded;\r\n case ConditionName.isAutoPlay:\r\n return isAutoPlay;\r\n case ConditionName.isFullScreen:\r\n return isFullScreen;\r\n case ConditionName.isGeneral:\r\n return params.isGeneral === \"true\";\r\n case ConditionName.isValidAddress:\r\n return isValidAddress;\r\n case ConditionName.isFetchDetails:\r\n return isFetchDetails;\r\n case ConditionName.isAutoQuality:\r\n return settings.quality === -1;\r\n case ConditionName.isAuth:\r\n return token && params.isAuth === \"true\";\r\n case ConditionName.isChildClassification:\r\n return details.pg_state && details.pg_state < 14;\r\n case ConditionName.isTeenagerClassification:\r\n return details.pg_state && details.pg_state >= 14 && details.pg_state < 18;\r\n case ConditionName.isYoungClassification:\r\n return details.pg_state && details.pg_state >= 18;\r\n case ConditionName.isSelectedSubtitle:\r\n return !!subtitles && subtitles.length > 0 && selectedSubtitle;\r\n case ConditionName.isZarebinSite:\r\n return params.site === \"zarebin.ir\";\r\n case ConditionName.isUserIdsParamsEqualAll:\r\n return !!params.user_ids && params.user_ids === \"all\";\r\n case ConditionName.isMiniPlayer:\r\n return (params.portrait !== \"true\" || showMiniPlayer) && videoElementSizeInfo.width < 520;\r\n case ConditionName.isFullMobilePortrait:\r\n return isFullMobilePortrait();\r\n case ConditionName.isLogin:\r\n return isLogin;\r\n case ConditionName.isSpinSettingsIcon:\r\n return settings.quality === -1 ? autoQuality === undefined : settings.quality !== manualQuality;\r\n case ConditionName.isVttFitHeight:\r\n return videoElementSizeInfo.height < 600 || isTouchScreen();\r\n case ConditionName.isBookmark:\r\n return bookmarkId !== undefined;\r\n case ConditionName.isPressKeySpace:\r\n return !lock;\r\n case ConditionName.isPressKeyK:\r\n return !lock;\r\n case ConditionName.isPressKeyI:\r\n return !lock && !firstPlay && !showMiniPlayer;\r\n case ConditionName.isPressKeyF:\r\n return !lock && !firstPlay && !showMiniPlayer;\r\n case ConditionName.isPressKeyS:\r\n return params.type !== \"live\" && !lock && !firstPlay;\r\n case ConditionName.isPressKeyC:\r\n return !lock && !firstPlay && !showMiniPlayer && !!subtitles && subtitles.length > 0;\r\n case ConditionName.isPressKeyArrowRight:\r\n return !firstPlay && !lock;\r\n case ConditionName.isPressKeyArrowLeft:\r\n return !firstPlay && !lock;\r\n case ConditionName.isPressKeyL:\r\n return !firstPlay;\r\n case ConditionName.isPressKeyN:\r\n return recommendationList && recommendationList.length > 0 && !firstPlay && !lock;\r\n case ConditionName.isPressKeyQ:\r\n return alternative_Lives && alternative_Lives.length > 0 && !firstPlay && !lock;\r\n case ConditionName.isPressKeyE:\r\n return markers.length !== 0 && !firstPlay && !lock;\r\n case ConditionName.isPressKeyM:\r\n return !firstPlay && !lock;\r\n case ConditionName.isSendTimelineLog:\r\n return !staticFormats(params.type!);\r\n case ConditionName.isReady:\r\n return isReady;\r\n case ConditionName.isPopoverOpen:\r\n return [\r\n markersListPopover,\r\n settingPopover,\r\n sharePopover,\r\n feedbackPopover,\r\n multiLivesPopover,\r\n pollPopover,\r\n autoPlayPopover,\r\n recommendListPopover,\r\n tagsPopover,\r\n speedPopover,\r\n playListPopover,\r\n playListCardPopover,\r\n commentPopover,\r\n personalMarkersPopover,\r\n bookmarksPopover,\r\n chatPopover,\r\n chatEmojisPopover,\r\n trailerPopover,\r\n loginPopover\r\n ].some((popover: boolean | undefined) => !!popover);\r\n case ConditionName.backgroundColorInLightMode:\r\n return isComplexDesktop || isComplexPortrait;\r\n case ConditionName.heightScreen:\r\n return !isComplexPortrait && !isComplexDesktop && !params.height;\r\n case ConditionName.playByClickPoster:\r\n return firstPlay && details.banner && !showContinuousePlayback;\r\n case ConditionName.hasMarkers:\r\n return markers.length !== 0;\r\n case ConditionName.hasTitle:\r\n return details.title;\r\n case ConditionName.hasDescription:\r\n return details.description;\r\n case ConditionName.hasClipboard:\r\n return navigator && navigator.clipboard && navigator.clipboard.writeText;\r\n case ConditionName.hasRecommendationList:\r\n return recommendationList && recommendationList.length > 0;\r\n case ConditionName.hasTags:\r\n return details.tag;\r\n case ConditionName.hasPreviewTime:\r\n return params.preview === \"true\";\r\n case ConditionName.hasEmojis:\r\n return emojis;\r\n case ConditionName.hasEmojiList1Or2:\r\n return (emojis && !!emojis.emoji_list_1) || (emojis && !!emojis.emoji_list_2);\r\n case ConditionName.hasBanner:\r\n return details.banner;\r\n case ConditionName.hasMultiAudio:\r\n return multiAudio.length > 0;\r\n case ConditionName.hasDownloadLinks:\r\n return details.download_links.length > 0 && (params.featureSet === undefined || params.featureSet.downloadUrl !== \"false\");\r\n case ConditionName.hasStreamLink:\r\n return details.stream_link;\r\n case ConditionName.hasPoll:\r\n return question && Object.keys(question).length > 0;\r\n case ConditionName.hasUserIds:\r\n return !!params.user_ids;\r\n case ConditionName.hasAlternativeLives:\r\n return alternative_Lives && alternative_Lives.length > 0;\r\n case ConditionName.hasManualQuality:\r\n return manualQuality !== undefined && manualQuality !== null;\r\n case ConditionName.hasSound:\r\n return !!settings.volume;\r\n case ConditionName.hasVtt:\r\n return !!details.vtt || !!details.vtt_mobile;\r\n case ConditionName.hasAutoPlay:\r\n return params.autoplay === \"true\";\r\n case ConditionName.hasPlayList:\r\n return playList && playList.length > 0 && ((isTouchScreen() && playListPopover) || !isTouchScreen());\r\n case ConditionName.hasXToken:\r\n return !!params.xToken;\r\n case ConditionName.hasMovieDetails:\r\n return details.content_type !== null && details.content_type !== undefined;\r\n case ConditionName.hasMovieContentType:\r\n return details.content_type !== null;\r\n case ConditionName.hasMovieReleaseYear:\r\n return !!details.release_year;\r\n case ConditionName.hasSubtitle:\r\n return params.quiz !== \"true\" && !!subtitles && subtitles.length > 0 && !showMiniPlayer;\r\n case ConditionName.hasIMDB:\r\n return details.imdb_rate !== null;\r\n\r\n case ConditionName.hasFullScreenParams:\r\n return params.fullscreen === \"true\";\r\n case ConditionName.hasPreviewParams:\r\n return params.preview === \"true\";\r\n case ConditionName.hasChart:\r\n return params.chart === \"true\" && !staticFormats(params.type!);\r\n case ConditionName.hasChartPoints:\r\n return !!chartPoints.length;\r\n case ConditionName.hasOnFinishedParams:\r\n return !!params.onFinished;\r\n case ConditionName.hasOnSnapshotParams:\r\n return !!params.onSnapshot;\r\n case ConditionName.hasUserAvatar:\r\n return !!avatar_url;\r\n case ConditionName.hasUserName:\r\n return !!name;\r\n case ConditionName.hasUserPhoneNumber:\r\n return !!phone_number;\r\n case ConditionName.hasScrollElementId:\r\n return !!params.scrollElementId && showMiniPlayer !== undefined;\r\n case ConditionName.hasSportProvider:\r\n return params.provider === \"sport\";\r\n case ConditionName.hasSidebar:\r\n const container = document.getElementById(\"__container\");\r\n return (\r\n isComplexDesktop &&\r\n ((playList && playList.length > 0 && (params.featureSet === undefined || params.featureSet.playlist !== \"false\")) ||\r\n params.featureSet === undefined ||\r\n params.featureSet.chat !== \"false\" ||\r\n (recommendationList &&\r\n recommendationList.length > 0 &&\r\n (params.featureSet === undefined || params.featureSet.recommendationList !== \"false\")) ||\r\n isLogin) &&\r\n (!!container ? container.getBoundingClientRect().width : window.innerWidth) > 900\r\n );\r\n case ConditionName.isBeforeRequest_Playlist_Chat_Recommendation:\r\n return (\r\n (params.type !== \"live\" && playList === undefined && (params.featureSet === undefined || params.featureSet.playlist !== \"false\")) ||\r\n ((params.featureSet === undefined || params.featureSet.recommendationList !== \"false\") && recommendationList === undefined)\r\n );\r\n case ConditionName.isVisibilityChange:\r\n return params.type === \"live\" && !document.pictureInPictureElement;\r\n case ConditionName.hasTrailer:\r\n return trailer.length !== 0;\r\n case ConditionName.hasHParam:\r\n return params.h === \"true\";\r\n case ConditionName.hasPreviewStart:\r\n return details.preview_start;\r\n case ConditionName.hasPreviewEnd:\r\n return details.preview_end;\r\n case ConditionName.hasSubtitles:\r\n return details.subtitles && details.subtitles.length > 0 && params.quiz !== \"true\";\r\n case ConditionName.hasHomeButtonClickFlag:\r\n return !!params.homeButtonClickFlag;\r\n case ConditionName.hasContinuousPlayback:\r\n return !!videoSettings.time && showContinuousePlayback && !params.t && params.featureSet?.continuousPlayback === \"true\";\r\n case ConditionName.getRecommendationList:\r\n return params.portrait === \"true\" && params.quiz !== \"true\" && isFetchDetails;\r\n case ConditionName.getLiveDetailsInIntervals:\r\n return isLiveError && params.type === \"live\" && params.isGeneral !== \"true\";\r\n case ConditionName.getDetails:\r\n return !!params.type && params.id && params.isGeneral !== \"true\";\r\n case ConditionName.getMarkers:\r\n return (\r\n [\"vod\", \"archive\", \"clip\"].includes(String(params.type)) &&\r\n params.id &&\r\n params.isGeneral !== \"true\" &&\r\n params.quiz !== \"true\" &&\r\n isFetchDetails\r\n );\r\n case ConditionName.getPlayList:\r\n return !staticFormats(params.type!) && params.type !== \"live\" && !isFullMobilePortrait() && isFetchDetails;\r\n case ConditionName.firstGetDataIntervalAPI:\r\n return params.type === \"live\" && params.isGeneral !== \"true\";\r\n case ConditionName.getUserSetting:\r\n return isLogin && params.quiz !== \"true\" && isFetchDetails;\r\n case ConditionName.getVideoMetaData:\r\n return isLogin && params.quiz !== \"true\" && isFetchDetails;\r\n case ConditionName.getUserProfile:\r\n return !!params.xToken && isFetchDetails;\r\n case ConditionName.footerPaddingZero:\r\n return params.type !== \"live\" || (params.type === \"live\" && isTouchScreen()) || isTouchScreenPortrait();\r\n case ConditionName.manaulPostAPI:\r\n return !!selectedOptionId || emojiList1.length > 0 || emojiList2.length > 0;\r\n case ConditionName.canPlayVideo:\r\n return canPlayVideo;\r\n case ConditionName.filterLastGif:\r\n return (\r\n +qualityLevels[qualityLevels.length - 2] === +qualityLevels[settings.quality === -1 ? autoQuality ?? manualQuality! : manualQuality!!]\r\n );\r\n case ConditionName.instagramEmojiAnimation:\r\n return !isTouchScreen() || (isTouchScreen() && !activeElements);\r\n case ConditionName.handleOverflowHidden:\r\n return !isComplexDesktop || (isComplexDesktop && isFullScreen);\r\n case ConditionName.thresholdOnlineViewers:\r\n return !!onlineViewers && onlineViewers >= details.online_viewer_threshold;\r\n default:\r\n break;\r\n }\r\n};\r\n","import { livePoll } from \"./constants\";\r\nimport { conditions } from \"./conditions/conditions\";\r\nimport { ConditionName, VideoNumberTypeEnum } from \"./interfaces/enums\";\r\nimport store from \"./redux/store\";\r\nimport { setClearVideoDataSlice, setStreamLinkParams } from \"./redux/slices/videoDataSlice\";\r\nimport { apiCaller } from \"./services/apiCaller\";\r\nimport { API } from \"./services/services\";\r\nimport { setClearControllerSlice } from \"./redux/slices/controllerSlice\";\r\nimport { setClearUserSlice } from \"./redux/slices/userSlice\";\r\nimport { setClearPopoversSlice } from \"./redux/slices/popoversSlice\";\r\nimport { authToken } from \"./redux/actions/user.actions\";\r\n\r\nexport const wait = (s: number) => new Promise((resolve) => setTimeout(resolve, s * 1000));\r\n\r\nexport const getRemainingTime = (timestamp: number) => {\r\n const timePassedInSeconds = Math.floor(Date.now() / 1000 - timestamp);\r\n const rtf = new Intl.RelativeTimeFormat(\"fa\", { numeric: \"auto\" });\r\n switch (true) {\r\n case timePassedInSeconds < 60:\r\n return rtf.format(-timePassedInSeconds, \"second\");\r\n case timePassedInSeconds < 3600:\r\n return rtf.format(-Math.floor(timePassedInSeconds / 60), \"minute\");\r\n case timePassedInSeconds < 86400:\r\n return rtf.format(-Math.floor(timePassedInSeconds / 3600), \"hour\");\r\n case timePassedInSeconds < 2592000:\r\n return rtf.format(-Math.floor(timePassedInSeconds / 86400), \"day\");\r\n case timePassedInSeconds < 31536000:\r\n return rtf.format(-Math.floor(timePassedInSeconds / 2592000), \"month\");\r\n default:\r\n return rtf.format(-Math.floor(timePassedInSeconds / 31536000), \"year\");\r\n }\r\n};\r\n\r\nexport const compare = (a: any, b: any) => {\r\n if (a.time < b.time) return -1;\r\n if (a.time > b.time) return 1;\r\n return 0;\r\n};\r\n\r\nexport const handlePageTitle = (title: string) => {\r\n if (title && conditions(ConditionName.showModuleTitle)) document.title = title;\r\n};\r\n\r\nexport const getUUID = () => {\r\n let uuid = localStorage.getItem(\"hamrahiUUID\");\r\n if (!uuid) {\r\n uuid = uuidGenerator();\r\n localStorage.setItem(\"hamrahiUUID\", uuid);\r\n }\r\n return uuid.toString();\r\n};\r\n\r\nexport const uuidGenerator = () => {\r\n let uuid = \"xxxxxxxx-xxxx-Mxxx-Nxxx-x\".replace(/[xMN]/g, (char) => {\r\n let val: number;\r\n if (char === \"M\") val = Math.floor(1 + Math.random() * 5);\r\n else if (char === \"N\") val = Math.floor(8 + Math.random() * 4);\r\n else val = Math.floor(Math.random() * 16);\r\n return val.toString(16);\r\n });\r\n uuid += Date.now().toString(16);\r\n return uuid;\r\n};\r\n\r\nexport const customizeInterval = async (timeCount: number, cb: Function) => {\r\n await cb();\r\n await wait(timeCount);\r\n customizeInterval(timeCount, cb);\r\n};\r\n\r\nexport const isTouchScreen = () =>\r\n \"ontouchstart\" in window || ((window as any)[\"DocumentTouch\"] && document instanceof (window as any)[\"DocumentTouch\"]);\r\nexport const isTouchScreenLandscape = () => {\r\n const { isFullScreen } = store.getState().controller;\r\n return isTouchScreen() && isFullScreen;\r\n};\r\nexport const isTouchScreenPortrait = () => {\r\n const { isFullScreen } = store.getState().controller;\r\n return isTouchScreen() && !isFullScreen;\r\n};\r\nexport const handleIsComplexDesktop = (isPortrait: boolean) => !isTouchScreen() && !document.fullscreenElement && isPortrait;\r\n\r\nexport const isIOS = () => {\r\n return (\r\n [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) ||\r\n // iPad on iOS 13 detection\r\n (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\r\n );\r\n};\r\n\r\nexport const controllbarIconSize = {\r\n miniPlayer: 15,\r\n miniPlayerFontAwesome: \"pl-text-[15px]\",\r\n other: 20,\r\n otherFontAwesome: \"pl-text-[22px]\"\r\n};\r\n\r\nexport const addZeroBefore = (n: number) => {\r\n return (n < 10 ? \"0\" : \"\") + n;\r\n};\r\n\r\nexport const secondsToHMS = (seconds: number) => {\r\n const h = Math.floor(seconds / 3600);\r\n const m = Math.floor((seconds % 3600) / 60);\r\n const s = Math.floor((seconds % 3600) % 60);\r\n return h < 1 ? `${addZeroBefore(m)}:${addZeroBefore(s)}` : `${addZeroBefore(h)}:${addZeroBefore(m)}:${addZeroBefore(s)}`;\r\n};\r\n\r\nexport const secondsToPersianHMS = (seconds: number) => {\r\n const h = Math.floor(seconds / 3600);\r\n const m = Math.floor((seconds % 3600) / 60);\r\n const s = Math.floor((seconds % 3600) % 60);\r\n const second = s ? `${s} ثانیه` : null;\r\n const minute = m ? `${m} دقیقه` : null;\r\n const hour = h ? `${h} ساعت` : null;\r\n return [hour, minute, second].filter((item) => item !== null);\r\n};\r\n\r\nexport const efficientSecondsToPersianHMS = (seconds: number) => {\r\n const h = seconds >= 60 * 60 ? Math.floor(seconds / 3600) : 0;\r\n const m = seconds >= 60 ? Math.floor((seconds % 3600) / 60) : 0;\r\n const s = seconds < 60 * 60 ? Math.floor((seconds % 3600) % 60) : 0;\r\n const second = s ? `${s} ثانیه` : null;\r\n const minute = m ? `${m} دقیقه` : null;\r\n const hour = h ? `${h} ساعت` : null;\r\n return [hour, minute, second].filter((item) => item !== null).join(\" و \");\r\n};\r\n\r\nexport const staticFormats = (realFormat: string) => {\r\n if ([\"mp4\", \"mkv\", \"mov\", \"m4v\"].includes(realFormat)) return \"mp4\";\r\n else if (realFormat === \"webm\" || realFormat === \"flv\") return realFormat;\r\n else if ([\"mp3\", \"ogg\"].includes(realFormat)) return \"mp3\";\r\n else return false;\r\n};\r\n\r\nexport const addUuidToSrc = (src: string) => {\r\n const urlObject = new URL(src);\r\n let urlSrc = src;\r\n if (urlObject.search.length) return (urlSrc += `&uuid=${getUUID()}`);\r\n else return (urlSrc += `?uuid=${getUUID()}`);\r\n};\r\n\r\nexport const handleSumVotes = (question: any) => {\r\n let sumVotes = 0;\r\n if (question && Object.keys(question).length > 0 && question.options.length > 0) {\r\n question.options.forEach((option: any) => {\r\n if (\r\n livePoll() &&\r\n livePoll().polls.filter((poll: any) => poll.qid === question.id && poll.oid === option.id && poll.sumOptionVotes === option.vote + 1)\r\n .length > 0\r\n )\r\n sumVotes += 1;\r\n sumVotes += option.vote;\r\n });\r\n }\r\n return sumVotes;\r\n};\r\n\r\nexport const checkParentTarget = (event: any, target: string) => {\r\n try {\r\n return [\r\n event.target.id,\r\n event.target.parentNode.id,\r\n event.target.parentNode.parentNode.id,\r\n event.target.parentNode.parentNode.parentNode.id,\r\n event.target.parentNode.parentNode.parentNode.parentNode.id\r\n ].includes(target);\r\n } catch (error) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const unitization = (viewers: number) => {\r\n if (viewers / 1000 < 1) {\r\n return { value: viewers, unit: \"\" };\r\n } else if (viewers / (1000 * 1000) < 1) {\r\n return { value: Math.ceil((viewers / 1000) * 10) / 10, unit: \"K\" };\r\n } else if (viewers / (1000 * 1000 * 1000) < 1) {\r\n return { value: Math.ceil((viewers / (1000 * 1000)) * 10) / 10, unit: \"M\" };\r\n } else return { value: 0, unit: \"\" };\r\n};\r\n\r\nexport const appendQueryParamsToChunks = (link: string) => {\r\n const dispatch = store.dispatch;\r\n const { token, params } = store.getState().videoData;\r\n let queryParams: string = \"\";\r\n queryParams = link.split(\"m3u8\")[1];\r\n if (queryParams) queryParams = `${queryParams}&uuid=${getUUID()}`;\r\n else queryParams = `?uuid=${getUUID()}`;\r\n\r\n if (conditions(ConditionName.isAuth)) {\r\n if (hasQuestionMark(queryParams)) queryParams = `${queryParams}&token=${token}`;\r\n else queryParams = `?token=${token}`;\r\n }\r\n dispatch(setStreamLinkParams(queryParams));\r\n};\r\n\r\nexport const inViewPort = (element: any) => {\r\n if (element) {\r\n const positionLeft = element.offsetLeft;\r\n const positionRight = window.innerWidth - (element.offsetLeft + element.offsetWidth);\r\n if (positionLeft >= 0 && positionRight >= 0) return \"inViewport\";\r\n else if (positionLeft < 0) return \"OutViewPortFromLeft\";\r\n else if (positionRight < 0) return \"OutViewPortFromRight\";\r\n }\r\n};\r\n\r\nexport const handleIsComplexPortrait = (params?: any) => {\r\n return params.portrait === \"true\" && isTouchScreenPortrait() && params.isGeneral !== \"true\" && params.raw !== \"true\";\r\n};\r\nexport const isFullMobilePortrait = () => {\r\n const { params, videoElementSizeInfo } = store.getState().videoData;\r\n return (\r\n params.portrait !== \"true\" &&\r\n (+videoElementSizeInfo.width.toFixed(0) === window.screen.width || +videoElementSizeInfo.width.toFixed(0) === window.screen.availWidth) &&\r\n (window.screen.height > window.screen.width || window.screen.availHeight > window.screen.availWidth)\r\n );\r\n};\r\n\r\nexport const handleRippleCircle = (event: any, id: string) => {\r\n const element: any = document.getElementById(id);\r\n const circle = document.createElement(\"span\");\r\n circle.style.width = circle.style.height = `50px`;\r\n circle.style.left = `${event.touches[0].clientX - element.offsetLeft - 25}px`;\r\n circle.style.top = `${event.touches[0].clientY - element.offsetTop - 25}px`;\r\n circle.classList.add(\"pl-ripple\");\r\n const ripple = element.getElementsByClassName(\"pl-ripple\")[0];\r\n if (ripple) ripple.remove();\r\n element.appendChild(circle);\r\n};\r\n\r\nexport const handleRipple = (event: any, id: string, size: number = 50) => {\r\n const clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\r\n const clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\r\n const element: any = document.getElementById(id);\r\n const circle = document.createElement(\"span\");\r\n circle.style.width = circle.style.height = `${size}px`;\r\n circle.style.left = `${clientX - size / 2}px`;\r\n circle.style.top = `${clientY - element.getBoundingClientRect().top - size / 2}px`;\r\n circle.classList.add(\"pl-ripple\");\r\n const ripple = element.getElementsByClassName(\"pl-ripple\")[0];\r\n if (ripple) ripple.remove();\r\n element.appendChild(circle);\r\n};\r\n\r\nexport const utf8_to_b64 = (text: string) => {\r\n return window.btoa(unescape(encodeURIComponent(text)));\r\n};\r\n\r\nexport const hasQuestionMark = (text: string) => (text.match(/\\?/g) ? true : false);\r\n\r\nexport const responseValidator = (status: number): boolean => status >= 200 && status < 300;\r\n\r\nexport const generateNewAccessToken = async () => {\r\n if (authToken.get()?.refresh) {\r\n const { data, status } = await apiCaller({\r\n url: API().auth.refresh,\r\n method: \"POST\",\r\n data: { refresh: authToken.get()?.refresh }\r\n });\r\n if (responseValidator(status)) {\r\n const token = {\r\n access: data.access,\r\n refresh: authToken.get()?.refresh,\r\n token_id: data.token_id\r\n };\r\n authToken.set(token);\r\n } else {\r\n authToken.remove();\r\n throw new Error(\"\");\r\n }\r\n }\r\n};\r\n\r\nexport const convertB64ToFile = (dataUrl: string, filename: string) => {\r\n let arr = dataUrl.split(\",\"),\r\n mime = arr[0].match(/:(.*?);/)![1],\r\n bstr = window.atob(arr[1]),\r\n n = bstr.length,\r\n u8arr = new Uint8Array(n);\r\n\r\n while (n--) {\r\n u8arr[n] = bstr.charCodeAt(n);\r\n }\r\n return new File([u8arr], filename, { type: mime });\r\n};\r\n\r\nexport const parseJwt = (token: string) => {\r\n var base64Url = token.split(\".\")[1];\r\n var base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n var jsonPayload = decodeURIComponent(\r\n window\r\n .atob(base64)\r\n .split(\"\")\r\n .map(function (c) {\r\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\r\n })\r\n .join(\"\")\r\n );\r\n return JSON.parse(jsonPayload);\r\n};\r\n\r\nexport const handlePopoverSizeInMiniPlayer = () => {\r\n const { videoElementSizeInfo } = store.getState().videoData;\r\n\r\n return conditions(ConditionName.isMiniPlayer) && !conditions(ConditionName.isFullMobilePortrait)\r\n ? {\r\n top: videoElementSizeInfo.top,\r\n height: videoElementSizeInfo.height,\r\n left: videoElementSizeInfo.left\r\n }\r\n : {};\r\n};\r\n\r\nexport const numbersToLetters = [\r\n \"اول\",\r\n \"دوم\",\r\n \"سوم\",\r\n \"چهارم\",\r\n \"پنجم\",\r\n \"ششم\",\r\n \"هفتم\",\r\n \"هشتم\",\r\n \"تهم\",\r\n \"دهم\",\r\n \"یازدهم\",\r\n \"دوازدهم\",\r\n \"سیزدهم\",\r\n \"چهاردهم\",\r\n \"پانزدهم\",\r\n \"شانزدهم\",\r\n \"هفدهم\",\r\n \"هجدهم\",\r\n \"نوزدهم\",\r\n \"بیستم\"\r\n];\r\n\r\nexport const handleVideoType = () => {\r\n const { params } = store.getState().videoData;\r\n switch (params.type) {\r\n case \"vod\":\r\n return VideoNumberTypeEnum.Vod;\r\n case \"archive\":\r\n case \"live\":\r\n return VideoNumberTypeEnum.Archive;\r\n case \"clip\":\r\n return VideoNumberTypeEnum.Clip;\r\n default:\r\n return VideoNumberTypeEnum.FutureLive;\r\n }\r\n};\r\n\r\nexport const handleHasXTokenParamOrSendXToken = () => {\r\n if (conditions(ConditionName.hasXTokenParamOrSendXToken)) return { \"x-token\": store.getState().videoData.params.xToken };\r\n else return undefined;\r\n};\r\n\r\nexport function getWebEnvConfig(key: string): string {\r\n const webConfigs = store.getState().videoData.webListConfig;\r\n const config = webConfigs.find((item: any) => item.key === key);\r\n return config ? config.value : \"\";\r\n}\r\n\r\nexport const getDomainFromUrl = (url: string) => {\r\n const splitedUrl = url.split(\".\");\r\n return `${splitedUrl[splitedUrl.length - 2]}.${splitedUrl[splitedUrl.length - 1]}`;\r\n};\r\n\r\nexport const clearRedux = () => {\r\n const dispatch = store.dispatch;\r\n dispatch(setClearVideoDataSlice());\r\n dispatch(setClearControllerSlice());\r\n dispatch(setClearUserSlice());\r\n dispatch(setClearPopoversSlice());\r\n};\r\n\r\nexport const weighted_random = (options: any) => {\r\n let i;\r\n\r\n let weights: any[] = [];\r\n\r\n for (i = 0; i < options.length; i++) weights[i] = options[i].weight + (weights[i - 1] || 0);\r\n\r\n let random = Math.random() * weights[weights.length - 1];\r\n\r\n for (i = 0; i < weights.length; i++) if (weights[i] > random) break;\r\n\r\n return options[i].domain;\r\n};\r\n\r\nexport const convertTimeToSeconds = (time: string) =>\r\n Number(time.split(\":\")[0]) * 3600 + Number(time.split(\":\")[1]) * 60 + Number(time.split(\":\")[2]);\r\n\r\nexport const imageFormatChecking = (filename: string) =>\r\n [\"jpg\", \"png\", \"jpeg\"].includes(filename.toLowerCase().split(\".\")[filename.toLowerCase().split(\".\").length - 1]);\r\n\r\n// ***** Player Core *****\r\n\r\nexport const handlePageLoadTime = (loadingDurationRef: any) => {\r\n let pageLoadTime = 0;\r\n if (performance && performance.getEntriesByType(\"navigation\")) pageLoadTime = performance.getEntriesByType(\"navigation\")[0].duration;\r\n loadingDurationRef.current = pageLoadTime;\r\n};\r\n\r\nexport const highestResolutionSupported = (resolutions: string[], width: number, height: number) => {\r\n const w = width * window.devicePixelRatio;\r\n const h = height * window.devicePixelRatio;\r\n let filteredResolutions: string[] = [];\r\n if (conditions(ConditionName.isTouchScreenPortrait))\r\n filteredResolutions = resolutions.filter((resolution: string) => Number(resolution.split(\"x\")[0].trim()) <= w);\r\n else\r\n filteredResolutions = resolutions.filter(\r\n (resolution: string) => Number(resolution.split(\"x\")[0].trim()) <= h || Number(resolution.split(\"x\")[1].trim()) <= w\r\n );\r\n return filteredResolutions.indexOf(filteredResolutions[filteredResolutions.length - 1]);\r\n};\r\n\r\nexport const getSubtitleLabel = (subtitleLanguage: string) => {\r\n let label;\r\n switch (subtitleLanguage) {\r\n case \"fa\":\r\n label = \"فارسی\";\r\n break;\r\n case \"en\":\r\n label = \"انگلیسی\";\r\n break;\r\n case \"ar\":\r\n label = \"عربی\";\r\n break;\r\n case \"tr\":\r\n label = \"ترکی\";\r\n break;\r\n default:\r\n break;\r\n }\r\n return label;\r\n};\r\n\r\nexport const getOS = () => {\r\n const macosPlatforms = [\"Macintosh\", \"MacIntel\", \"MacPPC\", \"Mac68K\"];\r\n const windowsPlatforms = [\"Win32\", \"Win64\", \"Windows\", \"WinCE\"];\r\n const iosPlatforms = [\"iPhone\", \"iPad\", \"iPod\"];\r\n const userAgent = window.navigator.userAgent;\r\n const platform = window.navigator.platform;\r\n let os = \"\";\r\n\r\n if (macosPlatforms.indexOf(platform) !== -1) os = \"mac\";\r\n else if (iosPlatforms.indexOf(platform) !== -1) os = \"ios\";\r\n else if (windowsPlatforms.indexOf(platform) !== -1) os = \"windows\";\r\n else if (/Android/.test(userAgent)) os = \"android\";\r\n else if (/Linux/.test(platform)) os = \"linux\";\r\n\r\n return os;\r\n};\r\n\r\nexport const deleteQueryParamsInUrl = (queryParam: string) => {\r\n const url = new URL(window.location.href);\r\n url.searchParams.delete(queryParam);\r\n history.pushState({}, \"\", url.href);\r\n};\r\n\r\nexport const handleRedirectCards = (id?: string, type?: string) => {\r\n const url = new URL(window.location.href);\r\n url.searchParams.set(\"id\", id!);\r\n url.searchParams.set(\"type\", type!);\r\n return history.pushState({}, \"\", url.href);\r\n};\r\n\r\nexport const strToObj = (str: string) => {\r\n var obj = {};\r\n if (str && typeof str === \"string\") {\r\n var objStr = str.match(/\\{(.)+\\}/g);\r\n eval(\"obj =\" + objStr);\r\n }\r\n return obj;\r\n};\r\n\r\nexport const flattenObject = (input: any, keyName?: string) => {\r\n let result: any = {};\r\n for (const key in input) {\r\n const newKey = keyName ? `${keyName}_${key}` : key;\r\n if (typeof input[key] === \"object\" && !Array.isArray(input[key])) result = { ...result, ...flattenObject(input[key], newKey) };\r\n else result[newKey] = input[key];\r\n }\r\n return result;\r\n};\r\n\r\nexport const findIntersectionBetweenTwoArray = (arr1: string[], arr2: string[]) => arr1.filter((element) => !arr2.includes(element));\r\n\r\n","import controllerReducer from \"./slices/controllerSlice\";\r\nimport videoDataReducer from \"./slices/videoDataSlice\";\r\nimport popoversReducer from \"./slices/popoversSlice\";\r\nimport userReducer from \"./slices/userSlice\";\r\n\r\nimport { configureStore } from \"@reduxjs/toolkit\";\r\n\r\nconst store = configureStore({\r\n reducer: {\r\n controller: controllerReducer,\r\n videoData: videoDataReducer,\r\n popovers: popoversReducer,\r\n user: userReducer,\r\n },\r\n devTools: true,\r\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false })\r\n});\r\n\r\nexport type RootState = ReturnType<typeof store.getState>;\r\nexport type AppDispatch = typeof store.dispatch;\r\nexport default store;\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { IPopoversSlice } from \"../../interfaces/interfaces\";\r\n\r\nconst PopOversSliceState: IPopoversSlice = {\r\n markersListPopover: false,\r\n settingPopover: false,\r\n sharePopover: false,\r\n feedbackPopover: false,\r\n multiLivesPopover: false,\r\n pollPopover: false,\r\n fullRatePopover: true,\r\n autoPlayPopover: false,\r\n recommendListPopover: false,\r\n tagsPopover: false,\r\n speedPopover: false,\r\n playListPopover: false,\r\n playListCardPopover: false,\r\n commentPopover: false,\r\n personalMarkersPopover: false,\r\n bookmarksPopover: false,\r\n chatPopover: false,\r\n chatRulesPopover: false,\r\n chatEmojisPopover: false,\r\n trailerPopover: false,\r\n loginPopover: false,\r\n qualityLevelsPopover: false\r\n};\r\nexport const popoversSlice = createSlice({\r\n name: \"popover\",\r\n initialState: PopOversSliceState,\r\n reducers: {\r\n setMarkersListPopover: (state, action: PayloadAction<boolean>) => {\r\n state.markersListPopover = action.payload;\r\n },\r\n setSettingPopover: (state, action: PayloadAction<boolean>) => {\r\n state.settingPopover = action.payload;\r\n },\r\n setSharePopover: (state, action: PayloadAction<boolean>) => {\r\n state.sharePopover = action.payload;\r\n },\r\n setFeedbackPopover: (state, action: PayloadAction<boolean>) => {\r\n state.feedbackPopover = action.payload;\r\n },\r\n setMultiLivesPopovers: (state, action: PayloadAction<boolean>) => {\r\n state.multiLivesPopover = action.payload;\r\n },\r\n setPollPopover: (state, action: PayloadAction<boolean>) => {\r\n state.pollPopover = action.payload;\r\n },\r\n setFullRatePopover: (state, action: PayloadAction<boolean | undefined>) => {\r\n state.fullRatePopover = action.payload;\r\n },\r\n setAutoPlayPopover: (state, action: PayloadAction<boolean>) => {\r\n state.autoPlayPopover = action.payload;\r\n },\r\n setRecommendListPopover: (state, action: PayloadAction<boolean>) => {\r\n state.recommendListPopover = action.payload;\r\n },\r\n setTagsPopover: (state, action: PayloadAction<boolean>) => {\r\n state.tagsPopover = action.payload;\r\n },\r\n setSpeedPopover: (state, action: PayloadAction<boolean>) => {\r\n state.speedPopover = action.payload;\r\n },\r\n setPlayListPopover: (state, action: PayloadAction<boolean>) => {\r\n state.playListPopover = action.payload;\r\n },\r\n setPlayListCardPopover: (state, action: PayloadAction<boolean>) => {\r\n state.playListCardPopover = action.payload;\r\n },\r\n setCommentPopover: (state, action: PayloadAction<boolean>) => {\r\n state.commentPopover = action.payload;\r\n },\r\n setPersonalMarkersPopover: (state, action: PayloadAction<boolean>) => {\r\n state.personalMarkersPopover = action.payload;\r\n },\r\n setBookmarksPopover: (state, action: PayloadAction<boolean>) => {\r\n state.bookmarksPopover = action.payload;\r\n },\r\n setChatPopover: (state, action: PayloadAction<boolean>) => {\r\n state.chatPopover = action.payload;\r\n },\r\n setChatRulesPopover: (state, action: PayloadAction<boolean>) => {\r\n state.chatRulesPopover = action.payload;\r\n },\r\n setChatEmojisPopover: (state, action: PayloadAction<boolean>) => {\r\n state.chatEmojisPopover = action.payload;\r\n },\r\n setTrailerPopover: (state, action: PayloadAction<boolean>) => {\r\n state.trailerPopover = action.payload;\r\n },\r\n setLoginPopover: (state, action: PayloadAction<boolean>) => {\r\n state.loginPopover = action.payload;\r\n },\r\n setQualityLevelsPopover: (state, action: PayloadAction<boolean>) => {\r\n state.qualityLevelsPopover = action.payload;\r\n },\r\n setClearPopoversSlice: (state) => {\r\n state.markersListPopover = false;\r\n state.settingPopover = false;\r\n state.sharePopover = false;\r\n state.feedbackPopover = false;\r\n state.multiLivesPopover = false;\r\n state.pollPopover = false;\r\n state.autoPlayPopover = false;\r\n state.recommendListPopover = false;\r\n state.tagsPopover = false;\r\n state.speedPopover = false;\r\n state.playListPopover = false;\r\n state.playListCardPopover = false;\r\n state.commentPopover = false;\r\n state.personalMarkersPopover = false;\r\n state.bookmarksPopover = false;\r\n state.chatPopover = false;\r\n state.chatRulesPopover = false;\r\n state.chatEmojisPopover = false;\r\n state.trailerPopover = false;\r\n state.loginPopover = false;\r\n state.qualityLevelsPopover = false;\r\n }\r\n }\r\n});\r\n\r\nexport const {\r\n setMarkersListPopover,\r\n setSettingPopover,\r\n setSharePopover,\r\n setFeedbackPopover,\r\n setMultiLivesPopovers,\r\n setPollPopover,\r\n setFullRatePopover,\r\n setAutoPlayPopover,\r\n setRecommendListPopover,\r\n setTagsPopover,\r\n setSpeedPopover,\r\n setCommentPopover,\r\n setPlayListPopover,\r\n setPlayListCardPopover,\r\n setPersonalMarkersPopover,\r\n setBookmarksPopover,\r\n setChatPopover,\r\n setChatEmojisPopover,\r\n setTrailerPopover,\r\n setLoginPopover,\r\n setChatRulesPopover,\r\n setQualityLevelsPopover,\r\n setClearPopoversSlice\r\n} = popoversSlice.actions;\r\n\r\nexport default popoversSlice.reducer;\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { IBookmark, IPreFactor, IMarker, IUserSettings, IUserSlice, IVideoSettings, IFactor } from \"../../interfaces/interfaces\";\r\n\r\nconst UserSliceState: IUserSlice = {\r\n userId: \"\",\r\n authToken: \"\",\r\n refreshToken: \"\",\r\n avatar_url: \"\",\r\n name: \"\",\r\n phone_number: \"\",\r\n isLogin: false,\r\n selectedPersonalMarker: undefined,\r\n settings: {\r\n quality: -1,\r\n brightness: 100,\r\n volume: 100,\r\n speed: 1,\r\n poll_emoji: true\r\n },\r\n videoSettings: {\r\n is_like: null,\r\n time: 0\r\n },\r\n bookmarks: [],\r\n bookmarkId: undefined,\r\n preFactor: undefined,\r\n factor: undefined,\r\n showContinuousePlayback: false\r\n};\r\n\r\nexport const userSlice = createSlice({\r\n name: \"user\",\r\n initialState: UserSliceState,\r\n reducers: {\r\n setUserId: (state, action: PayloadAction<string>) => {\r\n state.userId = action.payload;\r\n },\r\n setAuthToken: (state, action: PayloadAction<string>) => {\r\n state.authToken = action.payload;\r\n },\r\n setRefreshToken: (state, action: PayloadAction<string>) => {\r\n state.refreshToken = action.payload;\r\n },\r\n setUserInfo: (state, action: PayloadAction<any>) => {\r\n state.avatar_url = action.payload.avatar_url;\r\n state.name = action.payload.name;\r\n state.phone_number = action.payload.phone_number;\r\n state.userId = action.payload.id;\r\n state.isLogin = true;\r\n },\r\n setSelectedPersonalMarker: (state, action: PayloadAction<undefined | IMarker>) => {\r\n state.selectedPersonalMarker = action.payload;\r\n },\r\n setUserSettings: (state, action: PayloadAction<IUserSettings>) => {\r\n state.settings = action.payload;\r\n },\r\n setVideoSettings: (state, action: PayloadAction<IVideoSettings>) => {\r\n state.videoSettings = action.payload;\r\n },\r\n setBookamrks: (state, action: PayloadAction<IBookmark[]>) => {\r\n state.bookmarks = action.payload;\r\n },\r\n setBookmarkId: (state, action: PayloadAction<number | undefined>) => {\r\n state.bookmarkId = action.payload;\r\n },\r\n setPreFactor: (state, action: PayloadAction<IPreFactor | undefined>) => {\r\n state.preFactor = action.payload;\r\n },\r\n setFactor: (state, action: PayloadAction<IFactor | undefined | null>) => {\r\n state.factor = action.payload;\r\n },\r\n setShowContinuousePlayback: (state, action: PayloadAction<boolean>) => {\r\n state.showContinuousePlayback = action.payload;\r\n },\r\n setClearUserSlice: () => {\r\n return UserSliceState;\r\n }\r\n }\r\n});\r\n\r\nexport const {\r\n setUserId,\r\n setAuthToken,\r\n setRefreshToken,\r\n setUserInfo,\r\n setSelectedPersonalMarker,\r\n setUserSettings,\r\n setVideoSettings,\r\n setBookamrks,\r\n setBookmarkId,\r\n setPreFactor,\r\n setFactor,\r\n setShowContinuousePlayback,\r\n setClearUserSlice\r\n} = userSlice.actions;\r\n\r\nexport default userSlice.reducer;\r\n","import axios from \"axios\";\r\nimport { getAccessToken } from \"./baseUrl\";\r\nimport { IApiCaller, IAxiosConfig, IRetryPolicy, IStatusMessageError, IStringKeyValue } from \"../interfaces/interfaces\";\r\nimport store from \"../redux/store\";\r\nimport { generateNewAccessToken, wait } from \"../helpers\";\r\n\r\nconst getLimit = () => 100;\r\n\r\nexport const apiCaller: any = async ({\r\n url,\r\n method = \"GET\",\r\n data,\r\n headers,\r\n retryCount = 1,\r\n maxRetryCount = 0,\r\n errorMessage,\r\n retryPolicy,\r\n errorCallback,\r\n timeoutCount\r\n}: IApiCaller) => {\r\n let axiosConfig: IAxiosConfig = {\r\n url: url,\r\n method: method,\r\n headers: {\r\n ...headers,\r\n \"Content-Type\": \"application/json\"\r\n },\r\n timeout: timeoutCount ? timeoutCount * 1000 : undefined\r\n };\r\n if (data) {\r\n if (method === \"GET\")\r\n axiosConfig = {\r\n ...axiosConfig,\r\n params: {\r\n uuid: store.getState().videoData.params.uuid,\r\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider,\r\n ...data\r\n }\r\n };\r\n else\r\n axiosConfig = {\r\n ...axiosConfig,\r\n data: {\r\n uuid: store.getState().videoData.params.uuid,\r\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider,\r\n ...data\r\n }\r\n };\r\n } else {\r\n if (method === \"GET\")\r\n axiosConfig = {\r\n ...axiosConfig,\r\n params: {\r\n uuid: store.getState().videoData.params.uuid,\r\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider\r\n }\r\n };\r\n else\r\n axiosConfig = {\r\n ...axiosConfig,\r\n data: {\r\n uuid: store.getState().videoData.params.uuid,\r\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider\r\n }\r\n };\r\n }\r\n try {\r\n return await axios(axiosConfig);\r\n } catch (error: any) {\r\n if (error && error.response && error.response.status === 401) {\r\n await generateNewAccessToken();\r\n const newHeader = {\r\n ...headers,\r\n authorization: `Bearer ${getAccessToken()}`\r\n };\r\n let newRetryCount = retryCount + 1;\r\n await wait(newRetryCount);\r\n return apiCaller({\r\n url,\r\n method,\r\n data,\r\n headers: newHeader,\r\n retryCount: newRetryCount,\r\n maxRetryCount,\r\n errorMessage,\r\n retryPolicy,\r\n errorCallback\r\n });\r\n } else {\r\n if (errorCallback) errorCallback(error.response.status, error.response.message);\r\n let newRetryDelay = 0,\r\n newMaxRetryCount = 0;\r\n if (retryPolicy !== undefined) {\r\n for (let i = 0; i < retryPolicy.length; i++) {\r\n if (\r\n (((retryPolicy[i].codeAbove && error.response.status >= retryPolicy[i].codeAbove!) ||\r\n (retryPolicy[i].codeBelow && error.response.status <= retryPolicy[i].codeBelow!)) &&\r\n (retryPolicy[i].excludeCodes.length === 0 || !retryPolicy[i].excludeCodes.includes(error.response.status))) ||\r\n retryPolicy[i].includeCodes.length === 0 ||\r\n retryPolicy[i].includeCodes.includes(error.response.status)\r\n ) {\r\n newMaxRetryCount = retryPolicy[i].count;\r\n newRetryDelay = retryPolicy[i].delay;\r\n break;\r\n }\r\n }\r\n } else {\r\n newMaxRetryCount = maxRetryCount;\r\n newRetryDelay = retryCount + 1;\r\n }\r\n if (retryCount < newMaxRetryCount) {\r\n await wait(newRetryDelay);\r\n return apiCaller({\r\n url,\r\n method,\r\n data,\r\n headers,\r\n retryCount: retryCount + 1,\r\n newMaxRetryCount,\r\n errorMessage,\r\n retryPolicy,\r\n errorCallback\r\n });\r\n } else if (error.response)\r\n return {\r\n data: error.response.data ? error.response.data : { detail: \"عملیات با خطا مواجه شده است.\" },\r\n status: error.response.status\r\n };\r\n }\r\n }\r\n};\r\n\r\nexport function get(event: (response: any, status: number) => void, url: string, params: { [k: string]: any } = {}, lang = \"fa\", auth = true) {\r\n const generatedUrl = new URL(url);\r\n const newParams: any = {\r\n ...params,\r\n uuid: store.getState().videoData.params.uuid,\r\n provider: store.getState().videoData.params.provider === \"unknown\" ? undefined : store.getState().videoData.params.provider\r\n };\r\n Object.keys(newParams).forEach((key) => {\r\n if (newParams[key] !== undefined) {\r\n generatedUrl.searchParams.append(key, newParams[key]);\r\n }\r\n });\r\n let status: number;\r\n fetch(generatedUrl.href, {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" }\r\n })\r\n .then(function (response) {\r\n status = response.status;\r\n if (status === 429) {\r\n setTimeout(() => {\r\n get(event, url, params, lang, auth);\r\n }, getLimit());\r\n }\r\n return response.json();\r\n })\r\n .then(function (data) {\r\n event(data, status);\r\n })\r\n .catch((err) => {\r\n event(err, status);\r\n });\r\n}\r\n\r\nexport function getAll(path: string, retryPolicy?: IRetryPolicy[], params?: any, retryCount: number = 1, maxRetryCount: number = 0) {\r\n return new Promise(async (resolve, reject) => {\r\n // Added reject to the Promise executor function.\r\n try {\r\n const url = new URL(path);\r\n const limit = 1000;\r\n if (params) {\r\n Object.keys(params).forEach((key) => {\r\n if (params[key]) {\r\n url.searchParams.set(key, params[key]);\r\n }\r\n });\r\n }\r\n url.searchParams.set(\"limit\", limit.toString());\r\n const response = await fetch(url.href);\r\n if (!response.ok) {\r\n // Check if the response was not ok (status not in the range 200-299).\r\n throw response;\r\n }\r\n const data = await response.json();\r\n const count = data.count;\r\n const requestCount = Math.ceil(count / limit) - 1;\r\n const promises: Array<Promise<any>> = [];\r\n for (let i = 0; i < requestCount; i++) {\r\n const offset = i * limit; // Fixed the offset calculation.\r\n url.searchParams.set(\"offset\", offset.toString());\r\n const promise: Promise<any> = fetch(url.href).then((res) => {\r\n if (res.ok) {\r\n return res.json();\r\n }\r\n return res.json().then((err) => Promise.reject(err));\r\n });\r\n promises.push(promise);\r\n }\r\n Promise.all(promises)\r\n .then((res) => {\r\n const results = res.flatMap((item) => item.results);\r\n resolve([...data.results, ...results]);\r\n })\r\n .catch(reject); // Added catch to handle any errors in the Promise.all.\r\n } catch (error: any) {\r\n let newRetryDelay = 0,\r\n newMaxRetryCount = 0;\r\n if (retryPolicy !== undefined) {\r\n for (let i = 0; i < retryPolicy.length; i++) {\r\n if (\r\n ((retryPolicy[i].codeAbove && error.status >= retryPolicy[i].codeAbove!) ||\r\n (retryPolicy[i].codeBelow && error.status <= retryPolicy[i].codeBelow!)) &&\r\n (retryPolicy[i].excludeCodes.length === 0 || !retryPolicy[i].excludeCodes.includes(error.status)) &&\r\n (retryPolicy[i].includeCodes.length === 0 || retryPolicy[i].includeCodes.includes(error.status))\r\n ) {\r\n newMaxRetryCount = retryPolicy[i].count;\r\n newRetryDelay = retryPolicy[i].delay;\r\n break;\r\n }\r\n }\r\n if (retryCount < newMaxRetryCount) {\r\n await wait(newRetryDelay);\r\n getAll(path, retryPolicy, params, retryCount + 1, newMaxRetryCount);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\nclass ApiCallError extends Error {\r\n status: number = 0;\r\n retryQty: number = 0;\r\n\r\n constructor(message?: string, status: number = 0, retryQty: number = 0) {\r\n super(message);\r\n this.status = status;\r\n this.retryQty = retryQty;\r\n }\r\n}\r\n\r\nconst getProjectError: (errorKey: string) => IStatusMessageError = (errorKey: string) => {\r\n const projectErrors: { [key: string]: IStatusMessageError } = {\r\n timeout: {\r\n status: -1,\r\n message: \"timeout\"\r\n },\r\n notFound: {\r\n status: 404,\r\n message: \"not found\"\r\n },\r\n conflict: {\r\n status: 409,\r\n message: \"conflict\"\r\n },\r\n frequentlyRequest: {\r\n status: 429,\r\n message: \"frequently request\"\r\n },\r\n internalServerError: {\r\n status: 500,\r\n message: \"internal server error\"\r\n },\r\n serviceUnavailable: {\r\n status: 503,\r\n message: \"service unavailable\"\r\n }\r\n };\r\n return projectErrors[errorKey];\r\n};\r\n\r\nconst getAnonValue: (key: string) => string = (key: string) => {\r\n return getAnonConfig()[key];\r\n};\r\n\r\nconst anonConfigGenerator = (newAnonConfig: IStringKeyValue = {}) => {\r\n const anonConfig: IStringKeyValue = {\r\n ANON_FAILURE_RETRY_DELAY_THROTTLE: \"5\",\r\n ANON_FAILURE_RETRY_COUNT_THROTTLE: \"3\",\r\n FAILURE_RETRY_DELAY_INTERNAL_SERVER_ERROR: \"5\",\r\n FAILURE_RETRY_COUNT_INTERNAL_SERVER_ERROR: \"3\",\r\n FAILURE_RETRY_DELAY_TIMEOUT: \"5\",\r\n FAILURE_RETRY_COUNT_TIMEOUT: \"3\",\r\n LANG: \"fa\",\r\n DIR: \"rtl\"\r\n };\r\n const updateAnonConfig = { ...anonConfig, ...newAnonConfig };\r\n return () => updateAnonConfig;\r\n};\r\n\r\nlet getAnonConfig: () => IStringKeyValue = anonConfigGenerator();\r\n\r\nexport { getProjectError, ApiCallError, getAnonValue, getLimit };\r\n","const envs = require(\"../configs/nextConfigs/next.config.js\");\r\nconst isNpmPackage = require(\"../configs/npmPackage/npmPackage\");\r\n\r\nimport Cookies from \"js-cookie\";\r\n\r\nexport const getStatus = () => (isNpmPackage ? envs.status : (process.env.status as string));\r\nexport const getBaseUrl = () => (isNpmPackage ? envs.baseUrl : (process.env.baseUrl as string));\r\nexport const getGetAggregatorApiLiveUrl = () => (isNpmPackage ? envs.aggregatorBaseUrl : (process.env.aggregatorBaseUrl as string));\r\nexport const getSetAggregatorUrl = () => (isNpmPackage ? envs.setAggregatorBaseUrl : (process.env.setAggregatorBaseUrl as string));\r\nexport const getRestApiLiveUrl = () => (isNpmPackage ? envs.baseUrl : (process.env.baseUrl as string)) + \"/live/api\";\r\nexport const getRestApiUrl = () => (isNpmPackage ? envs.baseUrl : (process.env.baseUrl as string)) + \"/api\";\r\nexport const getRestApiCommentUrl = () => (isNpmPackage ? envs.baseUrl : (process.env.baseUrl as string)) + \"/comment-service/api\";\r\nexport const getFluentdUrl = () => (isNpmPackage ? envs.fluentdUrl : (process.env.fluentdUrl as string));\r\nexport const getEmojiUrl = () => (isNpmPackage ? envs.baseUrl : (process.env.baseUrl as string)) + \"/emoji\";\r\nexport const getLoginZarebinUrl = () => (isNpmPackage ? envs.loginRedirectUrl : (process.env.loginRedirectUrl as string));\r\nexport const getLoginSplusUrl = () => (isNpmPackage ? envs.splusLoginRedirectUrl : (process.env.splusLoginRedirectUrl as string));\r\nexport const getsplusDownloadAppUrl = () => (isNpmPackage ? envs.splusDownloadAppUrl : (process.env.splusDownloadAppUrl as string));\r\nexport const getMagnix = () => (isNpmPackage ? envs.baseUrl : (process.env.baseUrl as string));\r\nexport const getZarebinNasle3Url = () => (isNpmPackage ? envs.zarebinNasle3Url : (process.env.zarebinNasle3Url as string));\r\nexport const getChatBaseUrl = () => (isNpmPackage ? envs.chatBaseUrl : (process.env.chatBaseUrl as string));\r\nexport const uesrTracker = () => (isNpmPackage ? envs.trackerRestAPI : (process.env.trackerRestAPI as string)) + \"/tracker-service/api\";\r\nexport const getChatAPIUrl = () => (isNpmPackage ? envs.chatAPIBaseUrl : (process.env.chatAPIBaseUrl as string));\r\nexport const getLoginBaseUrl = () => (isNpmPackage ? envs.loginBaseUrl : (process.env.loginBaseUrl as string)) + \"/api\";\r\nexport const getWhiteListTargets = () => (isNpmPackage ? envs.whiteListTargets : (process.env.whiteListTargets as string));\r\nexport const getWhiteListGeneralUrl = () => (isNpmPackage ? envs.whiteListGeneralUrl : (process.env.whiteListGeneralUrl as string));\r\nexport const getIsSendToken = () => (isNpmPackage ? envs.sendXToken : (process.env.sendXToken as string));\r\nexport const getInitialLoadedFragmentCount = () =>\r\n isNpmPackage ? envs.initialLoadedFragmentCount : (process.env.initialLoadedFragmentCount as string);\r\nexport const getZarebinUserConfig = () => (isNpmPackage ? envs.zarebinUserConfig : (process.env.zarebinUserConfig as string));\r\nexport const getAccessToken = () => {\r\n let cookieKey: string = getCookieKey();\r\n const cookieValue = Cookies.get(cookieKey);\r\n if (cookieValue) {\r\n return (isNpmPackage ? envs.status === \"fars\" : process.env.status === \"fars\") ? cookieValue : (JSON.parse(cookieValue).access as string);\r\n }\r\n return false;\r\n};\r\nexport const getCookieKey = () => (isNpmPackage ? envs.cookieKey : (process.env.cookieKey as string));\r\n","import { conditions } from \"../conditions/conditions\";\r\nimport { ConditionName } from \"../interfaces/enums\";\r\nimport store from \"../redux/store\";\r\nimport {\r\n getChatAPIUrl,\r\n getChatBaseUrl,\r\n getEmojiUrl,\r\n getFluentdUrl,\r\n getGetAggregatorApiLiveUrl,\r\n getLoginBaseUrl,\r\n getMagnix,\r\n getRestApiCommentUrl,\r\n getRestApiLiveUrl,\r\n getRestApiUrl,\r\n getSetAggregatorUrl,\r\n getZarebinNasle3Url,\r\n uesrTracker\r\n} from \"./baseUrl\";\r\n\r\nexport const API = () => {\r\n const { params, details } = store.getState().videoData;\r\n const { bookmarkId } = store.getState().user;\r\n return {\r\n Ad: {\r\n getVast: `https://vfetch.yektanet.com/api/v1/load/16e31ffa-10ac-40c3-b380-fa378f8ecbb8`\r\n },\r\n live: {\r\n anonListConfigs: ``,\r\n getLiveUrl: `${getRestApiLiveUrl()}/v1/live/details/live/`,\r\n generalData: `${getGetAggregatorApiLiveUrl()}live/api/v1/get-aggregated/live/${params.id}/${details.id}`,\r\n postData: `${getSetAggregatorUrl()}live/api/v1/set-emoji-poll`,\r\n online_viewer: `${getSetAggregatorUrl()}live/api/v1/online-viewer/live/${details.id}/`,\r\n getArchiveUrl: `${getRestApiLiveUrl()}/v1/live/details/archive/`,\r\n getLiveMarkers: `${getRestApiLiveUrl()}/v1/live/list-event/live/`,\r\n multiLives: `${getRestApiLiveUrl()}/v1/live/viewers/live-archive-list/live/`,\r\n gifLinks: `${getEmojiUrl()}/gifs/gifConfig.json`,\r\n tempLink: `${getRestApiLiveUrl()}/v1/storage/temp_link/`,\r\n quiz: `${getSetAggregatorUrl()}live/api/v1/set-quiz`,\r\n quizUserRecoreds: (quizType: number, quizId: number) => `${getSetAggregatorUrl()}live/api/v1/get-user-quiz-record/${quizType}/${quizId}/`,\r\n liveChat: {\r\n getMessageList: (roomId: number) => `${getChatAPIUrl()}v1/chat/anon-list-messages/${roomId}/`,\r\n chat: (roomId: number) => `${getChatBaseUrl()}room/${roomId}/`,\r\n sendChatMessage: `${getChatAPIUrl()}v1/chat/send-message/`,\r\n getRoomId: (roomId: number) => `${getChatAPIUrl()}v1/chat/get-active-room/${roomId}/`\r\n }\r\n },\r\n vod: {\r\n getVodUrl: `${getRestApiLiveUrl()}/v1/live/details/vod/`,\r\n getVodMarkers: `${getRestApiLiveUrl()}/v1/live/list-event/vod/`\r\n },\r\n archive: {\r\n getArchiveUrl: `${getRestApiLiveUrl()}/v1/live/details/archive/`,\r\n getArchiveMarkers: `${getRestApiLiveUrl()}/v1/live/list-event/live/`\r\n },\r\n clip: {\r\n getClipUrl: `${getRestApiLiveUrl()}/v1/live/details/clip/`,\r\n getClipMarkers: `${getRestApiLiveUrl()}/v1/live/list-event/clip/`\r\n },\r\n\r\n searchViewers: `${getRestApiLiveUrl()}/v2/live/viewers/search/`,\r\n viewersTagList: (videoType: string) => `${getRestApiLiveUrl()}/v1/live/viewers-tag-list/${videoType}/`,\r\n viewCount: (content_id: number) => `${getRestApiLiveUrl()}/v1/viewed/content/${content_id}`,\r\n like: `${getRestApiLiveUrl()}/v1/like/content/${details.content_id}`,\r\n dislike: `${getRestApiLiveUrl()}/v1/dislike/content/${details.content_id}`,\r\n unlike: `${getRestApiLiveUrl()}/v1/unlike/content/${details.content_id}`,\r\n undislike: `${getRestApiLiveUrl()}/v1/undislike/content/${details.content_id}`,\r\n recommendationList: () => {\r\n let urlData = `${params.type}/${conditions(ConditionName.isLiveParam) ? details.id! : +params.id!}`;\r\n if (conditions(ConditionName.hasUserIds)) return `${getRestApiLiveUrl()}/v1/live/recommend/${urlData}/?user_ids=${params.user_ids}`;\r\n return `${getRestApiLiveUrl()}/v1/live/recommend/${urlData}/`;\r\n },\r\n auth: {\r\n refresh: `${getLoginBaseUrl()}/v2/profile/auth/token-refresh/`,\r\n login: (v = \"v5\") => `${getLoginBaseUrl()}/${v}/profile/auth/login/`,\r\n loginNasle3: () => `${getZarebinNasle3Url()}/auth/login`,\r\n verifyOtp: () => `${getZarebinNasle3Url()}/auth/verifyOtp`,\r\n code: (v = \"v2\") => `${getLoginBaseUrl()}/${v}/profile/auth/generate-code/`,\r\n validateCode: (v = \"v2\") => `${getLoginBaseUrl()}/${v}/profile/auth/validate-otp/`,\r\n captcha: (v = \"v1\") => `${getLoginBaseUrl()}/${v}/captcha/get-captcha/`\r\n },\r\n playList: `${getRestApiLiveUrl()}/v1/live/playlist/viewers-list-videos-playlists/${params.type}/${\r\n conditions(ConditionName.isLiveParam) ? +details.id! : +params.id!\r\n }/`,\r\n playListVideos: (id: number) => `${getRestApiLiveUrl()}/v2/live/list-viewers-playlist-videos/${id}/`,\r\n comment: {\r\n create: `${getRestApiCommentUrl()}/v1/comment/create/`,\r\n commentList: (id: number) => `${getRestApiCommentUrl()}/v1/comment/list-content-comments/${id}/`,\r\n replyList: (id: number) => `${getRestApiCommentUrl()}/v1/comment/list-comment-replies/${id}/`,\r\n canAddComment: (id: number) => `${getRestApiCommentUrl()}/v1/content-get-update-delete/${id}/`,\r\n like: (commentId: number) => `${getRestApiLiveUrl()}/v1/like/comment/${commentId}`,\r\n unlike: (commentId: number) => `${getRestApiLiveUrl()}/v1/unlike/comment/${commentId}`,\r\n default_message: (user_id: number) => `${getRestApiCommentUrl()}/v1/default-message/list/${user_id}/`,\r\n deleteComment: (commentId: number, v = \"v1\") => `${getRestApiCommentUrl()}/${v}/comment/delete-by-owner/${commentId}/`\r\n },\r\n serverTime: `${getRestApiUrl()}/v1/configuration/server-time/`,\r\n user: {\r\n profile: `${getZarebinNasle3Url()}/profile/users`,\r\n profileWithXToken: `${getMagnix()}/profiles/userprofile`,\r\n profileWithXTokenNasle3: `${getZarebinNasle3Url()}/profile`,\r\n settings: `${uesrTracker()}/v1/detail-setting/`,\r\n createSettings: `${uesrTracker()}/v1/create-setting/`,\r\n createPersonalMarker: `${uesrTracker()}/v1/create-marker/`,\r\n createVideoMetaData: `${uesrTracker()}/v1/video-metadata/`,\r\n bookmarks: `${uesrTracker()}/v1/list-create-bookmark/`,\r\n deleteBookmark: (id?: number) => `${uesrTracker()}/v1/retrieve-update-delete-bookmark/${id ?? bookmarkId}/`\r\n },\r\n trailer: {\r\n getList: `${getRestApiLiveUrl()}/v1/live/detail-trailer/${params.type}/${\r\n conditions(ConditionName.isLiveParam) ? +details.id! : +params.id!\r\n }/`\r\n },\r\n videoTimelineLog: `${getFluentdUrl()}/video-timeline.log`,\r\n logs: `${getFluentdUrl()}/drive-endpoint.log`,\r\n getViewersWindow: `${getRestApiLiveUrl()}/v1/vod/get-viewer-window/${params.type}/${params.id}/`,\r\n web_list_config: (v = \"v1\") => `${getRestApiUrl()}/${v}/configuration/list-web-configs/`\r\n };\r\n};\r\n\r\nexport const getApiUrls = () => {\r\n let apiUrl = \"\";\r\n let apiMarkerUrl = \"\";\r\n const { type } = store.getState().videoData.params;\r\n switch (type) {\r\n case \"live\":\r\n apiUrl = API().live.getLiveUrl;\r\n apiMarkerUrl = API().live.getLiveMarkers;\r\n break;\r\n case \"vod\":\r\n apiUrl = API().vod.getVodUrl;\r\n apiMarkerUrl = API().vod.getVodMarkers;\r\n break;\r\n case \"archive\":\r\n apiUrl = API().archive.getArchiveUrl;\r\n apiMarkerUrl = API().archive.getArchiveMarkers;\r\n break;\r\n case \"clip\":\r\n apiUrl = API().clip.getClipUrl;\r\n apiMarkerUrl = API().clip.getClipMarkers;\r\n break;\r\n default:\r\n break;\r\n }\r\n return {\r\n apiUrl,\r\n apiMarkerUrl\r\n };\r\n};\r\n","import { ITokens, IViewedVideo } from \"../../interfaces/interfaces\";\r\nimport Cookies from \"js-cookie\";\r\nimport store from \"../store\";\r\nimport { conditions } from \"../../conditions/conditions\";\r\nimport { videoTag } from \"../../constants\";\r\nimport { handleVideoType } from \"../../helpers\";\r\nimport { setShowContinuousePlayback, setVideoSettings } from \"../slices/userSlice\";\r\n\r\nexport const authToken = {\r\n key: \"HAMRAHI_CLOUD_AUTH_TOKEN\",\r\n get: (): ITokens | null => {\r\n const data = Cookies.get(authToken.key);\r\n if (data) return JSON.parse(data);\r\n return null;\r\n },\r\n set: (value: ITokens) => Cookies.set(authToken.key, JSON.stringify(value), { expires: 1095, sameSite: \"none\", secure: true }),\r\n remove: () => Cookies.remove(authToken.key)\r\n};\r\n\r\nexport const captchaStorageLogin = {\r\n key: \"HAMRAHI_CLOUD_LANDING_AUTH_CAPTCHA\",\r\n get: function (): string | null {\r\n const data = localStorage.getItem(captchaStorageLogin.key);\r\n if (data) {\r\n return JSON.parse(data);\r\n }\r\n return null;\r\n },\r\n set: (value: string) => {\r\n localStorage.setItem(captchaStorageLogin.key, JSON.stringify(value));\r\n },\r\n remove: () => {\r\n localStorage.removeItem(captchaStorageLogin.key);\r\n }\r\n};\r\n\r\nexport const captchaStorageCode = {\r\n key: \"HAMRAHI_CLOUD_LANDING_CODE_CAPTCHA\",\r\n get: function (): string | null {\r\n const data = localStorage.getItem(captchaStorageCode.key);\r\n if (data) {\r\n return JSON.parse(data);\r\n }\r\n return null;\r\n },\r\n set: (value: string) => {\r\n localStorage.setItem(captchaStorageCode.key, JSON.stringify(value));\r\n },\r\n remove: () => {\r\n localStorage.removeItem(captchaStorageCode.key);\r\n }\r\n};\r\n\r\nexport const handleContinuousPlayback = () => {\r\n const { videoSettings } = store.getState().user;\r\n const { params } = store.getState().videoData;\r\n const type: string = params.type!.toString();\r\n const currentTime = videoTag().currentTime;\r\n if (type !== \"live\" && currentTime !== 0) {\r\n const duration = videoTag().duration;\r\n const viewedVideo: IViewedVideo = {\r\n video_id: +params.id!,\r\n video_type: handleVideoType(),\r\n time: currentTime === duration ? 0 : Math.floor(videoTag().currentTime),\r\n is_like: videoSettings.is_like\r\n };\r\n let viewedVideosInLocalStorage = localStorage.getItem(\"viewedVideos\");\r\n if (viewedVideosInLocalStorage) {\r\n let viewedVideos: IViewedVideo[] = JSON.parse(viewedVideosInLocalStorage);\r\n viewedVideos = viewedVideos.filter(\r\n (video: IViewedVideo) => video.video_id !== viewedVideo.video_id || video.video_type !== viewedVideo.video_type\r\n );\r\n if (viewedVideos.length < 10) viewedVideos.push(viewedVideo);\r\n else {\r\n viewedVideos.shift();\r\n viewedVideos.push(viewedVideo);\r\n }\r\n localStorage.setItem(\"viewedVideos\", JSON.stringify(viewedVideos));\r\n } else localStorage.setItem(\"viewedVideos\", JSON.stringify([viewedVideo]));\r\n }\r\n};\r\n\r\nexport const handleApplyContinuousPlayback = () => {\r\n const dispatch = store.dispatch;\r\n const { params } = store.getState().videoData;\r\n let viewedVideosInLocalStorage = localStorage.getItem(\"viewedVideos\");\r\n if (viewedVideosInLocalStorage) {\r\n const viewedVideos: IViewedVideo[] = JSON.parse(viewedVideosInLocalStorage);\r\n const viewedVideo = viewedVideos.find(\r\n (video: IViewedVideo) => video.video_id === Number(params.id) && video.video_type === handleVideoType()\r\n );\r\n\r\n if (viewedVideo) {\r\n dispatch(setVideoSettings({ is_like: viewedVideo.is_like, time: viewedVideo.time }));\r\n if (viewedVideo.time !== 0) dispatch(setShowContinuousePlayback(true));\r\n }\r\n }\r\n};\r\n\r\n","import { AppDispatch, RootState } from \"./store\";\r\nimport { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\r\n\r\nexport const useAppDispatch: any = () => useDispatch<AppDispatch>();\r\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\r\n","import { conditions } from \"../conditions/conditions\";\r\nimport { videoTag } from \"../constants\";\r\nimport { flattenObject, getUUID } from \"../helpers\";\r\nimport { ConditionName, ContentTypesString } from \"../interfaces/enums\";\r\nimport { IDetails, IParams } from \"../interfaces/interfaces\";\r\nimport store from \"../redux/store\";\r\n\r\nexport const feedbackLog = (starNum: Number, reasons: string[], customText: string | undefined) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"feedback\",\r\n id: Number(params.id),\r\n stars: starNum ? starNum : starNum,\r\n text: reasons,\r\n customText: customText,\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const eventMarkerClickLog = (markerId: Number, markerTime: Number, markerTitle: String, markerDescription: String, markerSticker: String) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"eventMarkerClick\",\r\n video_id: conditions(ConditionName.isLiveParam) ? details.id : Number(params.id),\r\n markerId: markerId,\r\n markerTime: markerTime,\r\n markerTitle: markerTitle,\r\n markerDescription: markerDescription,\r\n markerSticker: markerSticker,\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const speedChangeLog = (selectedSpeed: Number) => {\r\n const { params, details } = store.getState().videoData;\r\n const { settings } = store.getState().user;\r\n return {\r\n category: \"speedChange\",\r\n previousSelectedSpeed: settings.speed,\r\n selectedSpeed: selectedSpeed,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const qualityChangeRequestLog = (selectedQuality: String) => {\r\n const { params, details } = store.getState().videoData;\r\n const { qualityLevels, manualQuality, autoQuality } = store.getState().controller;\r\n return {\r\n category: \"qualityChangeRequest\",\r\n currentPlayingQuality: `${qualityLevels[conditions(ConditionName.isAutoQuality) ? autoQuality ?? manualQuality! : manualQuality!]}P`,\r\n previousSelectedQuality: conditions(ConditionName.isAutoQuality) ? \"auto\" : `${qualityLevels[manualQuality!]}P`,\r\n selectedQuality: selectedQuality,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const catchUpLoadingLog = (duration: number) => {\r\n const { params, details } = store.getState().videoData;\r\n const { hlsLiveSyncPosition, qualityLevels, autoQuality } = store.getState().controller;\r\n const { settings } = store.getState().user;\r\n\r\n return {\r\n category: \"catchUpLoading\",\r\n previousVideoTime: Number(sessionStorage.getItem(\"previousVideoTime\")),\r\n currentVideoTime: hlsLiveSyncPosition,\r\n duration: duration,\r\n quality: `${conditions(ConditionName.isAutoQuality) ? qualityLevels[autoQuality!] : qualityLevels[settings.quality]}P`,\r\n isAutoQuality: conditions(ConditionName.isAutoQuality),\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const shareDialogLog = (videoTime: number, isJump: boolean, jumpTime: number | undefined, eventMarkerId?: number) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"shareDialog\",\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n videoTime: videoTime,\r\n eventMarkerId: eventMarkerId,\r\n provider: params.provider,\r\n jump: isJump ? \"true\" : \"false\",\r\n jumpTime: isJump ? jumpTime : undefined\r\n };\r\n};\r\n\r\nexport const shareCopyLog = (videoTime: number, isJump: boolean, jumpTime: number | undefined, EventMarker?: number) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"shareCopy\",\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n videoTime: videoTime,\r\n eventMarkerId: EventMarker,\r\n jump: isJump ? \"true\" : \"false\",\r\n jumpTime: isJump ? jumpTime : undefined,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const alternativeLiveLog = (alternativeLiveUserId: number) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"alternativeLiveClick\",\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n alternativeLiveUserId: alternativeLiveUserId,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const deActiveSettingLog = () => {\r\n const { params, details } = store.getState().videoData;\r\n const { settings } = store.getState().user;\r\n let data_base = {\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n if (!settings.poll_emoji) {\r\n return {\r\n ...data_base,\r\n category: \"deactiveSetting\",\r\n hasOtherLive: conditions(ConditionName.hasAlternativeLives) ? \"true\" : \"false\",\r\n hasPoll: conditions(ConditionName.hasPoll) ? \"true\" : \"false\",\r\n hasEmoji: conditions(ConditionName.hasEmojiList1Or2) ? \"true\" : \"false\"\r\n };\r\n } else\r\n return {\r\n ...data_base,\r\n category: \"activeSetting\"\r\n };\r\n};\r\n\r\nexport const backwardForwardLog = (type: string) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: type === \"backward\" ? \"backward\" : \"forward\",\r\n id: Number(params.id),\r\n type: params.type,\r\n src: details.stream_link ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const pollModalCloseLog = (params: IParams, details: IDetails, pollId: number) => {\r\n return {\r\n category: \"pollModalClose\",\r\n pollId: pollId,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: details.stream_link ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const tagClickLog = (tagText: string) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"tagClick\",\r\n tagText: tagText,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const likeDislikeLog = (category: string) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: category,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const fullscreenLog = (category: string) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: category,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const brightnessLog = (source: number, target: number) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"brightnessChange\",\r\n source: source,\r\n target: target,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const volumeLog = (source: number, target: number) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"volumeChange\",\r\n source: source,\r\n target: target,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const subtitleLog = (language: string) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"subtitle\",\r\n language: language,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const lockLog = (category: string) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: category,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const recommendationListLog = (targetVideoId: number, targetUserId: number, targetType: string, listIndex: number) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"recommend\",\r\n sourcevideoId: conditions(ConditionName.isLiveParam) ? details.id : +params.id!,\r\n targetVideoId: targetVideoId,\r\n sourceUserId: details.user_id,\r\n targetUserId: targetUserId,\r\n sourceType: params.type,\r\n targetType: targetType,\r\n listIndex: listIndex,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const ExceptionsLog = (type: string, message: string) => {\r\n return {\r\n category: \"error\",\r\n type: type,\r\n message: message\r\n };\r\n};\r\n\r\nexport const videoTimelineLog = (start: number, end: number) => {\r\n const { params, details } = store.getState().videoData;\r\n const { duration } = store.getState().controller;\r\n return {\r\n category: \"video-timeline\",\r\n video_id: conditions(ConditionName.isLiveParam) ? details.id : +params.id!,\r\n video_type: params.type === \"archive\" ? \"live\" : params.type,\r\n start: start,\r\n end: end,\r\n watchedDuration: end - start,\r\n video_duration: conditions(ConditionName.isLiveParam) ? null : Math.floor(duration),\r\n clientUUID: getUUID(),\r\n user_id: conditions(ConditionName.isLiveParam) ? params.id : details.user_id,\r\n content_type: details.content_type,\r\n content_id: details.content_id\r\n };\r\n};\r\n\r\nexport const bookmarkLog = (category: \"bookmark\" | \"unBookmark\") => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: category,\r\n id: conditions(ConditionName.isLiveParam) ? details.id : +params.id!,\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src\r\n };\r\n};\r\n\r\nexport const autoQualityChangeLog = (sourceQuality: String, targetQuality: String, diffQuality: number) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"autoQualityChange\",\r\n sourceQuality: sourceQuality,\r\n targetQuality: targetQuality,\r\n diffQuality: diffQuality,\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const pingpongLog = (startTimer: number, qualityHistory: number[]) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"pingpong\",\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n PingPongDuration: Number((new Date().getTime() - startTimer).toFixed(2)),\r\n PingPongSourceQuality: `${qualityHistory[0]}P`, // A A->B && B->A\r\n PingPongTargetQuality: `${qualityHistory[1]}P`, // B,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const pausePlayLog = (isPlay: boolean) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: isPlay ? \"playVideo\" : \"pauseVideo\",\r\n id: Number(params.id),\r\n type: params.type,\r\n src: details.stream_link ? details.stream_link : params.src,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const initLog = (loadingTime: number, waitingTime: number, bannerLoadingTime: number, firstChunkPlayingTime: number, timerRef: any) => {\r\n const { params, details } = store.getState().videoData;\r\n const totalTime = Date.now() - timerRef.current + loadingTime + waitingTime;\r\n const memory = (window.performance as any).memory;\r\n const timing = JSON.parse(JSON.stringify((window.performance as any).timing));\r\n return {\r\n category: \"initLog\",\r\n id: Number(params.id),\r\n type: params.type,\r\n origin: new URL(conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src!).origin,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n loading: loadingTime,\r\n bannerLoading: !conditions(ConditionName.hasBanner) || bannerLoadingTime < 0 ? 0 : bannerLoadingTime,\r\n waiting: waitingTime,\r\n firstChunkPlaying: firstChunkPlayingTime < 0 ? 0 : firstChunkPlayingTime,\r\n totalTime: totalTime,\r\n provider: params.provider,\r\n performance: flattenObject({ memory, timing }, \"performance\"),\r\n userAgent: window.navigator.userAgent\r\n };\r\n};\r\n\r\nexport const loadingLog = (waitingDuration: number, qualityLevel: number, timerRef: any, loadingCounterRef: any, videoEntranceTime: number) => {\r\n const { params, details, hlsLiveSyncPosition } = store.getState().videoData;\r\n const { settings } = store.getState().user;\r\n const videoTime = conditions(ConditionName.isLiveParam) ? hlsLiveSyncPosition : videoTag().currentTime;\r\n const previousLoaderDiff = Date.now() - timerRef.current;\r\n return {\r\n category: \"loading\",\r\n id: Number(params.id),\r\n type: params.type,\r\n src: conditions(ConditionName.hasStreamLink) ? details.stream_link : params.src,\r\n duration: waitingDuration,\r\n quality: `${qualityLevel}P`,\r\n isAutoQuality: conditions(ConditionName.isAutoQuality),\r\n previousLoaderDiff: previousLoaderDiff,\r\n counter: loadingCounterRef.current,\r\n loadingPercentile: Number((waitingDuration / previousLoaderDiff).toFixed(2)),\r\n videoTime: videoTime,\r\n videoEntranceTime: videoEntranceTime,\r\n speed: settings.speed,\r\n provider: params.provider\r\n };\r\n};\r\n\r\nexport const playListClickLog = (playlistId: number) => {\r\n const { params, details } = store.getState().videoData;\r\n return {\r\n category: \"playListClick\",\r\n playlistId: playlistId,\r\n id: conditions(ConditionName.isLiveParam) ? details.id : +params.id!,\r\n type: params.type\r\n };\r\n};\r\n\r\nexport const videoOfPlaylistClickLog = (playlistId: number, videoId: number, videoType: number, videoIndex: number) => {\r\n return {\r\n category: \"videoOfPlaylistClick\",\r\n tag: playlistId,\r\n indexNumber: videoIndex,\r\n videoId: videoId,\r\n videoType: videoType\r\n };\r\n};","import store from \"../redux/store\";\r\nimport { ConditionName } from \"../interfaces/enums\";\r\nimport { apiCaller } from \"../services/apiCaller\";\r\nimport { API } from \"../services/services\";\r\nimport { conditions } from \"../conditions/conditions\";\r\nimport { getUUID } from \"../helpers\";\r\n\r\nexport const sendFluentLog = (data: any) => {\r\n const { params, details } = store.getState().videoData;\r\n let _data = {\r\n ...data,\r\n timestamp: Date.now(),\r\n clientUUID: getUUID(),\r\n uuid: getUUID(),\r\n link: window.location.href,\r\n user_id: conditions(ConditionName.isLiveParam) ? Number(params.id) : details.user_id,\r\n live_id: conditions(ConditionName.isLiveParam) ? details.id : null,\r\n format: data.category === \"feedback\" ? (conditions(ConditionName.isStaticFormat) ? \"static\" : \"hls\") : undefined,\r\n content_type: details.content_type,\r\n content_id: details.content_id\r\n };\r\n apiCaller({ url: API().logs, method: \"post\", data: _data });\r\n};\r\n","import { setCurrentTime, setIsFullScreen, setLock, setPlay } from \"../slices/controllerSlice\";\r\nimport store from \"../store\";\r\nimport { setIsComplexPortrait, setVideoElementSizeInfo, setVideoTimelines } from \"../slices/videoDataSlice\";\r\nimport { ConditionName } from \"../../interfaces/enums\";\r\nimport { apiCaller } from \"../../services/apiCaller\";\r\nimport { API } from \"../../services/services\";\r\nimport { setUserSettings } from \"../slices/userSlice\";\r\nimport { setClearPopoversSlice } from \"../slices/popoversSlice\";\r\nimport { videoTag } from \"../../constants\";\r\nimport { conditions } from \"../../conditions/conditions\";\r\nimport { backwardForwardLog, fullscreenLog, lockLog, videoTimelineLog } from \"../../logs/logs\";\r\nimport { sendFluentLog } from \"../../logs/fluentdLogger\";\r\n\r\nexport const handlePlayPause = (event: any) => {\r\n const dispatch = store.dispatch;\r\n if (event === null || event.target.nodeName !== \"INPUT\") {\r\n if (event !== null) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n videoTag().paused ? videoTag().play() : videoTag().pause();\r\n dispatch(setPlay(!videoTag().paused));\r\n }\r\n};\r\n\r\nexport const handlePlayPauseInDOM = (type: boolean) => {\r\n const dispatch = store.dispatch;\r\n if (type) {\r\n videoTag().play();\r\n dispatch(setPlay(true));\r\n return true;\r\n } else {\r\n videoTag().pause();\r\n dispatch(setPlay(false));\r\n return false;\r\n }\r\n};\r\n\r\nexport const handleChangeSoundVolume = (volume: number) => {\r\n const dispatch = store.dispatch;\r\n const { settings } = store.getState().user;\r\n dispatch(setUserSettings({ ...settings, volume }));\r\n if (conditions(ConditionName.isIOS)) videoTag().muted = !videoTag().muted;\r\n else videoTag().volume = volume / 100;\r\n};\r\n\r\nexport const handleBackwardForward = (type: string, forwardBackwardCount: number = 15, event?: any) => {\r\n if (type === \"touchBackward\") type = \"backward\";\r\n else if (type === \"touchForward\") type = \"forward\";\r\n if ((event && event.target.nodeName === \"INPUT\") || (type === \"backward\" && videoTag().currentTime < 15) || (type === \"forward\" && videoTag().duration - videoTag().currentTime < 15 )) return;\r\n sendFluentLog(backwardForwardLog(type));\r\n let currentTime = 0;\r\n if (type === \"backward\") {\r\n if (forwardBackwardCount === 0) currentTime = 0;\r\n else currentTime = videoTag().currentTime - forwardBackwardCount;\r\n } else if (type === \"forward\") {\r\n if (forwardBackwardCount === videoTag().duration) currentTime = forwardBackwardCount;\r\n else currentTime = videoTag().currentTime + forwardBackwardCount;\r\n }\r\n videoTag().currentTime = currentTime;\r\n};\r\n\r\nexport const handleFullScreen = () => {\r\n const dispatch = store.dispatch;\r\n const isFullScreen = document.fullscreenElement;\r\n if (conditions(ConditionName.isIOS)) {\r\n if ((videoTag() as any).webkitEnterFullScreen) {\r\n dispatch(setPlay(false));\r\n // Toggle fullscreen in Safari for iPad\r\n (videoTag() as any).webkitEnterFullScreen();\r\n } else {\r\n dispatch(setClearPopoversSlice());\r\n sendFluentLog(fullscreenLog(\"fullScreen\"));\r\n }\r\n } else {\r\n if (isFullScreen) {\r\n dispatch(setIsFullScreen(false));\r\n document.exitFullscreen();\r\n if (conditions(ConditionName.isTouchScreen) && conditions(ConditionName.isParamsPortrait)) dispatch(setIsComplexPortrait(true));\r\n } else {\r\n dispatch(setClearPopoversSlice());\r\n document.documentElement.requestFullscreen();\r\n dispatch(setIsFullScreen(true));\r\n sendFluentLog(fullscreenLog(\"fullScreen\"));\r\n if (conditions(ConditionName.isTouchScreen) && conditions(ConditionName.isParamsPortrait)) dispatch(setIsComplexPortrait(false));\r\n }\r\n }\r\n};\r\n\r\nexport const handleLockOrientation = () => {\r\n if (conditions(ConditionName.isTouchScreen) && !conditions(ConditionName.isIOS)) {\r\n if (conditions(ConditionName.isLandscape) && !conditions(ConditionName.isFullScreen)) (window.screen.orientation as any).lock(\"portrait\");\r\n else (window.screen.orientation as any).lock(\"landscape\");\r\n }\r\n};\r\n\r\nexport const handleLock = (type: string) => {\r\n const dispatch = store.dispatch;\r\n dispatch(setLock(type === \"lock\"));\r\n sendFluentLog(lockLog(type));\r\n if(type === \"unlock\") localStorage.setItem(\"unlock-click\",\"true\");\r\n};\r\n\r\nexport const handleVideoTimeline = (currentTimeValue: number, movedTimeValue?: number) => {\r\n if (conditions(ConditionName.isSendTimelineLog)) {\r\n const dispatch = store.dispatch;\r\n const { videoTimelines } = store.getState().videoData;\r\n let currentTime = Math.floor(currentTimeValue);\r\n let movedTime = Math.floor(movedTimeValue!);\r\n if (videoTimelines.length === 0) {\r\n dispatch(setVideoTimelines([currentTime >= videoTag().duration && !conditions(ConditionName.isLive) ? movedTime! : currentTime]));\r\n } else {\r\n if (videoTimelines[0] < currentTime)\r\n apiCaller({ url: API().videoTimelineLog, method: \"post\", data: videoTimelineLog(videoTimelines[0], currentTime) });\r\n if (movedTime && movedTime >= videoTag().duration) dispatch(setVideoTimelines([]));\r\n else dispatch(setVideoTimelines([movedTime!]));\r\n }\r\n }\r\n};\r\n\r\nexport const handleVideoElementSizeInfo = () => {\r\n const dispatch = store.dispatch;\r\n const element: any = document.getElementById(\"video-area\")?.getBoundingClientRect();\r\n element.height = (element.width * 9) / 16;\r\n if (element) dispatch(setVideoElementSizeInfo(element));\r\n};\r\n","import { apiCaller, getAll } from \"../../services/apiCaller\";\r\nimport { API, getApiUrls } from \"../../services/services\";\r\nimport { setIsLive } from \"../slices/controllerSlice\";\r\nimport {\r\n setAlternative_Lives,\r\n setChartPoints,\r\n setConfig,\r\n setEmojiList1,\r\n setEmojiList2,\r\n setEmojis,\r\n setErrorType,\r\n setGif,\r\n setInfo,\r\n setIsFetchDetails,\r\n setIsLiveError,\r\n setIsValidAddress,\r\n setLiveId,\r\n setMarkers,\r\n setOnlineViewers,\r\n setQuestion,\r\n setSelectedOptionId,\r\n setSelectedSubtitle,\r\n setSubtitleText\r\n} from \"../slices/videoDataSlice\";\r\nimport { subtitleLog } from \"../../logs/logs\";\r\nimport store from \"../store\";\r\nimport { ConditionName } from \"../../interfaces/enums\";\r\nimport { sendFluentLog } from \"../../logs/fluentdLogger\";\r\nimport { conditions } from \"../../conditions/conditions\";\r\nimport { addUuidToSrc, appendQueryParamsToChunks, getUUID, handlePageTitle, responseValidator, weighted_random } from \"../../helpers\";\r\nimport axios from \"axios\";\r\nimport { videoTag } from \"../../constants\";\r\nimport { handleDetailsConfig } from \"../../getDetailsConfigs\";\r\n\r\nconst videoViewCount = (contentId: number) => apiCaller({ url: API().viewCount(contentId), data: { uuid: getUUID() } });\r\n\r\nexport const getLiveAndVodDetails = async (userId?: number) => {\r\n const dispatch = store.dispatch;\r\n try {\r\n const d = await apiCaller({ ...handleDetailsConfig(userId) });\r\n if (responseValidator(d.status)) {\r\n appendQueryParamsToChunks(d.data.stream_link);\r\n await axios.head(\"https://\" + weighted_random(d.data.hls_links) + d.data.path);\r\n if (userId) return d.data;\r\n videoViewCount(d.data.content_id!);\r\n detailSetter(d.data);\r\n } else throw new Error(JSON.stringify({ status: d.status, message: d.data }));\r\n } catch (error: any) {\r\n if (userId) return;\r\n const { params } = store.getState().videoData;\r\n if (conditions(ConditionName.isLiveParam)) dispatch(setIsLiveError(true));\r\n handlePageTitle(String(params.id));\r\n dispatch(setIsFetchDetails(true));\r\n dispatch(setErrorType(\"liveAndVod\"));\r\n dispatch(setIsValidAddress(false));\r\n }\r\n};\r\n\r\nexport const detailSetter = (data: any) => {\r\n const dispatch = store.dispatch;\r\n const { params } = store.getState().videoData;\r\n\r\n if (data.title) handlePageTitle(data.title);\r\n else handlePageTitle(String(params.id));\r\n dispatch(\r\n setInfo({\r\n ...data,\r\n stream_link: !!data.stream_link && addUuidToSrc(\"https://\" + weighted_random(data.hls_links) + data.path)\r\n })\r\n );\r\n dispatch(setIsFetchDetails(true));\r\n dispatch(setIsValidAddress(true));\r\n};\r\n\r\nexport const getMarkers = async (id: Number) =>\r\n await getAll(getApiUrls().apiMarkerUrl + id + \"/\", [\r\n {\r\n codeAbove: 400,\r\n codeBelow: null,\r\n excludeCodes: [],\r\n includeCodes: [],\r\n delay: 2,\r\n count: 3\r\n }\r\n ]);\r\n\r\nexport const handleSubtitle = () => {\r\n const dispatch = store.dispatch;\r\n const { subtitles, selectedSubtitle } = store.getState().videoData;\r\n\r\n const faSubtitle: any = subtitles.find((subtitle: any) => subtitle.language === \"fa\");\r\n if (selectedSubtitle) {\r\n Object.values(videoTag().textTracks).find((textTrack: any) => textTrack.mode === \"showing\")!.mode = \"disabled\";\r\n dispatch(setSubtitleText(\"\"));\r\n dispatch(setSelectedSubtitle(undefined));\r\n sendFluentLog(subtitleLog(\"empty\"));\r\n } else {\r\n if (faSubtitle) {\r\n faSubtitle.mode = \"showing\";\r\n dispatch(setSelectedSubtitle(faSubtitle));\r\n sendFluentLog(subtitleLog(faSubtitle.language));\r\n } else {\r\n videoTag().textTracks[0].mode = \"showing\";\r\n dispatch(setSelectedSubtitle(videoTag().textTracks[0]));\r\n sendFluentLog(subtitleLog(videoTag().textTracks[0].language));\r\n }\r\n }\r\n};","import { IDetailsConfig } from \"./interfaces/interfaces\";\r\nimport store from \"./redux/store\";\r\nimport { getApiUrls } from \"./services/services\";\r\n\r\nexport const detailAPI = (id?: number) => {\r\n const { params } = store.getState().videoData;\r\n return getApiUrls().apiUrl + (id ? id : params.id);\r\n};\r\n\r\nconst detailsConfig: IDetailsConfig = {\r\n url: \"\",\r\n maxRetryCount: 0,\r\n headers: {},\r\n retryPolicy: [],\r\n errorCallback: undefined\r\n};\r\n\r\nconst nonLiveDetailsConfig = () => {\r\n detailsConfig.url = detailAPI();\r\n detailsConfig.maxRetryCount = 3;\r\n detailsConfig.retryPolicy = [\r\n {\r\n codeAbove: 500,\r\n codeBelow: null,\r\n excludeCodes: [],\r\n includeCodes: [409],\r\n delay: 1,\r\n count: 3\r\n },\r\n {\r\n codeAbove: null,\r\n codeBelow: 404,\r\n excludeCodes: [403, 402, 401, 400],\r\n includeCodes: [],\r\n delay: 10,\r\n count: 6\r\n }\r\n ];\r\n return detailsConfig;\r\n};\r\n\r\n\r\nexport const handleDetailsConfig = (userId?: number) => {\r\n nonLiveDetailsConfig();\r\n\r\n return detailsConfig;\r\n};\r\n"]}