@ -1,7 +1,8 @@
@@ -1,7 +1,8 @@
import { useMemo } from "react" ;
import { useTranslation } from "react-i18next" ;
import { useEffect , use Memo , useState } from "react" ;
import { Trans , useTranslation } from "react-i18next" ;
import { useLocation } from "react-router-dom" ;
import { sendPage } from "@/backend/extension/messaging" ;
import { Button } from "@/components/buttons/Button" ;
import { Icons } from "@/components/Icon" ;
import { IconPill } from "@/components/layout/IconPill" ;
@ -10,6 +11,8 @@ import { Paragraph } from "@/components/text/Paragraph";
@@ -10,6 +11,8 @@ import { Paragraph } from "@/components/text/Paragraph";
import { Title } from "@/components/text/Title" ;
import { ScrapingItems , ScrapingSegment } from "@/hooks/useProviderScrape" ;
import { ErrorContainer , ErrorLayout } from "@/pages/layouts/ErrorLayout" ;
import { getExtensionState } from "@/utils/extension" ;
import type { ExtensionStatus } from "@/utils/extension" ;
import { getProviderApiUrls } from "@/utils/proxyUrls" ;
import { ErrorCardInModal } from "../errors/ErrorCard" ;
@ -25,6 +28,8 @@ export function ScrapeErrorPart(props: ScrapeErrorPartProps) {
@@ -25,6 +28,8 @@ export function ScrapeErrorPart(props: ScrapeErrorPartProps) {
const { t } = useTranslation ( ) ;
const modal = useModal ( "error" ) ;
const location = useLocation ( ) ;
const [ extensionState , setExtensionState ] =
useState < ExtensionStatus > ( "unknown" ) ;
const error = useMemo ( ( ) = > {
const data = props . data ;
@ -42,6 +47,58 @@ export function ScrapeErrorPart(props: ScrapeErrorPartProps) {
@@ -42,6 +47,58 @@ export function ScrapeErrorPart(props: ScrapeErrorPartProps) {
return str ;
} , [ props , location ] ) ;
useEffect ( ( ) = > {
getExtensionState ( ) . then ( ( state : ExtensionStatus ) = > {
setExtensionState ( state ) ;
} ) ;
} , [ t ] ) ;
if ( extensionState === "disallowed" ) {
return (
< ErrorLayout >
< ErrorContainer >
< IconPill icon = { Icons . LOCK } >
{ t ( "player.scraping.extensionFailure.badge" ) }
< / IconPill >
< Title > { t ( "player.scraping.extensionFailure.title" ) } < / Title >
< Paragraph >
< Trans
i18nKey = "player.scraping.extensionFailure.text"
components = { {
bold : (
< span className = "font-bold" style = { { color : "#cfcfcf" } } / >
) ,
} }
/ >
< / Paragraph >
< div className = "flex gap-3" >
< Button
href = "/"
theme = "secondary"
padding = "md:px-12 p-2.5"
className = "mt-6"
>
{ t ( "player.scraping.extensionFailure.homeButton" ) }
< / Button >
< Button
onClick = { ( ) = > {
sendPage ( {
page : "PermissionGrant" ,
redirectUrl : window.location.href ,
} ) ;
} }
theme = "purple"
padding = "md:px-12 p-2.5"
className = "mt-6"
>
{ t ( "player.scraping.extensionFailure.enableExtension" ) }
< / Button >
< / div >
< / ErrorContainer >
< / ErrorLayout >
) ;
}
return (
< ErrorLayout >
< ErrorContainer >