@ -1,5 +1,6 @@
@@ -1,5 +1,6 @@
import Hls from "hls.js" ;
import { t } from "i18next" ;
import { useCallback } from "react" ;
import { useCallback , useMemo } from "react" ;
import { Trans } from "react-i18next" ;
import { Toggle } from "@/components/buttons/Toggle" ;
@ -13,6 +14,7 @@ import {
@@ -13,6 +14,7 @@ import {
qualityToString ,
} from "@/stores/player/utils/qualities" ;
import { useQualityStore } from "@/stores/quality" ;
import { canPlayHlsNatively } from "@/utils/detectFeatures" ;
const alwaysVisibleQualities : Record < SourceQuality , boolean > = {
unknown : false ,
@ -22,8 +24,21 @@ const alwaysVisibleQualities: Record<SourceQuality, boolean> = {
@@ -22,8 +24,21 @@ const alwaysVisibleQualities: Record<SourceQuality, boolean> = {
"1080" : true ,
} ;
function useIsIosHls() {
const sourceType = usePlayerStore ( ( s ) = > s . source ? . type ) ;
const result = useMemo ( ( ) = > {
const videoEl = document . createElement ( "video" ) ;
if ( sourceType !== "hls" ) return false ;
if ( Hls . isSupported ( ) ) return false ;
if ( ! canPlayHlsNatively ( videoEl ) ) return false ;
return true ;
} , [ sourceType ] ) ;
return result ;
}
export function QualityView ( { id } : { id : string } ) {
const router = useOverlayRouter ( id ) ;
const isIosHls = useIsIosHls ( ) ;
const availableQualities = usePlayerStore ( ( s ) = > s . qualities ) ;
const currentQuality = usePlayerStore ( ( s ) = > s . currentQuality ) ;
const switchQuality = usePlayerStore ( ( s ) = > s . switchQuality ) ;
@ -61,7 +76,7 @@ export function QualityView({ id }: { id: string }) {
@@ -61,7 +76,7 @@ export function QualityView({ id }: { id: string }) {
< Menu.BackLink onClick = { ( ) = > router . navigate ( "/" ) } >
{ t ( "player.menus.quality.title" ) }
< / Menu.BackLink >
< Menu.Section >
< Menu.Section className = "flex flex-col pb-4" >
{ visibleQualities . map ( ( v ) = > (
< SelectableLink
key = { v }
@ -81,7 +96,13 @@ export function QualityView({ id }: { id: string }) {
@@ -81,7 +96,13 @@ export function QualityView({ id }: { id: string }) {
{ t ( "player.menus.quality.automaticLabel" ) }
< / Menu.Link >
< Menu.SmallText >
< Trans i18nKey = "player.menus.quality.hint" >
< Trans
i18nKey = {
isIosHls
? "player.menus.quality.iosNoQuality"
: "player.menus.quality.hint"
}
>
< Menu.Anchor onClick = { ( ) = > router . navigate ( "/source" ) } >
text
< / Menu.Anchor >