Introduces a reusable useIntersectionObserver hook and a LazyMediaCarousel component to defer rendering of carousels until they are near the viewport. Updates discoverContent and AllMovieLists to use LazyMediaCarousel, improving performance by only loading carousels as needed. Priority carousels (e.g., top of page) are loaded immediately.
Moved intersection observer logic for lazy loading images from MediaCarousel into MediaCard, allowing each card to handle its own image loading. Simplified MediaCarousel by removing its intersection observer and related loading state, improving component separation and maintainability.
Split the monolithic externalSubtitles.ts into separate modules for each provider (febbox, opensubtitles, vdrk, wyzie) and a new index.ts for orchestration and exports. This improves maintainability and clarity by isolating provider-specific logic.
Introduces tracking of failed embeds per source in the player store, adds logic to mark embeds as failed on playback errors, and filters out failed embeds when selecting sources. Also ensures failed sources and embeds are cleared when a working source is found. This improves error handling and fallback behavior for sources with multiple embeds.
Introduces a mechanism to track failed sources in the player store. When a playback error occurs, the current source is marked as failed and subsequent attempts will skip these sources. Failed sources are cleared when a working source is found. UI text is updated to reflect the new behavior.
Introduces a new user preference to automatically resume playback from the next available source when a playback error occurs. Updates settings UI, preferences store, and player error handling to support this feature, including new translations and backend support. Manual resume remains available if the feature is disabled.
Xprime's own site has ads, but people have found pstream (which doesnt have ads) and moves here since there are no ads. Xprime is losing money and is finding it difficult to support the proxies and servers.
clean up ad for xprime when switching sources or destroying player
new method for tracking if ad is shown
Revert "Track XPrime ad script load state in player"
This reverts commit c50bdd9ad8.
Track XPrime ad script load state in player
Adds xprimeAdScriptLoaded state and setter to the player store. Updates XPrimeAdOverlay to only show when the ad script is loaded, and base display logic to set the load state based on script events. This ensures the overlay only appears when the ad script is ready.
remove infinite loop
When conditions are met → show becomes true → timer starts
Timer fires after 5s → show becomes false
Effect re-runs (because show changed) → show becomes true again → new timer starts
Loop repeats infinitely
Refactor XPrime ad injection so it loads when the source changes
Added error handling for device name decryption in Avatar, LinksDropdown, Settings, and DeviceListPart components. If decryption fails, a fallback 'Unknown device' message is shown using a new translation key. This improves user experience by preventing crashes or blank fields when device name decryption fails.
Introduces a nickname field to user accounts, updates the backend user interface, and extends the settings UI to allow users to view and edit their nickname. Localization strings and state management have been updated accordingly to support this new field.
* Use 12 hour clock + box around time
* Fix ref
* Handle backtick earlier + Ignore commands when cmd/atl is pressed + prevent -0.0 as subtitle delay
* Exclude thumbnail from fade effect
* Bring back comments
Refactors thumbnail queue to generate 127 evenly distributed thumbnails instead of using a layered approach. Adds a new selectLowestQuality function to consistently select the lowest available video quality for thumbnail extraction, replacing the previous selectQuality usage.
Adds logic to attempt autoplay when entering Picture-in-Picture or fullscreen modes, particularly to address autoplay restrictions on iOS. Introduces a flag to track if autoplay should be retried after loading, and ensures the UI updates appropriately if autoplay remains blocked.
Updated TopControls and BottomControls to render the background gradient transitions only if backgroundBlurEnabled is true in the subtitle store. This ensures the UI matches the subtitle styling preferences.
Introduces custom scrollbar styling for a thinner, rounded appearance with smooth color transitions and improved aesthetics. Applies consistent scrollbar styles across browsers and enhances user experience.
Introduces a category selection mechanism for the settings page, allowing users to filter settings by category or view all settings. Updates the sidebar to include an 'All Settings' option and highlights the selected category. Adjusts the settings layout and section rendering logic to respect the selected category or search query.
Changing sources causes a non fatal error, but we were clearing the last successful source when any error happened. Instead we can clear if it's fatal.