mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-05-10 11:20:49 +00:00
Stremio - Freedom to Stream
useFullscreen is now a thin useContext consumer of FullscreenProvider, so all callers share a single fullscreen state owned by the app root. Why this fixes the desync bug: stremio-router keeps multiple route layers mounted at once, and each top-level route (Board, Discover, Library, Calendar, Addons, Settings, Search) renders its own MainNavBars -> HorizontalNavBar -> useFullscreen. The previous hook held local useState plus its own listeners, so each route had an independent boolean. Entering fullscreen, then navigating to another tab, mounted a fresh hook initialized to false; the icon flipped back to "enter fullscreen" and clicking it re-requested fullscreen on top of the existing one, leaving the UI unresponsive until a route remount happened to coincide with reality. With one provider above the router, state outlives route remounts and listeners are attached exactly once. The hook's return tuple shape ([fullscreen, requestFullscreen, exitFullscreen, toggleFullscreen]) is preserved, so all three call sites (HorizontalNavBar, NavMenuContent, Player) keep working with no API change. Also removes the legacy src/common/useFullscreen.ts and routes its imports through stremio/common/Fullscreen (and the stremio/common barrel for App.js / Player). Note: MainNavBars is still rendered per-route. Lifting it to a single app-level layout above the router is a worthwhile follow-up (eliminates 6+ duplicate mounts) but carries non-trivial CSS / useRouteFocused / stacked-route risk and is out of scope for this PR; tracking separately. Made-with: Cursor |
||
|---|---|---|
| .github | ||
| .well-known | ||
| assets | ||
| src | ||
| tests | ||
| .gitignore | ||
| .nvmrc | ||
| CODE_OF_CONDUCT.md | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| http_server.js | ||
| LICENSE.md | ||
| manifest.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| tsconfig.json | ||
| webpack.config.js | ||
Stremio - Freedom to Stream
Stremio is a modern media center that's a one-stop solution for your video entertainment. You discover, watch and organize video content from easy to install addons.
Build
Prerequisites
- Node.js 12 or higher
- pnpm 10 or higher
Install dependencies
pnpm install
Start development server
pnpm start
Production build
pnpm run build
Run with Docker
docker build -t stremio-web .
docker run -p 8080:8080 stremio-web
Screenshots
Board
Discover
Meta Details
License
Stremio is copyright 2017-2023 Smart code and available under GPLv2 license. See the LICENSE file in the project for more information.


