{"version":3,"sources":["webpack:///src/app/core/local-storage-key.ts","webpack:///src/app/shared/navigation-bar/navigation-bar.model.ts","webpack:///src/app/core/device/device.service.ts","webpack:///src/app/components/header/back-key-url.service.ts","webpack:///src/app/app/profile/user-service.service.ts","webpack:///src/app/components/icons/close-icon/close-icon.component.ts","webpack:///src/app/core/token/app-parameters.service.ts","webpack:///src/app/interfaces/iToken.ts","webpack:///src/app/core/goftino.service.ts","webpack:///src/app/core/BrowserStorage/browser-storage.service.ts","webpack:///src/app/core/event-tracker/event-tracker.service.ts","webpack:///src/app/components/icons/lock-icon/lock-icon.component.ts","webpack:///src/app/helper/web-folder.enum.ts","webpack:///src/environments/environment.ts","webpack:///src/app/shared/directive/fallback-error-image.directive.ts","webpack:///src/app/animation/slideDownToUp.ts","webpack:///src/app/components/icons/icons.module.ts","webpack:///src/app/app/wishlist/wishlist.service.ts","webpack:///src/app/components/icons/close-icon/close-new-icon.component.ts","webpack:///src/app/shared/directive/lazy-loading-images/lazy.module.ts","webpack:///src/app/helper/oAuthTypeEnum.ts","webpack:///src/app/components/icons/done-icon/done-icon.component.ts","webpack:///src/app/shared/notification/notification.service.ts","webpack:///src/app/components/icons/search-icon/search-icon.component.ts","webpack:///src/app/shared/shared.module.ts","webpack:///src/app/app/pdp/pdp/pdp.service.ts","webpack:///node_modules/moment/locale sync ^\\.\\/.*$","webpack:///src/app/interfaces/iBook.ts","webpack:///src/app/core/token/token.service.ts","webpack:///src/app/shared/Indicator/indicator.component.html","webpack:///src/app/shared/Indicator/indicator.component.ts","webpack:///src/app/helper/deep-link.service.ts","webpack:///src/app/core/cache/Interceptor/cache-entry.ts","webpack:///src/app/core/cache/Interceptor/cache-map.service.ts","webpack:///src/app/app/pdp/pdp-dialog-markets/pdp-dialog-markets.component.ts","webpack:///src/app/app/pdp/pdp-dialog-markets/pdp-dialog-markets.component.html","webpack:///src/app/components/player/utils.ts","webpack:///src/app/components/player/audio-object.component.ts","webpack:///src/app/components/player/player.service.ts","webpack:///src/app/shared/navigation-bar/navigation-bar.service.ts","webpack:///src/app/app/authentication/authentication.service.ts","webpack:///src/app/shared/Indicator/indicator.service.ts","webpack:///src/app/core/cache/cache-object/cache-object.service.ts","webpack:///src/app/core/log/logger.ts","webpack:///src/app/core/log/log.service.ts","webpack:///src/app/core/http/http.service.ts","webpack:///src/app/helper/broadcast-message.ts","webpack:///src/app/config.app.ts","webpack:///src/app/helper/ClientTypeEnum.ts","webpack:///src/app/core/log/TypeShowLogInConsoleEnum.ts","webpack:///src/app/app/pdp/pdp-model.ts","webpack:///src/app/shared/Elements/button/button.component.ts","webpack:///src/app/shared/Elements/button/button.component.html","webpack:///src/app/shared/directive/lazy-loading-images/lazy-viewport.ts","webpack:///src/app/shared/pipes/PersianTime/persian-time.pipe.ts","webpack:///src/app/helper/base64-url.service.ts","webpack:///src/app/app-routing.module.ts","webpack:///src/app/shared/dialog-download-global/dialog-download-global.service.ts","webpack:///src/app/components/icons/download-icon/download-icon.component.ts","webpack:///src/app/shared/dialog-download-global/dialog-download-global.component.html","webpack:///src/app/shared/dialog-download-global/dialog-download-global.component.ts","webpack:///src/app/animation/animation-player.ts","webpack:///src/app/components/player/player-progressbar/player-progressbar.component.ts","webpack:///src/app/components/player/player-progressbar/player-progressbar.component.html","webpack:///src/app/components/icons/arrow-left-timer-icon/arrow-left-timer-icon.component.ts","webpack:///src/app/animation/fadeInOut.ts","webpack:///src/app/components/icons/play-circle-icon/play-circle-icon.component.ts","webpack:///src/app/components/icons/pause-circle-icon/pause-circle-icon.component.ts","webpack:///src/app/shared/pipes/convert-duration-to-hhmm.pipe.ts","webpack:///src/app/components/player/small-player/small-player.component.html","webpack:///src/app/components/player/small-player/small-player.component.ts","webpack:///src/app/components/icons/chevron-buttom-icon/chevron-buttom-icon.component.ts","webpack:///src/app/components/icons/info-icon/info-icon.component.ts","webpack:///src/app/components/icons/speed-icon/speed-icon.component.ts","webpack:///src/app/components/icons/arrow-right-timer-icon/arrow-right-timer-icon.component.ts","webpack:///src/app/components/icons/get-icon/get-icon.component.ts","webpack:///src/app/components/icons/share-icon/share-icon.component.ts","webpack:///src/app/components/icons/sleep-icon/sleep-icon.component.ts","webpack:///src/app/components/icons/last-page-icon/last-page-icon.component.ts","webpack:///src/app/components/icons/before-page-icon/before-page-icon.component.ts","webpack:///src/app/components/icons/bullet-icon/bullet-icon.component.ts","webpack:///src/app/components/icons/car-icon/car-icon.component.ts","webpack:///src/app/components/icons/comments-icon/comments-icon.component.ts","webpack:///src/app/components/player/player/player.component.html","webpack:///src/app/components/player/player/player.component.ts","webpack:///src/app/components/icons/navigation-bar-library-icon/navigation-bar-library-icon.component.ts","webpack:///src/app/components/icons/navigation-bar-tape-icon/navigation-bar-tape-icon.component.ts","webpack:///src/app/components/icons/navigation-bar-profile-icon/navigation-bar-profile-icon.component.ts","webpack:///src/app/shared/navigation-bar/navigation-bar.component.ts","webpack:///src/app/shared/navigation-bar/navigation-bar.component.html","webpack:///src/app/shared/notification/notification.component.html","webpack:///src/app/shared/notification/notification.component.ts","webpack:///src/app/core/pwa.service.ts","webpack:///src/app/helper/shared-data.service.ts","webpack:///src/app/app.component.html","webpack:///src/app/app.component.ts","webpack:///src/app/components/player/player.module.ts","webpack:///src/app/core/cache/Interceptor/caching-interceptor.ts","webpack:///src/app/core/log/logging-interceptor.ts","webpack:///src/app/core/token/token.interceptor.ts","webpack:///src/app/core/core.module.ts","webpack:///src/app/core/module-import-guard.ts","webpack:///src/app/core/HammerGestureConfig/hammer-gesture.config.ts","webpack:///src/app/services/global-error-handler.service.ts","webpack:///src/app/core/path-preserve-query-location-strategy.ts","webpack:///src/app/app.module.ts","webpack:///src/main.ts","webpack:///$_lazy_route_resource lazy namespace object"],"names":["LocalStorageKey","DEVICE_ID","NavigationBarEnum","library","vitrin","category","profile","navigator","window","DeviceService","baseHref","document","platform","indicatorService","parametersService","base64UrlService","storage","tokenService","router","route","notificationService","log","appVersionSource","appVersion$","this","asObservable","preloaderPage","preloaders","marketsSubscriptionStatusSource","marketsSubscriptionStatus$","marketsCreditStatusSource","marketsCreditStatus$","getValue","standalone","matchMedia","matches","value","logger","table","setVersionCode","versionCode","deviceIdToken","deviceId","apiLevelToken","apiLevel","clientIdToken","clientId","adverstimentIdToken","advertisementId","next","adverstimentId","accessToken","refreshToken","wholeJSON","expire","isAndroid","Android","setNewTokens","e","isIOS","webkit","messageHandlers","callbackHandler","postMessage","_token","params","getAdditionalWebViewParameters","paramsParsed","JSON","parse","mapTokenFromLogin","setToken","setConfig","token$","pipe","toPromise","isPwa","isDevelop","isNewLoginApi","checkStatusLogin","then","isLogin","adsId","expireIn","getLocal","_EXPIRE_IN","token","IOS","ANDROID","envName","FIREFOX","SAFARI","response","d","v","test","match","status","version","parseInt","info","userAgent","toLowerCase","v1","_comparator","v2","comparator","indexOf","Error","v1parts","split","v2parts","maxLen","Math","max","length","part1","part2","cmp","i","eval","link","withBackUrl","showHude","openUrlInBrowser","url","includes","Zarebin","iGap","putlife","pas","irancell","_open_window_obj","open","parameterZarebin","location","replace","assign","hide","href","type","getUnarchived","returnUrl","goToLogin","show","navigate","queryParams","exitFromApp","compareVersions","osVersion","tabname","_url","siteUrl","gotoCustomTab","stringify","tab","getTabSelected","featureSetVersion","error","showMinimal","_version","getAppVersionString","subscribe","data","CafeBazaar","rateOnMarket","Myket","isMyket","isCaffebazar","productType","productId","_adverstimentId","purchaseBook","goToWebWithToken","removeWebFolderPath","ticket","refresh_token","identityClientId","clientSecret","scope","_baseHref","generatedUrl","paymentUrl","random","toString","encodeUrl","openLinkInBrowser","setStringLocal","console","warn","identifier","title","checkToolsVersionSupport","shareFromWeb","share","text","webFolder","catch","setNotification","timeout","item","hidePreloader","onlyHud","hasOwnProperty","showPreloader","setTimeout","HIDE_DELAY","BackKeyUrlService","goftinoService","indicator","deepLinkService","navigationService","_location","backUrl","isCallFromGoftinoService","isDeeplink","backFromDeeplink","path","c","prepareNavigationBar","history","back","UserService","http","userInfoSource","userInfo$","res","username","firstName","lastName","mobileNo","email","get","post","CloseIConComponent","color","style","AppParametersService","platformLocation","appName","_locationObserve","isShowMessageEndSubscription","_scope","_isNewLoginApi","_clientSecret","_identityClientId","_refreshToken","_versionCode","_deviceId","_apiLevel","_clientId","_isShowMessageEndSubscription","body","overflow","pushState","tokenTypeEnum","GoftinoService","deviceService","browserLocalStorage","rendererFactory","isLoadedGoftino","isOpenGoftino","userInfo","pathname","renderer","createRenderer","l","s","script","createElement","src","async","charset","id","onload","getUnreadCount","appendChild","Goftino","setUser","name","phone","about","getAppVersion","forceUpdate","setWidget","hasIcon","hasSound","counter","close","unreadKey","Object","keys","localStorage","find","x","startsWith","getItem","removeEventListener","getElementById","remove","BrowserStorageService","key","hasEncrypt","sessionStorage","atob","encrypt","undefined","btoa","setItem","removeItem","removeSession","isForce","removeLocal","EventTrackerService","device","jsonText","clean","logEvent","debug","obj","propName","LockIconComponent","WebFolderEnum","webview_new","landing_webview_dev","landing_webview_pwa_dev","app_webview_dev","pwa","environment","production","auth","cache","imageUrl","endpoints","elasticSearchEndpoint","FallbackErrorImageDirective","defaultImg","slideOutDown","transform","easing","offset","visibility","slideInUp","slideInUpOnEnterAnimation","options","anchor","animateChildren","optional","delay","duration","translate","IconsModule","WishlistService","_listItems","Set","listItems","delete","setSession","values","add","getItem$","getWishlistItems","z","items","map","product","size","getSession","has","CloseNewIconComponent","opacity","LazyModule","provide","viewport","setup","oAuthTypeEnum","google","zarebin","putlifeAuth","samantelAuth","iranPLAuth","pasAuth","irancellAuth","DoneIconComponent","NotificationService","notifSource","notification$","notif","SearchIconComponent","SharedModule","ngModule","providers","PDPService","notification","playerService","eventTracker","_isBackFromItem","statusPlaySource","statusPlay$","getSoldBooks","goToPlayBook","initial","identifierBookId","isDirectPlay","dataBook","getObjectCache","purchase","isOwner","purchaseButtonState","purchaseButtonAction","allowPlay","products","contentType","Podcast","setStatusPlayButton","audioBookId","image","recordVersion","genreIdentifier","genres","parentIdentifier","genreTitle","parentTitle","AudioBook","Capsule","narrators","author","AudioSeries","play","_obj","subscriptionButtonState","item_id","hideHude","message","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","resolve","module","exports","ProductTypeEnum","TokenService","_REFRESH_TOKEN","_ACCESS_TOKEN","accessTokenSource","isLoginSource","isLogin$","tokenSource","setAccessToken","setLocal","setRefreshToken","deviceType","_map","tokenInfo","getDecodedAccessToken","expireTokenTime","Date","setUTCSeconds","exp","expires","_exp","_access_token","_refresh_token","now","getNewRefreshToken","removeAllLocals","IndicatorComponent","service","isLoading","className","changes","currentValue","sliderOldVersion","indicator$","indicatorHude$","statusHude","DeepLinkService","deeplink","_isDeeplink","getCurrentTab","toUpperCase","getDeeplink","MAX_CACHE_AGE","CacheMapService","cacheMap","Map","entry","urlWithParams","entryTime","set","deleteExpiredCache","forEach","PdpDialogMarketsComponent","onClosePopup","isShow","purchaseButtonActionType","emit","convertTimeRangesToSeconds","buffered","Array","from","_","index","round","start","end","AudioObjectComponent","initialMedia","autoBitrateEnabled","bitRates","currentBitrateIndex","currentTime","remainingTime","fps","muted","playbackRate","volume","PlayerService","injector","componentFactoryResolver","CHAPTERS_IN_LOCAL","IS_PLAYING","CHAPTERS_PLAYED","_hls","_chapter$","BehaviorSubject","chapterSource","_media$","mediaSource","_statusPlayBtn$","isEnd","isPlaying","isPause","statusPlayBtnSource","_currentTime$","currentTimeSource","_bufferTime$","bufferTimeSource","_showPlayer$","showPlayerSource","_showSmallPlayer$","showSmallPlayerSource","_info$","infoSource","_remainSleepTimeToMinutes$","remainSleepTimeToMinutes","_goToSmallPlayer$","goToSmallPlayerSource","remainSleepTimeToMinutesSubscription","Subscription","isPlayWithSmallPlayer","isSampleMode","chaptersInStorage","currentChapter","chapterHistoryPlayed","countChapter","setDurationCalledTime","_sleepInEndEpisode","isUseHlsMode","onSeekForward","onSeekBackward","audioEvents","setCurrentBitrateIndex","bitrateIndex","media","hlsInstance","getHls","currentLevel","state","isSmallPlayerMode","onPause","releaseHls","isShowSmallPlayer","_chapters","sort","order","chapterId","durationPlayed","setChaptersToAudiobook","getChapterAudiobook","setChapterHistoryPlayed","initHls","streamUrl","downloadUrl","chapters","offlineUrl","isChangeChapter","factory","resolveComponentFactory","componentFactoryAudioObj","create","audio","instance","audioPlayer","nativeElement","onseeked","onSeeked","onloadedmetadata","onLoadedMetadata","onratechange","onRateChange","onpause","onplay","onPlay","ondurationchange","onProgress","onwaiting","onWaiting","ontimeupdate","onTimeUpdate","onended","onEnded","onplaying","onPlaying","onloadeddata","ev","onLoadeddata","mediaSession","metadata","MediaMetadata","artist","album","artwork","sizes","setActionHandler","onSeeking","getIndexOfChapterPlaying","_chapterId","goToChapter","setPositionState","updatePositionStateNotification","maxBufferLength","maxBufferSize","maxMaxBufferLength","appendErrorMaxRetry","fetchSetup","context","initParams","credentials","Request","attachMedia","on","MEDIA_ATTACHED","loadSource","MANIFEST_PARSED","levels","level","bitrate","MANIFEST_LOADED","FRAG_PARSING_DATA","nb","endPTS","startPTS","LEVEL_SWITCHED","BUFFER_APPENDING","getMedia","BUFFER_EOS","BUFFER_CREATED","ERROR","event","position","destroy","pause","hls","Infinity","Promise","floor","some","timeRange","min","paused","playbackState","time","isNext","setOnSleepTimeout","indexItem","findIndex","err","encodeURIComponent","_i","timeOut","callback","_sleepTimeOut","clearTimeout","unsubscribe","performance","timer","startWith","switchMap","ceil","isShowPlayer","hasForce","NavigationBarService","_activeMenu","activeMenu","AuthenticationService","userService","mappedToken","setUserInfo","setStatusLogin","closePlayer","IndicatorService","indicatorSource","indicatorHudeSource","autoHide","CacheObjectService","_pageNumer","observableCache","Cache","objCacheList","of","fetchObjectCachePost","tap","rawData","catchError","handleError","publishReplay","refCount","fetchObjectCache","currentPage","trim","result","nameCahe","_urls","total","pageNumer","fetchData","push","urls","decodeURIComponent","_errMsg","statusText","throwError","LoggerEvents","Flush","Logger","logEndpoint","APP_FIELD","ENV_FIELD","VERSION_FIELD","USER_NAME_FIELD","ELAPSED_MS_FIELD","REQUEST_PATH_FIELD","URL_FIELD","APP_STATE_FIELD","buffer","flush","Subject","debounceTime","filter","flushBuffer","splice","buildLogString","reduce","sum","buildIndexChunk","buildBodyChunk","_index","moment","format","_type","date","messageTemplate","getMessageTemplate","fields","getFields","toISOString","field","join","appVersion","userId","elapsedTime","requestPath","LogService","logSource","log$","logMessages","initialize","_logger","errorMsg","default","warning","groupCollapsed","trace","groupEnd","HttpService","BASE_URL","ContentType","headers","append","patch","model","isLoginWithPasswordLess","password","grantType","put","mobileNumber","request","startMoment","method","requestDuration","diff","logHttpInfo","observer","requestBeginTime","logTime","complete","broadcastChannelName","ngZone","onMessage","broadcastChannel","BroadcastChannel","onmessage","zone","source","Observable","run","adverstiment","version_app","feature_version_app","IS_NEW_LOGIN","client_secret","NAVAAR_CLIENT_ID","SCOPE","pwa_version","BROADCAST_SERVICE","ClientTypeEnum","Develop","ghesse","other","iranpl","TypeShowLogInConsole","PlayButtonMode","Invisible","DisabledBig","Big","SmallWithPlayIcon","PlayButtonAction","NavigateToSubscriptionPage","OpenCartDialog","PlayPurchased","AddFreeAndPlay","PlayNewSubscription","disabled","getFree","showSubscriptionPlans","getBySubscription","HasCafeBazaarCredit","HasNotEnoughCafeBazaarCredit","Archived","subscriptionButtonStateType","disable","limitedProduct","noQuota","noSubscription","intervalQuotaHasFinished","playByNewSubscription","libraryTransitionType","loan","return","gift","archived","unarchived","ignoreQuotaUseSubscriptionDiscount","navaarGift","ButtonComponent","typeBtn","isShowLoader","_onclicked","clicked","LazyViewport","handleIntersectionUpdate","entries","lazyTarget","targets","target","updateVisibility","element","observe","IntersectionObserver","root","rootMargin","threshold","unobserve","disconnect","clear","PersianTimePipe","args","hours","minutes","Base64UrlService","alphabet","lookup","ie","ieo","nan0","nan1","nan2","toUtf8","len","enc","isNaN","charAt","chr","charCodeAt","fromUtf8","String","fromCharCode","input","pad","decode","encode","routes","loadChildren","LibraryModule","ShopModule","redirectTo","CreditCodeModule","AuthenticationModule","m","CLPModule","matcher","consumed","posParams","isSeries","PDPModule","SearchModule","SubscriptionModule","CatalogModule","ProfileModule","ArtistsModule","CreditModule","AboutModule","WishlistModule","FeedbackModule","WebviewPageModule","ArchiveModule","PublishersModule","pathMatch","AppRoutingModule","forRoot","urlUpdateStrategy","enableTracing","scrollPositionRestoration","anchorScrolling","scrollOffset","paramsInheritanceStrategy","preloadingStrategy","onSameUrlNavigation","DialogDownloadGlobalService","showDialogSource","showDialog$","_identifier","DownloadIconComponent","DialogDownloadGlobalComponent","tokenServices","resolver","pdpService","dialogDownloadGlobalService","render","showAnimationLoading","dataForMarkets","isLoad","showDialogForShowDialogMarket","preventOnbackForMarkets","loadData","stateAudiobookRequest","logItem","onPopState","hideDownloadPopup","eventStatusAnimation","toState","fromState","addModalOpenedToUrl","setStyle","removeStyle","onBackKeyButton","slideAnimationPopupDownload","_purchaseButtonAction","containerMarkets","componentRef","createComponent","caculatePrice","discounts","discountValue","discountedPrice","onClosePopupShowMarkets","goToCustomTab","marketsDirectPurchase","isFinal","goToLibraryTabRefresh","price","stateDiscountedPrice","getMainPriceForDiscount","x_button_type","goToLibraryTab","navigateByUrl","openMarketsDialog","isMarkets","classColor","ms","onSlidePopupDownload","slideUpDownPlayer","stateNameDown","stateNameUp","durationUp","delayUp","durationDown","delayDown","PlayerProgressbarComponent","playerServices","isSmall","active","xOffset","timelineWidth","timeUpdate","bufferUpdate","initialX","getPosition","playhead","clientX","currentX","setCurrentTime","clickPercent","newMargLeft","touches","timeline","setTranslate","offsetWidth","isDrag","changedTouches","xPos","el","progressbar","width","_currentTime","_bufferTime","bufferProgressbar","getBoundingClientRect","left","onClickTimeline","onDragStart","onDragEnd","onDrag","ArrowLeftTimerIconComponent","FadeInOutAnimation","PlayCircleIconComponent","showLoader","PauseCircleIconComponent","ConvertDurationToHHmmPipe","seconds","h","SmallPlayerComponent","navigationbarService","ChevronButtomIconComponent","InfoIconComponent","SpeedIconComponent","speed","ArrowRightTimerIconComponent","GetIconComponent","ShareIconComponent","SleepIconComponent","LastPageIconComponent","BeforePageIconComponent","BulletIconComponent","CarIconComponent","CommentsIconComponent","PlayerComponent","parameterService","navigationBarService","showLargePlayer","showCloseIcon","itemsForOption","isDrivingMode","subscription","clientTypeEnum","speeds","isSelect","typeId","sleeps","selectSpeed","playerState","slidePopupAnim","smallPlayerState","coverState","chapterListState","onSmallPlayer","overlayState","closeChapterList","addClass","removeClass","closeSliderPopup","setOffSleepTime","setOnSleepTimeInEndEpisode","setPlaybackRate","overlaySleepSpeedState","onSmallPlayerDone","closeSmallPlayer","height","NavigationBarLibraryIconComponent","NavigationBarTapeIconComponent","NavigationBarProfileIconComponent","NavigationBarComponent","navigationBarType","unread","countGoftinoEl","goToSmallPlayer","NotificationComponent","notifSubscription","timerSubscription","PwaService","swUpdate","swPush","appRef","hasUpdateSource","hasUpdate$","isUpdatingSource","isUpdating$","messageSource","message$","vapidKeys","firebaseConfig","apiKey","authDomain","databaseURL","storageBucket","measurementId","fcmPublicVapidKey","messagingSenderId","appId","projectId","serverKey","payload","isEnabled","checkForUpdate","appIsStable$","isStable","first","everySixHours$","interval","concat","available","activated","activateUpdate","reload","Notification","permission","serviceWorker","ready","registration","pushManager","getSubscription","alert","SharedDataService","_data","setWebViewState","pwaService","AppComponent","titleService","vcRef","componentResolver","authenticationService","eventTrackerService","wishListServices","sharedDataService","backKeyUrlService","dialogDownloadGlobal","startUrl","allow_load","showButtonInstallApp","finally","component","goBackNative","goBack","updatePurchaseButton","CheckStateIsPlayBtn","NavigateToAudioBook","NavigateToSubscription","NavigateToCommentAudiobook","audiobookdId","setAppVersion","goToStartPage","purchaseAcceptCafeBazaar","cafeBazaarToken","cafebazaarNotInstaled","cafebazaarCancel","showDialogDownload","routeToDeeplink","getWebViewState","getFromNative","showLoading","startUpAfterSetToken","removeGoftinoScript","loadScript","search","setPreloaderPage","events","goftinoReady","preventDefault","deferredPromptInstallAppEvent","setDeviceIdBrowser","showModalHasUpdate","showModalIsUpdating","showModalIsUpdateMessage","initNavigationBarService","initPlayer","getAndSetParams","restoredState","closeWidget","getDeepLink","screen","orientation","lock","initNotification","initDialogDownloadFromMarkets","initIndicator","p","oauthType","loginOauth","setTitle","init","infoPlayer","addIdsToList","setMarketsNewStatus","purchaseProductType","developerPayload","checkMarketsToken","decoded","oData","setAppversion","createUrlTree","stopPropagation","userChoice","choiceResult","outcome","prompt","dialogDownloadGlobalComponent","PlayerModule","CachingInterceptor","CACHEABLE_URLS","isRequestCachable","handle","cachedResponse","LoggingInterceptor","startTime","finalize","logDetails","msg","showLog","TokenInterceptor","isRefreshing","tokenSubject","setHeaders","clone","onLine","addToken","handle401Error","handle400Error","take","setTokenToDevice","access_token","expires_in","logout","CoreModule","parentModule","moduleName","useClass","multi","HammerGesturesConfig","overrides","enable","velocity","direction","GlobalErrorHandler","super","sentencesForWarningLogging","logService","errorTraceStr","stack","isWarning","logWarning","logError","whiteListSentence","PreserveQueryLocationStrategy","_platformLocation","preservedKeys","hash","query","substr","internal","prepareExternalUrl","pathQueryIndex","pathQueryEndWithAndChar","endsWith","pathQueryKeyvalues","extractKeyvaluesFromQuery","keyvalues","preservedKeyvalues","kv","pk","queryStr","AppModule","useFactory","getBaseHrefFromDOM","deps","setClientIdPwa","useValue","showDialog","register","enabled","registrationStrategy","paramApp","URLSearchParams","dsn","integrations","tracesSampleRate","release","bootstrapModule","ref","appComponent","components","changeState","Proxy","thisArg","argList","apply","webpackEmptyAsyncContext"],"mappings":"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","file":"x","sourcesContent":["export class LocalStorageKey {\n public static readonly DEVICE_ID = 'deviceId';\n}\n","\nexport enum NavigationBarEnum {\n library,\n vitrin,\n category,\n profile\n}\n","import {Platform} from '@angular/cdk/platform';\nimport {APP_BASE_HREF, DOCUMENT} from '@angular/common';\nimport {Inject, Injectable, Injector} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {\n adverstiment,\n apiLevel,\n feature_version_app,\n IS_NEW_LOGIN,\n pwa_version,\n version_app,\n versionCode,\n} from '@app/config.app';\nimport {Base64UrlService} from '@app/helper/base64-url.service';\nimport {ClientTypeEnum} from '@app/helper/ClientTypeEnum';\nimport {tokenType, tokenTypeEnum} from '@app/interfaces/iToken';\nimport {IndicatorService} from '@app/shared';\nimport {NotificationService} from '@app/shared/notification/notification.service';\nimport {environment} from '@env/environment';\nimport {BehaviorSubject, Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {BrowserStorageService} from '../BrowserStorage/browser-storage.service';\nimport {TypeShowLogInConsole} from '../log/TypeShowLogInConsoleEnum';\nimport {AppParametersService} from '../token/app-parameters.service';\nimport {TokenService} from '../token/token.service';\nimport {LogService} from './../log/log.service';\nimport {v4 as uuidv4} from 'uuid';\nimport { LocalStorageKey } from '@app/core/local-storage-key';\n\nconst navigator = window.navigator as any;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceService {\n\n public _open_window_obj: any;\n\n public get appVersion(): string {\n return this.appVersionSource.getValue();\n }\n\n private appVersionSource: BehaviorSubject = new BehaviorSubject('');\n public appVersion$: Observable = this.appVersionSource.asObservable();\n\n public preloaderPage: string = '';\n private preloaders: any = [];\n private static HIDE_DELAY: number = 0;\n\n private marketsSubscriptionStatusSource: BehaviorSubject = new BehaviorSubject(0);\n public marketsSubscriptionStatus$: Observable = this.marketsSubscriptionStatusSource.asObservable();\n\n private marketsCreditStatusSource: BehaviorSubject = new BehaviorSubject(0);\n public marketsCreditStatus$: Observable = this.marketsCreditStatusSource.asObservable();\n\n public get isPwaInstalled(): boolean {\n // For iOS\n if ((window.navigator as any).standalone) return true\n\n // For Android\n if (window.matchMedia('(display-mode: standalone)').matches) return true\n\n // If neither is true, it's not installed\n return false\n }\n\n public static injector: Injector;\n\n constructor(\n @Inject(APP_BASE_HREF) private readonly baseHref: string,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly platform: Platform,\n private readonly indicatorService: IndicatorService,\n private readonly parametersService: AppParametersService,\n private readonly base64UrlService: Base64UrlService,\n private readonly storage: BrowserStorageService,\n private readonly tokenService: TokenService,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly notificationService: NotificationService,\n private readonly log: LogService) {\n }\n\n public setConfig(value) {\n this.log.logger(`setTokenData:`);\n this.log.logger(value, TypeShowLogInConsole.table);\n this.setVersionCode(value[tokenTypeEnum.versionCode]);\n this.deviceIdToken(value[tokenTypeEnum.deviceId]);\n this.apiLevelToken(value[tokenTypeEnum.apiLevel]);\n this.clientIdToken(value[tokenTypeEnum.clientId]);\n this.adverstimentIdToken(value[tokenTypeEnum.advertisementId]);\n delete value['token'];\n delete value['refresh-token'];\n delete value['expireIn'];\n }\n\n public setVersionCode(value) {\n this.log.logger(`set App version: ${value}`);\n this.parametersService.versionCode = value;\n }\n\n public setAppversion(value) {\n this.log.logger(`set App version: ${value}`);\n this.appVersionSource.next(value);\n }\n\n public deviceIdToken(value) {\n this.log.logger(`deviceId Token: ${value}`);\n this.parametersService.deviceId = value;\n }\n\n public apiLevelToken(value) {\n this.log.logger(`apiLevel Token: ${value}`);\n this.parametersService.apiLevel = value;\n }\n\n public clientIdToken(value) {\n this.log.logger(`clientId Token: ${value}`);\n this.parametersService.clientId = value;\n }\n\n public adverstimentIdToken(value) {\n this.log.logger(`adverstimentIdToken Token: ${value}`);\n this.parametersService.adverstimentId = value;\n }\n\n public setTokenToDevice(accessToken, refreshToken, wholeJSON, expire) {\n if (this.isAndroid()) {\n try {\n (window as any).Android.setNewTokens(accessToken, refreshToken, wholeJSON, expire);\n } catch (e) {\n this.log.logger('Android.setNewTokens error');\n }\n } else if (this.isIOS()) {\n this.log.logger('Sending new tokens to IOS via postMessage');\n (window as any).webkit.messageHandlers.callbackHandler.postMessage('accesstoken-' + accessToken);\n (window as any).webkit.messageHandlers.callbackHandler.postMessage('refreshtokenJSON-' + wholeJSON);\n }\n }\n\n public async getAndSetParams(): Promise {\n let _token: tokenType | null;\n if (this.isAndroid()) {\n this.log.logger('WebHttpRequest: AuthService: getParams - android');\n let params = (window as any).Android.getAdditionalWebViewParameters();\n let paramsParsed = JSON.parse(params);\n _token = this.tokenService.mapTokenFromLogin('android', paramsParsed);\n this.tokenService.setToken(_token);\n this.setConfig(_token);\n } else if (this.isIOS()) {\n this.log.logger('WebHttpRequest: getParams - ios');\n _token = await this.tokenService.token$.pipe(map(value => value ? (this.tokenService.mapTokenFromLogin('ios', value)) : null)).toPromise();\n } else if (this.isPwa() || this.isDevelop()) {\n this.setVersionCode(versionCode);\n this.apiLevelToken(apiLevel);\n this.adverstimentIdToken(adverstiment);\n this.parametersService.isNewLoginApi = IS_NEW_LOGIN;\n this.tokenService.checkStatusLogin().then();\n if (!this.tokenService.isLogin)\n _token = {\n \"api-level\": this.parametersService.apiLevel,\n \"client-id\": this.parametersService.clientId,\n \"device-id\": this.parametersService.deviceId,\n \"refresh-token\": null,\n \"version-code\": this.parametersService.versionCode,\n adsId: this.parametersService.adverstimentId,\n expireIn: this.storage.getLocal(this.tokenService._EXPIRE_IN),\n token: null\n };\n } else\n _token = null;\n return _token;\n }\n\n public isIOS(): boolean {\n return (this.isDevelop() || this.isPwa()) ? false : this.platform.IOS;\n }\n\n public isAndroid(): boolean {\n return (this.isDevelop() || this.isPwa()) ? false : ((window as any).Android || this.platform.ANDROID);\n }\n\n public isPwa(): boolean {\n return environment.envName === 'pwa';\n }\n\n public isFirefox(): boolean {\n return this.platform.FIREFOX;\n }\n\n public isSafari(): boolean {\n return this.platform.SAFARI;\n }\n\n public osVersion(): string {\n let response = \"\";\n if (this.isDevelop() || this.isPwa())\n response = (version_app as string);\n else if (this.isIOS()) {\n let d, v;\n if (/iP(hone|od|ad)/.test(navigator.platform)) {\n v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n d = {\n status: true,\n version: parseInt(v[1], 10),\n info: parseInt(v[1], 10) + '.' + parseInt(v[2], 10) + '.' + parseInt(v[3] || 0, 10)\n };\n } else {\n d = {status: false, version: false, info: ''}\n }\n response = d.status ? d.info : null;\n } else if (this.isAndroid()) {\n const ua = navigator.userAgent.toLowerCase();\n let match = ua.match(/android\\s([0-9\\.]*)/);\n response = match ? match[1] : null;\n }\n return response;\n }\n\n public compareVersions(v1, _comparator, v2): any {\n \"use strict\";\n let comparator = _comparator == '=' ? '==' : _comparator;\n if (['==', '===', '<', '<=', '>', '>=', '!=', '!=='].indexOf(comparator) == -1) {\n throw new Error('Invalid comparator. ' + comparator);\n }\n let v1parts = v1.split('.'), v2parts = v2.split('.');\n let maxLen = Math.max(v1parts.length, v2parts.length);\n let part1, part2;\n let cmp = 0;\n for (let i = 0; i < maxLen && !cmp; i++) {\n part1 = parseInt(v1parts[i], 10) || 0;\n part2 = parseInt(v2parts[i], 10) || 0;\n if (part1 < part2)\n cmp = 1;\n if (part1 > part2)\n cmp = -1;\n }\n return eval('0' + comparator + cmp);\n }\n\n public checkToolsVersionSupport(): boolean {\n //TODO: kazazi - \\check this and active version check after release next native app version\n let status = true;\n // if ((this.device.isAndroid() && this.appVersion >= '2.1.2') || (this._auth.isIOS && this.appVersion >= '2.1.2')) {\n // this.toolsVersionSupport = true;\n // }\n return status;\n }\n\n public openLinkInBrowser(link, withBackUrl: boolean = true) {\n this.indicatorService.showHude(true);\n if (this.isAndroid()) {\n (window as any).Android.openUrlInBrowser(link);\n } else if (this.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`openUrlInBrowser-` + link);\n } else {\n if (withBackUrl) {\n if (this.router.url.includes('client-id'))\n link += '&back-url=' + this.router.url;\n else\n link += '&back-url=' + this.router.url + \"?client-id=\" + this.parametersService?.clientId ?? 10;\n }\n\n if (this.parametersService.clientId !== ClientTypeEnum.Zarebin && this.parametersService.clientId !== ClientTypeEnum.iGap && this.parametersService.clientId !== ClientTypeEnum.putlife && this.parametersService.clientId !== ClientTypeEnum.pas && this.parametersService.clientId !== ClientTypeEnum.irancell)\n this._open_window_obj = window.open('', '_blank');\n switch (this.parametersService.clientId) {\n case ClientTypeEnum.Zarebin:\n if (this.parametersService.parameterZarebin)\n link += '&p=' + this.parametersService.parameterZarebin;\n this.document.location.replace('zarebin://open?url=' + link.replace(/\\&/gi, '%26'));\n break;\n case ClientTypeEnum.iGap:\n case ClientTypeEnum.putlife:\n case ClientTypeEnum.pas:\n case ClientTypeEnum.irancell:\n this.document.location.assign(link);\n break;\n default:\n this.indicatorService.hide();\n this._open_window_obj.location.href = link;\n break;\n }\n }\n }\n\n public refreshTabWishlistAndarchiveNative(type: 'wishlist' | 'purchase') {\n if (this.isAndroid()) {\n (window as any).Android.getUnarchived(type);\n } else {\n //TODO: refresh tab wishlist and archive in library native\n }\n }\n\n public goTologinPageNative(returnUrl?: string | null) {\n if (this.isAndroid()) {\n (window as any).Android.goToLogin();\n } else if (this.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`goToLogin`);\n } else if (this.isPwa() || this.isDevelop()) {\n this.indicatorService.show();\n this.router.navigate(['auth'], {queryParams: {returnUrl}}).then();\n }\n }\n\n public exitFromApp() {\n if (this.isAndroid())\n (window as any).Android.exitFromApp();\n else if (this.isIOS())\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(\"exit\");\n }\n\n public isDisableAnimation(version: string = '5.0.0'): boolean {\n if (this.isPwa() || this.isDevelop())\n return false;\n return !this.compareVersions(this.osVersion(), '>', version);\n }\n\n public goToCustomTab(url: string, tabname: 'profile' | 'shop' | 'category') {\n const _url = `${environment.siteUrl}${this.baseHref}${url}`;\n if (this.isAndroid())\n (window as any).Android.gotoCustomTab(_url, tabname);\n else if (this.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`gotoCustomTab-${JSON.stringify({\n url: _url,\n tab: tabname\n })}`);\n } else {\n //TODO: handle for PWA and DEVELOP\n }\n }\n\n public getCurrentTab(): string {\n let tab = '';\n if (this.isAndroid())\n tab = (window as any).Android.getTabSelected();\n else if (this.isIOS()) {\n\n } else {\n //TODO: handle for PWA and DEVELOP\n }\n return tab;\n }\n\n public getFeaturesetVersion(): number {\n let version: number = 0;\n try {\n if (this.isAndroid()) {\n version = (window as any).Android.featureSetVersion();\n } else if (this.isPwa() || this.isDevelop()) {\n version = (feature_version_app as number);\n }\n } catch (error) {\n version = 0;\n }\n return version;\n }\n\n public getAppVersion(showMinimal = true): string {\n let _version: string = \"\";\n if (this.isAndroid()) {\n const version = (window as any).Android.getAppVersionString();\n if (showMinimal)\n _version = version.split(' ')[0];\n else\n _version = version;\n\n this.appVersionSource.next(_version);\n } else if (this.isIOS()) {\n this.appVersion$.subscribe(data => {\n _version = data;\n this.appVersionSource.next(_version);\n });\n } else if (this.isPwa()) {\n _version = pwa_version;\n this.appVersionSource.next(_version);\n }\n this.log.logger('this.appVersion = ' + _version);\n return _version;\n }\n\n public isCaffebazar(): boolean {\n const clientId = this.parametersService.clientId;\n this.log.logger('is cafe bazzar called');\n return clientId === ClientTypeEnum.CafeBazaar;\n }\n\n public showDialogRatoToApp() {\n if (this.isAndroid()) {\n (window as any).Android.rateOnMarket();\n }\n }\n\n public isMyket(): boolean {\n const clientId = this.parametersService.clientId;\n this.log.logger('is Myket called');\n return clientId === ClientTypeEnum.Myket;\n }\n\n public typeMyket(): string {\n let type = '';\n if (this.isMyket())\n type = 'MYKET';\n else if (this.isCaffebazar())\n type = 'CAFEBAZZAR';\n return type;\n }\n\n public isMarkets(): boolean {\n this.log.logger('is MARKETS called');\n return this.isMyket() || this.isCaffebazar();\n }\n\n public isDevelop(): boolean {\n return environment.envName === 'develop';\n }\n\n public setMarketsNewStatus(status: number, productType: string) {\n if (productType == 'credit') {\n this.log.logger('setMarketsNewStatus changed >> setMarketsNewStatus$ : ');\n this.log.logger(status);\n this.marketsCreditStatusSource.next(status);\n } else if (productType == 'subscription') {\n this.log.logger('setMarketsNewStatus changed >> marketsSubscriptionStatus$ : ');\n this.log.logger(status);\n this.marketsSubscriptionStatusSource.next(status);\n }\n }\n\n public purchaseBook(productId) {\n let _adverstimentId = this.parametersService.adverstimentId;\n if (_adverstimentId)\n productId += '&adverstimentId=' + _adverstimentId;\n if (this.parametersService.isNewLoginApi) {\n productId += '&newLogin=true&deviceId=' + this.parametersService.deviceId;\n }\n if (this.isAndroid()) {\n this.log.logger('Sending purchase to Android with ' + productId);\n (window as any).Android.purchaseBook(productId);\n } else if (this.isIOS()) {\n this.log.logger('Sending purchase to IOS with ' + productId);\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`purchase-${productId}`);\n } else {\n this.goToWebWithToken(`/app-checkout/${productId}`);\n }\n }\n\n public goToWebWithToken(url: string | null = null, removeWebFolderPath: string | null= null) {\n let ticket: any;\n if (this.parametersService.isNewLoginApi) {\n ticket = {\n refresh_token: this.parametersService.refreshToken,\n \"navaarVersionCode\": this.parametersService.versionCode,\n \"identityClientId\": this.parametersService.identityClientId,\n \"clientSecret\": this.parametersService.clientSecret,\n \"scope\": this.parametersService.scope,\n \"as:device_id\": this.parametersService.deviceId,\n };\n } else {\n ticket = {\n refresh_token: this.parametersService.refreshToken,\n \"as:device_id\": this.parametersService.deviceId,\n \"as:client_id\": this.parametersService.clientId,\n };\n }\n let _baseHref = this.baseHref;\n if (_baseHref.includes('landing'))\n _baseHref = '/landing/';\n if (removeWebFolderPath)\n _baseHref = '/';\n let generatedUrl = environment.paymentUrl + _baseHref + `auth-redirect/index.html?clientId=${this.parametersService.clientId}&v=${Math.random().toString().replace('.', 'm')}`;\n if (url !== null)\n generatedUrl += `&url=${url}`;\n\n generatedUrl += `&ticket=${this.base64UrlService.encodeUrl(JSON.stringify(ticket))}`;\n if (this.parametersService.isNewLoginApi)\n generatedUrl += `&newLogin=true&deviceId=${this.parametersService.deviceId}`;\n this.openLinkInBrowser(generatedUrl);\n }\n\n public setDeviceIdBrowser() {\n let deviceId = this.storage.getLocal(LocalStorageKey.DEVICE_ID);\n\n if (!deviceId) {\n deviceId = uuidv4();\n this.storage.setStringLocal(LocalStorageKey.DEVICE_ID, deviceId);\n }\n console.warn(deviceId);\n this.parametersService.deviceId = deviceId;\n }\n\n public share(identifier, title) {\n if (!this.checkToolsVersionSupport()) {\n this.notificationService.setNotification({\n text: 'برای استفاده از این قابلیت ، اپلیکیشن خود را بروزرسانی کنید',\n type: 'error',\n timeout: 5000\n });\n return;\n }\n if (this.isAndroid()) {\n this.log.logger('share from web to ANDROID url = ' + identifier + ' >> ' + title);\n (window as any).Android.shareFromWeb(identifier, title);\n } else if (this.isIOS()) {\n this.log.logger('share from web to IOS url = ' + '/audiobook/' + identifier);\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(\"shareFromWeb-\" + identifier + ':' + title);\n } else if (this.isPwa() || this.isDevelop()) {\n if (navigator.share) {\n navigator.share({\n text: 'اشتراک گذاری',\n title,\n url: `${environment.url}/${environment.webFolder}/pdp/${identifier}/${title}`\n }).then(() => {\n console.log('Thanks for sharing!');\n })\n .catch(console.error);\n } else {\n // fallback\n }\n }\n }\n\n /**\n * @deprecated Since version angular 5 Will be deleted in upgrade to angular > 8 Use bar instead.\n */\n setPreloaderPage(url) {\n switch (url) {\n case url == '/categories':\n case url.indexOf('/catalog') !== -1:\n case url.indexOf('/category') !== -1:\n case url.indexOf('/categories') !== -1:\n if (this.isAndroid())\n this.preloaderPage = 'mShopCategoriesFragment';\n else if (this.isIOS())\n this.preloaderPage = 'categories';\n break;\n case url == '/':\n case url.indexOf('/audiobook') !== -1:\n case url.indexOf('/pdp') !== -1:\n if (this.isAndroid())\n this.preloaderPage = 'mShopFragment';\n else if (this.isIOS())\n this.preloaderPage = 'shop';\n break;\n case url.indexOf('/about-book') !== -1:\n if (this.isAndroid())\n this.preloaderPage = 'mAboutBookFragment';\n else if (this.isIOS())\n this.preloaderPage = 'about-book';\n break;\n case url.indexOf('/profile') !== -1:\n case url.indexOf('/credit') !== -1:\n case url.indexOf('/subscription') !== -1:\n if (this.isAndroid())\n this.preloaderPage = 'mProfileFragment';\n else if (this.isIOS())\n this.preloaderPage = 'profile';\n break;\n default:\n if (this.isAndroid()) {\n for (const item of ['mShopCategoriesFragment', 'mShopFragment', 'mAboutBookFragment', 'mProfileFragment']) {\n (window as any).Android.hidePreloader(item);\n }\n } else if (this.isIOS()) {\n for (const item of ['categories', 'shop', 'about-book', 'profile']) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`${item}-hide`);\n }\n }\n break;\n }\n this.log.logger('>>> Preloader Page set to: ' + this.preloaderPage);\n }\n\n\n /**\n * @deprecated Since version angular 5 Will be deleted in upgrade to angular > 8 Use bar instead.\n */\n show(onlyHud: boolean = false) {\n if (this.preloaderPage === '' || this.preloaderPage.length === 0 || this.preloaderPage == ' ')\n return;\n\n this.log.logger('LoaderService: show(onlyHud = ' + onlyHud + ')');\n\n if (this.preloaders.hasOwnProperty(this.preloaderPage) && this.preloaders[this.preloaderPage]) {\n this.log.logger('preventing preloader show, already shown on: ' + this.preloaderPage);\n return;\n }\n\n this.preloaders[this.preloaderPage] = true;\n\n if (this.isIOS()) {\n if (onlyHud) {\n this.log.logger('Sending to iOS: ' + `${this.preloaderPage}-showOnlyHud`);\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`${this.preloaderPage}-showOnlyHud`);\n } else {\n this.log.logger('Sending to iOS: ' + `${this.preloaderPage}-show`);\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`${this.preloaderPage}-show`);\n }\n } else if ((window as any).Android) {\n this.log.logger('Sending to Android: showPreloader=' + `${this.preloaderPage}`);\n (window as any).Android.showPreloader(this.preloaderPage, !onlyHud);\n }\n }\n\n /**\n * @deprecated Since version angular 5 Will be deleted in upgrade to angular > 8 Use bar instead.\n */\n hide(onlyHud: boolean = false) {\n this.log.logger('LoaderService: hide(onlyHud = ' + onlyHud + ')');\n this.log.logger('PreTimeout');\n setTimeout(() => {\n this.log.logger('OnTimeout');\n if (this.isIOS()) {\n if (onlyHud) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`${this.preloaderPage}-hideOnlyHud`);\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`${this.preloaderPage}-hide`);\n\n this.log.logger('Sending to iOS: ' + `${this.preloaderPage}-hide`);\n this.log.logger('Sending to iOS: ' + `${this.preloaderPage}-hideOnlyHud`);\n\n } else {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`${this.preloaderPage}-hide`);\n this.log.logger(`Sending to iOS: ${this.preloaderPage}-hide`);\n }\n } else if (this.isAndroid()) {\n this.log.logger('Sending to Android: hidePreloader=' + this.preloaderPage);\n (window as any).Android.hidePreloader(this.preloaderPage);\n }\n }, DeviceService.HIDE_DELAY);\n\n this.preloaders[this.preloaderPage] = false;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ActivatedRoute, NavigationEnd, NavigationStart, Router} from '@angular/router';\nimport {Location, PlatformLocation} from '@angular/common';\nimport {IndicatorService} from '@app/shared';\nimport {DeepLinkService} from '@app/helper/deep-link.service';\nimport {delay, filter, timeout} from 'rxjs/operators';\nimport {NavigationBarService} from \"@app/shared/navigation-bar/navigation-bar.service\";\nimport {of} from \"rxjs\";\nimport {GoftinoService} from \"@app/core/goftino.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BackKeyUrlService {\n\n constructor(\n private readonly goftinoService: GoftinoService,\n private readonly indicator: IndicatorService,\n private readonly router: Router,\n private readonly deepLinkService: DeepLinkService,\n private readonly navigationService: NavigationBarService,\n private readonly _location: Location,\n private readonly location: PlatformLocation) {\n }\n\n public goBack(backUrl: string[] | null, isCallFromGoftinoService: boolean = false) {\n if (this.deepLinkService.isDeeplink) {\n this.deepLinkService.backFromDeeplink();\n } else {\n if (!this._location.path(true).includes('#modalOpened'))\n this.indicator.show();\n if (backUrl) {\n this.router.navigate(backUrl as string[]).then(c => this.navigationService.prepareNavigationBar());\n } else if (window.history.length > 1) {\n console.log('backUrl');\n {\n this.location.back();\n of(true).pipe(timeout(500)).subscribe(c => this.navigationService.prepareNavigationBar());\n }\n } else {\n this.router.navigate(['./']).then(c => this.navigationService.prepareNavigationBar());\n }\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpService} from '@app/core';\nimport {iRating} from '@app/interfaces/iRating';\nimport {BehaviorSubject, Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserService {\n private userInfoSource: BehaviorSubject<{ username?: string, mobileNo?: string } | null> = new BehaviorSubject<{ username?: string, mobileNo?: string } | null>(null);\n public userInfo$: Observable<{ username?: string, mobileNo?: string } | null> = this.userInfoSource.asObservable();\n\n constructor(private readonly http: HttpService) {\n }\n\n public setUserInfo(res) {\n if (res) {\n const username =\n res.firstName && res.lastName\n ? `${res.firstName} ${res.lastName}` : '';\n const mobileNo = (res.email || res.mobileNo || res.username);\n this.userInfoSource.next({\n username,\n mobileNo\n })\n } else\n this.userInfoSource.next(null);\n }\n\n public getUserData(): Observable {\n const url = '/api/account/editprofile';\n return this.http.get(url);\n }\n\n public setUserData(params) {\n const url = '/api/account/editprofile';\n return this.http.post(url, params);\n }\n\n public setUserPassword(params) {\n const url = '/api/account/changepassword';\n return this.http.post(url, params);\n }\n\n public setUserEmail(params) {\n const url = '/api/account/changeemail';\n return this.http.post(url, params);\n }\n\n public rateBook(params) {\n const url = '/api/audiobooks/rate';\n return this.http.post(url, params);\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'navaar-close-icon',\n template: `\n \n \n \n \n \n \n `\n})\nexport class CloseIConComponent {\n @Input() public color: string = '#fff';\n @Input() public style: object = {};\n constructor() { }\n}\n","import {Inject, Injectable, Renderer2} from '@angular/core';\nimport {DOCUMENT, Location, PlatformLocation} from \"@angular/common\";\nimport {SubscriptionLike} from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppParametersService {\n private _locationObserve: SubscriptionLike;\n public parameterZarebin: string | null;\n public appName: string = 'نوار';\n\n constructor(@Inject(DOCUMENT) private readonly document: Document,\n private readonly platformLocation: PlatformLocation,\n private readonly location: Location) {\n this._locationObserve = this.location.subscribe(c => this.isShowMessageEndSubscription = false);\n }\n\n private _scope: string;\n public get scope(): string {\n return this._scope;\n }\n\n public set scope(v: string) {\n this._scope = v;\n }\n\n private _isNewLoginApi: boolean;\n public get isNewLoginApi(): boolean {\n return this._isNewLoginApi;\n }\n\n public set isNewLoginApi(v: boolean) {\n this._isNewLoginApi = v;\n }\n\n private _clientSecret: string;\n public get clientSecret(): string {\n return this._clientSecret;\n }\n\n public set clientSecret(v: string) {\n this._clientSecret = v;\n }\n\n private _identityClientId: string;\n public get identityClientId(): string {\n return this._identityClientId;\n }\n\n public set identityClientId(v: string) {\n this._identityClientId = v;\n }\n\n private _refreshToken: string;\n public get refreshToken(): string {\n return this._refreshToken;\n }\n\n public set refreshToken(v: string) {\n this._refreshToken = v;\n }\n\n\n private _versionCode: string;\n public get versionCode(): string {\n return this._versionCode;\n }\n\n public set versionCode(v: string) {\n this._versionCode = v;\n }\n\n private _deviceId: string;\n public get deviceId(): string {\n return this._deviceId;\n }\n\n public set deviceId(v: string) {\n this._deviceId = v;\n }\n\n private _apiLevel: string;\n public get apiLevel(): string {\n return this._apiLevel;\n }\n\n public set apiLevel(v: string) {\n this._apiLevel = v;\n }\n\n private _clientId: string;\n public get clientId(): string {\n return this._clientId;\n }\n\n public set clientId(v: string) {\n this._clientId = v;\n }\n\n\n private _adverstimentId: string;\n public get adverstimentId(): string {\n return this._adverstimentId;\n }\n\n public set adverstimentId(v: string) {\n this._adverstimentId = v;\n }\n\n private _isShowMessageEndSubscription: boolean;\n public get isShowMessageEndSubscription(): boolean {\n return this._isShowMessageEndSubscription;\n }\n\n public set isShowMessageEndSubscription(v: boolean) {\n if (v === true) {\n this.document.body.style.overflow = 'hidden';\n this.platformLocation.pushState(null, null, location.href + '#modalOpened');\n } else {\n this.document.body.style.overflow = 'auto';\n if (this.location.path(true).includes('#modalOpened')) {\n this.location.back();\n }\n }\n this._isShowMessageEndSubscription = v;\n }\n}\n","export enum tokenTypeEnum {\n clientId = 'client-id',\n versionCode = 'version-code',\n apiLevel = 'api-level',\n deviceId = 'device-id',\n refreshToken = 'refresh-token',\n token = 'token',\n advertisementId = 'adsId',\n identityClientId = 'identityClientId',\n clientSecret = 'clientSecret',\n scope = 'scope',\n}\n\nexport type tokenType = {\n token?: string;\n 'client-id'?: string;\n 'version-code'?: string;\n 'api-level'?: string;\n 'device-id'?: string;\n 'refresh-token'?: string;\n adsId?: string | null;\n expireIn?: string;\n clientSecret?: string | null;\n identityClientId?: string | null;\n scope?: string | null;\n}","import {Inject, Injectable, Renderer2, RendererFactory2} from '@angular/core';\nimport {DOCUMENT} from \"@angular/common\";\nimport {BrowserStorageService} from \"@app/core/BrowserStorage/browser-storage.service\";\nimport {UserModel} from \"@app/app/profile/usermodel\";\nimport {DeviceService} from \"@app/core/device/device.service\";\n\ndeclare var Goftino: any;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GoftinoService {\n public isLoadedGoftino: boolean = false;\n public isOpenGoftino: boolean = false;\n private renderer: Renderer2;\n private userInfo?: UserModel;\n\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly deviceService: DeviceService,\n private readonly browserLocalStorage: BrowserStorageService,\n private readonly rendererFactory: RendererFactory2) {\n this.isOpenGoftino = false;\n }\n\n public loadScript(userInfo: UserModel) {\n this.userInfo = userInfo;\n const path = location.pathname;\n if (this.isLoadedGoftino || (this.deviceService.isAndroid() && (!path.includes('/feedback') && !path.includes('/profile')))) {\n return;\n }\n const goftinoKey: string = 'W4iqYP';\n this.renderer = this.rendererFactory.createRenderer(null, null);\n const l = this.browserLocalStorage.getLocal(\"goftino_\" + goftinoKey);\n const s = \"https://www.goftino.com/widget/\" + goftinoKey;\n const script = this.renderer.createElement('script');\n script.type = 'text/javascript';\n script.src = l ? s + \"?o=\" + l : s;\n script.async = true;\n script.charset = 'utf-8';\n script.id = 'goftino_w_script';\n script.onload = () => {\n this.isLoadedGoftino = true;\n this.getUnreadCount();\n };\n this.renderer.appendChild(this.document.body, script);\n }\n\n public setUser() {\n if (this.isLoadedGoftino) {\n if (this.userInfo)\n Goftino.setUser({\n email: this.userInfo.email,\n name: this.userInfo.firstName + ' ' + this.userInfo.lastName,\n phone: this.userInfo.mobileNo,\n about: `Application Version: ${this.deviceService.getAppVersion()}`,\n forceUpdate: true,\n });\n else\n Goftino.setUser({\n forceUpdate: true\n });\n }\n }\n\n public goftinoReady() {\n console.log('%c goftino_ready', 'font-size: 24px; color: red; background-color: yellow')\n Goftino.setWidget({\n hasIcon: false,\n hasSound: false,\n counter: '#unread_count_message_goftino'\n });\n this.setUser();\n }\n\n public openWidget() {\n if (this.isLoadedGoftino)\n Goftino.open();\n this.isOpenGoftino = true;\n }\n\n public closeWidget() {\n if (this.isLoadedGoftino) {\n Goftino.close();\n this.isOpenGoftino = false;\n }\n }\n\n public getUnreadCount(): number {\n const unreadKey = Object.keys(localStorage)\n .find(x =>\n x.startsWith('goftino_unread'));\n return +localStorage.getItem(unreadKey) ?? 0;\n }\n\n public removeGoftinoScript() {\n window.removeEventListener('goftino_ready', null);\n this.isLoadedGoftino = false;\n this.document.getElementById('goftino_w_script')?.remove();\n this.document.getElementById('goftino_image_fullscreen')?.remove();\n this.document.getElementById('gftscript')?.remove();\n this.document.getElementById('goftino_w')?.remove();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalStorageKey } from '@app/core/local-storage-key';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BrowserStorageService {\n public getSession(key: string, hasEncrypt?: boolean): any {\n let data = window.sessionStorage.getItem(key)\n if (data && hasEncrypt)\n data = atob(data);\n try {\n return JSON.parse(data);\n } catch (e) {\n return data;\n }\n }\n\n public setSession(key: string, value: any, encrypt?: boolean): void {\n let data = value === undefined ? null : JSON.stringify(value);\n if (data && encrypt)\n data = btoa(data);\n window.sessionStorage.setItem(key, data);\n }\n\n public removeSession(key: string): void {\n window.sessionStorage.removeItem(key);\n }\n\n public removeAllSessions(): void {\n for (const key in window.sessionStorage) {\n if (window.sessionStorage.hasOwnProperty(key)) {\n this.removeSession(key);\n }\n }\n }\n\n public getLocal(key: string, hasEncrypt?: boolean): any {\n let data = window.localStorage.getItem(key);\n if (data && hasEncrypt)\n data = atob(data);\n try {\n return JSON.parse(data);\n } catch (e) {\n return data;\n }\n }\n\n public setLocal(key: string, value: any, encrypt?: boolean): void {\n let data = value === undefined ? null : JSON.stringify(value);\n if (data && encrypt)\n data = btoa(data);\n window.localStorage.setItem(key, data);\n }\n\n public setStringLocal(key: string, value: any, encrypt?: boolean): void {\n let data = value;\n if (data && encrypt)\n data = btoa(data);\n window.localStorage.setItem(key, data);\n }\n\n public removeLocal(key: string): void {\n window.localStorage.removeItem(key);\n }\n\n public removeAllLocals(isForce: boolean = false): void {\n for (const key in window.localStorage) {\n if (window.localStorage.hasOwnProperty(key)) {\n if (isForce === false && (key === LocalStorageKey.DEVICE_ID || key === 'IS_PLAYING' || key === 'CHAPTERS_IN_LOCAL'))\n return;\n if (key === 'search_item' || key === LocalStorageKey.DEVICE_ID) {\n return;\n }\n this.removeLocal(key);\n }\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {environment} from '@env/environment';\n\nimport {DeviceService} from '../device/device.service';\nimport {TypeShowLogInConsole} from '../log/TypeShowLogInConsoleEnum';\nimport {LogService} from './../log/log.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventTrackerService {\n\n constructor(\n private readonly log: LogService,\n private readonly device: DeviceService) {\n }\n\n public logEvent(name: string, params: object) {\n if (!name) {\n return;\n }\n\n let jsonText = {name, params: this.clean(params)};\n this.log.logger('log event = ' + name);\n this.log.logger(jsonText, TypeShowLogInConsole.table);\n\n try {\n if (this.device.isIOS()) {\n this.log.logger('Send logEvent to IOS with = ' + JSON.stringify(jsonText));\n (window as any).webkit.messageHandlers.callbackHandler.postMessage('logEvent-' + JSON.stringify(jsonText));\n } else if (this.device.isAndroid() && (window as any).Android.logEvent != undefined) {\n if (environment.debug)\n console.log('Send logEvent to Android with = ' + JSON.stringify(jsonText));\n (window as any).Android.logEvent(JSON.stringify(jsonText));\n } else if (this.device.isPwa()) {\n\n }\n } catch (e) {\n this.log.logger('error log event onEventTracker');\n this.log.logger(e, TypeShowLogInConsole.error);\n }\n }\n\n private clean(obj) {\n this.log.logger('clean START');\n for (let propName in obj) {\n if (obj[propName] === null || obj[propName] === undefined || obj[propName].length <= 0) {\n delete obj[propName];\n }\n }\n return obj;\n }\n}\n","import {Component, HostBinding, Input, OnChanges, OnInit} from '@angular/core';\n\n@Component({\n selector: 'navaar-lock-icon',\n template: `\n \n \n \n \n \n `,\n host: {\n style: 'display: inline-block'\n }\n})\nexport class LockIconComponent {\n @Input('width') @HostBinding('style.width') _width;\n @Input() public color: string = '#fff';\n}\n","export enum WebFolderEnum {\n webview_new = 'webview-new',\n landing_webview_dev = 'landing/app-webview-dev',\n landing_webview_pwa_dev = 'landing/app-pwa-dev',\n app_webview_dev = 'app-webview-dev',\n pwa = 'pwa',\n}\n","import {WebFolderEnum} from \"@app/helper/web-folder.enum\";\n\nexport const environment = {\n production: true,\n auth: 'https://auth.navaar.ir',\n paymentUrl: 'https://www.navaar.ir',\n siteUrl: 'https://www.navaar.ir',\n envName: 'pwa',\n url: 'https://www.navaar.ir',\n debug: false,\n cache: true,\n imageUrl: 'https://www.navaar.ir',\n webFolder: WebFolderEnum.pwa,\n endpoints: {\n elasticSearchEndpoint: ''\n }\n}\n\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n selector: 'img[src]:not([lazySrc])',\n host: {\n '[src]': 'checkPath(src)',\n '(error)': 'onError()'\n }\n})\nexport class FallbackErrorImageDirective {\n @Input() public src: string;\n defaultImg: string = `assets/img/placeholder.png`;\n public onError() {\n this.src = this.defaultImg;\n }\n public checkPath(src) {\n return src;\n }\n}","import {\n animate,\n animateChild,\n animation,\n AnimationTriggerMetadata,\n group,\n keyframes,\n query,\n style,\n transition,\n trigger,\n useAnimation,\n} from '@angular/animations';\n\nconst DEFAULT_DURATION = 1000;\n\n\nconst slideOutDown = animation([\n animate(\n '{{duration}}ms {{delay}}ms',\n keyframes([\n style({ transform: 'translate3d(0, 0, 0)', easing: 'ease', offset: 0 }),\n style({ transform: 'translate3d(0, {{translate}}, 0)', visibility: 'hidden', easing: 'ease', offset: 1 })\n ])\n )\n])\n\nconst slideInUp = animation([\n\n animate(\n '{{duration}}ms {{delay}}ms',\n keyframes([\n style({ visibility: 'visible', transform: 'translate3d(0, {{translate}}, 0)', easing: 'ease', offset: 0 }),\n style({ transform: 'translate3d(0, 0, 0)', easing: 'ease', offset: 1 })\n ])\n )\n])\n\nexport interface IAnimationOptions {\n /** \n * Translate, possible units: px, %, em, rem, vw, vh\n * Default: 100%\n */\n translate?: string;\n /**\n * Name of the animation anchor that will be used in a template\n */\n anchor?: string;\n /**\n * Duration in ms\n */\n duration?: number;\n /**\n * Delay in ms\n *\n * Default: 0\n */\n delay?: number;\n /**\n * This parameter can only be set in a component's decorator.\n * Cannot be set in a template.\n *\n * Whether children animation should run 'before', 'together' or 'after' animation.\n * When set to 'none' chldren are not animated.\n *\n * Default: 'together'\n */\n animateChildren?: 'before' | 'together' | 'after' | 'none';\n}\n\nexport function slideInUpOnEnterAnimation(options?: IAnimationOptions): AnimationTriggerMetadata {\n return trigger((options && options.anchor) || 'slideInUpOnEnter', [\n transition(\n ':enter',\n [\n style({ visibility: 'hidden' }),\n ...(options && options.animateChildren === 'before' ? [query('@*', animateChild(), { optional: true })] : []),\n group([\n useAnimation(slideInUp),\n ...(!options || !options.animateChildren || options.animateChildren === 'together'\n ? [query('@*', animateChild(), { optional: true })]\n : [])\n ]),\n ...(options && options.animateChildren === 'after' ? [query('@*', animateChild(), { optional: true })] : [])\n ],\n {\n params: {\n delay: (options && options.delay) || 0,\n duration: (options && options.duration) || DEFAULT_DURATION,\n translate: (options && options.translate) || '100vh'\n }\n }\n ),\n transition(\n ':leave',\n [\n ...(options && options.animateChildren === 'before' ? [query('@*', animateChild(), { optional: true })] : []),\n group([\n useAnimation(slideOutDown),\n ...(!options || !options.animateChildren || options.animateChildren === 'together'\n ? [query('@*', animateChild(), { optional: true })]\n : [])\n ]),\n ...(options && options.animateChildren === 'after' ? [query('@*', animateChild(), { optional: true })] : [])\n ],\n {\n params: {\n delay: (options && options.delay) || 0,\n duration: (options && options.duration) || DEFAULT_DURATION,\n translate: (options && options.translate) || '100vh'\n }\n }\n )\n ]);\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AccountIconComponent } from './account-icon/account-icon.component';\nimport { ArrowIconComponent } from './arrow-icon/arrow-icon.component';\nimport { ArrowLeftTimerIconComponent } from './arrow-left-timer-icon/arrow-left-timer-icon.component';\nimport { ArrowRightTimerIconComponent } from './arrow-right-timer-icon/arrow-right-timer-icon.component';\nimport { BestSellerIconComponent } from './best-seller-icon/best-seller-icon.component';\nimport { BookIconComponent } from './book-icon/book-icon.component';\nimport { BookSummaryIconComponent } from './book-summary-icon/book-summary-icon.component';\nimport { BulletIconComponent } from './bullet-icon/bullet-icon.component';\nimport { CapsoulIconComponent } from './capsoul-icon/capsoul-icon.component';\nimport { ChevronIconComponent } from './chevron-icon/chevron-icon.component';\nimport { CloseIConComponent } from './close-icon/close-icon.component';\nimport { DisLikeIconComponent } from './dis-like-icon/dis-like-icon.component';\nimport { DoneIconComponent } from './done-icon/done-icon.component';\nimport { DownloadIconComponent } from './download-icon/download-icon.component';\nimport { GetIconComponent } from './get-icon/get-icon.component';\nimport { ImageIconComponent } from './image-icon/image-icon.component';\nimport { InfoIconComponent } from './info-icon/info-icon.component';\nimport { LastPageIconComponent } from './last-page-icon/last-page-icon.component';\nimport { LatestIconComponent } from './latest-icon/latest-icon.component';\nimport { LikeIconComponent } from './like-icon/like-icon.component';\nimport { ListIconComponent } from './list-icon/list-icon.component';\nimport { LogoIconComponent } from './logo-icon/logo-icon.component';\nimport { MoreHorizIconComponent } from './more-horiz-icon/more-horiz-icon.component';\nimport { MoreVertIconComponent } from './more-vert-icon/more-vert-icon.component';\nimport { OneStarIconComponent } from './one-star-icon/one-star-icon.component';\nimport { PlayIconComponent } from './play-icon/play-icon.component';\nimport { PodcastIconComponent } from './podcast-icon/podcast-icon.component';\nimport { ScoreIconComponent } from './score-icon/score-icon.component';\nimport { SerialIconComponent } from './serial-icon/serial-icon.component';\nimport { SleepIconComponent } from './sleep-icon/sleep-icon.component';\nimport { SortIconComponent } from './sort-icon/sort-icon.component';\nimport { SpeedIconComponent } from './speed-icon/speed-icon.component';\nimport { StarIconComponent } from './star-icon/star-icon.component';\nimport { StopIconComponent } from './stop-icon/stop-icon.component';\nimport { TrainglesIconComponent } from './traingles-icon/traingles-icon.component';\nimport { TurnedInNotIconComponent } from './turned-in-not-icon/turned-in-not-icon.component';\nimport { GoogleIconComponent } from './google-icon/google-icon.component';\nimport { EyeIconComponent } from './eye-icon/eye-icon.component';\nimport { BeforePageIconComponent } from './before-page-icon/before-page-icon.component';\nimport { PlayCircleIconComponent } from './play-circle-icon/play-circle-icon.component';\nimport { PauseCircleIconComponent } from './pause-circle-icon/pause-circle-icon.component';\nimport { ChevronButtomIconComponent } from './chevron-buttom-icon/chevron-buttom-icon.component';\nimport { SmallPlayerIconComponent } from './small-player-icon/small-player-icon.component';\nimport { SearchIconComponent } from './search-icon/search-icon.component';\nimport { NavigationBarLibraryIconComponent } from './navigation-bar-library-icon/navigation-bar-library-icon.component';\nimport { NavigationBarTapeIconComponent } from './navigation-bar-tape-icon/navigation-bar-tape-icon.component';\nimport { NavigationBarCategoryIconComponent } from './navigation-bar-category-icon/navigation-bar-category-icon.component';\nimport { NavigationBarProfileIconComponent } from './navigation-bar-profile-icon/navigation-bar-profile-icon.component';\nimport { NavaarLogoSimpleIconComponent } from './navaar-logo-simple-icon/navaar-logo-simple-icon.component';\nimport { LockIconComponent } from './lock-icon/lock-icon.component';\nimport { CloseNewIconComponent } from './close-icon/close-new-icon.component';\nimport { ShareIconComponent } from './share-icon/share-icon.component';\nimport { CarIconComponent } from './car-icon/car-icon.component';\nimport { CommentsIconComponent } from './comments-icon/comments-icon.component';\nimport { NavaarZarebinLogoComponent } from './navaar-zarebin-logo/navaar-zarebin-logo.component';\nimport {NavaarIGapLogoComponent} from \"@app/components/icons/navaar-iGap-logo/navaar-iGap-logo.component\";\nimport { NavaarIranPlIconComponent } from './navaar-iran-pl-icon/navaar-iran-pl-icon.component';\nimport { GhesseIconComponent } from './ghesse-icon/ghesse-icon.component';\n\n\n@NgModule({\n declarations: [\n AccountIconComponent,\n ArrowIconComponent,\n BestSellerIconComponent,\n BookIconComponent,\n CapsoulIconComponent,\n ChevronIconComponent,\n CloseIConComponent,\n DisLikeIconComponent,\n DownloadIconComponent,\n LatestIconComponent,\n LikeIconComponent,\n PlayIconComponent,\n PodcastIconComponent,\n SerialIconComponent,\n StarIconComponent,\n TrainglesIconComponent,\n ListIconComponent,\n ImageIconComponent,\n InfoIconComponent,\n GetIconComponent,\n TurnedInNotIconComponent,\n SleepIconComponent,\n SpeedIconComponent,\n LastPageIconComponent,\n BeforePageIconComponent,\n ArrowRightTimerIconComponent,\n ArrowLeftTimerIconComponent,\n PlayCircleIconComponent,\n BulletIconComponent,\n DoneIconComponent,\n StopIconComponent,\n MoreHorizIconComponent,\n ScoreIconComponent,\n LogoIconComponent,\n OneStarIconComponent,\n SortIconComponent,\n MoreVertIconComponent,\n BookSummaryIconComponent,\n PauseCircleIconComponent,\n ChevronButtomIconComponent,\n SmallPlayerIconComponent,\n SearchIconComponent,\n GoogleIconComponent,\n EyeIconComponent,\n NavaarLogoSimpleIconComponent,\n EyeIconComponent,\n NavigationBarLibraryIconComponent,\n NavigationBarTapeIconComponent,\n NavigationBarCategoryIconComponent,\n NavigationBarProfileIconComponent,\n LockIconComponent,\n CloseNewIconComponent,\n ShareIconComponent,\n CarIconComponent,\n CommentsIconComponent,\n NavaarZarebinLogoComponent,\n NavaarIGapLogoComponent,\n NavaarIranPlIconComponent,\n GhesseIconComponent\n ],\n exports: [\n AccountIconComponent,\n ArrowIconComponent,\n BestSellerIconComponent,\n BookIconComponent,\n CapsoulIconComponent,\n ChevronIconComponent,\n CloseIConComponent,\n DisLikeIconComponent,\n DownloadIconComponent,\n LatestIconComponent,\n LikeIconComponent,\n PlayIconComponent,\n PodcastIconComponent,\n SerialIconComponent,\n StarIconComponent,\n TrainglesIconComponent,\n ListIconComponent,\n ImageIconComponent,\n InfoIconComponent,\n GetIconComponent,\n TurnedInNotIconComponent,\n SleepIconComponent,\n SpeedIconComponent,\n LastPageIconComponent,\n BeforePageIconComponent,\n ArrowRightTimerIconComponent,\n ArrowLeftTimerIconComponent,\n PlayCircleIconComponent,\n BulletIconComponent,\n DoneIconComponent,\n StopIconComponent,\n MoreHorizIconComponent,\n ScoreIconComponent,\n LogoIconComponent,\n OneStarIconComponent,\n SortIconComponent,\n MoreVertIconComponent,\n BookSummaryIconComponent,\n PauseCircleIconComponent,\n ChevronButtomIconComponent,\n SmallPlayerIconComponent,\n SearchIconComponent,\n GoogleIconComponent,\n EyeIconComponent,\n NavigationBarLibraryIconComponent,\n NavigationBarTapeIconComponent,\n NavigationBarCategoryIconComponent,\n NavigationBarProfileIconComponent,\n NavaarLogoSimpleIconComponent,\n LockIconComponent,\n CloseNewIconComponent,\n ShareIconComponent,\n CarIconComponent,\n CommentsIconComponent,\n NavaarZarebinLogoComponent,\n NavaarIGapLogoComponent,\n NavaarIranPlIconComponent,\n GhesseIconComponent\n ],\n imports: [\n CommonModule\n ]\n})\nexport class IconsModule { }\n","import { Injectable } from '@angular/core';\nimport { BrowserStorageService } from '@app/core';\nimport { HttpService } from '@app/core/http/http.service';\nimport { CommentSaveResponse } from '@app/interfaces/ICommentSaveResponse';\nimport { Observable } from 'rxjs';\nimport { shareReplay, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WishlistService {\n private getItem$: Observable;\n private _listItems: Set = new Set();\n public get listItems(): Set {\n return this._listItems;\n }\n\n public set listItems(v: Set) {\n this._listItems = v;\n }\n\n\n constructor(\n private readonly storage: BrowserStorageService,\n private readonly http: HttpService) { }\n\n public getWishlistItems(params = {}) {\n const url = '/api/wishlist/items';\n return this.http.post(url, params);\n }\n\n public removeItem(params = {}) {\n //params {productId :}\n this.listItems.delete(params['productId']);\n this.storage.setSession('wishlist', [...this.listItems.values()], false);\n const url = '/api/wishlist/removeItem';\n return this.http.post(url, params);\n }\n\n public addToWishlist(params) {\n this.listItems.add(params['productId']);\n this.storage.setSession('wishlist', [...this.listItems.values()], false);\n const url = '/api/wishlist/addItem';\n return this.http.post(url, params);\n }\n\n getCategories() {\n const url = '/api/wishlist/categories/1';\n return this.http.post(url, {});\n }\n\n addCategory(params = {}) {\n //params {title :}\n const url = '/api/wishlist/addCategory';\n return this.http.post(url, params);\n }\n\n removeCategory(params = {}) {\n //params {categoryId :}\n const url = '/api/wishlist/removeCategory';\n return this.http.post(url, params);\n }\n\n removeFromCategory(params = {}) {\n //params {categoryId :}\n const url = '/api/wishlist/removeFromCategory';\n return this.http.post(url, params);\n }\n\n moveItem(params = {}) {\n //params {wishlistItemId: , categoryId :}\n const url = '/api/wishlist/move';\n return this.http.post(url, params);\n }\n\n public addIdsToList() {\n this.getItem$ = this.getWishlistItems().pipe(\n switchMap(z => this.getItem$),\n shareReplay(1));\n this.getItem$.subscribe(c => {\n c.items.map(c => this.listItems.add(c.product.productId));\n this.storage.setSession('wishlist', [...this.listItems.values()], false);\n });\n }\n public hasAudiobookWishlist(productId): boolean {\n if (this.listItems.size <= 0) {\n this.listItems = new Set(this.storage.getSession('wishlist', false));\n }\n return this.listItems.has(productId);\n }\n}","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'navaar-close-new-icon',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n `\n})\nexport class CloseNewIconComponent {\n @Input() opacity: number = 0.504;\n @Input() color: string = \"#fff\";\n}\n","import { NgModule } from '@angular/core';\n\nimport { LazySrcDirective } from './lazy-src-directive';\nimport { LazyViewport } from './lazy-viewport';\nimport { LazyViewportDirective } from './lazy-viewport.directive';\n\n@NgModule({\n\tdeclarations: [\n\t\tLazySrcDirective,\n\t\tLazyViewportDirective\n\t],\n\texports: [\n\t\tLazySrcDirective,\n\t\tLazyViewportDirective\n\t],\n\tproviders: [\n\t\t{\n\t\t\tprovide: LazyViewport,\n\t\t\tuseFactory() {\n\t\t\t\tconst viewport = new LazyViewport();\n\t\t\t\tviewport.setup();\n\t\t\t\treturn( viewport );\n\t\t\t}\n\t\t}\n\t]\n})\nexport class LazyModule {}","export enum oAuthTypeEnum {\n google = 'googleAuth',\n zarebin = 'zarebinAuth',\n iGap = 'iGapAuth',\n putlifeAuth = 'putlifeAuth',\n samantelAuth = 'samantelAuth',\n iranPLAuth = 'iranPLAuth',\n pasAuth = 'pasAuth',\n irancellAuth = 'irancellAuth'\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-done-icon',\n template: `\n \n \n \n \n\n`\n\n})\nexport class DoneIconComponent implements OnInit {\n @Input() public style: object = {};\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport type notifType = 'error' | 'warning' | 'info';\nexport interface iNotification {\n text?: string;\n type?: notifType;\n timeout?: number;\n show?: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationService {\n private notifSource: Subject = new Subject();\n public notification$ = this.notifSource.asObservable();\n\n constructor() { }\n\n public setNotification(notif: iNotification) {\n notif.show = true;\n this.notifSource.next(notif);\n }\n}\n","import {Component, Input, OnInit} from '@angular/core';\n\n@Component({\n selector: 'navaar-search-icon',\n template:`\n \n \n \n \n \n \n \n\n\n`\n})\nexport class SearchIconComponent {\n @Input() public color: string = '#fff';\n constructor() { }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { IconsModule } from '@app/components/icons/icons.module';\nimport { LazyModule } from '@app/shared';\n\nimport { DialogDownloadGlobalComponent } from './dialog-download-global/dialog-download-global.component';\nimport { AutoFocusDirective } from './directive/auto-focus.directive';\nimport { ClickOutsideDirective } from './directive/click-outside.directive';\nimport { DebounceClickDirective } from './directive/debounce-click/debounce-click.directive';\nimport { DigitOnlyDirective } from './directive/digit-only.directive';\nimport { FallbackErrorImageDirective } from './directive/fallback-error-image.directive';\nimport { PaginationDirective } from './directive/pagination/pagination.directive';\nimport { PreventMaxNumberDirective } from './directive/PreventMaxNumber/prevent-max-number.directive';\nimport { ButtonComponent } from './Elements/button/button.component';\nimport { TextareaComponent } from './Elements/textarea/textarea.component';\nimport { IndicatorComponent } from './Indicator/indicator.component';\nimport { NotificationComponent } from './notification/notification.component';\nimport { CombineMultipleAuthorsNamePipe } from './pipes/combine-multiple-authors-name/combine-multiple-authors-name.pipe';\nimport { CombineMultipleNamePipe } from './pipes/combine-multiple-name/combine-multiple-name.pipe';\nimport { ConvertDateTimeToDayAgoPipe } from './pipes/convert-date-time-to-day-ago/convert-date-time-to-day-ago.pipe';\nimport { ConvertDurationToHHmmPipe } from './pipes/convert-duration-to-hhmm.pipe';\nimport { GetYearsOfDatePipe } from './pipes/get-years-of-date.pipe';\nimport { JalaliTimesPipe } from './pipes/JalaliTimes/jalali-times.pipe';\nimport { NumberToPersianPipe } from './pipes/number-to-persian/number-to-persian.pipe';\nimport { ObjectToStringPipe } from './pipes/objectToString/object-to-string.pipe';\nimport { PersianTimePipe } from './pipes/PersianTime/persian-time.pipe';\nimport { SafeHtmlPipe } from './pipes/safeHtml/safe-html.pipe';\nimport { SafeStylePipe } from './pipes/safeStyle/safe-style.pipe';\nimport { SafeUrlPipe } from './pipes/safeUrl/safe-url.pipe';\nimport { TimerPipe } from './pipes/timer/timer.pipe';\nimport { TruncPipe } from './pipes/trunc.pipe';\nimport { NavigationBarComponent } from './navigation-bar/navigation-bar.component';\nimport { KeysPipe } from './pipes/keys.pipe';\nimport { HandleEventCodeProcessDirective } from './directive/handle-event-code-process.directive';\nimport { ConvertPersianNumberToEnglishPipe } from './pipes/convert-persian-number-to-english.pipe';\nimport {DropdownComponent} from \"@app/shared/Elements/dropdown/dropdown.component\";\nimport { IsOnScreenDirective } from './directive/is-on-screen.directive';\nimport { ReverseArrayPipe } from './pipes/reverse-array.pipe';\n\n\n@NgModule({\n declarations: [\n IndicatorComponent,\n PaginationDirective,\n TruncPipe,\n CombineMultipleAuthorsNamePipe,\n ObjectToStringPipe,\n PersianTimePipe,\n NotificationComponent,\n DebounceClickDirective,\n PreventMaxNumberDirective,\n NumberToPersianPipe,\n FallbackErrorImageDirective,\n SafeHtmlPipe,\n SafeStylePipe,\n SafeUrlPipe,\n GetYearsOfDatePipe,\n TextareaComponent,\n ButtonComponent,\n JalaliTimesPipe,\n DialogDownloadGlobalComponent,\n CombineMultipleNamePipe,\n ConvertDurationToHHmmPipe,\n ConvertDateTimeToDayAgoPipe,\n DropdownComponent,\n TimerPipe,\n ClickOutsideDirective,\n DigitOnlyDirective,\n AutoFocusDirective,\n NavigationBarComponent,\n KeysPipe,\n HandleEventCodeProcessDirective,\n ConvertPersianNumberToEnglishPipe,\n IsOnScreenDirective,\n ReverseArrayPipe\n ],\n imports: [\n RouterModule,\n LazyModule,\n CommonModule,\n IconsModule\n ],\n exports: [\n IndicatorComponent,\n LazyModule,\n PaginationDirective,\n TruncPipe,\n CombineMultipleAuthorsNamePipe,\n CombineMultipleNamePipe,\n ObjectToStringPipe,\n PersianTimePipe,\n NotificationComponent,\n DebounceClickDirective,\n PreventMaxNumberDirective,\n NumberToPersianPipe,\n FallbackErrorImageDirective,\n SafeHtmlPipe,\n SafeStylePipe,\n SafeUrlPipe,\n GetYearsOfDatePipe,\n TextareaComponent,\n ButtonComponent,\n JalaliTimesPipe,\n DialogDownloadGlobalComponent,\n ConvertDurationToHHmmPipe,\n ConvertDateTimeToDayAgoPipe,\n DropdownComponent,\n TimerPipe,\n ClickOutsideDirective,\n DigitOnlyDirective,\n AutoFocusDirective,\n NavigationBarComponent,\n KeysPipe,\n HandleEventCodeProcessDirective,\n ConvertPersianNumberToEnglishPipe,\n IsOnScreenDirective,\n ReverseArrayPipe\n ]\n})\nexport class SharedModule {\n static forRoot(): ModuleWithProviders {\n return {\n ngModule: SharedModule,\n providers: []\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { PlayerService } from '@app/components/player/player.service';\nimport { CacheObjectService, DeviceService, EventTrackerService, HttpService } from '@app/core';\nimport { TokenService } from '@app/core/token/token.service';\nimport { iBook, ProductTypeEnum } from '@app/interfaces/iBook';\nimport { IndicatorService } from '@app/shared';\nimport { NotificationService } from '@app/shared/notification/notification.service';\nimport { environment } from '@env/environment';\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\n\nimport { infoPlayer, IPurchase, purchaseButtonActionType } from '../pdp-model';\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class PDPService {\n private _isBackFromItem: boolean = false;\n public get isBackFromItem(): boolean {\n return this._isBackFromItem;\n }\n\n public set isBackFromItem(v: boolean) {\n this._isBackFromItem = v;\n }\n\n private statusPlaySource: BehaviorSubject = new BehaviorSubject(false);\n public statusPlay$: Observable = this.statusPlaySource.asObservable();\n public getSoldBooks: Set = new Set();\n public environment = environment;\n\n public productType: typeof ProductTypeEnum = ProductTypeEnum;\n\n constructor(\n private readonly indicator: IndicatorService,\n private readonly notification: NotificationService,\n private readonly cache: CacheObjectService,\n private readonly http: HttpService,\n private readonly playerService: PlayerService,\n private readonly eventTracker: EventTrackerService,\n private readonly tokenService: TokenService,\n private readonly device: DeviceService) {\n }\n\n public play(info: infoPlayer) {\n if (this.device.isAndroid()) {\n (window as any).Android.goToPlayBook(JSON.stringify(info));\n } else if (this.device.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`goToPlayBook-${JSON.stringify(info)}`);\n } else {\n this.playerService.initial(info);\n }\n }\n\n public async playWithIdentifierId(identifierBookId, isDirectPlay: boolean = false) {\n const dataBook: iBook = await this.cache.getObjectCache(`/api/audiobooks/${identifierBookId}/detail2`).toPromise();\n let isOwner: boolean = false;\n let purchase: IPurchase | null;\n if (isDirectPlay)\n isOwner = true;\n else if (this.tokenService.isLogin) {\n purchase = await this.http.post(`/api/library/state/${identifierBookId}`).toPromise();\n isOwner = (purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.library);\n }\n let allowPlay = true;\n const productId = dataBook.products[0]['productId'];\n let _isAdded = this.getSoldBooks.has(productId);\n if (_isAdded)\n isOwner = true;\n if (!isOwner && dataBook.contentType == this.productType.Podcast) {\n await this.http.post(`/api/orders/app-nopayment?productId=${productId}`, {})\n .pipe(\n tap(() => {\n isOwner = true;\n this.getSoldBooks.add(productId);\n if (this.tokenService.isLogin)\n purchase.purchaseButtonState.purchaseButtonAction = purchaseButtonActionType.library;\n }),\n catchError((error) => {\n allowPlay = false;\n this.notification.setNotification({\n text: 'افزودن به کتابخانه با مشکل مواجه گردید',\n type: 'error',\n timeout: 5000\n });\n return of(error);\n })).toPromise();\n }\n if (!allowPlay) {\n this.setStatusPlayButton(false);\n return;\n }\n const info: infoPlayer = {\n audioBookId: dataBook.audioBookId,\n title: dataBook.title,\n image: `${environment.imageUrl}/content/books/${dataBook.audioBookId}/pic.jpg?t=${dataBook.recordVersion}`,\n isOwner,\n identifier: identifierBookId,\n genreIdentifier: dataBook.genres[0]?.parentIdentifier,\n genreTitle: dataBook.genres[0]?.parentTitle\n };\n switch (dataBook.contentType) {\n case this.productType.AudioBook:\n case this.productType.Capsule:\n info.narrators = dataBook['narrators'][0] && (dataBook['narrators'][0].firstName + ' ' + dataBook['narrators'][0].lastName);\n info.author = (dataBook['authors'][0]) && (dataBook['authors'][0].firstName + ' ' + dataBook['authors'][0].lastName);\n break;\n case this.productType.AudioSeries:\n info.author = (dataBook['authors'][0]) && (dataBook['authors'][0].firstName + ' ' + dataBook['authors'][0].lastName);\n break;\n case this.productType.Podcast:\n default:\n info.author = \"\";\n }\n this.play(info);\n let _obj = {\n 'x_subscription_status': (purchase?.subscriptionButtonState || {})?.subscriptionButtonState,\n 'x_purchase_status': purchase?.purchaseButtonState?.purchaseButtonAction,\n 'x_button_type': isOwner ? 'stream' : 'sample',\n item_id: dataBook?.identifier,\n 'audiobook-title': dataBook?.title,\n 'play': 'playInClp'\n };\n this.eventTracker.logEvent('x_btn_listen_audiobook', _obj);\n }\n\n public setStatusPlayButton(status: boolean) {\n this.statusPlaySource.next(status);\n }\n\n public purchaseNewSubscriptionMode(productId): Observable {\n this.indicator.showHude();\n return this.http.post(`/api/subscription/consume/${productId}`, {}).pipe(\n tap(z => {\n this.indicator.hideHude();\n }),\n catchError(error => {\n this.indicator.hideHude();\n if (error && error.hasOwnProperty('error') && error.error.hasOwnProperty('message')) {\n this.notification.setNotification({ text: error.error.message, type: 'error', timeout: 5000 });\n }\n return throwError(error);\n }));\n }\n}\n","var map = {\n\t\"./af\": \"K/tc\",\n\t\"./af.js\": \"K/tc\",\n\t\"./ar\": \"jnO4\",\n\t\"./ar-dz\": \"o1bE\",\n\t\"./ar-dz.js\": \"o1bE\",\n\t\"./ar-kw\": \"Qj4J\",\n\t\"./ar-kw.js\": \"Qj4J\",\n\t\"./ar-ly\": \"HP3h\",\n\t\"./ar-ly.js\": \"HP3h\",\n\t\"./ar-ma\": \"CoRJ\",\n\t\"./ar-ma.js\": \"CoRJ\",\n\t\"./ar-sa\": \"gjCT\",\n\t\"./ar-sa.js\": \"gjCT\",\n\t\"./ar-tn\": \"bYM6\",\n\t\"./ar-tn.js\": \"bYM6\",\n\t\"./ar.js\": \"jnO4\",\n\t\"./az\": \"SFxW\",\n\t\"./az.js\": \"SFxW\",\n\t\"./be\": \"H8ED\",\n\t\"./be.js\": \"H8ED\",\n\t\"./bg\": \"hKrs\",\n\t\"./bg.js\": \"hKrs\",\n\t\"./bm\": \"p/rL\",\n\t\"./bm.js\": \"p/rL\",\n\t\"./bn\": \"kEOa\",\n\t\"./bn-bd\": \"loYQ\",\n\t\"./bn-bd.js\": \"loYQ\",\n\t\"./bn.js\": \"kEOa\",\n\t\"./bo\": \"0mo+\",\n\t\"./bo.js\": \"0mo+\",\n\t\"./br\": \"aIdf\",\n\t\"./br.js\": \"aIdf\",\n\t\"./bs\": \"JVSJ\",\n\t\"./bs.js\": \"JVSJ\",\n\t\"./ca\": \"1xZ4\",\n\t\"./ca.js\": \"1xZ4\",\n\t\"./cs\": \"PA2r\",\n\t\"./cs.js\": \"PA2r\",\n\t\"./cv\": \"A+xa\",\n\t\"./cv.js\": \"A+xa\",\n\t\"./cy\": \"l5ep\",\n\t\"./cy.js\": \"l5ep\",\n\t\"./da\": \"DxQv\",\n\t\"./da.js\": \"DxQv\",\n\t\"./de\": \"tGlX\",\n\t\"./de-at\": \"s+uk\",\n\t\"./de-at.js\": \"s+uk\",\n\t\"./de-ch\": \"u3GI\",\n\t\"./de-ch.js\": \"u3GI\",\n\t\"./de.js\": \"tGlX\",\n\t\"./dv\": \"WYrj\",\n\t\"./dv.js\": \"WYrj\",\n\t\"./el\": \"jUeY\",\n\t\"./el.js\": \"jUeY\",\n\t\"./en-au\": \"Dmvi\",\n\t\"./en-au.js\": \"Dmvi\",\n\t\"./en-ca\": \"OIYi\",\n\t\"./en-ca.js\": \"OIYi\",\n\t\"./en-gb\": \"Oaa7\",\n\t\"./en-gb.js\": \"Oaa7\",\n\t\"./en-ie\": \"4dOw\",\n\t\"./en-ie.js\": \"4dOw\",\n\t\"./en-il\": \"czMo\",\n\t\"./en-il.js\": \"czMo\",\n\t\"./en-in\": \"7C5Q\",\n\t\"./en-in.js\": \"7C5Q\",\n\t\"./en-nz\": \"b1Dy\",\n\t\"./en-nz.js\": \"b1Dy\",\n\t\"./en-sg\": \"t+mt\",\n\t\"./en-sg.js\": \"t+mt\",\n\t\"./eo\": \"Zduo\",\n\t\"./eo.js\": \"Zduo\",\n\t\"./es\": \"iYuL\",\n\t\"./es-do\": \"CjzT\",\n\t\"./es-do.js\": \"CjzT\",\n\t\"./es-mx\": \"tbfe\",\n\t\"./es-mx.js\": \"tbfe\",\n\t\"./es-us\": \"Vclq\",\n\t\"./es-us.js\": \"Vclq\",\n\t\"./es.js\": \"iYuL\",\n\t\"./et\": \"7BjC\",\n\t\"./et.js\": \"7BjC\",\n\t\"./eu\": \"D/JM\",\n\t\"./eu.js\": \"D/JM\",\n\t\"./fa\": \"jfSC\",\n\t\"./fa.js\": \"jfSC\",\n\t\"./fi\": \"gekB\",\n\t\"./fi.js\": \"gekB\",\n\t\"./fil\": \"1ppg\",\n\t\"./fil.js\": \"1ppg\",\n\t\"./fo\": \"ByF4\",\n\t\"./fo.js\": \"ByF4\",\n\t\"./fr\": \"nyYc\",\n\t\"./fr-ca\": \"2fjn\",\n\t\"./fr-ca.js\": \"2fjn\",\n\t\"./fr-ch\": \"Dkky\",\n\t\"./fr-ch.js\": \"Dkky\",\n\t\"./fr.js\": \"nyYc\",\n\t\"./fy\": \"cRix\",\n\t\"./fy.js\": \"cRix\",\n\t\"./ga\": \"USCx\",\n\t\"./ga.js\": \"USCx\",\n\t\"./gd\": \"9rRi\",\n\t\"./gd.js\": \"9rRi\",\n\t\"./gl\": \"iEDd\",\n\t\"./gl.js\": \"iEDd\",\n\t\"./gom-deva\": \"qvJo\",\n\t\"./gom-deva.js\": \"qvJo\",\n\t\"./gom-latn\": \"DKr+\",\n\t\"./gom-latn.js\": \"DKr+\",\n\t\"./gu\": \"4MV3\",\n\t\"./gu.js\": \"4MV3\",\n\t\"./he\": \"x6pH\",\n\t\"./he.js\": \"x6pH\",\n\t\"./hi\": \"3E1r\",\n\t\"./hi.js\": \"3E1r\",\n\t\"./hr\": \"S6ln\",\n\t\"./hr.js\": \"S6ln\",\n\t\"./hu\": \"WxRl\",\n\t\"./hu.js\": \"WxRl\",\n\t\"./hy-am\": \"1rYy\",\n\t\"./hy-am.js\": \"1rYy\",\n\t\"./id\": \"UDhR\",\n\t\"./id.js\": \"UDhR\",\n\t\"./is\": \"BVg3\",\n\t\"./is.js\": \"BVg3\",\n\t\"./it\": \"bpih\",\n\t\"./it-ch\": \"bxKX\",\n\t\"./it-ch.js\": \"bxKX\",\n\t\"./it.js\": \"bpih\",\n\t\"./ja\": \"B55N\",\n\t\"./ja.js\": \"B55N\",\n\t\"./jv\": \"tUCv\",\n\t\"./jv.js\": \"tUCv\",\n\t\"./ka\": \"IBtZ\",\n\t\"./ka.js\": \"IBtZ\",\n\t\"./kk\": \"bXm7\",\n\t\"./kk.js\": \"bXm7\",\n\t\"./km\": \"6B0Y\",\n\t\"./km.js\": \"6B0Y\",\n\t\"./kn\": \"PpIw\",\n\t\"./kn.js\": \"PpIw\",\n\t\"./ko\": \"Ivi+\",\n\t\"./ko.js\": \"Ivi+\",\n\t\"./ku\": \"JCF/\",\n\t\"./ku.js\": \"JCF/\",\n\t\"./ky\": \"lgnt\",\n\t\"./ky.js\": \"lgnt\",\n\t\"./lb\": \"RAwQ\",\n\t\"./lb.js\": \"RAwQ\",\n\t\"./lo\": \"sp3z\",\n\t\"./lo.js\": \"sp3z\",\n\t\"./lt\": \"JvlW\",\n\t\"./lt.js\": \"JvlW\",\n\t\"./lv\": \"uXwI\",\n\t\"./lv.js\": \"uXwI\",\n\t\"./me\": \"KTz0\",\n\t\"./me.js\": \"KTz0\",\n\t\"./mi\": \"aIsn\",\n\t\"./mi.js\": \"aIsn\",\n\t\"./mk\": \"aQkU\",\n\t\"./mk.js\": \"aQkU\",\n\t\"./ml\": \"AvvY\",\n\t\"./ml.js\": \"AvvY\",\n\t\"./mn\": \"lYtQ\",\n\t\"./mn.js\": \"lYtQ\",\n\t\"./mr\": \"Ob0Z\",\n\t\"./mr.js\": \"Ob0Z\",\n\t\"./ms\": \"6+QB\",\n\t\"./ms-my\": \"ZAMP\",\n\t\"./ms-my.js\": \"ZAMP\",\n\t\"./ms.js\": \"6+QB\",\n\t\"./mt\": \"G0Uy\",\n\t\"./mt.js\": \"G0Uy\",\n\t\"./my\": \"honF\",\n\t\"./my.js\": \"honF\",\n\t\"./nb\": \"bOMt\",\n\t\"./nb.js\": \"bOMt\",\n\t\"./ne\": \"OjkT\",\n\t\"./ne.js\": \"OjkT\",\n\t\"./nl\": \"+s0g\",\n\t\"./nl-be\": \"2ykv\",\n\t\"./nl-be.js\": \"2ykv\",\n\t\"./nl.js\": \"+s0g\",\n\t\"./nn\": \"uEye\",\n\t\"./nn.js\": \"uEye\",\n\t\"./oc-lnc\": \"Fnuy\",\n\t\"./oc-lnc.js\": \"Fnuy\",\n\t\"./pa-in\": \"8/+R\",\n\t\"./pa-in.js\": \"8/+R\",\n\t\"./pl\": \"jVdC\",\n\t\"./pl.js\": \"jVdC\",\n\t\"./pt\": \"8mBD\",\n\t\"./pt-br\": \"0tRk\",\n\t\"./pt-br.js\": \"0tRk\",\n\t\"./pt.js\": \"8mBD\",\n\t\"./ro\": \"lyxo\",\n\t\"./ro.js\": \"lyxo\",\n\t\"./ru\": \"lXzo\",\n\t\"./ru.js\": \"lXzo\",\n\t\"./sd\": \"Z4QM\",\n\t\"./sd.js\": \"Z4QM\",\n\t\"./se\": \"//9w\",\n\t\"./se.js\": \"//9w\",\n\t\"./si\": \"7aV9\",\n\t\"./si.js\": \"7aV9\",\n\t\"./sk\": \"e+ae\",\n\t\"./sk.js\": \"e+ae\",\n\t\"./sl\": \"gVVK\",\n\t\"./sl.js\": \"gVVK\",\n\t\"./sq\": \"yPMs\",\n\t\"./sq.js\": \"yPMs\",\n\t\"./sr\": \"zx6S\",\n\t\"./sr-cyrl\": \"E+lV\",\n\t\"./sr-cyrl.js\": \"E+lV\",\n\t\"./sr.js\": \"zx6S\",\n\t\"./ss\": \"Ur1D\",\n\t\"./ss.js\": \"Ur1D\",\n\t\"./sv\": \"X709\",\n\t\"./sv.js\": \"X709\",\n\t\"./sw\": \"dNwA\",\n\t\"./sw.js\": \"dNwA\",\n\t\"./ta\": \"PeUW\",\n\t\"./ta.js\": \"PeUW\",\n\t\"./te\": \"XLvN\",\n\t\"./te.js\": \"XLvN\",\n\t\"./tet\": \"V2x9\",\n\t\"./tet.js\": \"V2x9\",\n\t\"./tg\": \"Oxv6\",\n\t\"./tg.js\": \"Oxv6\",\n\t\"./th\": \"EOgW\",\n\t\"./th.js\": \"EOgW\",\n\t\"./tk\": \"Wv91\",\n\t\"./tk.js\": \"Wv91\",\n\t\"./tl-ph\": \"Dzi0\",\n\t\"./tl-ph.js\": \"Dzi0\",\n\t\"./tlh\": \"z3Vd\",\n\t\"./tlh.js\": \"z3Vd\",\n\t\"./tr\": \"DoHr\",\n\t\"./tr.js\": \"DoHr\",\n\t\"./tzl\": \"z1FC\",\n\t\"./tzl.js\": \"z1FC\",\n\t\"./tzm\": \"wQk9\",\n\t\"./tzm-latn\": \"tT3J\",\n\t\"./tzm-latn.js\": \"tT3J\",\n\t\"./tzm.js\": \"wQk9\",\n\t\"./ug-cn\": \"YRex\",\n\t\"./ug-cn.js\": \"YRex\",\n\t\"./uk\": \"raLr\",\n\t\"./uk.js\": \"raLr\",\n\t\"./ur\": \"UpQW\",\n\t\"./ur.js\": \"UpQW\",\n\t\"./uz\": \"Loxo\",\n\t\"./uz-latn\": \"AQ68\",\n\t\"./uz-latn.js\": \"AQ68\",\n\t\"./uz.js\": \"Loxo\",\n\t\"./vi\": \"KSF8\",\n\t\"./vi.js\": \"KSF8\",\n\t\"./x-pseudo\": \"/X5v\",\n\t\"./x-pseudo.js\": \"/X5v\",\n\t\"./yo\": \"fzPg\",\n\t\"./yo.js\": \"fzPg\",\n\t\"./zh-cn\": \"XDpg\",\n\t\"./zh-cn.js\": \"XDpg\",\n\t\"./zh-hk\": \"SatO\",\n\t\"./zh-hk.js\": \"SatO\",\n\t\"./zh-mo\": \"OmwH\",\n\t\"./zh-mo.js\": \"OmwH\",\n\t\"./zh-tw\": \"kOpN\",\n\t\"./zh-tw.js\": \"kOpN\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"RnhZ\";","import { iAuthor } from './iAuthor';\nimport { iGenre } from './IGenre';\nimport { iProduct } from './IProduct';\nimport { iRating } from './iRating';\n\nexport interface iBook {\n audioBookId: string;\n audioPublisherTitle: string;\n translators: Array | null;\n narrators: Array | null;\n authors: Array | null;\n contentType: ProductTypeEnum,\n genreTitle: string;\n abstract: string;\n genres: Array | [];\n attributes: any;\n duration: any;\n size: any;\n printPublisher: any;\n publicationDate: any;\n audioPublisher: any;\n audioPublicationDate: any;\n languages: any;\n isbn: any;\n numOfChapters: any;\n hasTrial: boolean;\n hitObject: string;\n hitObjectType: number | null;\n identifier: number;\n productId: string;\n products: Array;\n rating: iRating | null;\n recordVersion: string;\n searchMatchedKeywords: number | null;\n searchWeight: number | null;\n slug: string;\n title: string;\n titlePrefix: string;\n}\n\n\nexport enum ProductTypeEnum {\n AudioBook = 0,\n Capsule = 1,\n AudioSeries = 2,\n Podcast = 3\n}\n","import { Injectable } from '@angular/core';\nimport { tokenType, tokenTypeEnum } from '@app/interfaces/iToken';\nimport jwt_decode from 'jwt-decode';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { BrowserStorageService } from '../BrowserStorage/browser-storage.service';\nimport { HttpService } from '../http/http.service';\nimport { LogService } from '../log/log.service';\nimport { AppParametersService } from './app-parameters.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenService {\n private readonly _REFRESH_TOKEN = 'refresh_token';\n private readonly _ACCESS_TOKEN = 'access_token';\n public readonly _EXPIRE_IN = 'expires_in';\n public get accessToken(): string {\n return this.accessTokenSource.getValue();\n }\n\n public get isLogin(): boolean {\n return this.isLoginSource.getValue();\n }\n\n private readonly accessTokenSource: BehaviorSubject = new BehaviorSubject('');\n private readonly isLoginSource: BehaviorSubject = new BehaviorSubject(false);\n public readonly isLogin$: Observable = this.isLoginSource.asObservable();\n\n private tokenSource: BehaviorSubject = new BehaviorSubject(null);\n public token$: Observable = this.tokenSource.asObservable();\n\n constructor(\n private readonly parametersService: AppParametersService,\n private readonly http: HttpService,\n private readonly storage: BrowserStorageService,\n private readonly log: LogService) { }\n\n public setToken(value) {\n this.tokenSource.next(value);\n if (value.token) {\n this.setAccessToken(value.token);\n this.storage.setLocal(this._ACCESS_TOKEN, value['token']);\n this.storage.setLocal(this._EXPIRE_IN, value['expireIn']);\n if (!this.isLogin)\n this.isLoginSource.next(true);\n }\n if (value['refresh-token']) {\n this.setRefreshToken(value['refresh-token']);\n this.storage.setLocal(this._REFRESH_TOKEN, value['refresh-token']);\n }\n if (value[tokenTypeEnum.identityClientId] && value[tokenTypeEnum.clientSecret]) {\n //TODO: check clientSecret and identityClientId how set in localstorage browser for PWA\n this.parametersService.isNewLoginApi = true;\n this.parametersService.identityClientId = value[tokenTypeEnum.identityClientId];\n this.parametersService.clientSecret = value[tokenTypeEnum.clientSecret];\n this.parametersService.scope = value[tokenTypeEnum.scope];\n } else\n this.parametersService.isNewLoginApi = false;\n }\n\n public setAccessToken(value) {\n this.log.logger(`setAccess Token: ${value}`);\n this.accessTokenSource.next(value);\n }\n\n public setRefreshToken(value) {\n this.log.logger(`setRefresh Token: ${value}`);\n this.parametersService.refreshToken = value;\n }\n\n public setStatusLogin(status: boolean) {\n this.isLoginSource.next(status);\n }\n\n public mapTokenFromLogin(deviceType: 'android' | 'ios' | 'pwa' | 'develop', token: object): tokenType {\n let _map: tokenType = null;\n const tokenInfo = this.getDecodedAccessToken(token['accessToken'] || token['access_token']);\n let expireTokenTime = null;\n if (tokenInfo) {\n expireTokenTime = new Date(0).setUTCSeconds(tokenInfo.exp);\n }\n\n switch (deviceType) {\n case 'android':\n _map = {\n 'version-code': token['versionCode'],\n 'refresh-token': tokenInfo ? token['refreshToken'] : null,\n 'device-id': token['deviceId'],\n 'client-id': token['clientId'],\n 'api-level': token['apiLevel'],\n token: tokenInfo ? token['accessToken'] : null,\n adsId: token['adsId'] ?? null,\n expireIn: expireTokenTime,\n clientSecret: token['clientSecret'] ?? null,\n identityClientId: token['identityClientId'] ?? null,\n scope: token['scope'] ?? null\n };\n break;\n case 'ios':\n _map = {\n 'version-code': token['version-code'],\n token: tokenInfo ? token['token'] : null,\n 'refresh-token': tokenInfo ? token['refresh-token'] : null,\n 'device-id': token['device-id'],\n 'api-level': token['api-level'],\n 'client-id': token['client-id'],\n expireIn: token['.expires'],\n adsId: token['adsId'],\n expires: token['expires_in']\n };\n break;\n case 'pwa':\n case 'develop':\n default:\n _map = {\n 'version-code': this.parametersService.versionCode,\n token: tokenInfo ? token['access_token'] : null,\n 'refresh-token': tokenInfo ? ('refresh_token' in token ? token['refresh_token'] : this.parametersService.refreshToken) : null,\n 'device-id': token['as:device_id']??this.parametersService.deviceId,\n 'api-level': this.parametersService.apiLevel,\n 'client-id': token['as:client_id'] ??this.parametersService.clientId,\n adsId: this.parametersService.adverstimentId,\n expireIn: expireTokenTime,\n clientSecret: this.parametersService.clientSecret ?? null,\n identityClientId: this.parametersService.identityClientId ?? null,\n scope: this.parametersService.scope ?? null\n };\n break;\n }\n return _map;\n }\n public async checkStatusLogin() {\n let _exp = this.storage.getLocal(this._EXPIRE_IN);\n let _access_token = this.storage.getLocal(this._ACCESS_TOKEN);\n let _refresh_token = this.storage.getLocal(this._REFRESH_TOKEN);\n if (_exp) {\n const status = Date.now() < (+_exp);\n this.setAccessToken(_access_token);\n this.setRefreshToken(_refresh_token);\n if (status && _access_token && _refresh_token) {\n //TODO: check clientSecret and identityClientId in token IN PWA\n this.tokenSource.next({\n token: _access_token,\n 'client-id': this.parametersService.clientId,\n 'version-code': this.parametersService.versionCode,\n 'api-level': this.parametersService.apiLevel,\n 'device-id': this.parametersService.deviceId,\n 'refresh-token': _refresh_token,\n adsId: this.parametersService.adverstimentId\n });\n this.isLoginSource.next(true);\n return;\n }\n else {\n if (this.parametersService.refreshToken) {\n await this.http.getNewRefreshToken().pipe(\n tap(c => {\n //TODO: CHECK SET TOKEN TO DEVICE\n c['refresh_token'] = this.parametersService.refreshToken;\n this.setToken(this.mapTokenFromLogin('pwa', c));\n })\n ).toPromise();\n return;\n }\n }\n }\n this.storage.removeAllLocals();\n this.isLoginSource.next(false);\n }\n\n private getDecodedAccessToken(token: string): any {\n try {\n return jwt_decode(token);\n }\n catch (Error) {\n return null;\n }\n }\n}\n\n","\n \n\n\n
\n \n
\n\n\n
\n \n
\n\n\n\n\n
\n \n \n \n \n
\n \n
\n","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { DeviceService } from '@app/core';\n\nimport { IndicatorService } from './indicator.service';\n\n\n@Component({\n selector: 'navaar-indicator',\n templateUrl: './indicator.component.html',\n styleUrls: ['./indicator.component.scss']\n})\n\nexport class IndicatorComponent implements OnInit, OnChanges {\n @Input('isShowLoading') public isLoading: boolean = false;\n @Input('class') public className: string= \"\";\n public status: boolean;\n public statusHude: boolean;\n public sliderOldVersion: boolean;\n constructor(\n private readonly device: DeviceService,\n private readonly service: IndicatorService) { }\n\n ngOnChanges(changes: import(\"@angular/core\").SimpleChanges): void {\n if (changes && changes.isLoading)\n this.isLoading = changes.isLoading.currentValue;\n }\n\n ngOnInit() {\n this.sliderOldVersion = (!this.device.isIOS && this.device.compareVersions(this.device.osVersion(), '<', '5.0'));\n this.service.indicator$.subscribe(c => {\n this.status = c;\n });\n this.service.indicatorHude$.subscribe(c => {\n this.statusHude = c;\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DeviceService } from '@app/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeepLinkService {\n\n\n private _isDeeplink: boolean;\n public get isDeeplink(): boolean {\n return this._isDeeplink;\n }\n public set isDeeplink(v: boolean) {\n this._isDeeplink = v;\n }\n\n private deeplink: string = '';\n\n constructor(\n private readonly router: Router,\n private readonly device: DeviceService) {\n this.isDeeplink = false;\n }\n public routeToDeeplink(url: string | null) {\n if (!url || url == 'null')\n return;\n this.isDeeplink = true;\n this.deeplink = url;\n //this.location.replaceState('','','clp');\n // if (url.match(/((audiobook|pdp)\\/\\w*\\d\\w*)/i)) {\n // let item: number = +url.match(/((audiobook|pdp)\\/\\w*\\d\\w*)/i)[0].replace(/(audiobook|pdp)\\//i, '');\n // this.router.navigate(['./pdp', item]);\n // }\n // else if (url.match(/(catalog(\\/|\\?))/i)) {\n\n // debugger\n // if (url.match(/(catalog(\\/|\\?)(list(k|K)ey|list))/i)) {\n // const queryStrings = url.split('?')[1];\n // this.router.navigateByUrl(`catalog?${queryStrings}`);\n // } else if (url.match(/(catalog(\\/|\\?)genre)/i)) {\n // const queryStrings = url.split(/genre\\//i)[1].split('/');\n // const genreId = +queryStrings[0];\n // const title = queryStrings[1];\n // this.router.navigateByUrl(`clp/${genreId}?title=${title.replace(/-/g, ' ')}`);\n // }\n // }\n // else if (url.match(/subscription/i)) {\n // this.router.navigate(['./subscription']);\n // }\n // else if (url.includes(\"user?profile\")) {\n // url = url.replace(\"user?profile\", \"profile-edit\");\n // }\n }\n\n public backFromDeeplink() {\n const url = this.deeplink\n this.isDeeplink = false;\n this.deeplink = '';\n const tab = this.device.getCurrentTab();\n switch (tab.toUpperCase()) {\n case 'PROFILE':\n this.router.navigate(['./profile']);\n break;\n case 'SHOP':\n case 'PDP':\n this.router.navigate(['./']);\n break;\n case 'CATEGORY':\n case 'CLP':\n this.router.navigate([`clp`]);\n break;\n default:\n if (url.match(/((audiobook|pdp)\\/\\w*\\d\\w*)/i)) {\n this.router.navigate(['./']);\n }\n else if (url.match(/(catalog(\\/|\\?))/i) || url.match(/(clp(\\/|\\?))/i)) {\n this.router.navigate([`clp`]);\n }\n else if (url.match(/subscription/i)) {\n this.router.navigate(['./subscription']);\n }\n else if (url.includes(\"user?profile\")) {\n this.router.navigate(['./profile']);\n } else {\n this.router.navigate(['./']);\n }\n break;\n }\n }\n\n public getDeeplinkFromNative() {\n try {\n if (this.device.isAndroid())\n (window as any).Android.getDeeplink();\n } catch {\n\n }\n }\n}","import { HttpResponse } from '@angular/common/http';\nimport { environment } from '@env/environment';\n\nexport interface CacheEntry {\n url: string;\n response: HttpResponse\n entryTime: number;\n}\n\nexport const MAX_CACHE_AGE = environment.cache ? 20000 : 0; ","import { HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { Cache } from './Cache';\nimport { CacheEntry, MAX_CACHE_AGE } from './cache-entry';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheMapService implements Cache {\n private cacheMap = new Map();\n get(req: HttpRequest): HttpResponse | null {\n const entry = this.cacheMap.get(req.urlWithParams);\n if (!entry) {\n return null;\n }\n const isExpired = (Date.now() - entry.entryTime) > MAX_CACHE_AGE;\n return isExpired ? null : entry.response;\n }\n put(req: HttpRequest, res: HttpResponse): void {\n const entry: CacheEntry = { url: req.urlWithParams, response: res, entryTime: Date.now() };\n this.cacheMap.set(req.urlWithParams, entry);\n this.deleteExpiredCache();\n }\n private deleteExpiredCache() {\n this.cacheMap.forEach(entry => {\n if ((Date.now() - entry.entryTime) > MAX_CACHE_AGE) {\n this.cacheMap.delete(entry.url);\n }\n })\n }\n}\n","import { Component, EventEmitter } from '@angular/core';\nimport { slideInUpOnEnterAnimation } from '@app/animation/slideDownToUp';\n\nimport { purchaseButtonActionType } from '../pdp-model';\n\n@Component({\n selector: 'navaar-pdp-dialog-markets',\n templateUrl: './pdp-dialog-markets.component.html',\n styleUrls: ['./pdp-dialog-markets.component.scss'],\n animations: [\n slideInUpOnEnterAnimation({ anchor: 'slide' })\n ]\n})\nexport class PdpDialogMarketsComponent {\n\n public data: { purchaseButtonAction: purchaseButtonActionType, discountedPrice: number };\n public onClosePopup: EventEmitter = new EventEmitter();\n public isShow: boolean = false;\n\n public purchaseButtonActionType: typeof purchaseButtonActionType = purchaseButtonActionType;\n\n constructor() { }\n\n public actionDialog(status) {\n this.isShow = false;\n this.onClosePopup.emit(status);\n }\n}\n","\n
\n \n
\n \n
\n
\n
\n
\n

\n اعتبار شما کافی نیست\n
\n لطفا برای خرید آن را افزایش دهید\n

\n

\n با خرید این محصول مبلغ\n
\n \n تومان\n \n \n
\n از اعتبار شما کم می گردد\n

\n
\n \n افزایش اعتبار\n \n \n تایید خرید\n \n \n انصراف\n \n
\n
\n
\n
\n \n
\n","export const convertTimeRangesToSeconds = (buffered: TimeRanges) => {\n return Array.from({ length: buffered.length }, (_, index) => [\n Math.round(buffered.start(index)),\n Math.round(buffered.end(index)),\n ]);\n };\n \n export const sleep = (miliseconds: number) =>\n new Promise((res) => setTimeout(res, miliseconds));\n ","import {Component, ElementRef, Input, ViewChild} from \"@angular/core\";\n\n@Component({\n template: '',\n})\nexport class AudioObjectComponent {\n @ViewChild('audioPlayer', {static: true, read: ElementRef}) public audioPlayer: ElementRef;\n @Input() public src: string;\n}\n","import {ComponentFactoryResolver, ComponentRef, Injectable, Injector, ViewContainerRef} from '@angular/core';\nimport {infoPlayer} from '@app/app/pdp/pdp-model';\nimport {BrowserStorageService, HttpService} from '@app/core';\nimport * as Hls from 'hls.js';\nimport {BehaviorSubject, EMPTY, Subscription, timer} from 'rxjs';\n\nimport {iChapter, iChapterSetStorage, iStatuPlayButton, Media} from './iPlayer';\nimport {convertTimeRangesToSeconds} from './utils';\nimport {startWith, switchMap} from \"rxjs/operators\";\nimport {IndicatorService} from \"@app/shared\";\nimport {AudioObjectComponent} from \"@app/components/player/audio-object.component\";\n\n//https://github.com/video-dev/hls.js/blob/master/docs/API.md\n// import * as Hls from 'hls.js/dist/hls.light.min.js';\n\nconst initialMedia: Media = {\n autoBitrateEnabled: true,\n bitRates: [],\n buffered: null,\n currentBitrateIndex: -1,\n currentTime: 0,\n duration: 0,\n remainingTime: 0,\n fps: 0,\n muted: false,\n playbackRate: 1,\n volume: 1,\n};\n\ntype chapterStorageType = { [audiobookId: string]: Array }\ntype chapterHistoryPlayed = { [audiobookId: string]: iChapterSetStorage }\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlayerService {\n private readonly CHAPTERS_IN_LOCAL: string = \"CHAPTERS_IN_LOCAL\";\n public readonly IS_PLAYING: string = \"IS_PLAYING\";\n private readonly CHAPTERS_PLAYED: string = \"CHAPTER_PLAYED\";\n private _hls: null | Hls = null;\n private audio: HTMLAudioElement;\n\n private readonly _chapter$ = new BehaviorSubject>([]);\n public readonly chapterSource = this._chapter$.asObservable();\n\n private readonly _media$ = new BehaviorSubject(initialMedia);\n public readonly mediaSource = this._media$.asObservable();\n\n public readonly _statusPlayBtn$ = new BehaviorSubject({\n isEnd: true,\n isPlaying: false,\n isPause: false,\n isLoading: false\n });\n public readonly statusPlayBtnSource = this._statusPlayBtn$.asObservable();\n\n private readonly _currentTime$ = new BehaviorSubject(0);\n public readonly currentTimeSource = this._currentTime$.asObservable();\n\n private readonly _bufferTime$ = new BehaviorSubject<[number, boolean?]>([0, false]);\n public readonly bufferTimeSource = this._bufferTime$.asObservable();\n\n private readonly _showPlayer$ = new BehaviorSubject(false);\n public readonly showPlayerSource = this._showPlayer$.asObservable();\n\n private readonly _showSmallPlayer$ = new BehaviorSubject(false);\n public readonly showSmallPlayerSource = this._showSmallPlayer$.asObservable();\n\n private readonly _info$ = new BehaviorSubject(null);\n public readonly infoSource = this._info$.asObservable();\n\n private readonly _remainSleepTimeToMinutes$ = new BehaviorSubject(null);\n public readonly remainSleepTimeToMinutes = this._remainSleepTimeToMinutes$.asObservable();\n\n private readonly _goToSmallPlayer$ = new BehaviorSubject(false);\n public goToSmallPlayerSource = this._goToSmallPlayer$.asObservable();\n\n private remainSleepTimeToMinutesSubscription: Subscription = new Subscription();\n public isPlayWithSmallPlayer: boolean = false;\n public isSampleMode: boolean = false;\n\n private chaptersInStorage: Array | null = null;\n public currentChapter: iChapterSetStorage = {};\n\n private chapterHistoryPlayed: chapterHistoryPlayed = {};\n private countChapter: number = 0;\n private audioBookId: string;\n private setDurationCalledTime: number = 0;\n private _sleepTimeOut;\n private _sleepInEndEpisode: boolean = false;\n private isUseHlsMode: boolean = false;\n\n public onSeekForward: number = 30;\n public onSeekBackward: number = 10;\n\n public get isShowPlayer(): boolean {\n return this._showPlayer$.getValue();\n }\n\n public get isShowSmallPlayer(): boolean {\n return this._showSmallPlayer$.getValue();\n }\n\n public set isShowSmallPlayer(state: boolean) {\n this._showSmallPlayer$.next(state);\n }\n\n get media(): Media {\n return this._media$.getValue();\n }\n\n private audioEvents = [\n \"ended\",\n \"error\",\n \"play\",\n \"playing\",\n \"pause\",\n \"timeupdate\",\n \"canplay\",\n \"loadedmetadata\",\n \"loadstart\"\n ];\n private componentFactoryAudioObj: ComponentRef;\n\n constructor(\n private readonly injector: Injector,\n private readonly componentFactoryResolver: ComponentFactoryResolver,\n private readonly indicatorService: IndicatorService,\n private readonly storage: BrowserStorageService,\n private readonly http: HttpService) {\n }\n\n public initial(info: infoPlayer, isSmallPlayerMode: boolean = false): void {\n this.onPause();\n this.releaseHls(false);\n this.isPlayWithSmallPlayer = this.isShowSmallPlayer = isSmallPlayerMode;\n this._info$.next(info);\n this._showPlayer$.next(true);\n this._goToSmallPlayer$.next(false);\n this.audioBookId = info.audioBookId;\n this.isSampleMode = !info.isOwner;\n if (info.isOwner) {\n this.http.post(`/api/library/single-item/${info.audioBookId}`).subscribe(x => {\n const _chapters = (>x['chapters']).sort(c => c.order).map((c, i) => {\n chapterId: c.chapterId,\n duration: c.duration,\n durationPlayed: null,\n isPlaying: false,\n title: c.title,\n index: i,\n audioBookId: x.audioBookId\n });\n this.setChaptersToAudiobook(_chapters, true);\n this.countChapter = _chapters.length;\n this._chapter$.next(_chapters);\n this.chaptersInStorage = this.getChapterAudiobook();\n const chapterHistoryPlayed = this.storage.getLocal(this.CHAPTERS_PLAYED) ?? {};\n this.currentChapter = chapterHistoryPlayed[this.audioBookId] ?? _chapters[0];\n this.chapterHistoryPlayed[this.audioBookId] = this.currentChapter;\n this.setChapterHistoryPlayed(this.currentChapter);\n this.http.get(`/api/stream/playlist/${this.currentChapter.chapterId}`).subscribe(c => {\n this.initHls(c.streamUrl, c.downloadUrl);\n })\n })\n } else {\n this.http.get(`/api/stream/sample/${info.audioBookId}`).subscribe(c => {\n this.initHls(c.streamUrl, c.downloadUrl);\n });\n }\n }\n\n private getChapterAudiobook(): Array | null {\n const chapters = this.storage.getLocal(this.CHAPTERS_IN_LOCAL);\n if (chapters && chapters[this.audioBookId])\n return chapters[this.audioBookId];\n return null;\n }\n\n private setChaptersToAudiobook(chapters: Array, initial: boolean = false) {\n const _chapters = this.storage.getLocal(this.CHAPTERS_IN_LOCAL) || {};\n if (_chapters[this.audioBookId]) {\n if (initial === false) {\n const _ = chapters.map(x => {\n if (x.chapterId === this.currentChapter.chapterId)\n x = this.currentChapter;\n return x;\n });\n chapters = Object.assign(_chapters[this.audioBookId], _);\n }\n }\n _chapters[this.audioBookId] = chapters;\n this.storage.setLocal(this.CHAPTERS_IN_LOCAL, _chapters);\n }\n\n private initHls(streamUrl, offlineUrl, isChangeChapter: boolean = false) {\n this.releaseHls(isChangeChapter);\n let factory = this.componentFactoryResolver.resolveComponentFactory(AudioObjectComponent);\n this.componentFactoryAudioObj = factory.create(this.injector);\n\n this.audio = this.componentFactoryAudioObj.instance.audioPlayer.nativeElement;\n this.audio.onseeked = () => this.onSeeked();\n this.audio.onloadedmetadata = () => this.onLoadedMetadata();\n this.audio.onratechange = () => this.onRateChange();\n this.audio.onpause = () => this.onPause();\n this.audio.onplay = () => this.onPlay();\n this.audio.ondurationchange = () => this.onProgress();\n this.audio.onwaiting = () => this.onWaiting();\n this.audio.ontimeupdate = (e) => this.onTimeUpdate(e);\n this.audio.onended = () => this.onEnded();\n this.audio.onplaying = () => this.onPlaying();\n this.audio.onloadeddata = (ev) => this.onLoadeddata(ev);\n\n if ('mediaSession' in navigator) {\n try {\n const info = this._info$.getValue();\n navigator.mediaSession.metadata = new MediaMetadata({\n title: this.currentChapter?.title ?? '',\n artist: info.author ? info.author : info.narrators ? info.narrators : '',\n album: info.title,\n artwork: [\n {src: `${info.image}&w=96&h=96&mode=stretch`, sizes: '96x96', type: 'image/png'},\n {src: `${info.image}&w=128&h=128&mode=stretch`, sizes: '128x128', type: 'image/png'},\n {src: `${info.image}&w=192&h=192&mode=stretch`, sizes: '192x192', type: 'image/png'},\n {src: `${info.image}&w=256&h=256&mode=stretch`, sizes: '256x256', type: 'image/png'},\n {src: `${info.image}&w=384&h=384&mode=stretch`, sizes: '384x384', type: 'image/png'},\n {src: `${info.image}&w=512&h=512&mode=stretch`, sizes: '512x512', type: 'image/png'},\n ]\n });\n navigator.mediaSession.setActionHandler('play', () => this.onPlay());\n navigator.mediaSession.setActionHandler('pause', () => this.onPause());\n navigator.mediaSession.setActionHandler('seekbackward', () => this.onSeeking(this.onSeekBackward, false));\n navigator.mediaSession.setActionHandler('seekforward', () => this.onSeeking(this.onSeekForward, true));\n if (this.countChapter > 1) {\n if (this.getIndexOfChapterPlaying() > 1)\n navigator.mediaSession.setActionHandler('previoustrack', () => {\n if (this.getIndexOfChapterPlaying() == 1)\n return;\n const _chapterId = this._chapter$.getValue()[this.currentChapter.index - 1].chapterId;\n this.goToChapter(_chapterId);\n });\n if (this.getIndexOfChapterPlaying() < this._chapter$.getValue().length)\n navigator.mediaSession.setActionHandler('nexttrack', () => {\n if (this.getIndexOfChapterPlaying() == this._chapter$.getValue().length)\n return;\n const _chapterId = this._chapter$.getValue()[this.currentChapter.index + 1].chapterId;\n this.goToChapter(_chapterId);\n });\n }\n if (window.navigator.mediaSession?.setPositionState) {\n this.updatePositionStateNotification();\n }\n } catch (error) {\n }\n }\n this.currentChapter.isPlaying = true;\n if (streamUrl && Hls.isSupported()) {\n this.isUseHlsMode = true;\n this._hls = new Hls({\n maxBufferLength: 100,\n maxBufferSize: 10,\n maxMaxBufferLength: 120,\n appendErrorMaxRetry: 5,\n fetchSetup: (context, initParams) => {\n // Always send cookies, even for cross-origin calls.\n initParams.credentials = 'include';\n return new Request(context.url, initParams);\n }\n });\n this._hls.attachMedia(this.audio);\n this._hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n this._hls.loadSource(streamUrl);\n this.onPlay();\n });\n this._hls.on(Hls.Events.MANIFEST_PARSED, (_, data) => {\n this.media.bitRates = ((data.levels as unknown) as Hls.Level[]).map(\n (level) => ({\n bitrate: level.bitrate\n })\n );\n });\n this._hls.on(Hls.Events.MANIFEST_LOADED, (_, data) => {\n })\n this._hls.on(Hls.Events.FRAG_PARSING_DATA, (_, data) => {\n if (data.type === 'audio') {\n const fps = data.nb / (data.endPTS - data.startPTS);\n this.media.fps = Math.round(fps);\n }\n });\n this._hls.on(Hls.Events.LEVEL_SWITCHED, (_, {level}) => {\n this.media.currentBitrateIndex = level;\n });\n this._hls.on(Hls.Events.BUFFER_APPENDING, (_, data) => {\n const buffered = convertTimeRangesToSeconds(this.getMedia().buffered);\n if (buffered.length > 0) {\n const [start, end] = buffered[buffered.length - 1];\n this._bufferTime$.next([end]);\n }\n });\n this._hls.on(Hls.Events.BUFFER_EOS, (_, data) => {\n this._bufferTime$.next([this.getMedia().duration, true]);\n });\n this._hls.on(Hls.Events.BUFFER_CREATED, (_, data) => {\n });\n this._hls.on(Hls.Events.ERROR, function (event, data) {\n const errorType = data.type;\n const errorDetails = data.details;\n const errorFatal = data.fatal;\n switch (data.details) {\n case Hls.ErrorDetails.FRAG_LOAD_ERROR:\n break;\n default:\n break;\n }\n });\n } else {\n this.isUseHlsMode = false;\n this.audio.src = offlineUrl;\n this.onPlay();\n }\n\n this.indicatorService.hide();\n this.indicatorService.hideHude();\n }\n\n private updatePositionStateNotification() {\n try {\n if (this.media.currentTime >= this.media.duration)\n return;\n if ('mediaSession' in navigator)\n navigator.mediaSession?.setPositionState({\n duration: this.media.duration ?? 0.0,\n position: this.media.currentTime ?? 0.0,\n playbackRate: this.media.playbackRate\n });\n } catch (e) {\n\n }\n }\n\n public releaseHls(isChangeChapter: boolean = false) {\n if (this.isUseHlsMode && this._hls) {\n this._hls.destroy();\n this._statusPlayBtn$.next({\n isEnd: true,\n isPause: false,\n isPlaying: false,\n isLoading: false\n });\n if (!isChangeChapter) {\n this._showPlayer$.next(false);\n this._bufferTime$.next([0]);\n }\n } else {\n if (this.audio) {\n this.audio.pause();\n this.audio.remove();\n this.audio.currentTime = 0;\n this.componentFactoryAudioObj.destroy();\n }\n }\n }\n\n private getMedia() {\n const media = this.audio;\n if (!media) {\n throw new Error('media element is not available');\n }\n return media as HTMLMediaElement;\n }\n\n private getHls() {\n const hls = this._hls;\n if (!hls) {\n throw new Error('Hls instance is not available');\n }\n return hls;\n }\n\n private async onLoadedMetadata() {\n while (this.getMedia().duration === Infinity) {\n await new Promise((res) => setTimeout(res, 100));\n }\n this.media.duration = this.getMedia().duration;\n this.updatePositionStateNotification();\n }\n\n private onLoadeddata(ev: Event): any {\n let media = this.getMedia();\n if (Math.floor(this.currentChapter.durationPlayed) === Math.floor(media.duration))\n this.currentChapter.durationPlayed = 0;\n if (this.currentChapter.durationPlayed)\n media.currentTime = this.currentChapter.durationPlayed;\n this.updatePositionStateNotification();\n }\n\n private checkMediaHasDataToPlay() {\n const media = this.getMedia();\n const currentTime = media.currentTime;\n const timeRanges = convertTimeRangesToSeconds(media.buffered);\n return timeRanges.some((timeRange) => {\n const [start, end] = timeRange;\n return currentTime >= start && currentTime <= end;\n });\n }\n\n public setCurrentTime(currentTime: number) {\n this.getMedia().currentTime = Math.min(\n Math.max(currentTime, 0),\n this.getMedia().duration\n );\n }\n\n public onTogglePlay() {\n if (this.audio.paused)\n this.onPlay();\n else\n this.onPause();\n }\n\n public onPause() {\n if (this.audio) {\n this.audio.pause();\n this.currentChapter.durationPlayed = this.getMedia().currentTime;\n this.setChaptersToAudiobook(this.chaptersInStorage);\n this.setChapterHistoryPlayed(this.currentChapter);\n if ('mediaSession' in navigator)\n navigator.mediaSession.playbackState = \"paused\";\n this._statusPlayBtn$.next({\n isEnd: false,\n isPause: true,\n isPlaying: false,\n isLoading: false\n });\n }\n }\n\n public onPlay() {\n console.log('ON+PLAYYYYYYYYYYYYYYYYYYYY')\n if (!this.audio) {\n return;\n }\n if ('mediaSession' in navigator)\n navigator.mediaSession.playbackState = \"playing\";\n this.audio.play().then(x => {\n console.log('SUCCESSSSSSSSSS')\n this._statusPlayBtn$.next({\n isEnd: false,\n isPause: false,\n isPlaying: true,\n isLoading: false\n });\n }).catch(c => {\n console.log('CATCHHHHHHHHH')\n this._statusPlayBtn$.next({\n isEnd: false,\n isPause: true,\n isPlaying: false,\n isLoading: false\n });\n });\n }\n\n public onTimeUpdate(e) {\n this.media.currentTime = this.getMedia().currentTime;\n this.media.remainingTime = ((this.getMedia().duration + 60) - this.getMedia().currentTime);\n this._currentTime$.next(this.media.currentTime);\n this.currentChapter.durationPlayed = this.media.currentTime;\n this.setChapterHistoryPlayed(this.currentChapter);\n if (this.setDurationCalledTime == 20) {\n this.setChaptersToAudiobook(this.chaptersInStorage);\n this.setDurationCalledTime = 0;\n } else\n ++this.setDurationCalledTime;\n this.updatePositionStateNotification();\n }\n\n public onSeeking(time?: number, isNext?: boolean) {\n this._statusPlayBtn$.next({\n isEnd: false,\n isPause: false,\n isPlaying: false,\n isLoading: true\n });\n const media = this.getMedia();\n this.audio.currentTime = isNext ? (media.currentTime + time) : (media.currentTime - time);\n this.updatePositionStateNotification();\n }\n\n public onSeeked() {\n this._statusPlayBtn$.next({\n isEnd: false,\n isPause: false,\n isPlaying: true,\n isLoading: false\n });\n this.updatePositionStateNotification();\n }\n\n public onEnded() {\n if (this._sleepInEndEpisode)\n this.setOnSleepTimeout(0);\n this.currentChapter.isPlaying = false;\n this.currentChapter.durationPlayed = this.media.duration;\n if (this.chaptersInStorage) {\n this.setChaptersToAudiobook(this.chaptersInStorage);\n const indexItem = this.chaptersInStorage.findIndex(c => c.chapterId === this.currentChapter.chapterId);\n if (indexItem !== -1 && this.chaptersInStorage[indexItem + 1])\n this.goToChapter(this.chaptersInStorage[indexItem + 1].chapterId);\n else {\n this.chaptersInStorage.forEach(c => c.durationPlayed = null);\n this.setChaptersToAudiobook(this.chaptersInStorage);\n }\n }\n this._statusPlayBtn$.next({\n isEnd: true,\n isPause: false,\n isPlaying: false,\n isLoading: false\n });\n this.updatePositionStateNotification();\n }\n\n public goToChapter(chapterId: string) {\n this._bufferTime$.next([0]);\n this.onPause();\n this._statusPlayBtn$.next({\n isEnd: false,\n isPause: false,\n isPlaying: false,\n isLoading: true\n });\n this.currentChapter.isPlaying = false;\n this.currentChapter.durationPlayed = this.getMedia().currentTime;\n this.setChaptersToAudiobook(this.chaptersInStorage);\n this.currentChapter = this.chaptersInStorage.find(c => c.chapterId == chapterId);\n this.currentChapter.isPlaying = true;\n this.setChapterHistoryPlayed(this.currentChapter);\n this._chapter$.next(this.chaptersInStorage);\n this.http.get(`/api/stream/playlist/${chapterId}`).subscribe(c => {\n this.initHls(c.streamUrl, c.downloadUrl, true);\n }, (err) => {\n // if err.status === 401, then user is not authorized to play this chapter\\\n console.log(err);\n })\n }\n\n public onPlaying() {\n this.storage.setLocal(this.IS_PLAYING, encodeURIComponent(JSON.stringify(this._info$.getValue())), true);\n this._statusPlayBtn$.next({\n isEnd: false,\n isPause: false,\n isPlaying: true,\n isLoading: false\n });\n }\n\n public onWaiting() {\n this._statusPlayBtn$.next({\n isEnd: false,\n isPause: false,\n isPlaying: false,\n isLoading: true\n });\n }\n\n public onProgress() {\n this.media.buffered = this.getMedia().buffered;\n this.updatePositionStateNotification();\n }\n\n public getIndexOfChapterPlaying(): number {\n let _i = this.currentChapter.index + 1;\n if (this._chapter$.getValue().length < _i)\n _i = this._chapter$.getValue().length;\n return _i;\n }\n\n public setPlaybackRate(playbackRate: number) {\n this.getMedia().playbackRate = playbackRate;\n }\n\n public onRateChange() {\n this.media.playbackRate = this.getMedia().playbackRate;\n this.updatePositionStateNotification();\n }\n\n public setOnSleepTimeout(timeOut: number, callback: () => void = null) {\n if (this._sleepTimeOut) {\n clearTimeout(this._sleepTimeOut);\n this.remainSleepTimeToMinutesSubscription.unsubscribe();\n this._remainSleepTimeToMinutes$.next(null);\n }\n const start = performance.now();\n this._sleepTimeOut = setTimeout(() => {\n this.onPause();\n clearTimeout(this._sleepTimeOut);\n this.remainSleepTimeToMinutesSubscription.unsubscribe();\n this._remainSleepTimeToMinutes$.next(null);\n if (callback)\n callback();\n }, timeOut);\n this.remainSleepTimeToMinutesSubscription = timer(0, 60 * 1000)\n .pipe(\n startWith(0),\n switchMap(z => {\n this._remainSleepTimeToMinutes$.next(Math.ceil((timeOut - (performance.now() - start)) / (60 * 1000)));\n return EMPTY;\n })\n ).subscribe();\n }\n\n public setOffSleepTime() {\n clearTimeout(this._sleepTimeOut);\n this._sleepInEndEpisode = false;\n this._remainSleepTimeToMinutes$.next(null);\n }\n\n public setOnSleepTimeInEndEpisode(time) {\n clearTimeout(this._sleepTimeOut);\n this._sleepInEndEpisode = true;\n this._remainSleepTimeToMinutes$.next(Math.floor(time / 60) + 1);\n }\n\n public onDestroy() {\n this.releaseHls();\n this._chapter$.unsubscribe();\n this._media$.unsubscribe();\n this._statusPlayBtn$.unsubscribe();\n this._currentTime$.unsubscribe();\n this._bufferTime$.unsubscribe();\n this._showPlayer$.unsubscribe();\n this._info$.unsubscribe();\n this.storage.removeLocal(this.IS_PLAYING);\n }\n\n public closePlayer() {\n if (this.isShowPlayer) {\n this.onPause();\n this.storage.removeLocal(this.IS_PLAYING);\n this._showPlayer$.next(false);\n this.isShowSmallPlayer = false;\n this._goToSmallPlayer$.next(false);\n }\n }\n\n private setChapterHistoryPlayed(currentChapter) {\n if (currentChapter.audioBookId != this.audioBookId)\n return;\n this.chapterHistoryPlayed[this.audioBookId] = currentChapter;\n this.storage.setLocal(this.CHAPTERS_PLAYED, this.chapterHistoryPlayed);\n }\n\n setCurrentBitrateIndex = (bitrateIndex: number) => {\n this.media.autoBitrateEnabled = bitrateIndex === -1;\n this.media.currentBitrateIndex = bitrateIndex;\n const hlsInstance = this.getHls();\n if (hlsInstance.currentLevel !== bitrateIndex) {\n hlsInstance.currentLevel = bitrateIndex;\n }\n }\n\n public getStatusShowPlayer(): boolean {\n return this._showPlayer$.getValue();\n }\n\n public goToSmallPlayer(hasForce: boolean = false) {\n this._goToSmallPlayer$.next(hasForce);\n }\n}\n","import { PlatformLocation } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { DeviceService } from '@app/core';\nimport { NavigationBarEnum } from './navigation-bar.model';\nimport {environment} from \"@env/environment\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBarService {\n\n private _activeMenu: NavigationBarEnum;\n public get activeMenu(): NavigationBarEnum {\n return this._activeMenu;\n }\n public set activeMenu(v: NavigationBarEnum) {\n this._activeMenu = v;\n }\n\n public isShow: boolean;\n\n constructor(\n private readonly location: PlatformLocation,\n private readonly device: DeviceService) {\n\n }\n\n public prepareNavigationBar() {\n this.isShow = (this.device.isPwa() || this.device.isDevelop());\n if (this.isShow) {\n const url = this.location.pathname.replace(`${environment.webFolder}`, '');\n if (url.match(/((audiobook|pdp)\\/\\w*\\d\\w*)/i)) {\n this.activeMenu = NavigationBarEnum.vitrin;\n }\n else if (url.match(/(catalog(\\/|\\?))/i) ||\n url.match(/(catalog(\\/|\\?)(list(k|K)ey|list))/i) ||\n url.match(/(catalog(\\/|\\?)genre)/i) ||\n url.includes('clp') ||\n url === '/search') {\n this.activeMenu = NavigationBarEnum.category;\n }\n else if (url.includes(\"library\")) {\n this.activeMenu = NavigationBarEnum.library;\n }\n else if (url.match(/subscription/i) ||\n url.includes(\"profile\") ||\n url.includes(\"credit\") ||\n url.includes(\"redeem\") ||\n url.includes(\"wishlist\") ||\n url.includes(\"feedback\") ||\n url.includes(\"about\") ||\n url.includes(\"archive\")) {\n this.activeMenu = NavigationBarEnum.profile;\n }\n else {\n this.activeMenu = NavigationBarEnum.vitrin;\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BrowserStorageService, DeviceService, LogService, TypeShowLogInConsole } from '@app/core';\nimport { TokenService } from '@app/core/token/token.service';\nimport {Observable, throwError} from 'rxjs';\n\nimport { UserService } from './../profile/user-service.service';\nimport {PlayerService} from \"@app/components/player/player.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService {\n\n constructor(\n private readonly playerService: PlayerService,\n private readonly userService: UserService,\n private readonly tokenService: TokenService,\n private readonly device: DeviceService,\n private readonly storage: BrowserStorageService,\n private readonly log: LogService) { }\n\n public setToken(value) {\n this.log.logger('------------------- SET-TOKEN ----------------------');\n this.log.logger(value, TypeShowLogInConsole.table);\n let _token, data;\n if (this.device.isIOS())\n _token = window.atob(value);\n else\n _token = value;\n if (typeof _token === 'object') {\n data = _token;\n } else\n data = JSON.parse(_token);\n let type: 'android' | 'ios' | 'pwa' | 'develop' = this.device.isIOS() ? 'ios' : this.device.isAndroid() ? 'android' : this.device.isPwa() ? 'pwa' : 'develop';\n const mappedToken = this.tokenService.mapTokenFromLogin(type, data);\n this.tokenService.setToken(mappedToken);\n this.device.setConfig(mappedToken);\n }\n\n public logout(error?: any): Observable {\n this.userService.setUserInfo(null);\n this.log.logger('token inseptor logoutUser call');\n this.storage.removeAllLocals(true);\n this.tokenService.setAccessToken(null);\n this.tokenService.setRefreshToken(null);\n this.tokenService.setStatusLogin(false);\n this.device.exitFromApp();\n this.playerService.closePlayer();\n this.log.logger(`sending logout signal to native part - logout ${error}`);\n return throwError(error);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class IndicatorService {\n\n private indicatorSource: BehaviorSubject = new BehaviorSubject(false);\n public indicator$: Observable = this.indicatorSource.asObservable();\n\n private indicatorHudeSource: BehaviorSubject = new BehaviorSubject(true);\n public indicatorHude$: Observable = this.indicatorHudeSource.asObservable();\n\n constructor() { }\n\n public show(autoHide = false, timeout = 5000) {\n this.indicatorSource.next(false);\n if (autoHide)\n setTimeout(() => this.hide(), timeout);\n }\n public hide() {\n setTimeout(() => this.indicatorSource.next(true), 500);\n }\n\n public hideHude() {\n this.indicatorHudeSource.next(true);\n\n }\n\n public showHude(autoHide = false, timeout = 5000) {\n this.indicatorHudeSource.next(false);\n if (autoHide)\n setTimeout(() => this.hideHude(), timeout);\n }\n\n public set(status: boolean) {\n this.indicatorSource.next(status);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError, map, publishReplay, refCount, share, tap } from 'rxjs/operators';\n\nimport { HttpService } from '@app/core';\nimport { LogService } from '@app/core';\nimport { TypeShowLogInConsole } from '@app/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheObjectService {\n\n private _pageNumer: number = 0;\n public get pageNumer(): number {\n return this._pageNumer;\n }\n public set pageNumer(v: number) {\n this._pageNumer = v;\n }\n\n private observableCache: { [key: string]: Observable } = {};\n private Cache: { [key: string]: T } = {};\n private objCacheList: {\n urls?: Array,\n items?: Array,\n total?: number,\n key?: string\n } = {};\n\n constructor(\n private readonly log: LogService,\n private readonly http: HttpService) { }\n\n public postObjectCache(url, key: string | null = null) {\n if (!key)\n key = url;\n // Data available\n if (this.Cache[key]) return of(this.Cache[key]);\n // Request pending\n else if (this.observableCache[key]) return this.observableCache[key];\n // New request needed\n else this.observableCache[key] = this.fetchObjectCachePost(url, key);\n return this.observableCache[key];\n }\n\n private fetchObjectCachePost(url, key): Observable {\n return this.http.post(url).pipe(\n tap(rawData => {\n this.observableCache[key] = null;\n this.Cache[key] = rawData;\n this.log.logger('CACHE OBJECT CACHED');\n this.log.logger(this.Cache, TypeShowLogInConsole.table);\n }),\n catchError(CacheObjectService.handleError),\n publishReplay(1),\n refCount(),\n share()\n )\n }\n\n public getObjectCache(url, key: string | null = null) {\n if (!key)\n key = url;\n // Data available\n if (this.Cache[key]) return of(this.Cache[key]);\n // Request pending\n else if (this.observableCache[key]) return this.observableCache[key];\n // New request needed\n else this.observableCache[key] = this.fetchObjectCache(url, key);\n return this.observableCache[key];\n }\n\n private fetchObjectCache(url, key): Observable {\n return this.http.get(url).pipe(\n tap(rawData => {\n this.observableCache[key] = null;\n this.Cache[key] = rawData;\n this.log.logger('CACHE OBJECT CACHED');\n this.log.logger(this.Cache, TypeShowLogInConsole.table);\n }),\n catchError(CacheObjectService.handleError),\n publishReplay(1),\n refCount(),\n share()\n )\n }\n\n public getObjectCacheOfList(url: string, key: string = null, currentPage: number): Observable {\n key = key.trim();\n key = encodeURIComponent(key);\n let result: Observable<{\n items?: Array,\n total?: number,\n key?: string,\n currentPage?: number\n }> = of();\n\n const nameCahe = `object-cachename-${key}`;\n if (this.objCacheList[nameCahe]) {\n let _urls: Array = this.objCacheList[nameCahe]['urls'];\n if (_urls.some(c => c === url)) {\n result = of({\n items: this.objCacheList[nameCahe]['items'],\n total: this.objCacheList[nameCahe]['total'],\n key: this.objCacheList[nameCahe]['key'],\n currentPage: this.objCacheList[nameCahe]['currentPage']\n });\n this.pageNumer = this.objCacheList[nameCahe]['currentPage'];\n } else {\n result = this.fetchData(key, url).pipe(\n map((c) => {\n _urls.push(url);\n const _oldItems = this.objCacheList[nameCahe]['items'];\n return this.objCacheList[nameCahe] = {\n urls: _urls,\n items: [..._oldItems, ...c.items],\n total: c.total,\n key: decodeURIComponent(key),\n currentPage\n }\n })\n );\n }\n } else {\n result = this.fetchData(key, url).pipe(\n tap((c) => {\n this.objCacheList[nameCahe] = {\n urls: [url],\n items: [...c.items],\n total: c.total,\n key: decodeURIComponent(key),\n currentPage\n }\n })\n );\n }\n return result;\n }\n\n private fetchData(key, url): Observable {\n return this.getObjectCache(url).pipe(\n map(res => {\n return {\n items: res['items'],\n total: res['count'],\n key\n }\n }),\n publishReplay(1),\n refCount(),\n catchError(CacheObjectService.handleError),\n share()\n );\n }\n\n static handleError(error: any) {\n const _errMsg = (error.message) ? error.message :\n error.status ? `${error.status} - ${error.statusText}` : 'Server error';\n console.error(_errMsg);\n return throwError(_errMsg);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { environment } from 'environments/environment';\nimport * as moment from 'moment';\nimport { Subject } from 'rxjs';\nimport { debounceTime, filter } from 'rxjs/operators';\n\nimport { LogFields } from './log-data.interface';\n\nexport type LogType = 'Error' | 'Information' | 'Warning';\n\ninterface LogEntry {\n type: LogType;\n message: string;\n data: LogFields;\n}\n\nenum LoggerEvents {\n Flush = 1\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Logger {\n private readonly APP_FIELD = 'Application';\n private readonly ENV_FIELD = 'Environment';\n private readonly VERSION_FIELD = 'Version';\n private readonly USER_NAME_FIELD = 'UserName';\n private readonly ELAPSED_MS_FIELD = 'ElapsedMilliseconds';\n private readonly REQUEST_PATH_FIELD = 'RequestPath';\n private readonly URL_FIELD = 'Url';\n private readonly APP_STATE_FIELD = 'AppState';\n private buffer: LogEntry[] = [];\n private flush = new Subject();\n\n constructor(\n private readonly appName: string,\n private readonly logEndpoint: string) {\n this.flush\n .pipe(debounceTime(5000), filter((event) => event === LoggerEvents.Flush))\n .subscribe(() => this.flushBuffer());\n }\n\n public log(type: LogType, message: string, data: LogFields) {\n this.buffer.push({\n type,\n message,\n data\n });\n this.flush.next(LoggerEvents.Flush);\n }\n\n private flushBuffer() {\n const data = this.buffer.splice(0);\n\n if (data.length === 0) {\n return;\n }\n\n const body = data\n .map((entry) => this.buildLogString(entry))\n .reduce((sum, entry) => (sum += entry), '');\n if (!environment.production) {\n // console.log({\n // body,\n // data\n // });\n } else {\n // const xobj = new XMLHttpRequest();\n // xobj.onerror = (err) => console.error(err);\n // xobj.open('POST', this.logEndpoint, true);\n // xobj.send(body);\n }\n //TODO: use inject EventTrackerService\n let jsonText = { name: 'X_ERROR_LOAD_APP', params: body };\n try {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage('logEvent-' + JSON.stringify(jsonText));\n } catch (e) {\n }\n try {\n (window as any).Android.logEvent(JSON.stringify(jsonText));\n } catch (e) {\n }\n }\n\n private buildLogString(entry: LogEntry): string {\n const index = this.buildIndexChunk();\n const body = this.buildBodyChunk(entry);\n\n return `${index}\\n${body}\\n`;\n }\n\n private buildIndexChunk() {\n const date = moment();\n const index = {\n index: {\n _index: `logstash-${date.format('YYYY.M.D')}`,\n _type: 'logevent'\n }\n };\n\n return JSON.stringify(index);\n }\n\n private buildBodyChunk(entry: LogEntry) {\n const { type, message, data } = entry;\n const level = type;\n const date = moment();\n const messageTemplate = this.getMessageTemplate();\n const fields = this.getFields(data);\n const body = {\n '@timestamp': `${date.toISOString()}`,\n level,\n messageTemplate,\n message,\n fields\n };\n\n return JSON.stringify(body);\n }\n\n private getMessageTemplate() {\n const fields: string[] = [\n this.APP_FIELD,\n this.ENV_FIELD,\n this.VERSION_FIELD,\n this.USER_NAME_FIELD,\n this.ELAPSED_MS_FIELD,\n this.REQUEST_PATH_FIELD,\n this.URL_FIELD,\n this.APP_STATE_FIELD\n ];\n const template = fields.map((field) => `{${field}}`).join(' - ');\n\n return template;\n }\n\n private getFields(data: LogFields) {\n return {\n [this.APP_FIELD]: this.appName,\n [this.ENV_FIELD]: data.environment,\n [this.VERSION_FIELD]: data.appVersion,\n [this.USER_NAME_FIELD]: data.userId,\n [this.ELAPSED_MS_FIELD]: data.elapsedTime,\n [this.REQUEST_PATH_FIELD]: data.requestPath,\n [this.URL_FIELD]: data.url\n };\n }\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { BehaviorSubject } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\nimport { LogFields } from './log-data.interface';\nimport { Logger } from './logger';\nimport { TypeShowLogInConsole } from './TypeShowLogInConsoleEnum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LogService {\n private _logger: Logger;\n private logSource: BehaviorSubject> = new BehaviorSubject>([\"\"]);\n public log$: Observable> = this.logSource.asObservable();\n private logMessages: Array = [];\n public userId?: string;\n public static injector: Injector;\n\n constructor() {\n this.initialize();\n }\n\n public initialize() {\n this._logger = new Logger(environment.envName, environment.endpoints.elasticSearchEndpoint);\n }\n\n public logHttpInfo(info: any, elapsedTime: number, requestPath: string) {\n const url = location.href;\n const logFields: LogFields = {\n environment: environment.envName,\n userId: this.userId,\n requestPath,\n elapsedTime,\n url,\n };\n\n this._logger.log('Information', `${info}`, logFields);\n }\n\n public logWarning(errorMsg: string) {\n const url = location.href;\n\n const logFields: LogFields = {\n environment: environment.envName,\n userId: this.userId,\n requestPath: '',\n elapsedTime: 0,\n url,\n };\n\n this._logger.log('Warning', errorMsg, logFields);\n }\n\n public logError(errorMsg: string) {\n const url = location.href;\n const logFields: LogFields = {\n environment: environment.envName,\n userId: this.userId,\n requestPath: '',\n elapsedTime: 0,\n url,\n };\n\n this._logger.log('Error', errorMsg, logFields);\n }\n\n public logInfo(info: any) {\n const url = location.href;\n const logFields: LogFields = {\n environment: environment.envName,\n userId: this.userId,\n requestPath: '',\n elapsedTime: 0,\n url,\n };\n\n this._logger.log('Information', info, logFields);\n }\n\n public logger(obj: any, type: TypeShowLogInConsole = TypeShowLogInConsole.default) {\n if (environment.debug) {\n switch (type) {\n case TypeShowLogInConsole.warning:\n console.warn(JSON.stringify(obj))\n break;\n case TypeShowLogInConsole.error:\n console.error(JSON.stringify(obj))\n break;\n case TypeShowLogInConsole.table:\n if (console.table)\n console.table(obj)\n break;\n case TypeShowLogInConsole.info:\n console.info(obj)\n break;\n case TypeShowLogInConsole.default:\n default:\n console.log(JSON.stringify(obj))\n break;\n }\n console.groupCollapsed('^^^');\n console.trace();\n console.groupEnd();\n }\n }\n\n public showLog(e: string) {\n if (environment.debug) {\n if (this.logMessages.length > 3)\n this.logMessages.splice(0, 1);\n this.logMessages.push(e);\n this.logSource.next(this.logMessages);\n }\n }\n}\n\n","import {HttpClient, HttpHeaders, HttpParams, HttpRequest} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {environment} from '@env/environment';\nimport {Moment} from 'moment';\nimport * as moment from 'moment';\nimport {Observable, of} from 'rxjs';\nimport {share} from 'rxjs/operators';\n\nimport {JwtTokenResponse, JwtTokenResponseNewLogin, RefreshTokenResponse} from '../RefreshTokenResponse';\nimport {AppParametersService} from '../token/app-parameters.service';\nimport {LogService} from './../log/log.service';\nimport {oAuthTypeEnum} from \"@app/helper/oAuthTypeEnum\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpService {\n readonly BASE_URL: string = environment.siteUrl;\n\n constructor(\n private readonly parametersService: AppParametersService,\n private readonly log: LogService,\n private readonly http: HttpClient) {\n }\n\n public get(url: string): Observable {\n return this.http.get(this.BASE_URL + url).pipe();\n }\n\n public post(url: string, obj = {}, ContentType: string = 'application/json'): Observable {\n return this.http.post(this.BASE_URL + url, obj, {\n headers: new HttpHeaders()\n .append('Content-Type', ContentType)\n }).pipe();\n }\n\n public patch(url: string, obj = {}, ContentType: string = 'application/json'): Observable {\n return this.http.patch(this.BASE_URL + url, obj, {\n headers: new HttpHeaders()\n .append('Content-Type', ContentType)\n }).pipe();\n }\n\n public login(model: { password: string, username: string }, isLoginWithPasswordLess: boolean = false): Observable {\n if (this.parametersService.isNewLoginApi) {\n this.log.logger('Sending request to navaar.ir to LOGIN NEW token');\n let body = new HttpParams()\n .set('navaarDeviceId', this.parametersService.deviceId)\n .set('password', model.password)\n .set('grant_type', 'password')\n .set('scope', this.parametersService.scope)\n .set('client_secret', this.parametersService.clientSecret)\n .set('navaarClientId', this.parametersService.clientId)\n .set('client_id', this.parametersService.identityClientId)\n .set('username', model.username);\n\n if (isLoginWithPasswordLess)\n body = body.append('Login-Type', 'PasswordLess');\n\n return this.http.post(`${environment.auth}/connect/token`, body.toString(), {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }).pipe(\n share()\n );\n } else {\n this.log.logger('Sending request to navaar.ir to LOGIN OLD token');\n let body = new HttpParams()\n .set('grant_type', 'password')\n .set('username', model.username)\n .set('password', model.password)\n .set('client_secret', this.parametersService.clientSecret);\n if (this.parametersService.clientId)\n body = body.set('client_id', this.parametersService.clientId)\n\n return this.http.post(`${this.BASE_URL}/token`, body.toString(), {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }).pipe(\n share()\n );\n }\n }\n\n public loginOauth(token: string, grantType: oAuthTypeEnum): Observable {\n this.log.logger('Sending request to navaar.ir to LOGIN NEW token');\n let body = new HttpParams()\n .set('navaarDeviceId', this.parametersService.deviceId)\n .set('id-token', token)\n .set('grant_type', grantType)\n .set('scope', this.parametersService.scope)\n .set('client_secret', this.parametersService.clientSecret)\n .set('navaarClientId', this.parametersService.clientId)\n .set('client_id', this.parametersService.identityClientId);\n\n return this.http.post(`${environment.auth}/connect/token`, body.toString(), {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }).pipe(\n share()\n );\n }\n\n public sendResetPassword(email: string){\n return this.http.put(`${environment.auth}/api/UserAccount/sendResetPassword`, { email }).pipe(share());\n }\n\n public getNewRefreshToken(): Observable {\n if (this.parametersService.isNewLoginApi) {\n this.log.logger('Sending request to navaar.ir to refresh NEW token');\n let body = new HttpParams()\n .set('grant_type', 'refresh_token')\n .set('client_id', this.parametersService.identityClientId)\n .set('navaarClientId', this.parametersService.clientId)\n .set('navaarDeviceId', this.parametersService.deviceId)\n .set('client_secret', this.parametersService.clientSecret)\n .set('refresh_token', this.parametersService.refreshToken);\n\n return this.http.post(`${environment.auth}/connect/token`, body.toString(), {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }).pipe(\n share()\n );\n } else {\n this.log.logger('Sending request to navaar.ir to refresh OLD token');\n const body = new HttpParams()\n .set('grant_type', 'refresh_token')\n .set('client_secret', this.parametersService.clientSecret)\n .set('refresh_token', this.parametersService.refreshToken)\n .set('client_id', this.parametersService.clientId);\n\n return this.http.post(`${this.BASE_URL}/token`, body.toString(), {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }).pipe(\n share()\n );\n }\n }\n\n public registerWithMobile(mobileNumber) {\n return this.http.post(`${environment.auth}/api/UserAccount/register`, { mobileNo: mobileNumber }).pipe(share());\n }\n\n public checkMarketsToken(token): Observable {\n const url = this.BASE_URL + '/api/markets/credit-subscription-validate';\n return this.http.post(url, token);\n }\n\n public marketsDirectPurchase(params) {\n const url = this.BASE_URL + '/api/orders/process-with-credit';\n return this.http.post(url, params);\n }\n\n public put(url: string, options?: any): Observable {\n return this.request('PUT', url, options);\n }\n\n public delete(url: string, options?: any): Observable {\n return this.request('DELETE', url, options);\n }\n\n private logTime(startMoment: Moment, url: string, method: string) {\n const requestDuration = moment().diff(startMoment, 'milliseconds');\n this.log.logHttpInfo(`HTTP ${method}`, requestDuration, url);\n }\n\n private request(method: string, url: string, options?: any): Observable {\n this.log.logger('options', options);\n return new Observable((observer: any) => {\n const requestBeginTime = moment();\n this.logTime(requestBeginTime, `${url}`, method),\n this.http.request(new HttpRequest(method, url, options)).subscribe(\n (response) => {\n observer.next(response);\n observer.complete();\n },\n (error) => {\n switch (error.status) {\n case 403:\n observer.complete();\n break;\n default:\n observer.error(error);\n break;\n }\n }\n );\n });\n }\n}\n","import {Observable, Subject, OperatorFunction} from 'rxjs';\nimport {filter} from 'rxjs/operators';\nimport {NgZone} from '@angular/core';\n\ninterface BroadcastMessage {\n type: string;\n payload: any;\n}\n\nexport class BroadcastService {\n private broadcastChannel: BroadcastChannel;\n private onMessage = new Subject();\n\n constructor(broadcastChannelName: string, private ngZone: NgZone) {\n try {\n this.broadcastChannel = new BroadcastChannel(broadcastChannelName);\n this.broadcastChannel.onmessage = (message) => this.onMessage.next(message.data);\n } catch (e) {\n }\n }\n\n publish(message: BroadcastMessage): void {\n try {\n this.broadcastChannel.postMessage(message);\n } catch (e) {\n\n }\n }\n\n messagesOfType(type: string): Observable {\n return this.onMessage.pipe(\n filter(message => message.type === type)\n );\n }\n\n messagesOfTypeRunInZone(type: string): Observable {\n return this.onMessage.pipe(\n // It is important that we are running in the NgZone. This will make sure that Angular component changes are immediately visible in the browser when they are updated after receiving messages.\n runInZone(this.ngZone),\n filter(message => message.type === type)\n );\n }\n}\n\nexport function runInZone(zone: NgZone): OperatorFunction {\n return (source) => {\n return new Observable(observer => {\n const onNext = (value: T) => zone.run(() => observer.next(value));\n const onError = (e: any) => zone.run(() => observer.error(e));\n const onComplete = () => zone.run(() => observer.complete());\n return source.subscribe(onNext, onError, onComplete);\n });\n };\n}\n","import { inject, InjectionToken, NgZone } from '@angular/core';\nimport { BroadcastService } from '@app/helper/broadcast-message';\nimport { environment } from '@env/environment';\n\nconst isDevelop = environment.envName === 'develop';\nconst isPwa = environment.envName === 'pwa';\n\nexport const versionCode = isDevelop ? '109' : '';\nexport const apiLevel = isDevelop ? '1' : '';\nexport const deviceId = isDevelop ? '-1' : '';\nexport const adverstiment = null;\nexport const version_app = isDevelop ? '6.0.0' : isPwa ? '1.0.0' : '0.0.1';\nexport const feature_version_app = 2;\nexport const IS_NEW_LOGIN = true;\nexport const client_secret = isDevelop ? 'Navaar!!11z99wp@a' : isPwa && IS_NEW_LOGIN ? 'Navaar!!11z99wp@a' : '';\nexport const NAVAAR_CLIENT_ID = 'navaar.pwa';\nexport const SCOPE = 'openid offline_access navaarapi is4.api UserIdentityScope profile';\nexport const pwa_version = \"P_1.8.6\";\n\nexport const BROADCAST_SERVICE = new InjectionToken('broadCastService', {\n factory: () => new BroadcastService('navaar-broadcast', inject(NgZone))\n});\n","export enum ClientTypeEnum {\n Develop = \"10\",\n CafeBazaar = \"2\",\n Myket = \"8\",\n Zarebin = \"9\",\n iGap = \"12\",\n ghesse = \"13\",\n other = \"10\",\n iranpl = \"14\",\n putlife = \"11\",\n pas = \"15\",\n irancell = \"16\"\n}\n","export enum TypeShowLogInConsole {\n default,\n warning,\n error,\n table,\n info\n }\n ","import {ProductTypeEnum} from '@app/interfaces/iBook';\nimport {iRating} from '@app/interfaces/iRating';\n\nexport interface IPurchase {\n discounts: Array | null;\n purchaseButtonState?: PurchaseButtonState;\n subscriptionButtonState?: SubscriptionButtonState;\n rating: iRating;\n newSubscriptionButtonState: SubscriptionButtonState;\n pdpActionButtonState: PdpActionButtonState;\n description: string | null;\n}\n\nexport interface PdpActionButtonState {\n //اگر showCartOption مقدارش true باشد، دکمه سبد خرید (دکمه دانلود سابق) نمایش داده میشه\n showCartOption: boolean;\n //اگر showPurchaseButton مقدارش true باشد باید دکمه خرید تکی نمایش داده شود. اگر تخفیف داریم، مقدار تخفیف مطابق طرح در دکمه نمایش داده شود.\n showPurchaseButton: boolean;\n //اگر showSampleButton مقدارش true باشد دکمه نمونه باید نمایش داده شود. این مقدار به جز برای حالت کتابی که coming soon هست و نمونه نداره، در بقیه موارد نمایش داده میشه.\n showSampleButton: boolean;\n //playButtonState مشخص میکند که نحوه نمایش دکمه نارنجی چگونه باشد.\n playButtonState: {\n playButtonAction: PlayButtonAction;\n playButtonMode: PlayButtonMode;\n playButtonText: string;\n }\n}\n\nexport enum PlayButtonMode {\n Invisible = 0, //نشان داده نشود (در حالتی اتفاق میفتد که کاربر اپ را جهت استفاده از اشتراک جدید هنوز آپدیت نکرده)\n DisabledBig = 1, //نارنجی بزرگ اما غیر فعال\n Big = 2, //نارنجی بزرگ\n SmallWithPlayIcon = 3, //نارنجی کوچک با آیکون پلی\n}\n\nexport enum PlayButtonAction {\n NavigateToSubscriptionPage = 0, //رفتن به صفحه اشتراک\n OpenCartDialog = 1, // باز کردن دیالوگ خرید (دانلود سابق)\n PlayPurchased = 2, //پلی کردن آیتمی که خریداری شده از طریق نیتیو (IsOwner=true)\n AddFreeAndPlay = 3, //در مورد پادکست ها و آیتم های رایگان اول /api/orders/app-nopayment کال شده و سپس مثل حالت خریداری شده پلی میشود(هر چیزی که مبلغش صفر بود)\n PlayNewSubscription = 4, //ابتدا api/subscription/consume کال شده و سپس مثل حالت خریداری شده پلی میشود\n}\n\nexport interface PurchaseButtonState {\n purchaseButtonText?: string;\n stateDiscountedPrice: number,\n purchaseButtonAction?: purchaseButtonActionType;\n}\n\nexport interface SubscriptionButtonState {\n subscriptionButtonText?: string;\n subscriptionButtonState?: subscriptionButtonStateType;\n}\n\nexport interface discounts {\n title?: string;\n discountValue?: number;\n discountPercentage?: number;\n discountType?: discountType;\n description?: string;\n}\n\nexport enum discountType {\n subscription = 1,\n promotion = 2,\n}\n\nexport enum purchaseButtonActionType {\n disabled = 0,\n library = 1,\n getFree = 2,\n purchase = 3,\n showSubscriptionPlans = 4,\n getBySubscription = 5,\n HasCafeBazaarCredit = 6,\n HasNotEnoughCafeBazaarCredit = 7,\n Archived = 8\n}\n\nexport enum subscriptionButtonStateType {\n disable = 0,\n limitedProduct = 1,\n noQuota = 2,\n noSubscription = 3,\n getBySubscription = 4,\n intervalQuotaHasFinished = 5,\n /*\n * اگر حالت 6 بود، api/subscription/consume مطابق postman کال میشود. مقدار پاس داده شده porductid هست.\n * اگر این api خطا برگردوند، خطا به صورت نوتیفیکیشن معمول (بالای اپ) نشان داده شود. اگر جواب اوکی (200) بود\n * دیالوگ بسته و مثل حالت قبلی که iswoner را true میکردیم و به Native میگفتیم که پلی کند، عمل شود.\n * */\n playByNewSubscription = 6\n}\n\nexport enum libraryTransitionType {\n purchase = 0,\n loan = 1,\n return = 2,\n remove = 3,\n gift = 4,\n archived = 5,\n unarchived = 6,\n ignoreQuotaUseSubscriptionDiscount = 7,\n navaarGift = 8\n}\n\nexport interface commentRating {\n averageRatingValue?: any;\n ratingsQuantity?: number;\n ratingDetails?: Array<{ key: number, value: number }>;\n}\n\nexport interface ProductComment {\n commentId: string;\n audiobookId: string;\n commentText: string;\n likeCount: number;\n dislikeCount: number;\n commentDate: Date;\n\n commentAuthor: string;\n isCommentLikedByUser: boolean | null;\n rate: number;\n replies: Array;\n}\n\nexport interface rateReviewComment {\n audiobookId?: string;\n commentText?: string;\n ratingValue?: number;\n}\n\nexport interface ListArtistModel {\n name?: string,\n image?: string,\n id?: any,\n title?: string\n description?: string;\n artistId?: string;\n recordVersion?: string;\n}\n\nexport interface infoPlayer {\n audioBookId: string;\n title: string;\n image: string;\n isOwner: boolean;\n identifier: number;\n author?: string;\n narrators?: string;\n contentType?: ProductTypeEnum,\n authors?: string;\n genreTitle?: string;\n genreIdentifier?: string;\n productId?: string;\n}\n","import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';\n\n@Component({\n selector: 'navaar-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss']\n})\nexport class ButtonComponent implements OnChanges {\n @Input('type-button') public typeBtn: 'button' | 'submit' | 'reset' = 'button';\n @Input('class-name') public className: string | null = '';\n @Input('color-name') public colorName: 'green' | 'blue' | 'disabled' | 'subscription' | 'orange' | 'no-color' | 'grey-icon' | 'yellow-icon';\n @Input('disabled') public disabled: boolean = false;\n @Input('isShowLoader') public isShowLoader: boolean = false;\n\n @Output('onClick') public _onclicked: EventEmitter = new EventEmitter();\n\n constructor() { }\n\n ngOnChanges(changes: import(\"@angular/core\").SimpleChanges): void {\n if (changes && changes.disabled)\n this.disabled = changes.disabled.currentValue;\n if (changes && changes.isShowLoader)\n this.isShowLoader = changes.isShowLoader.currentValue;\n }\n\n public clicked(event) {\n this._onclicked.emit(event);\n }\n}\n","\n \n \n \n \n \n \n\n","import { Injectable } from '@angular/core';\n\nexport interface LazyTarget {\n\telement: Element;\n\tupdateVisibility: (isVisible: boolean, ratio: number) => void;\n}\n\n@Injectable()\nexport class LazyViewport {\n\tprivate observer: IntersectionObserver;\n\tprivate targets: Map;\n\n\tconstructor() {\n\t\tthis.observer = null;\n\t\tthis.targets = new Map();\n\t}\n\tpublic addTarget(target: LazyTarget): void {\n\t\tif (this.observer) {\n\t\t\tthis.targets.set(target.element, target);\n\t\t\tthis.observer.observe(target.element);\n\t\t} else {\n\t\t\ttarget.updateVisibility(true, 1.0);\n\t\t}\n\t}\n\n\tpublic setup(element: Element = null, offset: number = 50): void {\n\t\tif (!window[\"IntersectionObserver\"])\n\t\t\treturn;\n\n\t\tthis.observer = new IntersectionObserver(\n\t\t\tthis.handleIntersectionUpdate,\n\t\t\t{\n\t\t\t\troot: element,\n\t\t\t\trootMargin: `${offset}px`,\n\t\t\t\tthreshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]\n\t\t\t}\n\t\t);\n\t}\n\n\tpublic removeTarget(target: LazyTarget): void {\n\t\tif (this.observer) {\n\t\t\tthis.targets.delete(target.element);\n\t\t\tthis.observer.unobserve(target.element);\n\t\t}\n\t}\n\n\tpublic teardown(): void {\n\t\tif (this.observer) {\n\t\t\tthis.observer.disconnect();\n\t\t\tthis.observer = null;\n\t\t}\n\t\tif (this.targets) {\n\t\t\tthis.targets.clear();\n\t\t\tthis.targets = null;\n\t\t}\n\t}\n\n\tprivate handleIntersectionUpdate = (entries: IntersectionObserverEntry[]): void => {\n\t\tfor (let entry of entries) {\n\t\t\tlet lazyTarget = this.targets.get(entry.target);\n\n\t\t\tif (lazyTarget)\n\t\t\t\tlazyTarget.updateVisibility(\n\t\t\t\t\tentry['isIntersecting'],\n\t\t\t\t\tentry['intersectionRatio']\n\t\t\t\t);\n\t\t}\n\t}\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'persianTime'\n})\nexport class PersianTimePipe implements PipeTransform {\n\n transform(value: any, args?: any): string {\n if (!value) {\n return null;\n }\n let time = value.split(':'), hours, minutes, result = '';\n if (time.length < 2) {\n return null;\n }\n hours = parseInt(time[0].trim(), 10);\n minutes = parseInt(time[1].trim(), 10);\n result = hours > 0 ? result + (hours.toString() + \" ساعت\") : result;\n result = hours > 0 && minutes > 0 ? result + (\" و \") : result;\n result = minutes > 0 ? result + (minutes.toString() + \" دقیقه\") : result;\n return result;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class Base64UrlService {\n public alphabet =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n public lookup = null;\n public ie = /MSIE /.test(navigator.userAgent);\n public ieo = /MSIE [67]/.test(navigator.userAgent);\n public encode(s) {\n let buffer = this.toUtf8(s),\n position = -1,\n result,\n len = buffer.length,\n nan0,\n nan1,\n nan2,\n enc = [, , ,];\n\n if (this.ie) {\n result = [];\n while (++position < len) {\n nan0 = buffer[position];\n nan1 = buffer[++position];\n enc[0] = nan0 >> 2;\n enc[1] = ((nan0 & 3) << 4) | (nan1 >> 4);\n if (isNaN(nan1)) enc[2] = enc[3] = 64;\n else {\n nan2 = buffer[++position];\n enc[2] = ((nan1 & 15) << 2) | (nan2 >> 6);\n enc[3] = isNaN(nan2) ? 64 : nan2 & 63;\n }\n result.push(\n this.alphabet.charAt(enc[0]),\n this.alphabet.charAt(enc[1]),\n this.alphabet.charAt(enc[2]),\n this.alphabet.charAt(enc[3])\n );\n }\n return result.join(\"\");\n } else {\n result = \"\";\n while (++position < len) {\n nan0 = buffer[position];\n nan1 = buffer[++position];\n enc[0] = nan0 >> 2;\n enc[1] = ((nan0 & 3) << 4) | (nan1 >> 4);\n if (isNaN(nan1)) enc[2] = enc[3] = 64;\n else {\n nan2 = buffer[++position];\n enc[2] = ((nan1 & 15) << 2) | (nan2 >> 6);\n enc[3] = isNaN(nan2) ? 64 : nan2 & 63;\n }\n result +=\n this.alphabet[enc[0]] +\n this.alphabet[enc[1]] +\n this.alphabet[enc[2]] +\n this.alphabet[enc[3]];\n }\n return result;\n }\n }\n public toUtf8(s) {\n let position = -1,\n len = s.length,\n chr,\n buffer = [];\n if (/^[\\x00-\\x7f]*$/.test(s))\n while (++position < len) buffer.push(s.charCodeAt(position));\n else\n while (++position < len) {\n chr = s.charCodeAt(position);\n if (chr < 128) buffer.push(chr);\n else if (chr < 2048) buffer.push((chr >> 6) | 192, (chr & 63) | 128);\n else\n buffer.push(\n (chr >> 12) | 224,\n ((chr >> 6) & 63) | 128,\n (chr & 63) | 128\n );\n }\n return buffer;\n }\n\n public decode(s) {\n if (s.length % 4) {\n throw new Error(\n \"InvalidLengthError: decode failed: The string to be decoded is not the correct length for a base64 encoded string.\"\n );\n }\n if (/[^A-Za-z0-9+\\/=\\s]/g.test(s)) {\n throw new Error(\n \"InvalidCharacterError: decode failed: The string contains characters invalid in a base64 encoded string.\"\n );\n }\n\n let buffer = this.fromUtf8(s),\n position = 0,\n result,\n len = buffer.length;\n\n if (this.ieo) {\n result = [];\n while (position < len) {\n if (buffer[position] < 128)\n result.push(String.fromCharCode(buffer[position++]));\n else if (buffer[position] > 191 && buffer[position] < 224)\n result.push(\n String.fromCharCode(\n ((buffer[position++] & 31) << 6) | (buffer[position++] & 63)\n )\n );\n else\n result.push(\n String.fromCharCode(\n ((buffer[position++] & 15) << 12) |\n ((buffer[position++] & 63) << 6) |\n (buffer[position++] & 63)\n )\n );\n }\n return result.join(\"\");\n } else {\n result = \"\";\n while (position < len) {\n if (buffer[position] < 128)\n result += String.fromCharCode(buffer[position++]);\n else if (buffer[position] > 191 && buffer[position] < 224)\n result += String.fromCharCode(\n ((buffer[position++] & 31) << 6) | (buffer[position++] & 63)\n );\n else\n result += String.fromCharCode(\n ((buffer[position++] & 15) << 12) |\n ((buffer[position++] & 63) << 6) |\n (buffer[position++] & 63)\n );\n }\n return result;\n }\n }\n public fromUtf8(s) {\n let position = -1,\n len,\n buffer = [],\n enc = [, , ,];\n if (!this.lookup) {\n len = this.alphabet.length;\n this.lookup = {};\n while (++position < len)\n this.lookup[this.alphabet.charAt(position)] = position;\n position = -1;\n }\n len = s.length;\n while (++position < len) {\n enc[0] = this.lookup[s.charAt(position)];\n enc[1] = this.lookup[s.charAt(++position)];\n buffer.push((enc[0] << 2) | (enc[1] >> 4));\n enc[2] = this.lookup[s.charAt(++position)];\n if (enc[2] === 64) break;\n buffer.push(((enc[1] & 15) << 4) | (enc[2] >> 2));\n enc[3] = this.lookup[s.charAt(++position)];\n if (enc[3] === 64) break;\n buffer.push(((enc[2] & 3) << 6) | enc[3]);\n }\n return buffer;\n }\n public decodeUrl(input) {\n\n input = input\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n let pad = input.length % 4;\n if(pad) {\n if(pad === 1) {\n throw new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding');\n }\n input += new Array(5-pad).join('=');\n }\n\n return this.decode(input);\n}\n\npublic encodeUrl(input) {\n let output = this.encode(input);\n return output\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .split('=', 1)[0];\n}\n\n\n}\n","import { NgModule } from '@angular/core';\nimport { PreloadAllModules, RouterModule, Routes, UrlSegment } from '@angular/router';\nimport {AuthGuard} from \"@app/core/guard/is-login-user.guard\";\n\n\nconst routes: Routes = [\n {\n // canActivate: [AuthGuard],\n path: \"library\",\n loadChildren: () =>\n import(\"app/app/library/library.module\").then((c) => c.LibraryModule),\n },\n {\n path: \"\",\n loadChildren: () =>\n import(\"app/app/shop/shop.module\").then((c) => c.ShopModule),\n },\n {\n path: \"shop\",\n redirectTo: \"\"\n },\n {\n path: \"redeem\",\n loadChildren: () =>\n import(\"app/app/credit-code/credit-code.module\").then(\n (c) => c.CreditCodeModule\n ),\n },\n {\n path: \"auth\",\n loadChildren: () =>\n import(\"app/app/authentication/authentication.module\").then(\n (c) => c.AuthenticationModule\n ),\n },\n {\n path: \"credit-code\",\n loadChildren: () =>\n import(\"app/app/credit-code/credit-code.module\").then(\n (c) => c.CreditCodeModule\n ),\n },\n {\n path: \"clp\",\n loadChildren: () => import(\"./app/clp/clp.module\").then((m) => m.CLPModule),\n },\n {\n path: \"categories\",\n redirectTo: \"clp\",\n },\n {\n path: \"category\",\n redirectTo: \"clp\",\n },\n {\n path: \"plp/:id\",\n redirectTo: \"clp/:id\",\n },\n {\n path: \"category/:id\",\n redirectTo: \"clp/:id\",\n },\n {\n path: \"list/:id\",\n redirectTo: \"clp/list/:id\",\n },\n {\n path: \"listItem/:id\",\n redirectTo: \"clp/:id\",\n },\n {\n matcher: (url: UrlSegment[]) => {\n if (url[0] && url[0].path.includes('clp-s') && url[1]) {\n const id = url[1].path;\n return {\n consumed: url,\n\n posParams: {\n id: new UrlSegment(id, { isSeries: 'true' })\n }\n }\n }\n return null;\n },\n redirectTo: 'clp/listItem/:id'\n },\n {\n path: \"pdp\",\n loadChildren: () =>\n import(\"app/app/pdp/pdp.module\").then((c) => c.PDPModule),\n },\n {\n path: \"audiobook\",\n redirectTo: \"pdp\",\n },\n {\n path: \"search\",\n loadChildren: () =>\n import(\"./app/search/search.module\").then((c) => c.SearchModule),\n },\n {\n path: \"subscription\",\n loadChildren: () =>\n import(\"@app/app/subscription/subscription.module\").then(\n (c) => c.SubscriptionModule\n ),\n },\n {\n path: \"catalog\",\n loadChildren: () =>\n import(\"@app/app/catalog/catalog.module\").then((c) => c.CatalogModule),\n },\n {\n path: \"profile\",\n loadChildren: () =>\n import(\"@app/app/profile/profile.module\").then((c) => c.ProfileModule),\n },\n {\n path: \"artist\",\n loadChildren: () =>\n import(\"@app/app/artists/artists.module\").then((c) => c.ArtistsModule),\n },\n {\n path: \"credit\",\n loadChildren: () =>\n import(\"@app/app/credit/credit.module\").then((c) => c.CreditModule),\n },\n {\n path: \"about\",\n loadChildren: () =>\n import(\"@app/app/about/about.module\").then((c) => c.AboutModule),\n },\n {\n path: \"wishlist\",\n loadChildren: () =>\n import(\"@app/app/wishlist/wishlist.module\").then((c) => c.WishlistModule),\n },\n {\n path: \"feedback\",\n loadChildren: () =>\n import(\"@app/app/feedback/feedback.module\").then((c) => c.FeedbackModule),\n },\n {\n path: \"webview-page\",\n loadChildren: () =>\n import(\"@app/app/webview-page/webview-page.module\").then(\n (c) => c.WebviewPageModule\n ),\n },\n {\n path: \"archive\",\n loadChildren: () =>\n import(\"@app/app/archive/archive.module\").then((c) => c.ArchiveModule),\n },\n {\n path: \"publisher\",\n loadChildren: () =>\n import(\"@app/app/publishers/publishers.module\").then((c) => c.PublishersModule),\n },\n { path: '**', redirectTo: '', pathMatch: 'full' }\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(routes, {\n urlUpdateStrategy: \"eager\",\n enableTracing: false,\n scrollPositionRestoration: \"enabled\",\n anchorScrolling: \"enabled\",\n scrollOffset: [0, 0],\n paramsInheritanceStrategy: \"always\",\n preloadingStrategy: PreloadAllModules,\n onSameUrlNavigation: 'reload'\n }),\n ],\n exports: [RouterModule],\n})\nexport class AppRoutingModule { }\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogDownloadGlobalService {\n public showDialogSource: BehaviorSubject = new BehaviorSubject(false);\n public showDialog$: Observable = this.showDialogSource.asObservable();\n\n private _identifier: number;\n public get identifier(): number {\n return this._identifier;\n }\n public set identifier(v: number) {\n this._identifier = v;\n }\n\n constructor() { }\n\n public show() {\n this.showDialogSource.next(true);\n }\n public hide() {\n this.showDialogSource.next(false);\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'navaar-download-icon',\n template: `\n \n \n \n `,\n})\nexport class DownloadIconComponent {\n @Input() public color: string = '#fff';\n @Input() public style: object = {};\n constructor() { }\n}\n","\n\n \n \n
\n \n
\n \n\n
\n

\n \n برای دانلود این اثر\n

\n \n
\n \n \n
\n \n \n %{{(discountItem.discountPercentage * 100 | number:'1.0-0')}}\n \n
\n \n \n \n

قیمت با احتساب تخفیف

\n \n تومان\n \n \n
\n \n \n \n \n \n
\n
\n \n \n \n \n
\n \n \n \n
\n
\n
\n \n \n ورود و دریافت\n \n
\n
\n
\n
\n \n \n\n\n \n
\n
\n
\n
\n
\n \n
\n","import { AnimationEvent } from '@angular/animations';\nimport { DOCUMENT, Location, PlatformLocation } from '@angular/common';\nimport {\n Component,\n ComponentFactory,\n ComponentFactoryResolver,\n ComponentRef,\n Inject,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport { slideInUpOnEnterAnimation } from '@app/animation/slideDownToUp';\nimport {\n IPurchase,\n libraryTransitionType,\n purchaseButtonActionType,\n subscriptionButtonStateType,\n} from '@app/app/pdp/pdp-model';\nimport { PDPService } from '@app/app/pdp/pdp/pdp.service';\nimport { CacheObjectService, DeviceService, EventTrackerService, HttpService, LogService } from '@app/core';\nimport { TokenService } from '@app/core/token/token.service';\nimport { iBook } from '@app/interfaces/iBook';\nimport { IndicatorService } from '@app/shared';\nimport { NotificationService } from '@app/shared/notification/notification.service';\nimport { environment } from '@env/environment';\nimport { Subscription, SubscriptionLike } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\nimport { PdpDialogMarketsComponent } from './../../app/pdp/pdp-dialog-markets/pdp-dialog-markets.component';\nimport { DialogDownloadGlobalService } from './dialog-download-global.service';\n\n@Component({\n selector: 'navaar-dialog-download-global',\n templateUrl: './dialog-download-global.component.html',\n styleUrls: ['./dialog-download-global.component.scss'],\n animations: [\n slideInUpOnEnterAnimation({ anchor: 'slidePopupDownload' })\n ]\n})\nexport class DialogDownloadGlobalComponent implements OnInit, OnDestroy {\n public slideAnimationPopupDownload: string;\n public showAnimationLoading: boolean = false;\n public dataBook: iBook;\n public purchase: IPurchase;\n private _location: SubscriptionLike;\n public purchaseButtonActionType: typeof purchaseButtonActionType = purchaseButtonActionType;\n public subscriptionButtonStateType: typeof subscriptionButtonStateType = subscriptionButtonStateType;\n public dataForMarkets: { purchaseButtonAction: purchaseButtonActionType, discountedPrice: number } = null;\n public environment = environment;\n public isLoad: boolean = false;\n public productId: string;\n public id: number;\n public libraryTransitionType: typeof libraryTransitionType = libraryTransitionType;\n public showDialogForShowDialogMarket: boolean = false;\n public preventOnbackForMarkets: boolean = false;\n public eventStatusAnimation: string;\n private stateAudiobookRequest: Subscription;\n public isLogin: boolean = false;\n\n @ViewChild('containerMarkets', { read: ViewContainerRef }) private containerMarkets: ViewContainerRef;\n\n\n constructor(\n public readonly tokenServices: TokenService,\n private platformLocation: PlatformLocation,\n private readonly resolver: ComponentFactoryResolver,\n public readonly device: DeviceService,\n private readonly indicator: IndicatorService,\n private readonly cache: CacheObjectService,\n private readonly http: HttpService,\n private readonly pdpService: PDPService,\n private readonly eventTracker: EventTrackerService,\n private readonly log: LogService,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly location: Location,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly dialogDownloadGlobalService: DialogDownloadGlobalService,\n private readonly render: Renderer2,\n private readonly notification: NotificationService,\n ) { }\n public ngOnInit() {\n this.dataBook = null;\n this.loadData(this.dialogDownloadGlobalService.identifier);\n }\n public loadData(identifier) {\n this.id = identifier;\n this.cache.getObjectCache(`/api/audiobooks/${this.id}/detail2`).pipe(delay(1500)).subscribe(x => {\n this.dataBook = x;\n this.isLoad = true;\n this.stateAudiobookRequest = this.tokenServices.isLogin$.subscribe(c => {\n this.isLogin = c;\n if (this.isLogin) {\n this.isLoad = false;\n this.http.post(`/api/library/state/${this.id}`).subscribe(c => {\n this.isLoad = true;\n this.purchase = c;\n this.productId = this.dataBook.products[0]['productId'];\n this.logItem('x_btn_popup_download_open', {});\n this.showAnimationLoading = false;\n });\n }\n });\n });\n this.platformLocation.onPopState(() => {\n if (!this.location.path(true).includes('#modalOpened')) {\n this.hideDownloadPopup();\n }\n })\n }\n\n public onSlidePopupDownload(event: AnimationEvent) {\n this.eventStatusAnimation = event.toState;\n // up DONE\n if (event.fromState == 'void' && event.toState == null) {\n this.showAnimationLoading = true;\n this.addModalOpenedToUrl();\n this.render.setStyle(this.document.body, 'overflow', 'hidden');\n }\n // down DONE\n else if (event.toState == 'void' && event.fromState == null) {\n this.render.removeStyle(this.document.body, 'overflow');\n if (!this.preventOnbackForMarkets)\n this.onBackKeyButton();\n }\n }\n\n private addModalOpenedToUrl() {\n if (this.location.path(true).includes('#modalOpened'))\n this._location = this.location.subscribe(c => {\n this.onBackKeyButton();\n });\n this.platformLocation.pushState(null, null, location.href + '#modalOpened');\n }\n\n private onBackKeyButton() {\n if (this.location.path(true).includes('#modalOpened')) {\n this.location.back();\n }\n if (!this.preventOnbackForMarkets) {\n this.dialogDownloadGlobalService.hide();\n }\n }\n\n public hideDownloadPopup(callback: () => void = null) {\n // this.logItem('x_btn_popup_download_close', {\n // item_id: this.dataBook.identifier,\n // btn_status: (this.purchase.subscriptionButtonState || {}).subscriptionButtonState,\n // x_purchase_status: this.purchase.purchaseButtonState.purchaseButtonAction,\n // });\n this.slideAnimationPopupDownload = 'void';\n if (callback)\n callback();\n }\n\n public async openMarketsDialog(_purchaseButtonAction) {\n this.preventOnbackForMarkets = true;\n this.hideDownloadPopup();\n await this.delay(800);\n this.showDialogForShowDialogMarket = true;\n this.containerMarkets.clear();\n const factory: ComponentFactory = this.resolver.resolveComponentFactory(PdpDialogMarketsComponent);\n let componentRef: ComponentRef = this.containerMarkets.createComponent(factory);\n\n this.logItem('x_btn_open_dialog_markets', {\n item_id: this.dataBook.identifier\n });\n this.log.logger('open dialog');\n let caculatePrice = this.dataBook.products[0]['price'];\n if (this.purchase && this.purchase.discounts && this.purchase.discounts.length > 0) {\n this.purchase.discounts.map(function (element) {\n caculatePrice -= element.discountValue;\n });\n }\n componentRef.instance.isShow = true;\n componentRef.instance.data = {\n purchaseButtonAction: _purchaseButtonAction,\n discountedPrice: caculatePrice\n };\n componentRef.instance.onClosePopup.subscribe(c => this.onClosePopupShowMarkets(c));\n }\n\n public onClosePopupShowMarkets(result) {\n this.hideDownloadPopup();\n setTimeout(() => {\n this.onBackKeyButton();\n }, 1200);\n this.preventOnbackForMarkets = false;\n if (result == 'purchaseCredit') {\n this.device.goToCustomTab('credit', 'profile');\n this.eventTracker.logEvent('x_CB_dialog', { 'x_button_name ': 'purchaseCredit' });\n } else if (result == 'purchaseBook') {\n this.eventTracker.logEvent('x_CB_dialog', { 'x_button_name ': 'purchaseBook' });\n this.http.marketsDirectPurchase(\n {\n productId: this.dataBook.products[0]['productId'],\n libraryTransitionType: this.purchase.subscriptionButtonState.subscriptionButtonState == this.subscriptionButtonStateType.getBySubscription ? this.libraryTransitionType.ignoreQuotaUseSubscriptionDiscount : this.libraryTransitionType.purchase\n }\n ).subscribe((res: any) => {\n this.log.logger('res purchase audiobook');\n this.log.logger(res);\n if (res.isFinal)\n (window as any).Android.goToLibraryTabRefresh();\n }, err => this.log.logger(err));\n }\n }\n\n public logItem(name: string, obj: object) {\n let _obj = {\n ...{\n item_id: this.dataBook.identifier,\n 'audiobook-title': this.dataBook.title\n }, ...obj\n };\n this.eventTracker.logEvent(name, _obj);\n }\n\n public getMainPriceForDiscount(): number {\n let price: number = this.purchase.purchaseButtonState.stateDiscountedPrice;\n this.purchase.discounts.map(c => {\n price += (c.discountValue / 10);\n });\n return price;\n }\n\n public calculateDiscount(index) {\n return (this.getMainPriceForDiscount() - (this.purchase.discounts[index - 1].discountValue / 10));\n }\n\n public goToLibrary() {\n let x_button_type = 'purchase';\n switch (this.purchase.purchaseButtonState.purchaseButtonAction) {\n case purchaseButtonActionType.library:\n if (this.device.isAndroid()) {\n (window as any).Android.goToLibraryTab();\n }\n else if (this.device.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(\"openBook\");\n }\n break;\n case purchaseButtonActionType.getFree:\n case purchaseButtonActionType.getBySubscription:\n this.http.post(`/api/orders/app-nopayment?productId=${this.dataBook.products[0]['productId']}`, {})\n .subscribe((response) => {\n this.log.logger('purch 2');\n this.log.logger(response);\n\n if (this.device.isAndroid()) {\n (window as any).Android.goToLibraryTabRefresh();\n }\n else if (this.device.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(\"openBookRefresh\");\n }\n }, (error) => {\n this.log.logger('ERR ccc');\n this.log.logger(error);\n this.log.logger(error.error);\n this.log.logger(error.error.message);\n if (error && error.hasOwnProperty('error') && error.error.hasOwnProperty('message')) {\n this.notification.setNotification({ text: error.error.message, type: 'error', timeout: 5000 });\n }\n });\n break;\n case purchaseButtonActionType.purchase:\n this.log.logger('Sending purchase with ' + this.dataBook.products[0]['productId']);\n let productId = this.dataBook.products[0]['productId'];\n if (this.purchase.subscriptionButtonState && this.purchase.subscriptionButtonState.subscriptionButtonState == subscriptionButtonStateType.getBySubscription) {\n // add libraryTransitionType to product id\n productId += '@7';\n }\n this.device.purchaseBook(productId);\n this.onBackKeyButton();\n return;\n case purchaseButtonActionType.showSubscriptionPlans:\n this.hideDownloadPopup();\n setTimeout(() => {\n this.router.navigateByUrl('/subscription');\n }, 1300);\n return;\n case purchaseButtonActionType.HasCafeBazaarCredit:\n case purchaseButtonActionType.HasNotEnoughCafeBazaarCredit:\n x_button_type = 'CB_purchase';\n this.openMarketsDialog(this.purchase.purchaseButtonState.purchaseButtonAction);\n return;\n case purchaseButtonActionType.Archived:\n x_button_type = 'x_btn_download_popup_Archived';\n this.logItem('x_btn_get_item', {\n 'x_subscription_status': (this.purchase.subscriptionButtonState || {}).subscriptionButtonState,\n 'x_purchase_status': this.purchase.purchaseButtonState.purchaseButtonAction,\n 'x_button_type': x_button_type\n });\n this.indicator.show(true);\n this.router.navigate(['./archive']);\n return;\n }\n\n\n this.logItem('x_btn_get_item', {\n 'x_subscription_status': (this.purchase.subscriptionButtonState || {}).subscriptionButtonState,\n 'x_purchase_status': this.purchase.purchaseButtonState.purchaseButtonAction,\n 'x_button_type': x_button_type\n });\n this.onBackKeyButton();\n }\n\n public goToSubscription() {\n this.hideDownloadPopup();\n if (this.device.isAndroid() && this.device.isMarkets() && this.purchase.subscriptionButtonState.subscriptionButtonState == subscriptionButtonStateType.noSubscription) {\n this.device.goToCustomTab('subscription', 'profile');\n return;\n }\n else if (this.purchase.subscriptionButtonState.subscriptionButtonState == subscriptionButtonStateType.noSubscription) {\n setTimeout(() => {\n this.router.navigateByUrl('/subscription');\n }, 1300);\n return;\n }\n else if (this.purchase.subscriptionButtonState.subscriptionButtonState == subscriptionButtonStateType.getBySubscription) {\n this.http.post(`/api/orders/app-nopayment?productId=${this.dataBook.products[0]['productId']}`, {})\n .subscribe((response) => {\n this.pdpService.getSoldBooks.add(this.dataBook.products[0]['productId']);\n if (this.device.isAndroid()) {\n (window as any).Android.goToLibraryTabRefresh();\n }\n else if (this.device.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(\"openBookRefresh\");\n }\n this.hideDownloadPopup();\n }, (error) => {\n if (error && error.hasOwnProperty('error') && error.error.hasOwnProperty('message')) {\n this.notification.setNotification({ text: error.error.message, type: 'error', timeout: 5000 });\n }\n });\n }\n\n this.logItem('x_btn_get_item', {\n 'x_subscription_status': (this.purchase.subscriptionButtonState || {}).subscriptionButtonState,\n 'x_purchase_status': this.purchase.purchaseButtonState.purchaseButtonAction,\n 'x_button_type': 'subscription'\n });\n return;\n }\n public getClassName(): string {\n let classColor = '';\n if (this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.disabled)\n classColor = 'subscription';\n if (this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.library ||\n this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.Archived)\n classColor = 'blue';\n if (\n this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.getFree ||\n this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.purchase ||\n this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.HasCafeBazaarCredit ||\n this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.HasNotEnoughCafeBazaarCredit)\n classColor = 'blue';\n if (\n this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.getBySubscription || this.purchase.purchaseButtonState.purchaseButtonAction == purchaseButtonActionType.showSubscriptionPlans)\n classColor = 'subscription';\n return classColor;\n }\n\n private delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n ngOnDestroy(): void {\n if (this._location)\n this._location.unsubscribe();\n if (this.stateAudiobookRequest)\n this.stateAudiobookRequest.unsubscribe();\n }\n}\n","import {\n animate,\n animateChild,\n animation,\n AnimationTriggerMetadata,\n group,\n keyframes,\n query,\n state,\n style,\n transition,\n trigger,\n useAnimation,\n} from '@angular/animations';\n\nconst DEFAULT_DURATION = 1000;\n\n\nconst slideOutDown = animation([\n animate(\n '{{duration}}ms {{delay}}ms',\n keyframes([\n style({ transform: 'translate3d(0, 0, 0)', easing: 'ease', offset: 0 }),\n style({ transform: 'translate3d(0, {{translate}}, 0)', visibility: 'hidden', easing: 'ease', offset: 1 })\n ])\n )\n])\n\nconst slideInUp = animation([\n\n animate(\n '{{duration}}ms {{delay}}ms',\n keyframes([\n style({ visibility: 'visible', transform: 'translate3d(0, {{translate}}, 0)', easing: 'ease', offset: 0 }),\n style({ transform: 'translate3d(0, 0, 0)', easing: 'ease', offset: 1 })\n ])\n )\n])\n\nexport interface IAnimationOptions {\n /** \n * Translate, possible units: px, %, em, rem, vw, vh\n * Default: 100%\n */\n translate?: string;\n /**\n * Name of the animation anchor that will be used in a template\n */\n anchor?: string;\n /**\n * Duration in ms\n */\n duration?: number;\n /**\n * Delay in ms\n *\n * Default: 0\n */\n delay?: number;\n /**\n * This parameter can only be set in a component's decorator.\n * Cannot be set in a template.\n *\n * Whether children animation should run 'before', 'together' or 'after' animation.\n * When set to 'none' chldren are not animated.\n *\n * Default: 'together'\n */\n animateChildren?: 'before' | 'together' | 'after' | 'none';\n}\n\nexport function slideInUpOnEnterAnimationPlayer(options?: IAnimationOptions): AnimationTriggerMetadata {\n return trigger((options && options.anchor) || 'slideInUpOnEnter', [\n state('show-chapter', style({ visibility: 'visible', transform: 'translate3d(0, -100vh, 0)' })),\n transition('player <=> show-chapter', [animate(`400ms linear`)]),\n state('void', style({ visibility: 'hidden', transform: '*' })),\n transition(\n ':enter',\n [\n style({ visibility: 'hidden' }), ...(options && options.animateChildren === 'before' ? [query('@*', animateChild(), { optional: true })] : []),\n group([\n useAnimation(slideInUp),\n ...(!options || !options.animateChildren || options.animateChildren === 'together'\n ? [query('@*', animateChild(), { optional: true })]\n : [])\n ]),\n ...(options && options.animateChildren === 'after' ? [query('@*', animateChild(), { optional: true })] : [])\n ],\n {\n params: {\n delay: (options && options.delay) || 0,\n duration: (options && options.duration) || DEFAULT_DURATION,\n translate: (options && options.translate) || '100vh'\n }\n }\n ),\n transition(\n ':leave',\n [\n ...(options && options.animateChildren === 'before' ? [query('@*', animateChild(), { optional: true })] : []),\n group([\n useAnimation(slideOutDown),\n ...(!options || !options.animateChildren || options.animateChildren === 'together'\n ? [query('@*', animateChild(), { optional: true })]\n : [])\n ]),\n ...(options && options.animateChildren === 'after' ? [query('@*', animateChild(), { optional: true })] : [])\n ],\n {\n params: {\n delay: (options && options.delay) || 0,\n duration: (options && options.duration) || DEFAULT_DURATION,\n translate: (options && options.translate) || '100vh'\n }\n }\n )\n ]);\n}\n\nexport function coverSlideAnimation() {\n return trigger('slidePopupCover', [\n state('showCover', style({ visibility: 'visible', transform: 'translate3d(0, 0, 0)' })),\n state('hideCover', style({ visibility: 'hidden', transform: `translate3d(0, 100%, 0)` })),\n transition(`hideCover => showCover`, [useAnimation(slideInUp, { params: { duration: 450, translate: '100%', delay: 550 } })]),\n transition(`showCover => hideCover`, [useAnimation(slideOutDown, { params: { duration: 450, translate: '100%', delay: 0 } })])\n ]);\n}\n\nexport function smallPlayerSlideUpDown() {\n return trigger('smallPlayerAnimation', [\n state('hideSmallPlayer', style({ visibility: 'hidden', transform: 'translate3d(0, 100%, 0)' })),\n state('showSmallPlayer', style({ visibility: 'visible', transform: 'translate3d(0, 0, 0)' })),\n transition('hideSmallPlayer <=> showSmallPlayer', [animate(`350ms ease-in`)]),\n transition('showSmallPlayer <=> hideSmallPlayer', [animate(`450ms ease-out`)])\n ]);\n}\n\nexport function slideUpDownPlayer(data: animationParam) {\n return trigger(data.anchor, [\n state(data.stateNameDown, style({ visibility: 'visible', transform: 'translate3d(0, 0, 0)' })),\n state(data.stateNameUp, style({ visibility: 'visible', transform: `translate3d(0, ${data.translate}, 0)` })),\n transition(`${data.stateNameUp} => ${data.stateNameDown}`, [useAnimation(slideInUp, { params: { duration: data.durationUp ?? 400, translate: data.translate, delay: data.delayUp ?? 0 } })]),\n transition(`${data.stateNameDown} => ${data.stateNameUp}`, [useAnimation(slideOutDown, { params: { duration: data.durationDown ?? 400, translate: data.translate, delay: data.delayDown ?? 0 } })])\n ]);\n}\n\nexport function overlayFadeInOut() {\n return trigger('overlayAnimation', [\n state('hideCover', style({ visibility: 'hidden', opacity: 0, height: '100%' })),\n state('showCover', style({ visibility: 'hidden', opacity: 0, height: '0' })),\n transition(':enter', [animate('350ms', keyframes([\n style({ visibility: 'hidden', opacity: 0, offset: 0, easing: 'ease-in' }),\n style({ visibility: 'visible', opacity: 1, offset: 1, easing: 'ease-in' })\n ]))]),\n transition('showCover => hideCover', [\n\n animate('350ms', keyframes([\n style({ visibility: 'visible', opacity: 1, offset: 0, easing: 'ease-out' }),\n style({ visibility: 'hidden', opacity: 0, offset: 1, easing: 'ease-out' })\n ]))])\n ]);\n}\n\nexport class animationParam {\n delayUp?: number;\n delayDown?: number;\n durationUp?: number;\n durationDown?: number;\n translate: string;\n anchor: string;\n stateNameUp: string;\n stateNameDown: string;\n}\n","import {AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';\n\nimport {Media} from '../iPlayer';\nimport {PlayerService} from '../player.service';\nimport {Subscription} from \"rxjs\";\n\n@Component({\n selector: 'navaar-player-progressbar',\n templateUrl: './player-progressbar.component.html',\n styleUrls: ['./player-progressbar.component.scss']\n})\nexport class PlayerProgressbarComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() public isSmall: boolean = false;\n @ViewChild('playhead', {static: true, read: ElementRef}) private playhead: ElementRef;\n @ViewChild('timeline', {static: true, read: ElementRef}) private timeline: ElementRef;\n @ViewChild('progressbar', {static: true, read: ElementRef}) private progressbar: ElementRef;\n @ViewChild('bufferProgressbar', {static: true, read: ElementRef}) private bufferProgressbar: ElementRef;\n\n public media: Media;\n private active: boolean = false;\n public currentX: number;\n private initialX: number;\n public xOffset: number = 0;\n private timelineWidth: number = 0;\n private subscribe: Subscription = new Subscription();\n\n constructor(public readonly playerServices: PlayerService) {\n }\n\n ngOnInit(): void {\n this.media = this.playerServices.media;\n this.subscribe.add(this.playerServices.currentTimeSource.subscribe(c => this.timeUpdate(c)));\n this.subscribe.add(this.playerServices.bufferTimeSource.subscribe(([c, d]) => this.bufferUpdate([c, d])));\n }\n\n public onDragStart(e) {\n if (e.type === \"touchstart\") {\n this.initialX = this.getPosition(this.playhead);\n } else {\n this.initialX = e.clientX - this.xOffset;\n }\n this.active = (e.target === this.playhead.nativeElement);\n }\n\n public onDragEnd(event) {\n this.initialX = this.currentX;\n this.active = false;\n this.playerServices.setCurrentTime(this.media.duration * this.clickPercent(event, true));\n }\n\n public onDrag(e) {\n if (this.active) {\n const newMargLeft = e.touches[0].clientX - this.getPosition(this.timeline);\n if (newMargLeft >= 0 && newMargLeft <= this.timelineWidth) {\n this.setTranslate(newMargLeft, this.playhead.nativeElement);\n }\n if (newMargLeft < 0) {\n this.setTranslate(0, this.playhead.nativeElement);\n }\n if (newMargLeft > this.timelineWidth) {\n this.setTranslate(this.timelineWidth, this.playhead.nativeElement);\n }\n this.playerServices.setCurrentTime(this.media.duration * this.clickPercent(e, true));\n }\n }\n\n public ngAfterViewInit(): void {\n this.timelineWidth = (this.timeline.nativeElement.offsetWidth - this.playhead.nativeElement.offsetWidth);\n }\n\n public onClickTimeline(event) {\n const newMargLeft = event.clientX - this.getPosition(this.timeline);\n if (newMargLeft >= 0 && newMargLeft <= this.timelineWidth) {\n this.setTranslate(newMargLeft, this.playhead.nativeElement);\n }\n if (newMargLeft < 0) {\n this.setTranslate(0, this.playhead.nativeElement);\n }\n if (newMargLeft > this.timelineWidth) {\n this.setTranslate(this.timelineWidth, this.playhead.nativeElement);\n }\n this.playerServices.setCurrentTime(this.media.duration * this.clickPercent(event, false));\n }\n\n private clickPercent(event, isDrag) {\n if (isDrag)\n return (event.changedTouches[0].clientX - this.getPosition(this.timeline)) / this.timelineWidth;\n else\n return (event.clientX - this.getPosition(this.timeline)) / this.timelineWidth;\n }\n\n private setTranslate(xPos, el) {\n el.style.transform = \"translate3d(\" + xPos + \"px, 0, 0)\";\n this.progressbar.nativeElement.style.width = `${xPos}px`;\n }\n\n private timeUpdate(_currentTime: number) {\n if (this.active)\n return;\n const playPercent = this.timelineWidth * (this.media.currentTime / this.media.duration);\n this.setTranslate(playPercent, this.playhead.nativeElement);\n }\n\n private bufferUpdate([_bufferTime, isEnd]) {\n const bufferPercent = this.timelineWidth * (_bufferTime / this.media.duration);\n this.bufferProgressbar.nativeElement.style.width = isEnd ? '100%' : `${bufferPercent}px`;\n }\n\n private getPosition(el: ElementRef) {\n return el.nativeElement.getBoundingClientRect().left;\n }\n\n public ngOnDestroy(): void {\n this.subscribe.unsubscribe();\n }\n}\n","\n
\n \n \n \n
\n \n \n\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-arrow-left-timer-icon',\n template:`\n \n \n 10\n \n \n `\n\n})\nexport class ArrowLeftTimerIconComponent implements OnInit {\n\n @Input() public style: object = {};\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { animate, AnimationTriggerMetadata, style, transition, trigger } from '@angular/animations';\n\n\nexport function FadeInOutAnimation(): AnimationTriggerMetadata {\n return trigger('fadeInOut', [\n transition('* <=> *', [\n style({ opacity: .5 }),\n animate(350)\n ])\n ])\n};","import { Component, Input } from '@angular/core';\nimport { FadeInOutAnimation } from '@app/animation/fadeInOut';\n\n@Component({\n selector: 'navaar-play-circle-icon',\n template: `
\n \n \n\n\n\n \n \n \n \n \n \n \n \n \n\n
\n`,\n styles: [\n `\n div{\n position: relative;\n }\n\n svg{\n fill: #ffffff;\n }`\n ],\n animations: [FadeInOutAnimation()]\n})\nexport class PlayCircleIconComponent {\n @Input('show-loader') public showLoader: boolean = false;\n @Input() public style: object = {};\n constructor() { }\n}\n","import { Component, Input } from '@angular/core';\nimport { FadeInOutAnimation } from '@app/animation/fadeInOut';\n\n@Component({\n selector: 'navaar-pause-circle-icon',\n template: `\n
\n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n
\n`,\n styles: [\n `\n div{\n position: relative;\n }\n svg{\n fill: #ffffff;\n }`\n ],\n\nanimations: [FadeInOutAnimation()]\n})\nexport class PauseCircleIconComponent {\n @Input('show-loader') public showLoader: boolean = false;\n @Input() public style: object = {};\n constructor() { }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'convertDurationToHHmm'\n})\nexport class ConvertDurationToHHmmPipe implements PipeTransform {\n\n transform(value: number): string {\n let hours = Math.floor(value / 3600);\n let minutes = Math.floor((value - (hours * 3600)) / 60);\n let seconds = Math.floor(value - (hours * 3600) - (minutes * 60));\n \n let h = hours.toString(),\n m = minutes.toString(),\n s = seconds.toString();\n if (hours < 10) { h = \"0\" + hours; }\n if (minutes < 10) { m = \"0\" + minutes; }\n if (seconds < 10) { s = \"0\" + seconds; }\n return h + ':' + m + ':' + s;\n }\n}\n","\n
\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n \n
\n\n\n\n\n\n
\n \n /\n \n
\n
\n
\n
\n \n \n \n
\n
\n \n \n \n \n \n
\n \n \n \n \n \n \n \n\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { infoPlayer } from '@app/app/pdp/pdp-model';\nimport { NavigationBarService } from '@app/shared/navigation-bar/navigation-bar.service';\n\nimport { iChapterSetStorage, Media } from '../iPlayer';\nimport { PlayerService } from '../player.service';\n\n@Component({\n selector: 'navaar-small-player',\n templateUrl: './small-player.component.html',\n styleUrls: ['./small-player.component.scss']\n})\nexport class SmallPlayerComponent {\n @Input() public chapters: Array = [];\n @Input() public media: Media;\n @Input() public info: infoPlayer;\n\n @Output() public close: EventEmitter = new EventEmitter();\n\n constructor(\n public readonly navigationbarService: NavigationBarService,\n public readonly playerService: PlayerService) {\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-chevron-buttom-icon',\n template:`\n \n \n \n \n`\n})\nexport class ChevronButtomIconComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-info-icon',\n template: `\n \n \n \n \n \n\n`\n\n})\nexport class InfoIconComponent implements OnInit {\n @Input() public style: object = {};\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-speed-icon',\n template: `\n {{speed}}x\n\n\n`\n\n})\nexport class SpeedIconComponent {\n @Input() public style: object = {};\n @Input() public speed: number = 1;\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-arrow-right-timer-icon',\n template:`\n \n \n 30\n \n`\n\n})\nexport class ArrowRightTimerIconComponent implements OnInit {\n @Input() public style: object = {};\n constructor() { }\n\n ngOnInit(): void {\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-get-icon',\n \n template:`\n \n \n \n \n \n\n`\n\n})\nexport class GetIconComponent implements OnInit {\n @Input() public style: object = {};\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'navaar-share-icon',\n template: `\n \n \n \n `\n})\nexport class ShareIconComponent {\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-sleep-icon',\n template: `\n\n \n \n \n \n \n \n \n\n`\n\n})\nexport class SleepIconComponent implements OnInit {\n @Input() public style: object = {};\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-last-page-icon',\n template:`\n \n \n \n \n\n`\n\n})\nexport class LastPageIconComponent implements OnInit {\n @Input() public style: object = {};\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'navaar-before-page-icon',\n template:`\n \n \n\n\n`\n\n})\nexport class BeforePageIconComponent {\n @Input() public style: object = {};\n constructor() { }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-bullet-icon',\n template:`\n \n \n \n \n \n \n \n \n \n \n \n \n\n`\n\n})\nexport class BulletIconComponent implements OnInit {\n @Input() public style: object = {};\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-car-icon',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n\n `,\n styles: [\n ]\n})\nexport class CarIconComponent {\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-comments-icon',\n template: `\n \n \n \n `,\n styles: [\n ]\n})\nexport class CommentsIconComponent {\n}\n","\n \n \n
\n \n
\n \n
\n \n
\n

\n

\n
\n
\n \n
\n \n \n \n
\n
\n
\n
\n \n
\n \n \n
\n
\n \n
\n \n \n \n
\n \n \n
\n \n \n
\n 0)\">\n فصل {{ playerService.getIndexOfChapterPlaying() }} از {{ chapters.length }}\n \n
\n \n
\n \n \n \n
\n \n
\n \n \n \n
\n
\n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n
\n \n \n \n
\n \n \n
\n
\n
\n \n\n\n \n
\n \n \n \n \n
\n \n \n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n 0\"\n [@showChapterList]=\"chapterListState\"\n >\n \n \n\n\n \n\n\n \n \n \n \n\n\n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n\n\n \n \n
    \n \n
    \n \n \n
    \n \n \n \n \n
\n \n\n\n \n\n\n\n\n\n
\n
\n \n \n \n
\n
\n
\n \n \n \n
\n
\n
\n\n\n
\n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n
\n \n \n
\n","import {AnimationEvent} from '@angular/animations';\nimport {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnDestroy, OnInit, Renderer2} from '@angular/core';\nimport {\n coverSlideAnimation,\n overlayFadeInOut,\n slideInUpOnEnterAnimationPlayer,\n slideUpDownPlayer,\n smallPlayerSlideUpDown,\n} from '@app/animation/animation-player';\nimport {infoPlayer} from '@app/app/pdp/pdp-model';\nimport {IndicatorService} from '@app/shared';\nimport {NavigationBarService} from '@app/shared/navigation-bar/navigation-bar.service';\n\nimport {iChapterSetStorage, Media} from '../iPlayer';\nimport {PlayerService} from '../player.service';\nimport {DeviceService} from \"@app/core\";\nimport {Router} from \"@angular/router\";\nimport {Subscription} from \"rxjs\";\nimport {AppParametersService} from \"@app/core/token/app-parameters.service\";\nimport {ClientTypeEnum} from \"@app/helper/ClientTypeEnum\";\n\ninterface iListItem {\n title: string;\n typeId: 'sleep' | 'speed',\n items: Array<{ id: number; title: string; speed: number | null; isSelect: boolean }>\n}\n\n@Component({\n selector: 'navaar-player',\n templateUrl: './player.component.html',\n styleUrls: ['./player.component.scss'],\n animations: [\n overlayFadeInOut(),\n slideInUpOnEnterAnimationPlayer({anchor: 'playerAnimation'}),\n coverSlideAnimation(),\n smallPlayerSlideUpDown(),\n slideUpDownPlayer({\n anchor: 'showChapterList',\n translate: '-100vh',\n stateNameDown: 'hideChapter',\n stateNameUp: 'showChapter'\n }),\n slideUpDownPlayer({\n anchor: 'slidePopup',\n translate: '-100%',\n stateNameDown: 'hideContainer',\n stateNameUp: 'showContainer'\n }),\n ]\n})\nexport class PlayerComponent implements OnInit, OnDestroy {\n public media: Media;\n public info: infoPlayer;\n public chapters: Array = [];\n public showLargePlayer: boolean = false;\n public showCloseIcon: boolean = false;\n public itemsForOption: iListItem = null;\n public isDrivingMode: boolean = false;\n public subscription: Subscription = new Subscription();\n public clientTypeEnum: typeof ClientTypeEnum = ClientTypeEnum;\n public speeds: iListItem = {\n items: [\n {id: 1, title: 'کندتر', speed: 0.5, isSelect: false},\n {id: 2, title: 'کندتر', speed: 0.75, isSelect: false},\n {id: 3, title: 'خاموش', speed: 1, isSelect: true},\n {id: 4, title: 'سریعتر', speed: 1.25, isSelect: false},\n {id: 5, title: 'سریعتر', speed: 1.5, isSelect: false},\n {id: 6, title: 'سریعتر', speed: 1.75, isSelect: false},\n {id: 7, title: 'سریعتر', speed: 2, isSelect: false},\n {id: 8, title: 'سریعتر', speed: 2.25, isSelect: false},\n {id: 9, title: 'سریعتر', speed: 2.5, isSelect: false},\n ],\n title: 'سرعت پخش',\n typeId: 'speed'\n }\n public sleeps: iListItem = {\n title: 'تایمر خاموشی',\n typeId: 'sleep',\n items: [\n {id: 1, title: 'خاموش', speed: null, isSelect: true},\n {id: 2, title: 'انتهای فصل', speed: null, isSelect: false},\n {id: 3, title: 'دقیقه', speed: 5, isSelect: false},\n {id: 4, title: 'دقیقه', speed: 10, isSelect: false},\n {id: 5, title: 'دقیقه', speed: 15, isSelect: false},\n {id: 6, title: 'دقیقه', speed: 30, isSelect: false},\n {id: 7, title: 'دقیقه', speed: 45, isSelect: false},\n {id: 8, title: 'دقیقه', speed: 60, isSelect: false},\n {id: 9, title: 'دقیقه', speed: 120, isSelect: false},\n ]\n }\n public selectSpeed: number = this.speeds.items.find(x => x.isSelect).speed;\n\n constructor(\n public readonly parameterService: AppParametersService,\n public readonly deviceService: DeviceService,\n public readonly navigationBarService: NavigationBarService,\n private readonly router: Router,\n public readonly playerService: PlayerService,\n private readonly indicator: IndicatorService,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly render: Renderer2) {\n this.indicator.hide();\n }\n\n public ngOnInit(): void {\n this.subscription.add(this.playerService.mediaSource.subscribe(media => this.media = media));\n this.subscription.add(this.playerService.infoSource.subscribe(info => this.info = info));\n this.subscription.add(this.playerService.chapterSource.subscribe(c => this.chapters = c));\n this.subscription.add(this.playerService.goToSmallPlayerSource.subscribe(x => {\n if (x)\n this.onSmallPlayer();\n }));\n if (this.playerService.isPlayWithSmallPlayer) {\n this.onSmallPlayer();\n this.playerService.isPlayWithSmallPlayer = false;\n } else {\n this.showLargePlayer = true;\n this.overlayState = 'showOverlay';\n this.render.setStyle(this.document.body, 'overflow', 'hidden');\n }\n }\n\n public showListChapters() {\n if (this.chapters.length > 0) {\n this.chapterListState = 'showChapter';\n this.playerState = 'show-chapter';\n this.showCloseIcon = false\n }\n }\n\n public closeChapterList() {\n this.playerState = 'player';\n this.chapterListState = 'hideChapter';\n }\n\n public selectChapter(item: iChapterSetStorage) {\n this.closeChapterList();\n this.playerService.goToChapter(item.chapterId)\n }\n\n public getInfoNextChapter(): any {\n const index = this.chapters.findIndex(c => c.chapterId == this.playerService.currentChapter.chapterId);\n if (index === -1)\n return null;\n const model = this.chapters[index + 1];\n return model;\n }\n\n public onPrevChapter() {\n if (this.playerService.getIndexOfChapterPlaying() == 1)\n return;\n const _chapterId = this.chapters[this.playerService.currentChapter.index - 1].chapterId;\n this.playerService.goToChapter(_chapterId);\n }\n\n public onNextChapter() {\n if (this.playerService.getIndexOfChapterPlaying() == this.chapters.length)\n return;\n const _chapterId = this.chapters[this.playerService.currentChapter.index + 1].chapterId;\n this.playerService.goToChapter(_chapterId);\n }\n\n public trackByChapter(index: number, item: iChapterSetStorage) {\n return item.chapterId;\n }\n\n public onSmallPlayer() {\n if (this.chapterListState === 'showChapter')\n this.closeChapterList();\n this.render.removeStyle(this.document.body, 'overflow');\n this.render.addClass(this.document.body, 'has-small-player');\n this.smallPlayerState = 'showSmallPlayer';\n this.playerState = 'void';\n this.coverState = 'hideCover';\n this.playerService.isShowSmallPlayer = (this.smallPlayerState == 'showSmallPlayer');\n }\n\n public closeSmallPlayer() {\n this.render.setStyle(this.document.body, 'overflow', 'hidden');\n this.overlayState = 'showOverlay';\n this.render.removeClass(this.document.body, 'has-small-player');\n this.playerService.isShowSmallPlayer = (this.smallPlayerState != 'showSmallPlayer');\n }\n\n public selectOptionItem(id, typeId) {\n switch (typeId) {\n case 'sleep':\n this.sleeps.items.map(z => z.isSelect = false);\n let _ = this.sleeps.items.find(z => z.id == id);\n _.isSelect = true;\n this.closeSliderPopup();\n if (_.id === 1) {\n this.playerService.setOffSleepTime();\n break;\n } else if (_.id === 2) {\n this.playerService.setOnSleepTimeInEndEpisode(this.media.remainingTime);\n } else {\n this.playerService.setOnSleepTimeout(_.speed * 1000 * 60, () => this.render.removeStyle(this.document.body, 'overflow'));\n }\n break;\n case 'speed':\n this.speeds.items.map(z => z.isSelect = false);\n let item = this.speeds.items.find(z => z.id == id);\n item.isSelect = true;\n this.playerService.setPlaybackRate(+item.speed);\n this.selectSpeed = +item.speed;\n this.closeSliderPopup();\n break;\n default:\n this.closeSliderPopup();\n break;\n }\n }\n\n public showSleep() {\n this.itemsForOption = this.sleeps;\n this.playerState = 'void';\n this.slidePopupAnim = 'showContainer';\n this.overlaySleepSpeedState = 'showOverlay';\n }\n\n public showSpeed() {\n this.itemsForOption = this.speeds;\n this.playerState = 'void';\n this.slidePopupAnim = 'showContainer';\n this.overlaySleepSpeedState = 'showOverlay';\n }\n\n public closeSliderPopup() {\n this.slidePopupAnim = 'hideContainer';\n this.playerState = 'player';\n this.overlaySleepSpeedState = 'hideOverlay';\n }\n\n public share() {\n this.deviceService.share(this.info.identifier, this.info.title);\n }\n\n public routeToInfoBook() {\n this.indicator.show();\n this.router.navigate(['./pdp', this.info.identifier]).then(x => {\n this.navigationBarService.prepareNavigationBar();\n this.indicator.hide();\n });\n }\n\n public routeToComment() {\n this.indicator.showHude();\n this.onSmallPlayer();\n this.router.navigate(['./pdp', 'comment', this.info.audioBookId, this.info.identifier], {queryParams: {title: this.info.title}}).then(x => {\n this.navigationBarService.prepareNavigationBar();\n this.indicator.hideHude();\n });\n }\n\n public ngOnDestroy() {\n this.showLargePlayer = false;\n this.subscription.unsubscribe();\n this.playerService.releaseHls();\n }\n\n //#endregion animation section\n\n public overlaySleepSpeedState: 'showOverlay' | 'hideOverlay' | 'void';\n public overlayState: 'showOverlay' | 'hideOverlay' | 'void';\n public playerState: 'player' | 'show-chapter' | 'void' = 'player';\n public slidePopupAnim: 'showContainer' | 'hideContainer' = 'hideContainer';\n public smallPlayerState: 'hideSmallPlayer' | 'showSmallPlayer' = 'hideSmallPlayer';\n public coverState: 'hideCover' | 'showCover' = 'hideCover';\n public chapterListState: 'hideChapter' | 'showChapter' = 'hideChapter';\n\n public onOverlayAnimationStart(event: AnimationEvent) {\n if (event.toState == 'showOverlay') {\n this.playerState = 'player';\n }\n }\n\n public onOverlayAnimationDone(event: AnimationEvent) {\n if (event.toState == 'showOverlay' && this.smallPlayerState == 'showSmallPlayer') {\n this.smallPlayerState = 'hideSmallPlayer';\n this.playerState = 'player';\n this.showLargePlayer = true;\n }\n }\n\n public onPlayerStateStart(event: AnimationEvent) {\n if (event.toState == 'player') {\n this.coverState = 'showCover';\n }\n }\n\n public onSmallPlayerDone(event: AnimationEvent) {\n if (event.toState === 'showSmallPlayer') {\n this.overlayState = 'hideOverlay';\n } else if (this.showLargePlayer == false && event.toState === 'hideOverlay') {\n this.showLargePlayer = true;\n }\n }\n\n public onCoverStateDone(event: AnimationEvent) {\n if (event.toState == 'hideCover' && this.smallPlayerState == 'showSmallPlayer') {\n this.overlayState = 'void';\n }\n }\n\n public onlistContainerItemDone(event: AnimationEvent) {\n if (event.toState === 'void' || event.toState === 'hideContainer') {\n this.itemsForOption = null;\n }\n }\n\n public onPlayerStateStartDone(event: AnimationEvent) {\n this.showCloseIcon = (event.toState === 'player');\n }\n\n //#endregion\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-navigation-bar-library-icon',\n template: `\n \n \n \n \n \n \n \n\n\n `,\n styles: [\n ]\n})\nexport class NavigationBarLibraryIconComponent {\n @Input() public color: string = '#95989a';\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-navigation-bar-tape-icon',\n template: `\n \n \n \n \n \n \n \n \n\n\n `,\n styles: [\n ]\n})\nexport class NavigationBarTapeIconComponent {\n @Input() public color: string = '#95989a';\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'navaar-navigation-bar-profile-icon',\n template: `\n \n \n \n \n \n\n\n `,\n styles: [\n ]\n})\nexport class NavigationBarProfileIconComponent {\n @Input() public color: string = '#95989a';\n}\n","import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {IndicatorService} from '@app/shared';\nimport {NavigationBarEnum} from './navigation-bar.model';\nimport {NavigationBarService} from './navigation-bar.service';\nimport {PlayerService} from \"@app/components/player/player.service\";\nimport {GoftinoService} from \"@app/core/goftino.service\";\n\n@Component({\n selector: 'navaar-navigation-bar',\n templateUrl: './navigation-bar.component.html',\n styleUrls: ['./navigation-bar.component.scss']\n})\nexport class NavigationBarComponent implements AfterViewInit {\n @ViewChild('hasMessageGoftino', {\n static: false,\n read: ElementRef\n }) private countGoftinoEl: ElementRef;\n\n public navigationBarType: typeof NavigationBarEnum = NavigationBarEnum;\n\n constructor(\n private readonly goftinoService: GoftinoService,\n private readonly indicator: IndicatorService,\n private readonly route: Router,\n private readonly playerService: PlayerService,\n public readonly navigationBarService: NavigationBarService) {\n }\n\n ngAfterViewInit(): void {\n const unread = this.goftinoService.getUnreadCount();\n if (unread && unread > 0) {\n this.countGoftinoEl.nativeElement.style.visibility = 'visible';\n } else {\n this.countGoftinoEl.nativeElement.style.visibility = 'hidden';\n }\n }\n\n public navigate(type: NavigationBarEnum) {\n if (this.navigationBarService.activeMenu === type)\n return;\n this.indicator.show();\n let url: Array = [];\n switch (type) {\n case NavigationBarEnum.category:\n url.push('clp');\n break;\n case NavigationBarEnum.library:\n url.push('library');\n break;\n case NavigationBarEnum.profile:\n url.push('profile');\n break;\n case NavigationBarEnum.vitrin:\n default:\n url.push('/');\n break;\n }\n this.route.navigate(url).then(() =>\n this.navigationBarService.activeMenu = type);\n if (this.playerService.isShowPlayer)\n this.playerService.goToSmallPlayer(this.playerService.isShowSmallPlayer === false);\n }\n}\n","
\n
\n
\n \n

کتابخانه

\n
\n
\n \n

فروشگاه

\n
\n
\n \n

جستجو

\n
\n
\n \n

\n پروفایل\n

\n \n
\n
\n
\n","\n \n

\n \n\n","import { animate, AnimationEvent, style, transition, trigger } from '@angular/animations';\nimport { Component, OnInit } from '@angular/core';\nimport { Observable, Subscription, timer } from 'rxjs';\n\nimport { NotificationService, notifType } from './notification.service';\n\n@Component({\n selector: 'navaar-notification',\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n animations: [\n trigger('notifyState', [\n transition(':enter', [\n style({ transform: 'translateY(-100%)' }),\n animate('150ms cubic-bezier(0, 0, 0.2, 1)', style({\n transform: 'translateY(0%)'\n })),\n ]),\n transition(':leave', [\n animate('150ms cubic-bezier(0.4, 0.0, 1, 1)', style({\n transform: 'translateY(-100%)'\n }))\n ])\n ])\n ]\n})\nexport class NotificationComponent implements OnInit {\n\n public message: string;\n public type: notifType;\n public show = false;\n private notifSubscription: Subscription;\n private timer: Observable;\n private timerSubscription: Subscription;\n\n constructor(private readonly notif: NotificationService) { }\n\n ngOnInit(): void {\n this.notifSubscription = this.notif.notification$.subscribe(c => {\n if (this.timerSubscription)\n this.timerSubscription.unsubscribe();\n this.message = c.text;\n const time = c.timeout ? c.timeout : 5000;\n this.type = c.type;\n this.show = c.show;\n this.timer = timer(time);\n this.timerSubscription = this.timer.subscribe(c => this.show = false);\n })\n }\n public onStartAnimation(e: AnimationEvent) { }\n public onDoneAnimation(e: AnimationEvent) { }\n}\n","import {ApplicationRef, Injectable} from '@angular/core';\nimport {SwPush, SwUpdate} from \"@angular/service-worker\";\nimport {BehaviorSubject, concat, interval, Observable} from \"rxjs\";\nimport {first} from \"rxjs/operators\";\nimport {EventTrackerService} from \"@app/core/event-tracker/event-tracker.service\";\nimport {Platform} from \"@angular/cdk/platform\";\nimport {DeviceService} from \"@app/core/device/device.service\";\n\n@Injectable()\nexport class PwaService {\n private hasUpdateSource: BehaviorSubject = new BehaviorSubject(false);\n public hasUpdate$: Observable = this.hasUpdateSource.asObservable();\n\n private isUpdatingSource: BehaviorSubject = new BehaviorSubject(null);\n public isUpdating$: Observable = this.isUpdatingSource.asObservable();\n\n private messageSource: BehaviorSubject = new BehaviorSubject(\"\");\n public message$: Observable = this.messageSource.asObservable();\n private readonly vapidKeys:string=`BEIWN2i8Nmy5TtmwvHR17T6DkeZseog-djS92NYRkEcaYFUDSytJAwudB6S9DBGQH4nZVbLJpEWIz_zvBLDmnN8`;\n private firebaseConfig = {\n apiKey: \"API_KEY\",\n authDomain: \"PROJECT_ID.firebaseapp.com\",\n databaseURL: \"https://PROJECT_ID.firebaseio.com\",\n storageBucket: \"PROJECT_ID.appspot.com\",\n measurementId: \"G-MEASUREMENT_ID\",\n fcmPublicVapidKey: \"YOUR_PUBLIC_VAPID_KEY\",\n messagingSenderId: \"YOUR_SENDER_ID\",\n appId: \"YOUR_APP_ID\",\n projectId: \"YOUR_PROJECT_ID\",\n serverKey: \"YOUR_SERVER_KEY\"\n };\n\n payload=JSON.stringify({\n \"notification\": {\n \"title\": \"Web Mail Notification\",\n \"body\": \"New Mail Received!\",\n \"icon\": \"images/bell.jpg\",\n \"vibrate\": [100, 50, 100], //will cause the device to vibrate for 100 ms, be still for 50 ms, and then vibrate for 100 ms\n \"requireInteraction\":true,\n \"data\": {\"dateOfArrival\": Date.now(),},\n \"actions\": [{\"action\": \"inbox\",\"title\": \"Go to Web Mail\",}]\n }})\n constructor(\n private readonly deviceService: DeviceService,\n private readonly platform: Platform,\n private readonly swUpdate: SwUpdate,\n private readonly eventTracker: EventTrackerService,\n private readonly swPush: SwPush,\n private readonly appRef: ApplicationRef) {\n // this.service.triggerMessage(this.payload).subscribe(x=>console.log(x),err=>console.log(err));\n }\n\n public init() {\n if (!this.deviceService.isPwa())\n return;\n if (this.swUpdate.isEnabled) {\n this.swUpdate.checkForUpdate().then(() => console.log('%c checking for updates', 'font-size: 20px; background-color: cornflowerblue; color: white'));\n const appIsStable$ = this.appRef.isStable.pipe(first(isStable => isStable === true));\n // const everySixHours$ = interval(6 * 60 * 60 * 1000);\n const everySixHours$ = interval(60000 * 2);\n const everySixHoursOnceAppIsStable$ = concat(appIsStable$, everySixHours$);\n everySixHoursOnceAppIsStable$.subscribe(() => this.swUpdate.checkForUpdate().then(() => console.log('%c checking for updates with interval', 'font-size: 20px; background-color: purple; color: white')));\n this.swUpdate.available.subscribe(event => {\n console.log('%c UPDATE HAS AVAILABLE', 'font-size: 20px; background-color: red; color: white');\n this.isUpdatingSource.next(false);\n this.hasUpdateSource.next(true);\n this.messageSource.next('نسخه جدیدی از برنامه وجود دارد.');\n });\n this.swUpdate.activated.subscribe(event => {\n console.log('%c UPDATE HAS ACTIVATED', 'font-size: 20px; background-color: green; color: white');\n this.isUpdatingSource.next(null);\n this.messageSource.next('برنامه به آخرین ورژن آپدیت شد.');\n setTimeout(() => {\n this.hasUpdateSource.next(false);\n this.messageSource.next('');\n }, 3000);\n });\n\n if (this.swPush.isEnabled) {\n // this.swPush.notificationClicks.subscribe(x=>console.log(x)); this.swPush.requestSubscription({\n // serverPublicKey: this.vapidKeys\n // })\n // .then(sub =>{this.service.subscribe(sub).subscribe(x=>console.log(x),err=>console.log(err))})\n // .catch(err => console.error(\"Could not subscribe to notifications\", err));\n }\n }\n }\n\n public update() {\n this.isUpdatingSource.next(true);\n this.messageSource.next('درحال بروزرسانی...');\n setTimeout(() => {\n this.swUpdate.activateUpdate().then(() => {\n this.eventTracker.logEvent('update', {});\n document.location.reload();\n });\n }, 3000)\n }\n\n private isPushSupported() {\n //checks if user has granted permission to Push notifications\n if (Notification.permission === 'denied') {\n alert('User has blocked push notification.');\n return;\n }\n\n //Checks if current browser supports Push notification\n if (!('PushManager' in window)) {\n alert('Sorry, Push notification isn\\'t supported in your browser.');\n return;\n }\n\n //Get `push notification` subscription id\n\n //If `serviceWorker` is registered and ready\n navigator.serviceWorker.ready\n .then(function (registration) {\n registration.pushManager.getSubscription()\n .catch(function (error) {\n console.error('Error occurred while enabling push ', error);\n });\n });\n }\n\n private subscribePush() {\n //Subscribes user to Push notifications\n // registration.pushManager.subscribe({\n // userVisibleOnly: true //Set user to see every notification\n // })\n // .then(function (subscription) {\n // toast('Subscribed successfully.');\n // console.info('Push notification subscribed.');\n // console.log(subscription);\n // })\n // .catch(function (error) {\n // console.error('Push notification subscription error: ', error);\n // });\n }\n\n unsubscribePush() {\n navigator.serviceWorker.ready\n .then(function(registration) {\n //Get subscription\n registration.pushManager.getSubscription()\n .then(function (subscription) {\n //If no `push subscription`, then return\n if(!subscription) {\n alert('Unable to unregister push notification.');\n return;\n }\n\n //Unsubscribes user\n subscription.unsubscribe()\n .then(function () {\n console.info('Push notification unsubscribed.');\n })\n .catch(function (error) {\n console.error(error);\n });\n })\n .catch(function (error) {\n console.error('Failed to unsubscribe push notification.');\n });\n })\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DeviceService } from '@app/core';\n\nexport interface iSharedDate {\n [key: string]: any;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharedDataService {\n\n constructor(private readonly device: DeviceService) { }\n\n private _data: iSharedDate = {};\n public get data(): iSharedDate {\n return this._data;\n }\n public set data(v: iSharedDate) {\n this._data = v;\n }\n\n public remove(key: string) {\n delete this._data[key];\n }\n\n public setToNative(key: string, obj: any) {\n this._data[key] = obj;\n if (this.device.isAndroid()) {\n (window as any).Android.setWebViewState(JSON.stringify(this._data));\n } else if (this.device.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(`setWebViewState-${JSON.stringify(this._data)}`);\n }\n }\n public getFromNative(e) {\n let unbox = JSON.parse(e);\n //sample: this.dddService.ff.next(unbox['test'])\n }\n}\n","\n \n\n\n
\n
\n

\n \n \n \n \n \n \n \n
\n
\n
\n\n
\n
\n
\n \n \n \n \n
\n
\n

زمان اشتراک شما به پایان رسیده است. با تمدید آن میتوانید به محتوای مورد نظر دسترسی پیدا کنید.

\n
\n
\n \n \n \n
\n
\n
\n
\n","import {\n AfterContentInit, AfterViewInit,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n HostListener, Inject,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {ActivatedRoute, NavigationEnd, NavigationStart, Router, Scroll} from '@angular/router';\nimport {BrowserStorageService, EventTrackerService, HttpService} from '@app/core';\nimport {IndicatorService} from '@app/shared';\nimport {environment} from '@env/environment';\nimport {filter, tap} from 'rxjs/operators';\nimport {AuthenticationService} from './app/authentication/authentication.service';\nimport {PDPService} from './app/pdp/pdp/pdp.service';\nimport {WishlistService} from './app/wishlist/wishlist.service';\nimport {BackKeyUrlService} from './components/header/back-key-url.service';\nimport {PlayerService} from './components/player/player.service';\nimport {client_secret, NAVAAR_CLIENT_ID, SCOPE} from './config.app';\nimport {DeviceService} from '@app/core';\nimport {LogService} from './core/log/log.service';\nimport {AppParametersService} from './core/token/app-parameters.service';\nimport {TokenService} from './core/token/token.service';\nimport {DeepLinkService} from './helper/deep-link.service';\nimport {SharedDataService} from './helper/shared-data.service';\nimport {DialogDownloadGlobalComponent} from './shared/dialog-download-global/dialog-download-global.component';\nimport {DialogDownloadGlobalService} from './shared/dialog-download-global/dialog-download-global.service';\nimport {NavigationBarService} from './shared/navigation-bar/navigation-bar.service';\nimport {ClientTypeEnum} from \"@app/helper/ClientTypeEnum\";\nimport {oAuthTypeEnum} from \"@app/helper/oAuthTypeEnum\";\nimport {PwaService} from \"@app/core/pwa.service\";\nimport {PlayerComponent} from \"@app/components/player/player/player.component\";\nimport {NavigationBarComponent} from \"@app/shared/navigation-bar/navigation-bar.component\";\nimport {NotificationComponent} from \"@app/shared/notification/notification.component\";\nimport {IndicatorComponent} from \"@app/shared/Indicator/indicator.component\";\nimport {Subscription} from \"rxjs\";\nimport {Title} from \"@angular/platform-browser\";\nimport {GoftinoService} from \"@app/core/goftino.service\";\nimport {UserService} from \"@app/app/profile/user-service.service\";\nimport {DOCUMENT} from \"@angular/common\";\n\n@Component({\n selector: 'navaar-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\n\nexport class AppComponent implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n @HostListener('window:goftino_ready', [])\n goftinoReady() {\n this.goftinoService.goftinoReady();\n }\n\n public subscription: Subscription = new Subscription();\n private deferredPromptInstallAppEvent: any;\n private readonly startUrl: string = '/';\n public allow_load: boolean = false;\n public isLogin: boolean = false;\n public isShowSmallPlayer: boolean = false;\n\n public showModalHasUpdate: boolean;\n public showModalIsUpdating: boolean;\n public showModalIsUpdateMessage: string;\n public showButtonInstallApp: boolean = false;\n\n @HostListener('window:beforeinstallprompt', ['$event'])\n private onBeforeInstallPrompt(e) {\n // Prevent Chrome 67 and earlier from automatically showing the prompt\n e.preventDefault();\n // Stash the event so it can be triggered later.\n this.deferredPromptInstallAppEvent = e;\n }\n\n @ViewChild(DialogDownloadGlobalComponent, {static: true}) private dialogDownloadGlobalComponent: DialogDownloadGlobalComponent;\n\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly titleService: Title,\n private readonly vcRef: ViewContainerRef,\n private readonly componentResolver: ComponentFactoryResolver,\n public readonly pwaService: PwaService,\n private readonly storage: BrowserStorageService,\n public readonly playerService: PlayerService,\n private readonly authenticationService: AuthenticationService,\n private readonly eventTrackerService: EventTrackerService,\n private readonly http: HttpService,\n private readonly zone: NgZone,\n private readonly log: LogService,\n private readonly wishListServices: WishlistService,\n private readonly indicator: IndicatorService,\n private readonly router: Router,\n private readonly route: ActivatedRoute,\n private readonly pdpService: PDPService,\n private readonly device: DeviceService,\n public readonly tokenService: TokenService,\n private readonly deepLinkService: DeepLinkService,\n private readonly sharedDataService: SharedDataService,\n private readonly backKeyUrlService: BackKeyUrlService,\n public readonly navigationBarService: NavigationBarService,\n public readonly parameterService: AppParametersService,\n private readonly dialogDownloadGlobal: DialogDownloadGlobalService,\n private readonly goftinoService: GoftinoService,\n private readonly userService: UserService) {\n this.initial().finally(() => this.allow_load = true);\n (window as any).appRef = {\n component: this,\n zone: this.zone,\n goBackNative: () => this.backKeyUrlService.goBack(null),\n updatePurchaseButton: () => {\n },\n CheckStateIsPlayBtn: (value) => this.CheckStateIsPlayBtn(value),\n NavigateToAudioBook: (value) => this.NavigateToAudioBook(value),\n NavigateToSubscription: () => this.NavigateToSubscription(),\n NavigateToCommentAudiobook: (identifier, audiobookdId, title) => this.NavigateToCommentAudiobook(identifier, audiobookdId, title),\n setToken: (value) => this.authenticationService.setToken(value),\n setAppVersion: (value) => this.setAppVersion(value),\n goToStartPage: () => this.router.navigateByUrl(this.startUrl),\n purchaseAcceptCafeBazaar: (cafeBazaarToken) => this.purchaseAcceptCafeBazaar(cafeBazaarToken),\n cafebazaarNotInstaled: () => this.cafebazaarNotInstaled(),\n cafebazaarCancel: () => this.cafebazaarCancel(),\n showDialogDownload: (identifier) => this.showDialogDownload(identifier),\n routeToDeeplink: (link) => this.deepLinkService.routeToDeeplink(link),\n getWebViewState: (e) => this.sharedDataService.getFromNative(e),\n showLoading: () => this.indicator.show()\n };\n\n this.subscription.add(this.tokenService.isLogin$.pipe(\n tap(c => {\n if (c)\n this.startUpAfterSetToken();\n this.isLogin = c;\n })\n ).subscribe(x => {\n this.goftinoService.removeGoftinoScript();\n if (x) {\n this.http.get(\"/api/account/editprofile\").subscribe((res) => {\n this.userService.setUserInfo(res);\n this.goftinoService.loadScript(res);\n });\n } else {\n this.goftinoService.loadScript(null);\n }\n }));\n this.log.logger('setting appref');\n // if (this.device.isIOS())\n // (window as any).webkit.messageHandlers.callbackHandler.postMessage(\"GetToken\");\n console.log(`environment: ${environment.envName}`);\n this.log.logger('HIDE LOADER FROM NATIVE');\n this.startUrl = window.location.pathname.replace(window.location.search, '').replace(`/${environment.webFolder}`, '');\n this.log.logger(`SET PRELOADER PAGE: ${this.startUrl}`);\n this.device.setPreloaderPage(this.startUrl);\n this.device.hide();\n this.indicator.show();\n this.subscription.add(this.router.events.pipe(filter((event) => event instanceof NavigationStart || event instanceof NavigationEnd))\n .subscribe((event) => {\n if (event instanceof NavigationStart) {\n }\n if (event instanceof NavigationEnd) {\n if (this.device.isPwa()) {\n this.navigationBarService.prepareNavigationBar();\n }\n }\n }));\n }\n\n private async initial() {\n if (this.device.isPwa() || this.device.isDevelop()) {\n this.device.setDeviceIdBrowser();\n this.parameterService.scope = SCOPE;\n this.parameterService.clientSecret = client_secret;\n this.parameterService.identityClientId = NAVAAR_CLIENT_ID;\n this.subscription.add(this.pwaService.hasUpdate$.subscribe(x => this.showModalHasUpdate = x));\n this.subscription.add(this.pwaService.isUpdating$.subscribe(x => this.showModalIsUpdating = x));\n this.subscription.add(this.pwaService.message$.subscribe(x => this.showModalIsUpdateMessage = x));\n this.initNavigationBarService();\n this.initPlayer();\n }\n await this.device.getAndSetParams();\n }\n\n async ngOnInit() {\n this.router.events\n .pipe(filter((event) => event instanceof NavigationStart))\n .subscribe((event: NavigationStart) => {\n if (event.restoredState) {\n this.goftinoService.closeWidget();\n }\n });\n try {\n if (this.device.isAndroid()) {\n (window as any).Android.getDeepLink();\n } else if (this.device.isIOS()) {\n (window as any).webkit.messageHandlers.callbackHandler.postMessage(\"getDeepLink\");\n } else if (this.device.isPwa() || this.device.isDevelop()) {\n await screen.orientation.lock(\"landscape\");\n }\n } catch {\n }\n\n this.initNotification();\n this.initDialogDownloadFromMarkets();\n this.initIndicator();\n\n if (this.device.isPwa() || this.device.isDevelop())\n this.subscription.add(this.route.queryParams.subscribe(x => {\n if (x.p && (this.parameterService.clientId === ClientTypeEnum.Zarebin ||\n this.parameterService.clientId === ClientTypeEnum.iGap ||\n this.parameterService.clientId === ClientTypeEnum.putlife ||\n this.parameterService.clientId === ClientTypeEnum.pas ||\n this.parameterService.clientId === ClientTypeEnum.irancell ||\n this.parameterService.clientId === ClientTypeEnum.iranpl ||\n this.parameterService.clientId === ClientTypeEnum.ghesse)) {\n this.parameterService.parameterZarebin = x.p;\n let oauthType: oAuthTypeEnum;\n switch (this.parameterService.clientId) {\n case ClientTypeEnum.iGap:\n oauthType = oAuthTypeEnum.iGap;\n break;\n case ClientTypeEnum.Zarebin:\n oauthType = oAuthTypeEnum.zarebin;\n break;\n case ClientTypeEnum.putlife:\n oauthType = oAuthTypeEnum.putlifeAuth;\n break;\n case ClientTypeEnum.pas:\n oauthType = oAuthTypeEnum.pasAuth;\n break;\n case ClientTypeEnum.irancell:\n oauthType = oAuthTypeEnum.irancellAuth;\n break;\n case ClientTypeEnum.ghesse:\n oauthType = oAuthTypeEnum.samantelAuth;\n break;\n case ClientTypeEnum.iranpl:\n oauthType = oAuthTypeEnum.iranPLAuth;\n break;\n }\n this.http.loginOauth(x.p, oauthType).subscribe(c => {\n this.storage.setLocal('q_oAuth_token', x.p, true);\n this.authenticationService.setToken(c);\n })\n }\n\n if (this.parameterService.clientId === ClientTypeEnum.iGap)\n this.titleService.setTitle('آیکست');\n else\n this.titleService.setTitle('نوار');\n\n }))\n if (this.device.isPwa())\n this.pwaService.init();\n }\n\n ngAfterViewInit(): void {\n }\n\n private initIndicator() {\n const factory = this.componentResolver.resolveComponentFactory(IndicatorComponent);\n this.vcRef.createComponent(factory);\n }\n\n private initPlayer(): void {\n const factory = this.componentResolver.resolveComponentFactory(PlayerComponent);\n let componentRef: ComponentRef;\n this.subscription.add(this.playerService.showSmallPlayerSource.subscribe(x => this.isShowSmallPlayer = x));\n this.subscription.add(this.playerService.showPlayerSource.subscribe(c => {\n if (c) {\n if (componentRef)\n componentRef.destroy();\n componentRef = this.vcRef.createComponent(factory);\n } else {\n if (componentRef) {\n componentRef.destroy();\n }\n }\n }));\n }\n\n private initNavigationBarService() {\n const factory = this.componentResolver.resolveComponentFactory(NavigationBarComponent);\n this.vcRef.createComponent(factory);\n this.navigationBarService.prepareNavigationBar();\n }\n\n private initDialogDownloadFromMarkets(): void {\n const factory = this.componentResolver.resolveComponentFactory(DialogDownloadGlobalComponent);\n let componentRef: ComponentRef;\n this.subscription.add(this.dialogDownloadGlobal.showDialogSource.subscribe(c => {\n if (c) {\n componentRef = this.vcRef.createComponent(factory);\n } else {\n if (componentRef)\n componentRef.destroy();\n }\n }));\n }\n\n private initNotification() {\n const factory = this.componentResolver.resolveComponentFactory(NotificationComponent);\n this.vcRef.createComponent(factory);\n }\n\n ngAfterContentInit(): void {\n try {\n const infoPlayer = JSON.parse(decodeURIComponent(this.storage.getLocal(this.playerService.IS_PLAYING, true)));\n if (infoPlayer)\n this.playerService.initial(infoPlayer, true);\n } catch (e) {\n }\n }\n\n private startUpAfterSetToken(): void {\n this.wishListServices.addIdsToList();\n }\n\n public logEvent(type: any) {\n this.eventTrackerService.logEvent(\"x_btn_notification_remaining_subscription\", {\n x_button_type: type\n });\n }\n\n public NavigateToSubscription() {\n this.router.navigate(['./subscription', 'plans']).then(c => this.navigationBarService.prepareNavigationBar());\n }\n\n private cafebazaarCancel() {\n this.log.logger('app.component >> marketsCancel');\n this.device.setMarketsNewStatus(21, 'credit');\n this.device.setMarketsNewStatus(21, 'subscription');\n }\n\n private cafebazaarNotInstaled() {\n this.log.logger('app.component >> marketsNotInstaled');\n this.device.setMarketsNewStatus(20, 'credit');\n this.device.setMarketsNewStatus(20, 'subscription');\n }\n\n private purchaseAcceptCafeBazaar(token) {\n console.log('app.component >> purchaseAcceptCafeBazaar() runs');\n console.table(JSON.parse(token));\n\n const _token = JSON.parse(token);\n const purchaseProductType = _token.developerPayload.split('@')[1];\n _token.developerPayload = _token.developerPayload.split('@')[0];\n const localStorageKey = purchaseProductType == 'credit' ? 'CB_credit_NotValidate' : 'CB_subscription_NotValidate';\n localStorage.setItem(localStorageKey, JSON.stringify(_token));\n this.device.setMarketsNewStatus(6, purchaseProductType);\n\n this.http.checkMarketsToken(_token)\n .subscribe((res: any) => {\n console.log('back from check token : ');\n console.log(res);\n\n if (purchaseProductType == 'credit') {\n this.device.setMarketsNewStatus(10, 'credit');\n localStorage.removeItem('CB_credit_NotValidate');\n } else if (purchaseProductType == 'subscription') {\n this.device.setMarketsNewStatus(10, 'subscription');\n localStorage.removeItem('CB_subscription_NotValidate');\n }\n }, err => {\n this.log.logger('app component error validate');\n this.log.logger(err);\n\n if (err.status == 500) {\n this.log.logger('is 500');\n if (purchaseProductType == 'credit') {\n this.device.setMarketsNewStatus(10, 'credit');\n localStorage.removeItem('CB_credit_NotValidate');\n } else if (purchaseProductType == 'subscription') {\n this.device.setMarketsNewStatus(10, 'subscription');\n localStorage.removeItem('CB_subscription_NotValidate');\n }\n }\n });\n }\n\n private setAppVersion(value) {\n const decoded = window.atob(value);\n const oData = JSON.parse(decoded);\n this.device.setAppversion(oData['version']);\n }\n\n private CheckStateIsPlayBtn(e) {\n this.pdpService.setStatusPlayButton(!e);\n }\n\n public NavigateToAudioBook(e) {\n this.indicator.show();\n this.router.navigate(['./pdp', e]).then(() => this.navigationBarService.prepareNavigationBar());\n }\n\n public NavigateToCommentAudiobook(identifier, audiobookdId, title) {\n this.indicator.show();\n let url = this.router.createUrlTree(['./']).toString();\n url = this.router.createUrlTree(['./pdp', identifier]).toString();\n history.pushState(null, null, url)\n this.router.navigate(['./pdp', 'comment', audiobookdId, identifier], {queryParams: {title}}).then(() => this.navigationBarService.prepareNavigationBar());\n }\n\n public goToSubscription(event) {\n event.stopPropagation();\n this.router.navigate(['./subscription', 'plans']).then(z => {\n this.navigationBarService.prepareNavigationBar();\n this.parameterService.isShowMessageEndSubscription = false;\n });\n }\n\n public addToHomeScreen() {\n // hide our user interface that shows our A2HS button\n this.showButtonInstallApp = false;\n // Show the prompt\n\n // Wait for the user to respond to the prompt\n this.deferredPromptInstallAppEvent.userChoice\n .then((choiceResult) => {\n if (choiceResult.outcome === 'accepted') {\n this.deferredPromptInstallAppEvent.prompt();\n console.log('User accepted the A2HS prompt');\n } else {\n this.deferredPromptInstallAppEvent.console.log('User dismissed the A2HS prompt');\n }\n this.deferredPromptInstallAppEvent = null;\n });\n }\n\n private showDialogDownload(identifier) {\n let isOpen: boolean = this.dialogDownloadGlobal.showDialogSource.value;\n if (isOpen) {\n this.dialogDownloadGlobalComponent.hideDownloadPopup(() => {\n setTimeout(() => {\n this.dialogDownloadGlobal.identifier = identifier;\n this.dialogDownloadGlobal.show();\n }, 1500);\n });\n } else {\n this.dialogDownloadGlobal.identifier = identifier;\n this.dialogDownloadGlobal.show();\n }\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { IconsModule } from '@app/components/icons/icons.module';\nimport { SharedModule } from '@app/shared/shared.module';\n\nimport { PlayerProgressbarComponent } from './player-progressbar/player-progressbar.component';\nimport { PlayerComponent } from './player/player.component';\nimport { SmallPlayerComponent } from './small-player/small-player.component';\nimport {AudioObjectComponent} from \"@app/components/player/audio-object.component\";\n\n\n@NgModule({\n declarations: [\n PlayerComponent,\n SmallPlayerComponent,\n PlayerProgressbarComponent,\n AudioObjectComponent,\n ],\n imports: [\n IconsModule,\n CommonModule,\n FormsModule,\n SharedModule\n ],\n exports: [\n PlayerComponent\n ]\n})\nexport class PlayerModule { }\n","import { HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { CacheMapService } from './cache-map.service';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CachingInterceptor implements HttpInterceptor {\n readonly CACHEABLE_URLS: Array = [\"/api/booksSearch\"];\n constructor(private readonly cache: CacheMapService) { }\n\n intercept(req: HttpRequest, next: HttpHandler) {\n if (!this.isRequestCachable(req)) {\n return next.handle(req);\n }\n const cachedResponse = environment.cache ? this.cache.get(req) : null;\n if (cachedResponse !== null) {\n return of(cachedResponse);\n }\n return next.handle(req).pipe(\n tap(event => {\n if (event instanceof HttpResponse) {\n this.cache.put(req, event);\n }\n })\n );\n }\n private isRequestCachable(req: HttpRequest) {\n return (req.method === 'GET') && (this.CACHEABLE_URLS.includes(req.url));\n }\n}\n","import { HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { finalize, tap } from 'rxjs/operators';\n\nimport { LogService } from './log.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoggingInterceptor implements HttpInterceptor {\n constructor(private readonly log: LogService) {\n }\n intercept(req: HttpRequest, next: HttpHandler) {\n const startTime = Date.now();\n let status: string;\n\n return next.handle(req).pipe(\n tap(\n event => {\n status = '';\n if (event instanceof HttpResponse) {\n status = `succeeded`;\n }\n },\n error => status = `failed`\n ),\n finalize(() => {\n const elapsedTime = Date.now() - startTime;\n const message = req.method + \" \" + req.urlWithParams + \" \" + status\n + \" in \" + elapsedTime + \"ms\";\n this.logDetails(message);\n })\n );\n }\n private logDetails(msg: string) {\n this.log.logger(msg);\n if (environment.debug) {\n this.log.showLog(msg);\n }\n }\n} ","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { AuthenticationService } from '@app/app/authentication/authentication.service';\nimport { NotificationService } from '@app/shared/notification/notification.service';\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, filter, finalize, switchMap, take } from 'rxjs/operators';\n\nimport { DeviceService } from '../device/device.service';\nimport { HttpService } from './../http/http.service';\nimport { LogService } from './../log/log.service';\nimport { AppParametersService } from './app-parameters.service';\nimport { TokenService } from './token.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenInterceptor implements HttpInterceptor {\n private isRefreshing = false;\n private tokenSubject: BehaviorSubject = new BehaviorSubject(null);\n\n constructor(\n private readonly parametersService: AppParametersService,\n private readonly auth: AuthenticationService,\n private readonly tokenService: TokenService,\n private readonly http: HttpService,\n private readonly notification: NotificationService,\n private readonly device: DeviceService,\n private readonly log: LogService) { }\n\n private addToken(request: HttpRequest): HttpRequest {\n this.log.logger('WebHttpRequest: returning request to initializer...');\n let setHeaders = {\n 'client-id': this.parametersService.clientId,\n 'version-code': this.parametersService.versionCode,\n 'api-level': this.parametersService.apiLevel,\n 'device-id': this.parametersService.deviceId,\n };\n if (this.tokenService.isLogin) {\n setHeaders['Authorization'] = 'Bearer ' + this.tokenService.accessToken;\n }\n request = request.clone({\n setHeaders\n });\n return request;\n }\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n if (!window.navigator.onLine) {\n this.notification.setNotification({ type: 'error', text: 'اتصال اینترنت خود را بررسی نمایید' });\n return throwError(new HttpErrorResponse({ error: 'Internet is required.' }));\n\n } else {\n this.log.logger('WebHttpRequest: intercept()');\n return next.handle(this.addToken(req))\n .pipe(\n catchError((err: any) => {\n this.log.logger('WebHttpRequest: Caught error.');\n this.log.logger(err);\n if (err instanceof HttpErrorResponse) {\n switch ((err).status) {\n case 401:\n return this.handle401Error(req, next);\n case 400:\n return this.handle400Error(req, next, err);\n default:\n return throwError(err);\n }\n } else {\n this.log.logger('Fatality: ');\n this.log.logger(err);\n return throwError(err);\n }\n })\n );\n }\n }\n private handle400Error(req: HttpRequest, next: HttpHandler, error) {\n this.log.logger('ERRRRRRRR 400');\n this.log.logger(error);\n return throwError(error);\n }\n private handle401Error(req: HttpRequest, next: HttpHandler) {\n this.log.logger(`refresh Token: ${this.parametersService.refreshToken}`);\n if (!this.isRefreshing) {\n this.isRefreshing = true;\n this.tokenSubject.next(null);\n return this.http.getNewRefreshToken().pipe(\n take(1),\n switchMap((response: any) => {\n this.log.logger(`On refreshing token, Server returned: ${response}`);\n this.tokenSubject.next(response);\n this.tokenService.setToken(this.tokenService.mapTokenFromLogin('pwa', response));\n this.isRefreshing = false;\n if (this.device.isAndroid() || this.device.isIOS())\n this.device.setTokenToDevice(response.access_token, response.refresh_token, response, response.expires_in);\n return next.handle(this.addToken(req));\n }),\n catchError(err => {\n this.isRefreshing = false;\n if (err.status === 401 || err.status === 403 || err.status === 400)\n return this.auth.logout();\n else\n return throwError(err);\n }),\n finalize(() => {\n this.isRefreshing = false;\n })\n );\n }\n else {\n this.isRefreshing = false;\n return this.tokenSubject\n .pipe(filter(token => token != null),\n take(1),\n switchMap(token => {\n this.tokenService.setToken(this.tokenService.mapTokenFromLogin('pwa', token));\n if (this.device.isAndroid() || this.device.isIOS())\n this.device.setTokenToDevice(token.access_token, token.refresh_token, token, token.expires_in);\n return next.handle(this.addToken(req));\n }),\n catchError(err => {\n if (err.status === 401 || err.status === 403 || err.status === 400)\n return this.auth.logout();\n else\n return throwError(err);\n }));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\nimport { Injector, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { DeviceService } from '@app/core';\n\nimport { CachingInterceptor } from './cache/Interceptor/caching-interceptor';\nimport { LogService } from './log/log.service';\nimport { LoggingInterceptor } from './log/logging-interceptor';\nimport { throwIfAlreadyLoaded } from './module-import-guard';\nimport { TokenInterceptor } from './token/token.interceptor';\n\n@NgModule({\n declarations: [],\n imports: [\n BrowserModule,\n HttpClientModule,\n CommonModule\n ],\n exports: [],\n providers: [\n { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: LoggingInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: CachingInterceptor, multi: true }\n ]\n})\nexport class CoreModule {\n constructor(\n @Optional() @SkipSelf() parentModule: CoreModule,\n private injector: Injector) {\n throwIfAlreadyLoaded(parentModule, 'CoreModule');\n DeviceService.injector = this.injector;\n LogService.injector = this.injector;\n }\n}\n","export function throwIfAlreadyLoaded(parentModule: any, moduleName: string) {\n if (parentModule) {\n throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`);\n }\n }\n ","import { Injectable } from '@angular/core';\nimport { HammerGestureConfig } from '@angular/platform-browser';\nimport * as Hammer from 'hammerjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HammerGesturesConfig extends HammerGestureConfig {\n\n overrides = {\n 'pan': { enable: false },\n 'swipe': { velocity: 0.4, threshold: 20, direction: Hammer.DIRECTION_VERTICAL },\n 'pinch': { enable: false },\n 'rotate': { enable: false }\n };\n}","import { ErrorHandler, Injectable, Injector } from '@angular/core';\nimport { LogService } from '@app/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class GlobalErrorHandler extends ErrorHandler {\n private sentencesForWarningLogging: string[] = [];\n constructor(private readonly injector: Injector) {\n super();\n }\n public handleError(error) {\n const logService: LogService = this.injector.get(LogService);\n const message = error.message ? error.message : error.toString();\n if (error.status) {\n error = new Error(message);\n }\n\n const errorTraceStr = `Error message:\\n${message}.\\nStack trace: ${error.stack}`;\n\n const isWarning = this.isWarning(errorTraceStr);\n\n if (isWarning) {\n logService.logWarning(errorTraceStr);\n } else {\n logService.logError(errorTraceStr);\n }\n\n super.handleError(error);\n }\n private isWarning(errorTraceStr: string) {\n let isWarning = true;\n // Error comes from app\n if (errorTraceStr.includes('/src/app/')) {\n isWarning = false;\n }\n\n this.sentencesForWarningLogging.forEach((whiteListSentence) => {\n if (errorTraceStr.includes(whiteListSentence)) {\n isWarning = true;\n }\n });\n\n return isWarning;\n }\n}\n","import {Inject, Injectable, Optional} from \"@angular/core\";\nimport {APP_BASE_HREF, PathLocationStrategy, PlatformLocation} from \"@angular/common\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PreserveQueryLocationStrategy extends PathLocationStrategy {\n private readonly query: string;\n private readonly preservedKeys: string[] = ['client-id'];\n\n constructor(\n _platformLocation: PlatformLocation,\n @Optional() @Inject(APP_BASE_HREF) _baseHref?: string\n ) {\n super(_platformLocation, _baseHref);\n if (location?.hash)\n location.hash = '';\n this.query = location?.search.substr(1) ?? '';\n }\n\n prepareExternalUrl(internal: string): string {\n const path = super.prepareExternalUrl(internal);\n if (!this.query || !Object.keys(this.preservedKeys).length) {\n return path;\n }\n const pathQueryIndex = path.indexOf('?');\n const pathQueryEndWithAndChar = pathQueryIndex === -1 && path.endsWith('&');\n const pathQueryKeyvalues: string[] =\n pathQueryIndex === -1\n ? []\n : this.extractKeyvaluesFromQuery(path.substr(pathQueryIndex + 1));\n\n const keyvalues = this.extractKeyvaluesFromQuery(this.query);\n const preservedKeyvalues: string[] = [];\n keyvalues.forEach(kv => {\n this.preservedKeys.forEach(pk => {\n if (\n !pathQueryKeyvalues.includes(kv) &&\n (kv === pk || kv.startsWith(`${pk}=`))\n ) {\n preservedKeyvalues.push(kv);\n }\n });\n });\n if (preservedKeyvalues.length) {\n return pathQueryIndex === -1\n ? `${path}?${preservedKeyvalues.join('&')}`\n : `${path}${\n pathQueryEndWithAndChar ? '' : '&'\n }${preservedKeyvalues.join('&')}`;\n } else {\n return path;\n }\n }\n extractKeyvaluesFromQuery(query: string): string[] {\n let keyvalues: string[] = [];\n let queryStr = query;\n while (queryStr.startsWith('&')) {\n queryStr = queryStr.substr(1);\n }\n while (queryStr.endsWith('&')) {\n queryStr = queryStr.substr(0, queryStr.length - 1);\n }\n if (queryStr) {\n keyvalues = queryStr.split('&');\n }\n return keyvalues;\n }\n}\n","import {APP_INITIALIZER, ApplicationRef, ErrorHandler, Injectable, NgModule} from '@angular/core';\nimport {BrowserModule, HAMMER_GESTURE_CONFIG, HammerModule} from '@angular/platform-browser';\nimport {BrowserAnimationsModule} from '@angular/platform-browser/animations';\n\nimport {AppRoutingModule} from './app-routing.module';\nimport {AppComponent} from './app.component';\nimport {WebviewPageComponent} from './app/webview-page/webview-page.component';\nimport {PlayerModule} from './components/player/player.module';\nimport {CoreModule} from './core/core.module';\nimport {HammerGesturesConfig} from './core/HammerGestureConfig/hammer-gesture.config';\nimport {GlobalErrorHandler} from './services/global-error-handler.service';\nimport {SharedModule} from './shared/shared.module';\nimport {ServiceWorkerModule} from '@angular/service-worker';\nimport {IconsModule} from \"@app/components/icons/icons.module\";\nimport {APP_BASE_HREF, LocationStrategy, PlatformLocation} from \"@angular/common\";\nimport {DeviceService} from \"@app/core\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {ClientTypeEnum} from \"@app/helper/ClientTypeEnum\";\nimport {PreserveQueryLocationStrategy} from \"@app/core/path-preserve-query-location-strategy\";\nimport {PwaService} from \"@app/core/pwa.service\";\nimport {environment} from \"@env/environment\";\nimport {AppParametersService} from \"@app/core/token/app-parameters.service\";\nimport * as Sentry from \"@sentry/angular\";\n\n\n@Injectable({providedIn: 'root'})\n@NgModule({\n declarations: [\n AppComponent,\n WebviewPageComponent\n ],\n imports: [\n BrowserModule,\n HammerModule,\n BrowserAnimationsModule,\n CoreModule,\n IconsModule,\n SharedModule.forRoot(),\n AppRoutingModule,\n PlayerModule,\n ServiceWorkerModule.register('./ngsw-worker.js', {\n enabled: environment.envName === 'pwa',\n registrationStrategy: 'registerWhenStable'\n })\n\n ],\n providers: [{\n provide: HAMMER_GESTURE_CONFIG,\n useClass: HammerGesturesConfig\n },\n {provide: ErrorHandler, useClass: GlobalErrorHandler},\n {\n provide: APP_BASE_HREF,\n useFactory: (s: PlatformLocation) => s.getBaseHrefFromDOM(),\n deps: [PlatformLocation]\n },\n {\n provide: APP_INITIALIZER,\n useFactory: setClientIdPwa,\n multi: true,\n deps: [DeviceService, ActivatedRoute, AppParametersService]\n },\n PwaService,\n {provide: LocationStrategy, useClass: PreserveQueryLocationStrategy},\n {\n provide: ErrorHandler,\n useValue: Sentry.createErrorHandler({\n showDialog: false,\n }),\n },\n {\n provide: Sentry.TraceService,\n deps: [Router],\n },\n {\n provide: APP_INITIALIZER,\n useFactory: () => () => {\n },\n deps: [Sentry.TraceService],\n multi: true,\n },\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n}\n\nexport function setClientIdPwa(deviceService: DeviceService, router: ActivatedRoute, paramApp: AppParametersService) {\n return () => {\n if (deviceService.isDevelop())\n deviceService.clientIdToken(ClientTypeEnum.Develop);\n else if (deviceService.isPwa()) {\n const params = new URLSearchParams(window.location.search);\n if (params.has('client-id')) {\n deviceService.clientIdToken(params.get('client-id').toString());\n paramApp.appName = params.get('client-id').toString() == \"12\" ? \"آیکست\" : \"نوار\";\n } else\n deviceService.clientIdToken(ClientTypeEnum.other);\n }\n };\n}\n","import {ApplicationRef, enableProdMode} from '@angular/core';\nimport {disableDebugTools, enableDebugTools} from '@angular/platform-browser';\nimport {platformBrowserDynamic} from '@angular/platform-browser-dynamic';\nimport { init } from '@sentry/angular';\nimport {AppModule} from '@app/app.module';\nimport {environment} from '@env/environment';\nimport {pwa_version} from \"@app/config.app\";\n\ninit({\n dsn: environment.envName === 'pwa' ? \"https://1412d3b5d17ed9b51882e9f82ca8a240@sentry.navaar.ir/2\" :\n environment.envName === 'production' ? \"https://e23d68da7dc449d7f6513584d82cac51@sentry.navaar.ir/3\" :\n 'https://378b8a90cb3322ebe26814dff0a26632@sentry.navaar.ir/4',\n integrations: [],\n tracesSampleRate: 1.0,\n environment: environment.envName,\n release: pwa_version,\n});\n\nif (environment.production) {\n disableDebugTools();\n enableProdMode();\n}\nplatformBrowserDynamic().bootstrapModule(AppModule, {\n providers: []\n})\n .then(ref => {\n if (window['ngRef']) {\n window['ngRef'].destroy();\n }\n window['ngRef'] = ref;\n const applicationRef = ref.injector.get(ApplicationRef);\n const appComponent = applicationRef.components[0];\n if (!environment.production)\n enableDebugTools(appComponent);\n })\n .catch(err => console.log(err));\n\n['pushState', 'replaceState'].forEach((changeState) => {\n window.history[changeState] = new Proxy(window.history[changeState], {\n apply(target, thisArg, argList) {\n const [state, title, url] = argList\n if ((url === '#gchat' && changeState !== 'replaceState') || location.href.includes('feedback/goftino')) {\n console.log(state, title, url)\n console.log(`['pushState', 'replaceState'] <== disabled`)\n return false;\n }\n return target.apply(thisArg, argList)\n },\n })\n})\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"]}