Some checks are pending
Backend tests / test (push) Waiting to run
1) Auto-rotate (bug-report 55da1c3f: 'I can't turn off auto rotate. Which is a problem when I put the phone on a flat surface'). Player robil bezwarunkowy unlockAsync, wiec telefon lezacy plasko skakal miedzy orientacjami. Nowa preferencja goon.player_auto_rotate (default true = dotychczasowe zachowanie), przelacznik w Settings. Off = player zostaje w pionie, ale przycisk pelnego ekranu dalej wchodzi w poziom recznie, wiec nic nie ginie. 2) '+N nowych' na ulubionym performerze/studiu liczylo TYLKO sceny (user-request 2026-07-28). Dochodzi _new_movie_counts: filmy z zywym playbackiem, created_at > last_seen_at, po MoviePerformer / Movie.studio_id. Filmow jest o rzedy wielkosci mniej niz scen (brak tube-spamu), wiec bez okna top-N i odsiewu stub/backfill - te pojecia dotycza scen. Zweryfikowane: performer 1633 scen + 436 filmow = 2069, studio 648 + 95 = 743, /favorites 200 OK.
80 lines
2 KiB
TypeScript
80 lines
2 KiB
TypeScript
import React, { createContext, useContext, useEffect, useState } from 'react';
|
|
|
|
import {
|
|
DefaultQuality,
|
|
getAutoRotate,
|
|
getDefaultQuality,
|
|
getGridColumns,
|
|
setAutoRotate as persistAutoRotate,
|
|
setDefaultQuality as persistDefaultQuality,
|
|
setGridColumns as persistGridColumns,
|
|
} from './storage';
|
|
|
|
/**
|
|
* Globalne preferencje UI. Ładowane raz przy montażu z SecureStore (async) i dalej
|
|
* trzymane synchronicznie w state, żeby ekrany czytały wartość w renderze bez await.
|
|
*/
|
|
interface Prefs {
|
|
gridColumns: number;
|
|
setGridColumns: (n: number) => void;
|
|
defaultQuality: DefaultQuality;
|
|
setDefaultQuality: (q: DefaultQuality) => void;
|
|
autoRotate: boolean;
|
|
setAutoRotate: (on: boolean) => void;
|
|
}
|
|
|
|
const Ctx = createContext<Prefs | null>(null);
|
|
|
|
export function PreferencesProvider({ children }: { children: React.ReactNode }) {
|
|
const [gridColumns, setCols] = useState(2);
|
|
const [defaultQuality, setQuality] = useState<DefaultQuality>('auto');
|
|
const [autoRotate, setRotate] = useState(true);
|
|
|
|
useEffect(() => {
|
|
getGridColumns()
|
|
.then(setCols)
|
|
.catch(() => {});
|
|
getDefaultQuality()
|
|
.then(setQuality)
|
|
.catch(() => {});
|
|
getAutoRotate()
|
|
.then(setRotate)
|
|
.catch(() => {});
|
|
}, []);
|
|
|
|
const setGridColumns = (n: number) => {
|
|
setCols(n);
|
|
persistGridColumns(n).catch(() => {});
|
|
};
|
|
|
|
const setDefaultQuality = (q: DefaultQuality) => {
|
|
setQuality(q);
|
|
persistDefaultQuality(q).catch(() => {});
|
|
};
|
|
|
|
const setAutoRotate = (on: boolean) => {
|
|
setRotate(on);
|
|
persistAutoRotate(on).catch(() => {});
|
|
};
|
|
|
|
return (
|
|
<Ctx.Provider
|
|
value={{
|
|
gridColumns,
|
|
setGridColumns,
|
|
defaultQuality,
|
|
setDefaultQuality,
|
|
autoRotate,
|
|
setAutoRotate,
|
|
}}
|
|
>
|
|
{children}
|
|
</Ctx.Provider>
|
|
);
|
|
}
|
|
|
|
export function usePreferences(): Prefs {
|
|
const c = useContext(Ctx);
|
|
if (!c) throw new Error('usePreferences outside PreferencesProvider');
|
|
return c;
|
|
}
|