// @flow import { SHOW_ADS } from 'config'; import * as PAGES from 'constants/pages'; import React, { useEffect } from 'react'; import I18nMessage from 'component/i18nMessage'; import Button from 'component/button'; import PremiumPlusTile from 'component/premiumPlusTile'; import classnames from 'classnames'; import { platform } from 'util/platform'; import Icon from 'component/common/icon'; import * as ICONS from 'constants/icons'; import { LocalStorage, LS } from 'util/storage'; const USE_ADNIMATION = true; // prettier-ignore const AD_CONFIGS = Object.freeze({ DEFAULT: { url: 'https://cdn.vidcrunch.com/integrations/618bb4d28aac298191eec411/Lbry_Odysee.com_Responsive_Floating_DFP_Rev70_1011.js', tag: 'vidcrunchJS537102317', }, MOBILE: { url: 'https://cdn.vidcrunch.com/integrations/618bb4d28aac298191eec411/Lbry_Odysee.com_Mobile_Floating_DFP_Rev70_1611.js', tag: 'vidcrunchJS199212779', }, EU: { url: 'https://tg1.vidcrunch.com/api/adserver/spt?AV_TAGID=61dff05c599f1e20b01085d4&AV_PUBLISHERID=6182c8993c8ae776bd5635e9', tag: 'AV61dff05c599f1e20b01085d4', }, ADNIMATION: { url: 'https://tg1.aniview.com/api/adserver/spt?AV_TAGID=6252bb6f28951333ec10a7a6&AV_PUBLISHERID=601d9a7f2e688a79e17c1265', tag: 'AV6252bb6f28951333ec10a7a6', }, }); // **************************************************************************** // Helpers // **************************************************************************** function removeIfExists(querySelector) { const element = document.querySelector(querySelector); if (element) element.remove(); } function resolveVidcrunchConfig() { const mobileAds = platform.isAndroid() || platform.isIOS(); const isInEu = LocalStorage.getItem(LS.GDPR_REQUIRED) === 'true'; return isInEu ? AD_CONFIGS.EU : mobileAds ? AD_CONFIGS.MOBILE : AD_CONFIGS.DEFAULT; } // **************************************************************************** // Ads // **************************************************************************** let ad_blocker_detected; type Props = { type: string, tileLayout?: boolean, small?: boolean, className?: string, noFallback?: boolean, // --- redux --- claim: Claim, isMature: boolean, userHasPremiumPlus: boolean, userCountry: string, doSetAdBlockerFound: (boolean) => void, }; function Ads(props: Props) { const { type = 'video', tileLayout, small, userHasPremiumPlus, userCountry, className, noFallback, doSetAdBlockerFound, } = props; const [shouldShowAds, setShouldShowAds] = React.useState(resolveAdVisibility()); const adConfig = USE_ADNIMATION ? AD_CONFIGS.ADNIMATION : resolveVidcrunchConfig(); function resolveAdVisibility() { // 'ad_blocker_detected' will be undefined at startup. Wait until we are // sure it is not blocked (i.e. === false) before showing the component. return ad_blocker_detected === false && SHOW_ADS && !userHasPremiumPlus && userCountry === 'US'; } useEffect(() => { if (ad_blocker_detected === undefined) { let mounted = true; const GOOGLE_AD_URL = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js'; fetch(GOOGLE_AD_URL) .then((response) => { const detected = response.redirected === true; window.odysee_ad_blocker_detected = detected; ad_blocker_detected = detected; doSetAdBlockerFound(detected); }) .catch(() => { ad_blocker_detected = true; doSetAdBlockerFound(true); }) .finally(() => { if (mounted) { setShouldShowAds(resolveAdVisibility()); } }); return () => { mounted = false; }; } }, []); // add script to DOM useEffect(() => { if (shouldShowAds) { let script; try { script = document.createElement('script'); script.src = adConfig.url; // $FlowFixMe document.head.appendChild(script); return () => { // $FlowFixMe document.head.removeChild(script); // clear aniview state to allow ad reload delete window.aniplayerPos; delete window.storageAni; delete window.__VIDCRUNCH_CONFIG_618bb4d28aac298191eec411__; delete window.__player_618bb4d28aac298191eec411__; // clean DOM elements from ad related elements removeIfExists('[src^="https://player.avplayer.com"]'); removeIfExists('[src^="https://gum.criteo.com"]'); removeIfExists('[id^="AVLoaderaniview_slot"]'); }; } catch (e) {} } }, [shouldShowAds]); const adsSignInDriver = ( ), }} > %sign_up_for_premium% for an ad free experience. ); if (type === 'video') { if (shouldShowAds) { return (
{__('Ad')}
{__('Hate these?')} {/* __('No ads, a custom badge and access to exclusive features, try Odysee Premium!') */}
{adsSignInDriver}
); } else if (!noFallback) { return ; } } return null; } export default Ads;