Browse Source

Fix bug where sometimes the wrong episode is played through episode selector

pull/497/head
mrjvs 2 years ago
parent
commit
51b7305799
  1. 11
      src/components/player/hooks/usePlayer.ts
  2. 17
      src/components/player/hooks/usePlayerMeta.ts
  3. 5
      src/stores/player/slices/source.ts

11
src/components/player/hooks/usePlayer.ts

@ -1,5 +1,9 @@
import { useInitializePlayer } from "@/components/player/hooks/useInitializePlayer"; import { useInitializePlayer } from "@/components/player/hooks/useInitializePlayer";
import { PlayerMeta, playerStatus } from "@/stores/player/slices/source"; import {
PlayerMeta,
PlayerStatus,
playerStatus,
} from "@/stores/player/slices/source";
import { usePlayerStore } from "@/stores/player/store"; import { usePlayerStore } from "@/stores/player/store";
import { SourceSliceSource } from "@/stores/player/utils/qualities"; import { SourceSliceSource } from "@/stores/player/utils/qualities";
import { ProgressMediaItem, useProgressStore } from "@/stores/progress"; import { ProgressMediaItem, useProgressStore } from "@/stores/progress";
@ -37,10 +41,11 @@ export function usePlayer() {
const progressStore = useProgressStore(); const progressStore = useProgressStore();
return { return {
meta,
reset, reset,
status, status,
setMeta(m: PlayerMeta) { setMeta(m: PlayerMeta, newStatus?: PlayerStatus) {
setMeta(m); setMeta(m, newStatus);
}, },
playMedia(source: SourceSliceSource, sourceId: string | null) { playMedia(source: SourceSliceSource, sourceId: string | null) {
setSource(source, getProgress(progressStore.items, meta)); setSource(source, getProgress(progressStore.items, meta));

17
src/components/player/hooks/usePlayerMeta.ts

@ -1,13 +1,16 @@
import { useCallback, useMemo, useState } from "react"; import { useCallback, useMemo } from "react";
import { DetailedMeta } from "@/backend/metadata/getmeta"; import { DetailedMeta } from "@/backend/metadata/getmeta";
import { MWMediaType } from "@/backend/metadata/types/mw"; import { MWMediaType } from "@/backend/metadata/types/mw";
import { usePlayer } from "@/components/player/hooks/usePlayer"; import { usePlayer } from "@/components/player/hooks/usePlayer";
import { PlayerMeta, metaToScrapeMedia } from "@/stores/player/slices/source"; import {
PlayerMeta,
metaToScrapeMedia,
playerStatus,
} from "@/stores/player/slices/source";
export function usePlayerMeta() { export function usePlayerMeta() {
const { setMeta, setScrapeStatus } = usePlayer(); const { meta, setMeta } = usePlayer();
const [meta, _setPlayerMeta] = useState<PlayerMeta | null>(null);
const scrapeMedia = useMemo( const scrapeMedia = useMemo(
() => (meta ? metaToScrapeMedia(meta) : null), () => (meta ? metaToScrapeMedia(meta) : null),
[meta] [meta]
@ -15,11 +18,9 @@ export function usePlayerMeta() {
const setDirectMeta = useCallback( const setDirectMeta = useCallback(
(m: PlayerMeta) => { (m: PlayerMeta) => {
_setPlayerMeta(m); setMeta(m, playerStatus.SCRAPING);
setScrapeStatus();
setMeta(m);
}, },
[_setPlayerMeta, setMeta, setScrapeStatus] [setMeta]
); );
const setPlayerMeta = useCallback( const setPlayerMeta = useCallback(

5
src/stores/player/slices/source.ts

@ -60,7 +60,7 @@ export interface SourceSlice {
setStatus(status: PlayerStatus): void; setStatus(status: PlayerStatus): void;
setSource(stream: SourceSliceSource, startAt: number): void; setSource(stream: SourceSliceSource, startAt: number): void;
switchQuality(quality: SourceQuality): void; switchQuality(quality: SourceQuality): void;
setMeta(meta: PlayerMeta): void; setMeta(meta: PlayerMeta, status?: PlayerStatus): void;
setCaption(caption: Caption | null): void; setCaption(caption: Caption | null): void;
setSourceId(id: string | null): void; setSourceId(id: string | null): void;
enableAutomaticQuality(): void; enableAutomaticQuality(): void;
@ -111,10 +111,11 @@ export const createSourceSlice: MakeSlice<SourceSlice> = (set, get) => ({
s.status = status; s.status = status;
}); });
}, },
setMeta(meta) { setMeta(meta, newStatus) {
set((s) => { set((s) => {
s.meta = meta; s.meta = meta;
s.interface.hideNextEpisodeBtn = false; s.interface.hideNextEpisodeBtn = false;
if (newStatus) s.status = newStatus;
}); });
}, },
setCaption(caption) { setCaption(caption) {

Loading…
Cancel
Save