mirror of
https://github.com/movie-web/native-app.git
synced 2025-09-13 18:13:25 +00:00
feat: audio track stuff
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
|||||||
import { fetchMediaDetails, fetchSeasonDetails } from "@movie-web/tmdb";
|
import { fetchMediaDetails, fetchSeasonDetails } from "@movie-web/tmdb";
|
||||||
|
|
||||||
import type { ItemData } from "../item/item";
|
import type { ItemData } from "../item/item";
|
||||||
|
import type { AudioTrack } from "~/stores/player/slices/interface";
|
||||||
import { PlayerStatus } from "~/stores/player/slices/interface";
|
import { PlayerStatus } from "~/stores/player/slices/interface";
|
||||||
import { usePlayerStore } from "~/stores/player/store";
|
import { usePlayerStore } from "~/stores/player/store";
|
||||||
import { Text } from "../ui/Text";
|
import { Text } from "../ui/Text";
|
||||||
@@ -26,6 +27,7 @@ export const ScraperProcess = ({ data }: ScraperProcessProps) => {
|
|||||||
const setStream = usePlayerStore((state) => state.setCurrentStream);
|
const setStream = usePlayerStore((state) => state.setCurrentStream);
|
||||||
const setSeasonData = usePlayerStore((state) => state.setSeasonData);
|
const setSeasonData = usePlayerStore((state) => state.setSeasonData);
|
||||||
const setHlsTracks = usePlayerStore((state) => state.setHlsTracks);
|
const setHlsTracks = usePlayerStore((state) => state.setHlsTracks);
|
||||||
|
const setAudioTracks = usePlayerStore((state) => state.setAudioTracks);
|
||||||
const setPlayerStatus = usePlayerStore((state) => state.setPlayerStatus);
|
const setPlayerStatus = usePlayerStore((state) => state.setPlayerStatus);
|
||||||
const setSourceId = usePlayerStore((state) => state.setSourceId);
|
const setSourceId = usePlayerStore((state) => state.setSourceId);
|
||||||
const setMeta = usePlayerStore((state) => state.setMeta);
|
const setMeta = usePlayerStore((state) => state.setMeta);
|
||||||
@@ -99,6 +101,16 @@ export const ScraperProcess = ({ data }: ScraperProcessProps) => {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
if (tracks) setHlsTracks(tracks);
|
if (tracks) setHlsTracks(tracks);
|
||||||
|
|
||||||
|
if (tracks?.audio.length) {
|
||||||
|
const audioTracks: AudioTrack[] = tracks.audio.map((track) => ({
|
||||||
|
uri: track.uri,
|
||||||
|
name: (track.properties[0]?.attributes.name as string) ?? "Unknown",
|
||||||
|
language:
|
||||||
|
(track.properties[0]?.attributes.language as string) ?? "Unknown",
|
||||||
|
}));
|
||||||
|
setAudioTracks(audioTracks);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setPlayerStatus(PlayerStatus.READY);
|
setPlayerStatus(PlayerStatus.READY);
|
||||||
setSourceId(streamResult.sourceId);
|
setSourceId(streamResult.sourceId);
|
||||||
@@ -115,6 +127,7 @@ export const ScraperProcess = ({ data }: ScraperProcessProps) => {
|
|||||||
setMeta,
|
setMeta,
|
||||||
meta?.season?.number,
|
meta?.season?.number,
|
||||||
meta?.episode?.number,
|
meta?.episode?.number,
|
||||||
|
setAudioTracks,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@@ -9,6 +9,12 @@ export enum PlayerStatus {
|
|||||||
READY,
|
READY,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AudioTrack {
|
||||||
|
uri: string;
|
||||||
|
name: string;
|
||||||
|
language: string;
|
||||||
|
}
|
||||||
|
|
||||||
export interface InterfaceSlice {
|
export interface InterfaceSlice {
|
||||||
interface: {
|
interface: {
|
||||||
isIdle: boolean;
|
isIdle: boolean;
|
||||||
@@ -20,6 +26,7 @@ export interface InterfaceSlice {
|
|||||||
seasonData: SeasonDetails | null;
|
seasonData: SeasonDetails | null;
|
||||||
selectedCaption: Stream["captions"][0] | null;
|
selectedCaption: Stream["captions"][0] | null;
|
||||||
hlsTracks: HLSTracks | null;
|
hlsTracks: HLSTracks | null;
|
||||||
|
audioTracks: AudioTrack[] | null;
|
||||||
playerStatus: PlayerStatus;
|
playerStatus: PlayerStatus;
|
||||||
};
|
};
|
||||||
setIsIdle(state: boolean): void;
|
setIsIdle(state: boolean): void;
|
||||||
@@ -29,6 +36,7 @@ export interface InterfaceSlice {
|
|||||||
setData(data: ItemData): void;
|
setData(data: ItemData): void;
|
||||||
setSeasonData(data: SeasonDetails): void;
|
setSeasonData(data: SeasonDetails): void;
|
||||||
setHlsTracks(tracks: HLSTracks): void;
|
setHlsTracks(tracks: HLSTracks): void;
|
||||||
|
setAudioTracks(tracks: AudioTrack[]): void;
|
||||||
setPlayerStatus(status: PlayerStatus): void;
|
setPlayerStatus(status: PlayerStatus): void;
|
||||||
reset: () => void;
|
reset: () => void;
|
||||||
}
|
}
|
||||||
@@ -44,6 +52,7 @@ export const createInterfaceSlice: MakeSlice<InterfaceSlice> = (set, get) => ({
|
|||||||
seasonData: null,
|
seasonData: null,
|
||||||
selectedCaption: null,
|
selectedCaption: null,
|
||||||
hlsTracks: null,
|
hlsTracks: null,
|
||||||
|
audioTracks: null,
|
||||||
playerStatus: PlayerStatus.SCRAPING,
|
playerStatus: PlayerStatus.SCRAPING,
|
||||||
},
|
},
|
||||||
setIsIdle: (state) => {
|
setIsIdle: (state) => {
|
||||||
@@ -91,6 +100,11 @@ export const createInterfaceSlice: MakeSlice<InterfaceSlice> = (set, get) => ({
|
|||||||
s.interface.hlsTracks = tracks;
|
s.interface.hlsTracks = tracks;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
setAudioTracks: (tracks) => {
|
||||||
|
set((s) => {
|
||||||
|
s.interface.audioTracks = tracks;
|
||||||
|
});
|
||||||
|
},
|
||||||
setPlayerStatus: (status) => {
|
setPlayerStatus: (status) => {
|
||||||
set((s) => {
|
set((s) => {
|
||||||
s.interface.playerStatus = status;
|
s.interface.playerStatus = status;
|
||||||
@@ -108,6 +122,7 @@ export const createInterfaceSlice: MakeSlice<InterfaceSlice> = (set, get) => ({
|
|||||||
seasonData: null,
|
seasonData: null,
|
||||||
selectedCaption: null,
|
selectedCaption: null,
|
||||||
hlsTracks: null,
|
hlsTracks: null,
|
||||||
|
audioTracks: null,
|
||||||
playerStatus: PlayerStatus.SCRAPING,
|
playerStatus: PlayerStatus.SCRAPING,
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
Reference in New Issue
Block a user