From 944069e41199d877d47cfe95122bc09f9dab7492 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Wed, 11 Dec 2024 11:38:36 +0200 Subject: [PATCH 001/553] refactor(StreamsList): addons install button --- .../MetaDetails/StreamsList/StreamsList.js | 19 ++++++++++++++----- .../MetaDetails/StreamsList/styles.less | 11 +++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/routes/MetaDetails/StreamsList/StreamsList.js b/src/routes/MetaDetails/StreamsList/StreamsList.js index 840664c8b..aa204000a 100644 --- a/src/routes/MetaDetails/StreamsList/StreamsList.js +++ b/src/routes/MetaDetails/StreamsList/StreamsList.js @@ -23,7 +23,7 @@ const StreamsList = ({ className, video, ...props }) => { if (video.deepLinks && typeof video.deepLinks.metaDetailsVideos === 'string') { window.location.replace(video.deepLinks.metaDetailsVideos + ( typeof video.season === 'number' ? - `?${new URLSearchParams({'season': video.season})}` + `?${new URLSearchParams({ 'season': video.season })}` : null )); @@ -157,13 +157,22 @@ const StreamsList = ({ className, video, ...props }) => { onClick={stream.onClick} /> ))} + } - + { + Object.keys(streamsByAddon).length < 2 && props.streams.every((streams) => streams.content.type === 'Ready') ? + + : + null + } ); }; diff --git a/src/routes/MetaDetails/StreamsList/styles.less b/src/routes/MetaDetails/StreamsList/styles.less index c22b14071..9859ea2d0 100644 --- a/src/routes/MetaDetails/StreamsList/styles.less +++ b/src/routes/MetaDetails/StreamsList/styles.less @@ -151,6 +151,17 @@ background-color: var(--secondary-accent-color); border-radius: 3rem; + &.streams { + padding: 1rem; + margin: 1rem auto; + max-width: 50%; + border-radius: 2rem; + + .label { + font-size: 1rem; + } + } + &:hover { outline: var(--focus-outline-size) solid var(--secondary-accent-color); background-color: transparent; From 203c04b8c872c26f0d9a27762a43b07119a5cc70 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Wed, 11 Dec 2024 11:48:17 +0200 Subject: [PATCH 002/553] refactor: logic for showing the button --- src/routes/MetaDetails/StreamsList/StreamsList.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/routes/MetaDetails/StreamsList/StreamsList.js b/src/routes/MetaDetails/StreamsList/StreamsList.js index aa204000a..05d3c94fc 100644 --- a/src/routes/MetaDetails/StreamsList/StreamsList.js +++ b/src/routes/MetaDetails/StreamsList/StreamsList.js @@ -157,15 +157,20 @@ const StreamsList = ({ className, video, ...props }) => { onClick={stream.onClick} /> ))} - + { + Object.keys(streamsByAddon).length > 1 ? + + : + null + } } { - Object.keys(streamsByAddon).length < 2 && props.streams.every((streams) => streams.content.type === 'Ready') ? + Object.keys(streamsByAddon).length < 2 && countLoadingAddons === 0 ? - - - - - ); -}; - -StreamingServerWarning.propTypes = { - className: PropTypes.string -}; - -module.exports = withCoreSuspender(StreamingServerWarning); diff --git a/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx new file mode 100644 index 000000000..5b2218bf0 --- /dev/null +++ b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx @@ -0,0 +1,93 @@ +import React, { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import classnames from 'classnames'; +import { useServices } from 'stremio/services'; +import { Button } from 'stremio/components'; +import useProfile from 'stremio/common/useProfile'; +import { withCoreSuspender } from 'stremio/common/CoreSuspender'; +import styles from './styles.less'; + +type Props = { + className?: string; +}; + +const StreamingServerWarning = ({ className }: Props) => { + const { t } = useTranslation(); + const { core } = useServices(); + const profile = useProfile(); + + const createDate = (months: number, years: number): Date => { + const date = new Date(); + if (months) date.setMonth(date.getMonth() + months); + if (years) date.setFullYear(date.getFullYear() + years); + return date; + }; + + const updateSettings = useCallback((warningDismissed: Date) => { + core.transport.dispatch({ + action: 'Ctx', + args: { + action: 'UpdateSettings', + args: { + ...profile.settings, + warningDismissed + } + } + }); + }, [profile.settings]); + + const onLater = useCallback(() => { + updateSettings(createDate(1, 0)); + }, [updateSettings]); + + const onDismiss = useCallback(() => { + updateSettings(createDate(0, 50)); + }, [updateSettings]); + + return ( +
+
+ {t('SETTINGS_SERVER_UNAVAILABLE')} +
+
+ + + + + +
+
+ ); +}; + +export default withCoreSuspender(StreamingServerWarning); diff --git a/src/routes/Board/StreamingServerWarning/index.js b/src/routes/Board/StreamingServerWarning/index.js deleted file mode 100644 index 6e3f26596..000000000 --- a/src/routes/Board/StreamingServerWarning/index.js +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (C) 2017-2023 Smart code 203358507 - -const StreamingServerWarning = require('./StreamingServerWarning'); - -module.exports = StreamingServerWarning; diff --git a/src/routes/Board/StreamingServerWarning/index.ts b/src/routes/Board/StreamingServerWarning/index.ts new file mode 100644 index 000000000..f623704a5 --- /dev/null +++ b/src/routes/Board/StreamingServerWarning/index.ts @@ -0,0 +1,5 @@ +// Copyright (C) 2017-2024 Smart code 203358507 + +import StreamingServerWarning from './StreamingServerWarning'; + +export default StreamingServerWarning; diff --git a/src/routes/Board/StreamingServerWarning/styles.less b/src/routes/Board/StreamingServerWarning/styles.less index 42ab6bb4b..434c19e9c 100644 --- a/src/routes/Board/StreamingServerWarning/styles.less +++ b/src/routes/Board/StreamingServerWarning/styles.less @@ -1,6 +1,7 @@ // Copyright (C) 2017-2023 Smart code 203358507 @import (reference) '~@stremio/stremio-colors/less/stremio-colors.less'; +@import (reference) '~stremio/common/screen-sizes.less'; .warning-container { display: flex; @@ -8,53 +9,52 @@ align-items: center; padding: 1rem; background-color: @color-accent5-dark3; + border-radius: 0.5rem 0.5rem 0 0; + margin: 0 0.5rem; + box-shadow: 0px 0.25rem 1rem rgba(0, 0, 0, 0.48), 0px 0.5rem 3rem rgba(0, 0, 0, 0.64); .warning-statement { flex: 1; - margin-right: 1rem; font-size: 1.2rem; max-height: 2.4em; color: @color-surface-light5-90; } - .warning-button { - flex: none; - margin-left: 1rem; - color: @color-surface-light5-90; + .actions { + display: flex; + gap: 1rem; - &:first-child { - margin-left: 0; - } - - &:hover { - .warning-label { - text-decoration: underline; + .action { + flex: none; + color: @color-surface-light5-90; + + &:first-child { + margin-left: 0; + } + + .label { + font-size: 1.2rem; + max-height: 1.2em; + color: @color-surface-light5-90; + } + + &:hover { + .label { + text-decoration: underline; + } } } - - .warning-label { - font-size: 1.2rem; - max-height: 1.2em; - color: @color-surface-light5-90; - } - } - - .warning-button:hover { - text-decoration: underline; } } -@media only screen and (max-width: 500px) { +@media only screen and (max-width: @minimum) { .warning-container { - display: block; - height: auto !important; + flex-direction: column; text-align: center; - .warning-statement { - margin-bottom: 0.5rem; - margin-right: 0; - } - .warning-button { - display: inline-block; + padding: 1rem 0.5rem; + + .actions { + justify-content: space-around; } } } diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less index 403e75869..00542559d 100644 --- a/src/routes/Board/styles.less +++ b/src/routes/Board/styles.less @@ -220,7 +220,7 @@ left: 0; right: 0; bottom: calc(var(--vertical-nav-bar-size) + var(--calculated-bottom-safe-inset, 0rem)); - height: 4rem; + height: 6rem; margin-bottom: 0rem; } } From f6080d9a9586a16d8b7de95d783c3ec66a77f88b Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Tue, 7 Jan 2025 16:57:19 +0200 Subject: [PATCH 010/553] refactor(StreamingServerWarning): add logs useMemo --- src/routes/Board/Board.js | 14 +++++++++++--- .../StreamingServerWarning.tsx | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/routes/Board/Board.js b/src/routes/Board/Board.js index d405ece67..2ba05ec4e 100644 --- a/src/routes/Board/Board.js +++ b/src/routes/Board/Board.js @@ -4,7 +4,7 @@ const React = require('react'); const classnames = require('classnames'); const debounce = require('lodash.debounce'); const { useTranslation } = require('react-i18next'); -const { useStreamingServer, useNotifications, withCoreSuspender, getVisibleChildrenRange } = require('stremio/common'); +const { useStreamingServer, useNotifications, withCoreSuspender, getVisibleChildrenRange, useProfile } = require('stremio/common'); const { ContinueWatchingItem, EventModal, MainNavBars, MetaItem, MetaRow, Transition } = require('stremio/components'); const useBoard = require('./useBoard'); const useContinueWatchingPreview = require('./useContinueWatchingPreview'); @@ -19,9 +19,15 @@ const Board = () => { const continueWatchingPreview = useContinueWatchingPreview(); const [board, loadBoardRows] = useBoard(); const notifications = useNotifications(); + const profile = useProfile(); const boardCatalogsOffset = continueWatchingPreview.items.length > 0 ? 1 : 0; const scrollContainerRef = React.useRef(); - const streamingServerWarningOpen = React.useMemo(() => streamingServer.settings !== null && streamingServer.settings.type === 'Err', [streamingServer.settings]); + const streamingServerWarningDismissed = React.useMemo(() => { + return streamingServer.settings !== null && + streamingServer.settings.type === 'Err' && + !isNaN(profile.settings.streamingServerWarningDismissed.getTime()) && + profile.settings.streamingServerWarningDismissed.getTime() > Date.now(); + }, [profile.settings, streamingServer.settings]); const onVisibleRangeChange = React.useCallback(() => { const range = getVisibleChildrenRange(scrollContainerRef.current); if (range === null) { @@ -40,6 +46,8 @@ const Board = () => { React.useLayoutEffect(() => { onVisibleRangeChange(); }, [board.catalogs, onVisibleRangeChange]); + console.log(streamingServerWarningDismissed); // eslint-disable-line no-console + console.log(profile.settings.streamingServerWarningDismissed); // eslint-disable-line no-console return (
@@ -95,7 +103,7 @@ const Board = () => { })}
- + diff --git a/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx index 5b2218bf0..b67c3dcf7 100644 --- a/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx +++ b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx @@ -24,6 +24,7 @@ const StreamingServerWarning = ({ className }: Props) => { }; const updateSettings = useCallback((warningDismissed: Date) => { + console.log('updateSettings', warningDismissed); // eslint-disable-line no-console core.transport.dispatch({ action: 'Ctx', args: { From 383795e5382d09f62a59817522e4d830fd39bd12 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Tue, 7 Jan 2025 17:02:44 +0200 Subject: [PATCH 011/553] refactor(Cell): make the padding smaller on mobile --- src/routes/Calendar/Table/Cell/Cell.less | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/routes/Calendar/Table/Cell/Cell.less b/src/routes/Calendar/Table/Cell/Cell.less index ea2e42391..9e6be5b62 100644 --- a/src/routes/Calendar/Table/Cell/Cell.less +++ b/src/routes/Calendar/Table/Cell/Cell.less @@ -168,6 +168,8 @@ @media only screen and (max-height: @xsmall) and (max-width: @xsmall) { .cell { .items { + padding: 0.25rem; + .item { pointer-events: none; } From 2f9bf38fd67ff59ccd0751ced0a8bfd37923be65 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Tue, 7 Jan 2025 17:26:45 +0200 Subject: [PATCH 012/553] refactor(Calenadar): add safe inset areas --- src/routes/Calendar/Calendar.less | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/Calendar/Calendar.less b/src/routes/Calendar/Calendar.less index 7f7925bf5..b606fa2aa 100644 --- a/src/routes/Calendar/Calendar.less +++ b/src/routes/Calendar/Calendar.less @@ -14,7 +14,7 @@ gap: 0.5rem; width: 100%; height: 100%; - padding: 0 0 2rem 2rem; + padding: 0 0 calc(1.5rem + var(--safe-area-inset-bottom)) 2rem; .main { flex: auto; @@ -37,7 +37,7 @@ @media only screen and (max-width: @small) and (orientation: landscape) { .calendar { .content { - padding: 0 0 0 1rem; + padding: 0 0 calc(1.5rem + var(--safe-area-inset-bottom)) 1rem; } } } From 0bdf28724fb4e7cf9cdda21c71ce43560b412742 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Tue, 7 Jan 2025 17:35:52 +0200 Subject: [PATCH 013/553] refactor(Cell): make posters bigger on mobile --- src/routes/Calendar/Table/Cell/Cell.less | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/routes/Calendar/Table/Cell/Cell.less b/src/routes/Calendar/Table/Cell/Cell.less index 9e6be5b62..9e6228490 100644 --- a/src/routes/Calendar/Table/Cell/Cell.less +++ b/src/routes/Calendar/Table/Cell/Cell.less @@ -55,7 +55,7 @@ display: flex; flex-direction: row; gap: 1rem; - padding: 0 1rem 1rem 1rem; + padding: 0 0.5rem 0.5rem 0.5rem; .item { flex: none; @@ -134,7 +134,7 @@ } } -@media only screen and (max-height: @xxsmall) and (orientation: portrait) { +@media only screen and (max-height: @minimum) and (orientation: portrait) { .cell { .heading { justify-content: center; @@ -167,11 +167,22 @@ @media only screen and (max-height: @xsmall) and (max-width: @xsmall) { .cell { + gap: 0; + + .heading { + height: 2rem; + + .day { + font-size: 0.875rem; + } + } + .items { padding: 0.25rem; .item { pointer-events: none; + border-radius: calc(var(--border-radius) / 2); } } } From 3df8eb65d020940623b00cbfa94134dd9adb21e3 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 8 Jan 2025 20:41:55 +0100 Subject: [PATCH 014/553] feat: allow to drop local subtitles --- src/common/CONSTANTS.js | 6 ++++ src/common/index.js | 2 ++ src/common/onFileDrop.ts | 31 +++++++++++++++++++ src/routes/Player/Player.js | 12 +++++-- .../Player/SubtitlesMenu/SubtitlesMenu.js | 12 +++++-- src/routes/Player/useVideo.js | 12 +++++++ src/services/DragAndDrop/DragAndDrop.js | 4 +++ 7 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 src/common/onFileDrop.ts diff --git a/src/common/CONSTANTS.js b/src/common/CONSTANTS.js index 727c152fa..ea88b0114 100644 --- a/src/common/CONSTANTS.js +++ b/src/common/CONSTANTS.js @@ -41,6 +41,11 @@ const ICON_FOR_TYPE = new Map([ ['other', 'movies'], ]); +const SUPPORTED_LOCAL_SUBTITLES = [ + 'application/x-subrip', + 'text/vtt', +]; + const EXTERNAL_PLAYERS = [ { label: 'EXTERNAL_PLAYER_DISABLED', @@ -113,6 +118,7 @@ module.exports = { WRITERS_LINK_CATEGORY, TYPE_PRIORITIES, ICON_FOR_TYPE, + SUPPORTED_LOCAL_SUBTITLES, EXTERNAL_PLAYERS, WHITELISTED_HOSTS, }; diff --git a/src/common/index.js b/src/common/index.js index 4c514dfbe..2dba2ad54 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -13,6 +13,7 @@ const languages = require('./languages'); const routesRegexp = require('./routesRegexp'); const useAnimationFrame = require('./useAnimationFrame'); const useBinaryState = require('./useBinaryState'); +const { default: onFileDrop } = require('./onFileDrop'); const useFullscreen = require('./useFullscreen'); const useLiveRef = require('./useLiveRef'); const useModelState = require('./useModelState'); @@ -41,6 +42,7 @@ module.exports = { routesRegexp, useAnimationFrame, useBinaryState, + onFileDrop, useFullscreen, useLiveRef, useModelState, diff --git a/src/common/onFileDrop.ts b/src/common/onFileDrop.ts new file mode 100644 index 000000000..0060a975a --- /dev/null +++ b/src/common/onFileDrop.ts @@ -0,0 +1,31 @@ +import { useEffect } from 'react'; + +const onFileDrop = (types: string[], callback: (file: File) => void) => { + const onDragOver = (event: DragEvent) => { + event.preventDefault(); + }; + + const onDrop = (event: DragEvent) => { + event.preventDefault(); + + if (event.dataTransfer && event.dataTransfer.files.length > 0) { + const file = event.dataTransfer.files[0]; + + if (types.includes(file.type)) { + callback(file); + } + } + }; + + useEffect(() => { + window.addEventListener('dragover', onDragOver); + window.addEventListener('drop', onDrop); + + return () => { + window.removeEventListener('dragover', onDragOver); + window.removeEventListener('drop', onDrop); + }; + }, []); +}; + +export default onFileDrop; diff --git a/src/routes/Player/Player.js b/src/routes/Player/Player.js index c76a8dcae..86867d3c0 100644 --- a/src/routes/Player/Player.js +++ b/src/routes/Player/Player.js @@ -8,7 +8,7 @@ const langs = require('langs'); const { useTranslation } = require('react-i18next'); const { useRouteFocused } = require('stremio-router'); const { useServices } = require('stremio/services'); -const { useFullscreen, useBinaryState, useToast, useStreamingServer, withCoreSuspender } = require('stremio/common'); +const { onFileDrop, useFullscreen, useBinaryState, useToast, useStreamingServer, withCoreSuspender, CONSTANTS } = require('stremio/common'); const { HorizontalNavBar, Transition } = require('stremio/components'); const BufferingLoader = require('./BufferingLoader'); const VolumeChangeIndicator = require('./VolumeChangeIndicator'); @@ -133,7 +133,10 @@ const Player = ({ urlParams, queryParams }) => { toast.show({ type: 'success', title: t('PLAYER_SUBTITLES_LOADED'), - message: track.exclusive ? t('PLAYER_SUBTITLES_LOADED_EXCLUSIVE') : t('PLAYER_SUBTITLES_LOADED_ORIGIN', { origin: track.origin }), + message: + track.exclusive ? t('PLAYER_SUBTITLES_LOADED_EXCLUSIVE') : + track.local ? t('PLAYER_SUBTITLES_LOADED_LOCAL') : + t('PLAYER_SUBTITLES_LOADED_ORIGIN', { origin: track.origin }), timeout: 3000 }); }, []); @@ -270,6 +273,11 @@ const Player = ({ urlParams, queryParams }) => { event.nativeEvent.immersePrevented = true; }, []); + onFileDrop(CONSTANTS.SUPPORTED_LOCAL_SUBTITLES, async (file) => { + const buffer = await file.arrayBuffer(); + video.addLocalSubtitles(file.name, buffer); + }); + React.useEffect(() => { setError(null); video.unload(); diff --git a/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js b/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js index 44cd20864..72de44e0b 100644 --- a/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js +++ b/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js @@ -10,11 +10,13 @@ const styles = require('./styles'); const { t } = require('i18next'); const ORIGIN_PRIORITIES = { + 'LOCAL': 3, 'EMBEDDED': 2, - 'EXCLUSIVE': 1 + 'EXCLUSIVE': 1, }; const LANGUAGE_PRIORITIES = { - 'eng': 1 + 'local': 2, + 'eng': 1, }; const SubtitlesMenu = React.memo((props) => { @@ -161,7 +163,11 @@ const SubtitlesMenu = React.memo((props) => { {subtitlesLanguages.map((lang, index) => ( + : + null + } : filteredStreams.length === 0 ? @@ -162,8 +175,8 @@ const StreamsList = ({ className, video, ...props }) => { /> ))} { - Object.keys(streamsByAddon).length > 1 ? - @@ -173,15 +186,6 @@ const StreamsList = ({ className, video, ...props }) => { } - { - Object.keys(streamsByAddon).length < 2 && countLoadingAddons === 0 ? - - : - null - } ); }; diff --git a/src/routes/MetaDetails/StreamsList/styles.less b/src/routes/MetaDetails/StreamsList/styles.less index 7e80858b8..97235fd0d 100644 --- a/src/routes/MetaDetails/StreamsList/styles.less +++ b/src/routes/MetaDetails/StreamsList/styles.less @@ -19,7 +19,7 @@ display: flex; flex-direction: column; align-items: center; - padding: 1rem 1rem 0; + padding: 1rem; overflow-y: auto; .image { @@ -144,22 +144,11 @@ flex-direction: row; align-items: center; justify-content: center; - margin: 1rem; - padding: 1.5rem 1rem; - border-radius: var(--border-radius); background-color: var(--secondary-accent-color); - border-radius: 3rem; - - &.streams { - padding: 1rem; - margin: 1rem auto; - max-width: 50%; - border-radius: 2rem; - - .label { - font-size: 1rem; - } - } + padding: 1rem; + margin: 1rem auto; + max-width: 50%; + border-radius: 2rem; &:hover { outline: var(--focus-outline-size) solid var(--secondary-accent-color); @@ -176,7 +165,7 @@ .label { flex: 0 1 auto; - font-size: 1.5rem; + font-size: 1rem; font-weight: 700; max-height: 3.6em; text-align: center; diff --git a/src/types/models/Ctx.d.ts b/src/types/models/Ctx.d.ts index ffb5d7f0a..a86fd60fa 100644 --- a/src/types/models/Ctx.d.ts +++ b/src/types/models/Ctx.d.ts @@ -9,6 +9,7 @@ type Auth = { created_at: number, expires_in: number, }, + isNewUser: boolean, }, }; From 21967eeecbe3f843f8c1195c8b9e027758297935 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Mon, 13 Jan 2025 15:49:57 +0200 Subject: [PATCH 020/553] chore(pkgs): update core-web --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index be53e9ec7..cf559fac8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@babel/runtime": "7.26.0", "@sentry/browser": "8.42.0", "@stremio/stremio-colors": "5.2.0", - "@stremio/stremio-core-web": "0.48.4", + "@stremio/stremio-core-web": "https://stremio.github.io/stremio-core/stremio-core-web/feat/profile-new-user-field/dev/stremio-stremio-core-web-0.48.4.tgz", "@stremio/stremio-icons": "5.4.1", "@stremio/stremio-video": "0.0.48", "a-color-picker": "1.2.1", @@ -3372,8 +3372,8 @@ }, "node_modules/@stremio/stremio-core-web": { "version": "0.48.4", - "resolved": "https://registry.npmjs.org/@stremio/stremio-core-web/-/stremio-core-web-0.48.4.tgz", - "integrity": "sha512-848OLm0dtP75aAlYhUB0KoOqwosJIj+ubB8/abuaAzH/N3dtxs40vu2AezmMpGjwR4V60rlOUkUZeWFvrUOjrw==", + "resolved": "https://stremio.github.io/stremio-core/stremio-core-web/feat/profile-new-user-field/dev/stremio-stremio-core-web-0.48.4.tgz", + "integrity": "sha512-7Z4Pk6mp3rE6/5kTcroPbXO1QCuDWqw6mLlaeJN6Ic4g+UW/XB6ej8Ppat/Q95JawF3zAaUlckeX85LxqOY4Uw==", "license": "MIT", "dependencies": { "@babel/runtime": "7.24.1" diff --git a/package.json b/package.json index 79593f9d5..8aee01837 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@babel/runtime": "7.26.0", "@sentry/browser": "8.42.0", "@stremio/stremio-colors": "5.2.0", - "@stremio/stremio-core-web": "0.48.4", + "@stremio/stremio-core-web": "https://stremio.github.io/stremio-core/stremio-core-web/feat/profile-new-user-field/dev/stremio-stremio-core-web-0.48.4.tgz", "@stremio/stremio-icons": "5.4.1", "@stremio/stremio-video": "0.0.48", "a-color-picker": "1.2.1", From ce85c14f450d086bd3c6df912620e2dd99aa0329 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Mon, 13 Jan 2025 16:23:11 +0200 Subject: [PATCH 021/553] refactor(StreamingServerWarning): styles --- .../{styles.less => StreamingServerWarning.less} | 10 ++++++---- .../StreamingServerWarning/StreamingServerWarning.tsx | 2 +- src/routes/Board/styles.less | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) rename src/routes/Board/StreamingServerWarning/{styles.less => StreamingServerWarning.less} (80%) diff --git a/src/routes/Board/StreamingServerWarning/styles.less b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.less similarity index 80% rename from src/routes/Board/StreamingServerWarning/styles.less rename to src/routes/Board/StreamingServerWarning/StreamingServerWarning.less index f4f963912..fbae07a6b 100644 --- a/src/routes/Board/StreamingServerWarning/styles.less +++ b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.less @@ -9,9 +9,9 @@ align-items: center; padding: 1rem; background-color: @color-accent5-dark3; - border-radius: 0.5rem 0.5rem 0 0; + border-radius: 0.5rem; margin: 0 0.5rem; - box-shadow: 0px 0.25rem 1rem rgba(0, 0, 0, 0.48), 0px 0.5rem 3rem rgba(0, 0, 0, 0.64); + box-shadow: 0rem 0.25rem 1rem rgba(0, 0, 0, 0.48), 0rem 0.5rem 3rem rgba(0, 0, 0, 0.64); .warning-statement { flex: 1; @@ -26,7 +26,10 @@ .action { flex: none; + padding: 0.5rem 1rem; color: @color-surface-light5-90; + background-color: rgba(0, 0, 0, 0.24); + border-radius: var(--border-radius); &:first-child { margin-left: 0; @@ -50,8 +53,7 @@ .warning-container { flex-direction: column; text-align: center; - padding: 1rem 0.5rem; - border-radius: 0.5rem; + padding: 1rem 0.5rem;s .actions { justify-content: space-around; diff --git a/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx index 39ea077cf..7c9872c8b 100644 --- a/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx +++ b/src/routes/Board/StreamingServerWarning/StreamingServerWarning.tsx @@ -7,7 +7,7 @@ import { useServices } from 'stremio/services'; import { Button } from 'stremio/components'; import useProfile from 'stremio/common/useProfile'; import { withCoreSuspender } from 'stremio/common/CoreSuspender'; -import styles from './styles.less'; +import styles from './StreamingServerWarning.less'; type Props = { className?: string; diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less index 00542559d..ef64a1807 100644 --- a/src/routes/Board/styles.less +++ b/src/routes/Board/styles.less @@ -38,7 +38,7 @@ .board-warning-container { flex: none; align-self: stretch; - margin-bottom: var(--calculated-bottom-safe-inset, 0rem); + margin-bottom: calc(max(var(--calculated-bottom-safe-inset), 0.5rem)) } } @@ -220,7 +220,7 @@ left: 0; right: 0; bottom: calc(var(--vertical-nav-bar-size) + var(--calculated-bottom-safe-inset, 0rem)); - height: 6rem; + height: 7rem; margin-bottom: 0rem; } } From 1bc8cd86651ea72a92f34840c0514f690b0b9090 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Mon, 13 Jan 2025 18:24:52 +0200 Subject: [PATCH 022/553] refactor(MetaDetails): landscape mobile styles --- src/common/screen-sizes.less | 15 ++++++- .../MetaPreview/ActionButton/styles.less | 8 ++++ src/components/MetaPreview/styles.less | 40 ++++++++++++++----- src/routes/MetaDetails/styles.less | 18 +++++++++ 4 files changed, 71 insertions(+), 10 deletions(-) diff --git a/src/common/screen-sizes.less b/src/common/screen-sizes.less index 34762e6e7..a4a37437a 100644 --- a/src/common/screen-sizes.less +++ b/src/common/screen-sizes.less @@ -9,4 +9,17 @@ @large: 2200px; @xlarge: 2500px; @xxlarge: 2800px; -@xxxlarge: 3800px; \ No newline at end of file +@xxxlarge: 3800px; + +@small-phone-landscape-size: 400px; +@small-phone-portrait-size: 700px; + +@phone-landscape-size: 500px; +@phone-portrait-size: 1000px; + +@small-phone-landscape: ~"screen and (max-width: @{small-phone-portrait-size}) and (max-height: @{small-phone-landscape-size}) and (orientation: landscape)"; +@small-phone-portrait: ~"screen and (max-width: @{small-phone-landscape-size}) and (max-height: @{small-phone-portrait-size}) and (orientation: portrait)"; + +@phone-landscape: ~"screen and (max-width: @{phone-portrait-size}) and (max-height: @{phone-landscape-size}) and (orientation: landscape)"; +@phone-portrait: ~"screen and (max-width: @{phone-portrait-size}) and (max-height: @{phone-portrait-size}) and (orientation: portrait)"; + diff --git a/src/components/MetaPreview/ActionButton/styles.less b/src/components/MetaPreview/ActionButton/styles.less index 41f2ffca8..d7a7c5f25 100644 --- a/src/components/MetaPreview/ActionButton/styles.less +++ b/src/components/MetaPreview/ActionButton/styles.less @@ -51,6 +51,14 @@ } } +@media @phone-landscape { + .action-button-container { + .label-container { + display: none; + } + } +} + @media only screen and (max-width: @minimum) { .action-button-container { flex-direction: row; diff --git a/src/components/MetaPreview/styles.less b/src/components/MetaPreview/styles.less index 30ff70ea9..568f44a42 100644 --- a/src/components/MetaPreview/styles.less +++ b/src/components/MetaPreview/styles.less @@ -213,6 +213,28 @@ width: 30rem; } + +@media @phone-landscape { + .meta-preview-container { + .meta-info-container { + .logo { + height: 5rem; + margin-bottom: 1rem; + } + } + + .action-buttons-container { + padding-top: 1.5rem; + + .action-button { + padding: 0 1.5rem !important; + height: 3rem; + border-radius: 2rem; + } + } + } +} + @media only screen and (max-width: @minimum) { .meta-preview-container { .meta-info-container { @@ -229,16 +251,16 @@ } } - .action-buttons-container { - flex-shrink: 0; - margin-top: 3rem; - overflow: visible; - scrollbar-width: none; - - &::-webkit-scrollbar { - display: none; - } + .action-buttons-container { + flex-shrink: 0; + margin-top: 3rem; + overflow: visible; + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; } + } } .share-prompt { diff --git a/src/routes/MetaDetails/styles.less b/src/routes/MetaDetails/styles.less index 376f7fb8d..c74a2856c 100644 --- a/src/routes/MetaDetails/styles.less +++ b/src/routes/MetaDetails/styles.less @@ -124,6 +124,24 @@ } } } +@media @small-phone-landscape { + .metadetails-container { + .metadetails-content { + .videos-list, .streams-list { + flex: 0 0 25rem; + } + } + } +} +@media @phone-landscape { + .metadetails-container { + .metadetails-content { + .meta-preview { + padding: 0 1.5rem 1rem; + } + } + } +} @media only screen and (max-width: @minimum) { .metadetails-container { From a62d3bf37d70141d90ddab9d6c552320af582596 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Mon, 13 Jan 2025 18:29:57 +0200 Subject: [PATCH 023/553] revert(MetaDetails): leave the same width --- src/routes/MetaDetails/styles.less | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/routes/MetaDetails/styles.less b/src/routes/MetaDetails/styles.less index c74a2856c..3e2fb1602 100644 --- a/src/routes/MetaDetails/styles.less +++ b/src/routes/MetaDetails/styles.less @@ -124,15 +124,7 @@ } } } -@media @small-phone-landscape { - .metadetails-container { - .metadetails-content { - .videos-list, .streams-list { - flex: 0 0 25rem; - } - } - } -} + @media @phone-landscape { .metadetails-container { .metadetails-content { From 8bb4089320df7e1e8d81975a8ee94c0572bcc70a Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Mon, 13 Jan 2025 18:32:28 +0200 Subject: [PATCH 024/553] refactor(MetaPreview): action buttons --- src/components/MetaPreview/styles.less | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/MetaPreview/styles.less b/src/components/MetaPreview/styles.less index 568f44a42..8006346f0 100644 --- a/src/components/MetaPreview/styles.less +++ b/src/components/MetaPreview/styles.less @@ -225,9 +225,11 @@ .action-buttons-container { padding-top: 1.5rem; + gap: 0.5rem; .action-button { padding: 0 1.5rem !important; + margin-right: 0rem !important; height: 3rem; border-radius: 2rem; } From 809d98427765c4fe178d76e153b143e1520a4044 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Mon, 13 Jan 2025 22:17:40 +0200 Subject: [PATCH 025/553] fix(App): PWA resizing issues when resizing the PWA on iPad there were visible pixel wide lines on the edges --- src/App/styles.less | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/App/styles.less b/src/App/styles.less index 1a1f50dcc..11b52de8b 100644 --- a/src/App/styles.less +++ b/src/App/styles.less @@ -17,6 +17,8 @@ @calculated-bottom-safe-inset: ~"min(env(safe-area-inset-bottom, 0rem), max(1rem, calc(100lvh - 100svh - env(safe-area-inset-top, 0rem))))"; @html-width: ~"calc(max(100svw, 100dvw))"; @html-height: ~"calc(max(100svh, 100dvh))"; +@html-standalone-width: ~"calc(max(100%, 100lvw))"; +@html-standalone-height: ~"calc(max(100%, 100lvh))"; @safe-area-inset-top: env(safe-area-inset-top, 0rem); @safe-area-inset-right: env(safe-area-inset-right, 0rem); @safe-area-inset-bottom: env(safe-area-inset-bottom, 0rem); @@ -119,6 +121,12 @@ html { touch-action: manipulation; -webkit-tap-highlight-color: transparent; + + @media (display-mode: standalone) { + width: @html-standalone-width; + height: @html-standalone-height; + } + body { width: 100%; height: 100%; From 9bbc448e41bbecac9ceb7537a573d577293ee7a0 Mon Sep 17 00:00:00 2001 From: IEduStu <125146135+IEduStu@users.noreply.github.com> Date: Sat, 20 Apr 2024 01:10:51 +0000 Subject: [PATCH 026/553] fix: improve navigation buttons contrast --- .../NavBar/HorizontalNavBar/styles.less | 14 ++++++++++++-- .../VerticalNavBar/NavTabButton/styles.less | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/components/NavBar/HorizontalNavBar/styles.less b/src/components/NavBar/HorizontalNavBar/styles.less index 512788855..78414ce64 100644 --- a/src/components/NavBar/HorizontalNavBar/styles.less +++ b/src/components/NavBar/HorizontalNavBar/styles.less @@ -69,7 +69,7 @@ width: 3.5rem; height: 3.5rem; border-radius: 0.75rem; - opacity: 0.4; + opacity: 0.6; .icon { flex: none; @@ -79,7 +79,7 @@ opacity: 0.6; } - &:hover, &:global(.active) { + .active() { background-color: var(--overlay-color); opacity: 1; @@ -88,6 +88,16 @@ opacity: 0.8; } } + + &:global(.active) { + .active(); + } + + @media (pointer: fine) { + &:hover { + .active(); + } + } } } diff --git a/src/components/NavBar/VerticalNavBar/NavTabButton/styles.less b/src/components/NavBar/VerticalNavBar/NavTabButton/styles.less index 99592189d..8b3b3e5d1 100644 --- a/src/components/NavBar/VerticalNavBar/NavTabButton/styles.less +++ b/src/components/NavBar/VerticalNavBar/NavTabButton/styles.less @@ -18,12 +18,21 @@ .label { opacity: 0.6; } + + &:global(.selected) { + .label { + opacity: 1; + } + } } } &:global(.selected) { .icon { opacity: 1; + } + + .icon, .label { color: var(--primary-accent-color); } } @@ -37,7 +46,7 @@ .icon { color: var(--primary-foreground-color); - opacity: 0.2; + opacity: 0.5; } .label { @@ -61,12 +70,12 @@ @media only screen and (max-width: @minimum) { .nav-tab-button-container { .label { - opacity: 0.2; + opacity: 0.6; } &:global(.selected) { .label { - opacity: 0.6; + opacity: 1; } } } From 7f068a2fcc2b57d086680882c768a8021684a7bb Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Wed, 15 Jan 2025 11:16:26 +0200 Subject: [PATCH 027/553] fix(Calendar): add missing route animation --- src/routes/Calendar/Calendar.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/Calendar/Calendar.tsx b/src/routes/Calendar/Calendar.tsx index 6d9fbe90e..93f1bbe77 100644 --- a/src/routes/Calendar/Calendar.tsx +++ b/src/routes/Calendar/Calendar.tsx @@ -11,6 +11,7 @@ import Placeholder from './Placeholder'; import useCalendar from './useCalendar'; import useCalendarDate from './useCalendarDate'; import styles from './Calendar.less'; +import classNames from 'classnames'; type Props = { urlParams: UrlParams, @@ -34,7 +35,7 @@ const Calendar = ({ urlParams }: Props) => { { profile.auth !== null ? -
+
Date: Wed, 15 Jan 2025 12:35:21 +0200 Subject: [PATCH 028/553] fix(App): older iOS versions support --- src/App/styles.less | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/App/styles.less b/src/App/styles.less index 11b52de8b..3afdc4dd0 100644 --- a/src/App/styles.less +++ b/src/App/styles.less @@ -112,8 +112,8 @@ svg { html { width: @html-width; height: @html-height; - min-width: 640px; - min-height: 480px; + min-width: 100%; // Fallback for browsers that don't support new CSS units + min-height: 100%; font-family: 'PlusJakartaSans', 'sans-serif'; overflow: auto; overscroll-behavior: none; From 97acfa82ca0df66bb401a9844ee69581c458ce95 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Wed, 15 Jan 2025 20:16:13 +0200 Subject: [PATCH 029/553] fix(App): html and app styles fallback --- src/App/styles.less | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/App/styles.less b/src/App/styles.less index 3afdc4dd0..2ff0fbd2a 100644 --- a/src/App/styles.less +++ b/src/App/styles.less @@ -15,10 +15,18 @@ // iOS pads the bottom inset more than needed, so we deduce the actual inset size when using the webapp @calculated-bottom-safe-inset: ~"min(env(safe-area-inset-bottom, 0rem), max(1rem, calc(100lvh - 100svh - env(safe-area-inset-top, 0rem))))"; -@html-width: ~"calc(max(100svw, 100dvw))"; -@html-height: ~"calc(max(100svh, 100dvh))"; -@html-standalone-width: ~"calc(max(100%, 100lvw))"; -@html-standalone-height: ~"calc(max(100%, 100lvh))"; +@viewport-width: ~"100vw"; +@viewport-height: ~"100vh"; +@modern-viewport-width: ~"100dvw"; +@modern-viewport-height: ~"100dvh"; +@small-viewport-width: ~"100svw"; +@small-viewport-height: ~"100svh"; +@large-viewport-width: ~"100lvw"; +@large-viewport-height: ~"100lvh"; +@html-width: ~"calc(max(100vw, var(--dynamic-viewport-width, 100vw)))"; +@html-height: ~"calc(max(100vh, var(--dynamic-viewport-height, 100vh)))"; +@html-standalone-width: ~"calc(max(100%, var(--dynamic-viewport-width, 100vw)))"; +@html-standalone-height: ~"calc(max(100%, var(--dynamic-viewport-height, 100vh)))"; @safe-area-inset-top: env(safe-area-inset-top, 0rem); @safe-area-inset-right: env(safe-area-inset-right, 0rem); @safe-area-inset-bottom: env(safe-area-inset-bottom, 0rem); @@ -65,6 +73,13 @@ --safe-area-inset-right: @safe-area-inset-right; --safe-area-inset-bottom: @safe-area-inset-bottom; --safe-area-inset-left: @safe-area-inset-left; + --dynamic-viewport-width: @viewport-width; + --dynamic-viewport-height: @viewport-height; + + @supports (height: 100dvh) { + --dynamic-viewport-width: @modern-viewport-width; + --dynamic-viewport-height: @modern-viewport-height; + } } * { @@ -112,8 +127,8 @@ svg { html { width: @html-width; height: @html-height; - min-width: 100%; // Fallback for browsers that don't support new CSS units - min-height: 100%; + min-width: 100%; // Fallback for older browsers + min-height: 100%; // Fallback for older browsers font-family: 'PlusJakartaSans', 'sans-serif'; overflow: auto; overscroll-behavior: none; @@ -130,6 +145,7 @@ html { body { width: 100%; height: 100%; + min-height: 100%; background: linear-gradient(41deg, var(--primary-background-color) 0%, var(--secondary-background-color) 100%); :global(#app) { @@ -137,6 +153,7 @@ html { z-index: 0; width: 100%; height: 100%; + min-height: 100%; .toasts-container { position: absolute; @@ -212,9 +229,6 @@ html { @media only screen and (max-width: @xsmall) { html { - min-width: inherit; - min-height: inherit; - body { :global(#app) { .toasts-container { From 92a6d6f182b64c12d1d353b5f872fa0d5ee995d7 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Wed, 15 Jan 2025 20:21:43 +0200 Subject: [PATCH 030/553] refactor(App): clean up --- src/App/styles.less | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/App/styles.less b/src/App/styles.less index 2ff0fbd2a..f7ab9d4da 100644 --- a/src/App/styles.less +++ b/src/App/styles.less @@ -15,18 +15,18 @@ // iOS pads the bottom inset more than needed, so we deduce the actual inset size when using the webapp @calculated-bottom-safe-inset: ~"min(env(safe-area-inset-bottom, 0rem), max(1rem, calc(100lvh - 100svh - env(safe-area-inset-top, 0rem))))"; + +// Viewport sizes @viewport-width: ~"100vw"; @viewport-height: ~"100vh"; -@modern-viewport-width: ~"100dvw"; -@modern-viewport-height: ~"100dvh"; -@small-viewport-width: ~"100svw"; -@small-viewport-height: ~"100svh"; -@large-viewport-width: ~"100lvw"; -@large-viewport-height: ~"100lvh"; -@html-width: ~"calc(max(100vw, var(--dynamic-viewport-width, 100vw)))"; -@html-height: ~"calc(max(100vh, var(--dynamic-viewport-height, 100vh)))"; -@html-standalone-width: ~"calc(max(100%, var(--dynamic-viewport-width, 100vw)))"; -@html-standalone-height: ~"calc(max(100%, var(--dynamic-viewport-height, 100vh)))"; + +// HTML sizes +@html-width: ~"calc(max(var(--small-viewport-width), var(--dynamic-viewport-width)))"; +@html-height: ~"calc(max(var(--small-viewport-height), var(--dynamic-viewport-height)))"; +@html-standalone-width: ~"calc(max(100%, var(--large-viewport-width)))"; +@html-standalone-height: ~"calc(max(100%, var(--large-viewport-height)))"; + +// Safe area insets @safe-area-inset-top: env(safe-area-inset-top, 0rem); @safe-area-inset-right: env(safe-area-inset-right, 0rem); @safe-area-inset-bottom: env(safe-area-inset-bottom, 0rem); @@ -75,10 +75,24 @@ --safe-area-inset-left: @safe-area-inset-left; --dynamic-viewport-width: @viewport-width; --dynamic-viewport-height: @viewport-height; + --large-viewport-width: @viewport-width; + --large-viewport-height: @viewport-height; + --small-viewport-width: @viewport-width; + --small-viewport-height: @viewport-height; @supports (height: 100dvh) { - --dynamic-viewport-width: @modern-viewport-width; - --dynamic-viewport-height: @modern-viewport-height; + --dynamic-viewport-width: 100dvw; + --dynamic-viewport-height: 100dvh; + } + + @supports (height: 100lvh) { + --large-viewport-width: 100lvw; + --large-viewport-height: 100lvh; + } + + @supports (height: 100svh) { + --small-viewport-width: 100svw; + --small-viewport-height: 100svh; } } From 8c1b6fc6535259ad2279e7bfb70a0b8ad9e37db0 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Wed, 15 Jan 2025 20:34:50 +0200 Subject: [PATCH 031/553] fix(Navbar): positioning on older devices --- src/App/styles.less | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/App/styles.less b/src/App/styles.less index f7ab9d4da..65b2bc5d4 100644 --- a/src/App/styles.less +++ b/src/App/styles.less @@ -14,7 +14,7 @@ } // iOS pads the bottom inset more than needed, so we deduce the actual inset size when using the webapp -@calculated-bottom-safe-inset: ~"min(env(safe-area-inset-bottom, 0rem), max(1rem, calc(100lvh - 100svh - env(safe-area-inset-top, 0rem))))"; +@calculated-bottom-safe-inset: ~"min(env(safe-area-inset-bottom, 0rem), max(1rem, calc(var(--viewport-height-diff) - env(safe-area-inset-top, 0rem))))"; // Viewport sizes @viewport-width: ~"100vw"; @@ -79,6 +79,7 @@ --large-viewport-height: @viewport-height; --small-viewport-width: @viewport-width; --small-viewport-height: @viewport-height; + --viewport-height-diff: calc(100vh - 100vh); @supports (height: 100dvh) { --dynamic-viewport-width: 100dvw; @@ -94,6 +95,10 @@ --small-viewport-width: 100svw; --small-viewport-height: 100svh; } + + @supports (height: 100lvh) and (height: 100svh) { + --viewport-height-diff: calc(100lvh - 100svh); + } } * { From 6f2deb15e479d7f7e2e9602e63ec3d97498134c5 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Wed, 15 Jan 2025 20:50:08 +0200 Subject: [PATCH 032/553] remove(App): unnecessary declarations --- src/App/styles.less | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/App/styles.less b/src/App/styles.less index 65b2bc5d4..0572ee3d1 100644 --- a/src/App/styles.less +++ b/src/App/styles.less @@ -146,8 +146,6 @@ svg { html { width: @html-width; height: @html-height; - min-width: 100%; // Fallback for older browsers - min-height: 100%; // Fallback for older browsers font-family: 'PlusJakartaSans', 'sans-serif'; overflow: auto; overscroll-behavior: none; @@ -164,7 +162,6 @@ html { body { width: 100%; height: 100%; - min-height: 100%; background: linear-gradient(41deg, var(--primary-background-color) 0%, var(--secondary-background-color) 100%); :global(#app) { @@ -172,7 +169,6 @@ html { z-index: 0; width: 100%; height: 100%; - min-height: 100%; .toasts-container { position: absolute; From b266ae5f2bb0ea0488a654a91f1c82dbf487b07a Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Fri, 17 Jan 2025 16:35:10 +0200 Subject: [PATCH 033/553] refactor(NavTabButton): lower icon opacity --- src/components/NavBar/VerticalNavBar/NavTabButton/styles.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/NavBar/VerticalNavBar/NavTabButton/styles.less b/src/components/NavBar/VerticalNavBar/NavTabButton/styles.less index 8b3b3e5d1..caabd889a 100644 --- a/src/components/NavBar/VerticalNavBar/NavTabButton/styles.less +++ b/src/components/NavBar/VerticalNavBar/NavTabButton/styles.less @@ -46,7 +46,7 @@ .icon { color: var(--primary-foreground-color); - opacity: 0.5; + opacity: 0.35; } .label { From 3636468d455aefb15f5b96a6177ce4ad9ec26973 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Fri, 17 Jan 2025 20:08:16 +0200 Subject: [PATCH 034/553] fix(Search): hide empty catalog rows --- src/routes/Search/Search.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/routes/Search/Search.js b/src/routes/Search/Search.js index 353b4956a..4b052ed46 100644 --- a/src/routes/Search/Search.js +++ b/src/routes/Search/Search.js @@ -97,14 +97,17 @@ const Search = ({ queryParams }) => { ); } case 'Err': { - return ( - - ); + if (catalog.content.content !== 'EmptyContent') { + return ( + + ); + } + return null; } default: { return ( From 42ff17f74263216e23376fae2b27caa261e22114 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 17 Jan 2025 20:04:45 +0100 Subject: [PATCH 035/553] refactor(SubtitlesMenu): update translation key for local subtitles --- src/routes/Player/SubtitlesMenu/SubtitlesMenu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js b/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js index 72de44e0b..b1e15a52f 100644 --- a/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js +++ b/src/routes/Player/SubtitlesMenu/SubtitlesMenu.js @@ -165,7 +165,7 @@ const SubtitlesMenu = React.memo((props) => { +
); - }, [watched, toggleWatchedOnClick]); + }, [watched, seasonWatched, toggleWatchedOnClick]); React.useEffect(() => { if (!routeFocused) { closeMenu(); @@ -182,17 +191,20 @@ Video.propTypes = { id: PropTypes.string, title: PropTypes.string, thumbnail: PropTypes.string, + season: PropTypes.number, episode: PropTypes.number, released: PropTypes.instanceOf(Date), upcoming: PropTypes.bool, watched: PropTypes.bool, progress: PropTypes.number, scheduled: PropTypes.bool, + seasonWatched: PropTypes.bool, deepLinks: PropTypes.shape({ metaDetailsStreams: PropTypes.string, player: PropTypes.string }), onMarkVideoAsWatched: PropTypes.func, + onMarkSeasonAsWatched: PropTypes.func, }; module.exports = Video; diff --git a/src/routes/MetaDetails/VideosList/VideosList.js b/src/routes/MetaDetails/VideosList/VideosList.js index 999a1a1ae..557b3df1f 100644 --- a/src/routes/MetaDetails/VideosList/VideosList.js +++ b/src/routes/MetaDetails/VideosList/VideosList.js @@ -56,6 +56,11 @@ const VideosList = ({ className, metaItem, libraryItem, season, seasonOnSelect, return a.episode - b.episode; }); }, [videos, selectedSeason]); + + const seasonWatched = React.useMemo(() => { + return videosForSeason.every((video) => video.watched); + }, [videosForSeason]); + const [search, setSearch] = React.useState(''); const searchInputOnChange = React.useCallback((event) => { setSearch(event.currentTarget.value); @@ -71,6 +76,16 @@ const VideosList = ({ className, metaItem, libraryItem, season, seasonOnSelect, }); }; + const onMarkSeasonAsWatched = (season, watched) => { + core.transport.dispatch({ + action: 'MetaDetails', + args: { + action: 'MarkSeasonAsWatched', + args: [season, !watched] + } + }); + }; + return (
{ @@ -135,6 +150,7 @@ const VideosList = ({ className, metaItem, libraryItem, season, seasonOnSelect, id={video.id} title={video.title} thumbnail={video.thumbnail} + season={video.season} episode={video.episode} released={video.released} upcoming={video.upcoming} @@ -142,7 +158,9 @@ const VideosList = ({ className, metaItem, libraryItem, season, seasonOnSelect, progress={video.progress} deepLinks={video.deepLinks} scheduled={video.scheduled} + seasonWatched={seasonWatched} onMarkVideoAsWatched={onMarkVideoAsWatched} + onMarkSeasonAsWatched={onMarkSeasonAsWatched} /> )) } diff --git a/src/routes/Player/SideDrawer/SideDrawer.tsx b/src/routes/Player/SideDrawer/SideDrawer.tsx index 9ed713879..332ead719 100644 --- a/src/routes/Player/SideDrawer/SideDrawer.tsx +++ b/src/routes/Player/SideDrawer/SideDrawer.tsx @@ -47,6 +47,10 @@ const SideDrawer = memo(forwardRef(({ seriesInfo, classNa setSeason(parseInt(event.value)); }, []); + const seasonWatched = React.useMemo(() => { + return videos.every((video) => video.watched); + }, [videos]); + const onMarkVideoAsWatched = useCallback((video: Video, watched: boolean) => { core.transport.dispatch({ action: 'Player', @@ -57,6 +61,16 @@ const SideDrawer = memo(forwardRef(({ seriesInfo, classNa }); }, []); + const onMarkSeasonAsWatched = (season: number, watched: boolean) => { + core.transport.dispatch({ + action: 'MetaDetails', + args: { + action: 'MarkSeasonAsWatched', + args: [season, !watched] + } + }); + }; + const onMouseDown = (event: React.MouseEvent) => { event.stopPropagation(); }; @@ -95,14 +109,17 @@ const SideDrawer = memo(forwardRef(({ seriesInfo, classNa id={video.id} title={video.title} thumbnail={video.thumbnail} + season={video.season} episode={video.episode} released={video.released} upcoming={video.upcoming} watched={video.watched} + seasonWatched={seasonWatched} progress={video.progress} deepLinks={video.deepLinks} scheduled={video.scheduled} onMarkVideoAsWatched={onMarkVideoAsWatched} + onMarkSeasonAsWatched={onMarkSeasonAsWatched} /> ))}
From 79e3dab206f81ce16736f501bfc6598d161ffd10 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Thu, 23 Jan 2025 16:08:29 +0200 Subject: [PATCH 052/553] fix(App): global width / height issues --- src/components/MainNavBars/MainNavBars.less | 10 +++++----- src/routes/Addons/styles.less | 2 +- src/routes/Board/styles.less | 2 +- src/routes/Calendar/Calendar.less | 2 +- src/routes/Discover/styles.less | 2 +- src/routes/Library/styles.less | 2 +- src/routes/Settings/styles.less | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/components/MainNavBars/MainNavBars.less b/src/components/MainNavBars/MainNavBars.less index 2ee57b505..224b34f40 100644 --- a/src/components/MainNavBars/MainNavBars.less +++ b/src/components/MainNavBars/MainNavBars.less @@ -6,9 +6,9 @@ position: relative; z-index: 0; overflow: clip; - margin-left: env(safe-area-inset-left, 0px); - margin-right: env(safe-area-inset-right, 0px); - width: calc(100% - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px)); + margin-left: var(--safe-area-inset-left); + margin-right: var(--safe-area-inset-right); + width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); height: 100%; .horizontal-nav-bar { @@ -22,14 +22,14 @@ .vertical-nav-bar { position: absolute; top: var(--horizontal-nav-bar-size); - bottom: var(--calculated-bottom-safe-inset); + bottom: 0; left: 0; z-index: 1; } .nav-content-container { position: absolute; - padding-top: calc(var(--horizontal-nav-bar-size) + env(safe-area-inset-top, 0px)); + padding-top: var(--horizontal-nav-bar-size); top: 0; right: 0; bottom: 0; diff --git a/src/routes/Addons/styles.less b/src/routes/Addons/styles.less index 37152eb8f..0e3c998e1 100644 --- a/src/routes/Addons/styles.less +++ b/src/routes/Addons/styles.less @@ -22,7 +22,7 @@ } .addons-container { - height: 100%; + height: calc(100% - var(--calculated-bottom-safe-inset)); background-color: transparent; .addons-content { diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less index 616398b27..edd34554b 100644 --- a/src/routes/Board/styles.less +++ b/src/routes/Board/styles.less @@ -13,7 +13,7 @@ .board-container { width: 100%; - height: 100%; + height: calc(100% - var(--calculated-bottom-safe-inset)); display: flex; flex-direction: column; diff --git a/src/routes/Calendar/Calendar.less b/src/routes/Calendar/Calendar.less index b606fa2aa..b3f03454f 100644 --- a/src/routes/Calendar/Calendar.less +++ b/src/routes/Calendar/Calendar.less @@ -4,7 +4,7 @@ .calendar { width: 100%; - height: 100%; + height: calc(100% - var(--calculated-bottom-safe-inset)); background-color: transparent; .content { diff --git a/src/routes/Discover/styles.less b/src/routes/Discover/styles.less index 05f03baf0..b435f3e35 100644 --- a/src/routes/Discover/styles.less +++ b/src/routes/Discover/styles.less @@ -17,7 +17,7 @@ } .discover-container { - height: 100%; + height: calc(100% - var(--calculated-bottom-safe-inset)); background-color: transparent; .discover-content { diff --git a/src/routes/Library/styles.less b/src/routes/Library/styles.less index 6719932e1..e2bd4ad3e 100644 --- a/src/routes/Library/styles.less +++ b/src/routes/Library/styles.less @@ -13,7 +13,7 @@ } .library-container { - height: 100%; + height: calc(100% - var(--calculated-bottom-safe-inset)); background-color: transparent; .library-content { diff --git a/src/routes/Settings/styles.less b/src/routes/Settings/styles.less index 7cdd0b7d4..02d6e437e 100644 --- a/src/routes/Settings/styles.less +++ b/src/routes/Settings/styles.less @@ -13,7 +13,7 @@ } .settings-container { - height: 100%; + height: calc(100% - var(--calculated-bottom-safe-inset)); width: 100%; background-color: transparent; From 6ae9d1c9d419c3b927f44cc758a20a8b05554328 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Thu, 23 Jan 2025 16:20:03 +0200 Subject: [PATCH 053/553] fix(Calendar): PWA landscape mode --- src/routes/Calendar/Calendar.less | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/Calendar/Calendar.less b/src/routes/Calendar/Calendar.less index b3f03454f..4763353f1 100644 --- a/src/routes/Calendar/Calendar.less +++ b/src/routes/Calendar/Calendar.less @@ -3,8 +3,7 @@ @import (reference) '~stremio/common/screen-sizes.less'; .calendar { - width: 100%; - height: calc(100% - var(--calculated-bottom-safe-inset)); + height: calc(100% - var(--safe-area-inset-bottom)); background-color: transparent; .content { From f49f29094f740a6dabe77e140702b90a9191551e Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Thu, 23 Jan 2025 16:20:26 +0200 Subject: [PATCH 054/553] fix(App): iphone PWA issues --- src/App/styles.less | 11 +++++++---- src/components/BottomSheet/BottomSheet.less | 2 +- src/routes/Addons/styles.less | 2 +- src/routes/Board/styles.less | 4 ++-- src/routes/Discover/styles.less | 2 +- src/routes/Library/styles.less | 2 +- src/routes/MetaDetails/styles.less | 2 +- src/routes/Settings/styles.less | 2 +- 8 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/App/styles.less b/src/App/styles.less index 0572ee3d1..a413ed163 100644 --- a/src/App/styles.less +++ b/src/App/styles.less @@ -23,8 +23,8 @@ // HTML sizes @html-width: ~"calc(max(var(--small-viewport-width), var(--dynamic-viewport-width)))"; @html-height: ~"calc(max(var(--small-viewport-height), var(--dynamic-viewport-height)))"; -@html-standalone-width: ~"calc(max(100%, var(--large-viewport-width)))"; -@html-standalone-height: ~"calc(max(100%, var(--large-viewport-height)))"; +@html-standalone-width: ~"calc(max(100%, var(--small-viewport-width)))"; +@html-standalone-height: ~"calc(max(100%, var(--small-viewport-height)))"; // Safe area insets @safe-area-inset-top: env(safe-area-inset-top, 0rem); @@ -64,7 +64,6 @@ --modal-background-color: rgba(15, 13, 32, 1); --outer-glow: 0px 0px 15px rgba(123, 91, 245, 0.37); --border-radius: 0.75rem; - --calculated-bottom-safe-inset: @calculated-bottom-safe-inset; --top-overlay-size: @top-overlay-size; --bottom-overlay-size: @bottom-overlay-size; --overlap-size: @overlap-size; @@ -99,6 +98,10 @@ @supports (height: 100lvh) and (height: 100svh) { --viewport-height-diff: calc(100lvh - 100svh); } + + @media (display-mode: standalone) { + --safe-area-inset-bottom: @calculated-bottom-safe-inset; + } } * { @@ -174,7 +177,7 @@ html { position: absolute; top: calc(1.2 * var(--horizontal-nav-bar-size) + var(--safe-area-inset-top)); right: var(--safe-area-inset-right); - bottom: calc(1.2 * var(--horizontal-nav-bar-size) + var(--calculated-bottom-safe-inset, 0rem)); + bottom: calc(1.2 * var(--horizontal-nav-bar-size) + var(--safe-area-inset-bottom, 0rem)); left: auto; z-index: 1; padding: 0 calc(0.5 * var(--horizontal-nav-bar-size)); diff --git a/src/components/BottomSheet/BottomSheet.less b/src/components/BottomSheet/BottomSheet.less index 6428e5081..f7e3315e1 100644 --- a/src/components/BottomSheet/BottomSheet.less +++ b/src/components/BottomSheet/BottomSheet.less @@ -101,7 +101,7 @@ @media only screen and (orientation: landscape) { .bottom-sheet { .container { - max-width: 90%; + max-width: calc(90% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); } } } \ No newline at end of file diff --git a/src/routes/Addons/styles.less b/src/routes/Addons/styles.less index 0e3c998e1..6a057d292 100644 --- a/src/routes/Addons/styles.less +++ b/src/routes/Addons/styles.less @@ -22,7 +22,7 @@ } .addons-container { - height: calc(100% - var(--calculated-bottom-safe-inset)); + height: calc(100% - var(--safe-area-inset-bottom)); background-color: transparent; .addons-content { diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less index edd34554b..b8ad3951d 100644 --- a/src/routes/Board/styles.less +++ b/src/routes/Board/styles.less @@ -13,7 +13,7 @@ .board-container { width: 100%; - height: calc(100% - var(--calculated-bottom-safe-inset)); + height: calc(100% - var(--safe-area-inset-bottom)); display: flex; flex-direction: column; @@ -217,7 +217,7 @@ } .board-warning-container { - bottom: calc(var(--vertical-nav-bar-size) + var(--calculated-bottom-safe-inset, 0rem)); + bottom: calc(var(--vertical-nav-bar-size) + var(--safe-area-inset-bottom, 0rem)); height: 7rem; } } diff --git a/src/routes/Discover/styles.less b/src/routes/Discover/styles.less index b435f3e35..62e3adaee 100644 --- a/src/routes/Discover/styles.less +++ b/src/routes/Discover/styles.less @@ -17,7 +17,7 @@ } .discover-container { - height: calc(100% - var(--calculated-bottom-safe-inset)); + height: calc(100% - var(--safe-area-inset-bottom)); background-color: transparent; .discover-content { diff --git a/src/routes/Library/styles.less b/src/routes/Library/styles.less index e2bd4ad3e..2bdbc13ec 100644 --- a/src/routes/Library/styles.less +++ b/src/routes/Library/styles.less @@ -13,7 +13,7 @@ } .library-container { - height: calc(100% - var(--calculated-bottom-safe-inset)); + height: calc(100% - var(--safe-area-inset-bottom)); background-color: transparent; .library-content { diff --git a/src/routes/MetaDetails/styles.less b/src/routes/MetaDetails/styles.less index 3e2fb1602..82740275b 100644 --- a/src/routes/MetaDetails/styles.less +++ b/src/routes/MetaDetails/styles.less @@ -52,7 +52,7 @@ flex-direction: row; margin-top: calc(var(--top-overlay-size) * -1); padding-top: var(--top-overlay-size); - padding-bottom: var(--calculated-bottom-safe-inset, 0rem); + padding-bottom: var(--safe-area-inset-bottom, 0rem); .vertical-nav-bar { flex: none; } diff --git a/src/routes/Settings/styles.less b/src/routes/Settings/styles.less index 02d6e437e..de37d17c2 100644 --- a/src/routes/Settings/styles.less +++ b/src/routes/Settings/styles.less @@ -13,7 +13,7 @@ } .settings-container { - height: calc(100% - var(--calculated-bottom-safe-inset)); + height: calc(100% - var(--safe-area-inset-bottom)); width: 100%; background-color: transparent; From b1e8b47e7b55244888e143ab9a909c0bbf17e69c Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Thu, 23 Jan 2025 17:06:23 +0200 Subject: [PATCH 055/553] fix(StreamingServerWarning): respect safe areas --- src/routes/Board/styles.less | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less index 616398b27..3b7aa3c5f 100644 --- a/src/routes/Board/styles.less +++ b/src/routes/Board/styles.less @@ -217,7 +217,9 @@ } .board-warning-container { - bottom: calc(var(--vertical-nav-bar-size) + var(--calculated-bottom-safe-inset, 0rem)); + bottom: calc(var(--vertical-nav-bar-size) + 0.5rem); + margin-left: var(--safe-area-inset-left); + margin-right: var(--safe-area-inset-right); height: 7rem; } } From 2f380c2cb977fb840b100ea289f1d53d521d218d Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Thu, 23 Jan 2025 17:31:23 +0200 Subject: [PATCH 056/553] fix(Navbar): android devices fullscreen --- src/components/MainNavBars/MainNavBars.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MainNavBars/MainNavBars.less b/src/components/MainNavBars/MainNavBars.less index 224b34f40..a5495bc69 100644 --- a/src/components/MainNavBars/MainNavBars.less +++ b/src/components/MainNavBars/MainNavBars.less @@ -29,7 +29,7 @@ .nav-content-container { position: absolute; - padding-top: var(--horizontal-nav-bar-size); + padding-top: calc(var(--horizontal-nav-bar-size) + var(--safe-area-inset-top)); top: 0; right: 0; bottom: 0; From 17c5341f69cff95132ebb736d21f912c90daee13 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Thu, 23 Jan 2025 17:43:48 +0200 Subject: [PATCH 057/553] refactor(StreamingServerWarning): change global --- src/routes/Board/styles.less | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less index 3b7aa3c5f..255fb55d0 100644 --- a/src/routes/Board/styles.less +++ b/src/routes/Board/styles.less @@ -37,9 +37,9 @@ .board-warning-container { position: absolute; - bottom: 0.5rem; - left: 0.5rem; - right: 0.5rem; + bottom: calc(var(--safe-area-inset-bottom) + 0.5rem); + left: calc(var(--safe-area-inset-left) + 0.5rem); + right: calc(var(--safe-area-inset-right) + 0.5rem); } } @@ -218,8 +218,6 @@ .board-warning-container { bottom: calc(var(--vertical-nav-bar-size) + 0.5rem); - margin-left: var(--safe-area-inset-left); - margin-right: var(--safe-area-inset-right); height: 7rem; } } From 37ab9ced932f8db943405a1086581d1979a66137 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Thu, 23 Jan 2025 17:48:39 +0200 Subject: [PATCH 058/553] fix: size of the warning on mobile landscape --- src/routes/Board/styles.less | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/routes/Board/styles.less b/src/routes/Board/styles.less index 255fb55d0..8ee280d86 100644 --- a/src/routes/Board/styles.less +++ b/src/routes/Board/styles.less @@ -221,4 +221,12 @@ height: 7rem; } } +} + +@media @phone-landscape { + .board-container { + .board-warning-container { + left: calc(var(--safe-area-inset-left) + var(--vertical-nav-bar-size) + 0.5rem); + } + } } \ No newline at end of file From b8415c48f255ef54ec4a8f1aeb669568ac24018d Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Fri, 24 Jan 2025 15:40:04 +0200 Subject: [PATCH 059/553] fix(SideDrawer): mobile landscape styles --- src/routes/Player/SideDrawer/SideDrawer.less | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/routes/Player/SideDrawer/SideDrawer.less b/src/routes/Player/SideDrawer/SideDrawer.less index be3d0af09..efc8d9c35 100644 --- a/src/routes/Player/SideDrawer/SideDrawer.less +++ b/src/routes/Player/SideDrawer/SideDrawer.less @@ -84,7 +84,7 @@ } } -@media (orientation: portrait) and (max-width: @xsmall) { +@media @phone-portrait { .side-drawer { max-width: 100dvw; @@ -94,12 +94,16 @@ } } -@media (orientation: landscape) and (max-width: @xsmall) { +@media @phone-landscape { .side-drawer { max-width: 50dvw; .info { - max-height: 30dvh; + flex: 1; + } + + .series-content { + flex: 3; } } } From 9a2fa6442d3afe11405e45cbe3243fa9f323f63f Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Fri, 24 Jan 2025 17:13:38 +0200 Subject: [PATCH 060/553] refactor(SideDrawer): same flex on series content --- src/routes/Player/SideDrawer/SideDrawer.less | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/routes/Player/SideDrawer/SideDrawer.less b/src/routes/Player/SideDrawer/SideDrawer.less index efc8d9c35..2d2178c3e 100644 --- a/src/routes/Player/SideDrawer/SideDrawer.less +++ b/src/routes/Player/SideDrawer/SideDrawer.less @@ -101,10 +101,6 @@ .info { flex: 1; } - - .series-content { - flex: 3; - } } } From 79a43ef44414264a9b5a9bc671013d8c12934bea Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 28 Jan 2025 11:15:58 +0100 Subject: [PATCH 061/553] 5.0.0-beta.17 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd094aa9c..4477c0b4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "stremio", - "version": "5.0.0-beta.16", + "version": "5.0.0-beta.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "stremio", - "version": "5.0.0-beta.16", + "version": "5.0.0-beta.17", "license": "gpl-2.0", "dependencies": { "@babel/runtime": "7.26.0", diff --git a/package.json b/package.json index e777dd091..9587f9530 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "stremio", "displayName": "Stremio", - "version": "5.0.0-beta.16", + "version": "5.0.0-beta.17", "author": "Smart Code OOD", "private": true, "license": "gpl-2.0", From de1989a8db2993ba6af31e0a861fc7cd142fa030 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 29 Jan 2025 10:03:00 +0100 Subject: [PATCH 062/553] feat(Settings): display shell version when available --- src/routes/Settings/Settings.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/routes/Settings/Settings.js b/src/routes/Settings/Settings.js index d6fcea35d..24eaaaf5d 100644 --- a/src/routes/Settings/Settings.js +++ b/src/routes/Settings/Settings.js @@ -187,6 +187,12 @@ const Settings = () => { : null } + { + typeof shell?.transport?.props?.shellVersion === 'string' ? +
Shell Version: {shell.transport.props.shellVersion}
+ : + null + }
@@ -717,6 +723,23 @@ const Settings = () => { : null } + { + typeof shell?.transport?.props?.shellVersion === 'string' ? +
+
+
+ Shell Version +
+
+
+
+ { shell.transport.props.shellVersion } +
+
+
+ : + null + }
From 9a3be29a3906cb78298c8a7d93c8aa49a4da25e4 Mon Sep 17 00:00:00 2001 From: Botzy Date: Wed, 29 Jan 2025 15:15:29 +0200 Subject: [PATCH 063/553] feat(context menu): enable context menu on right click on video --- src/routes/Player/OptionsMenu/OptionsMenu.js | 7 ++- src/routes/Player/Player.js | 65 +++++++++++++++++--- src/routes/Player/Video/Video.js | 2 +- 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/src/routes/Player/OptionsMenu/OptionsMenu.js b/src/routes/Player/OptionsMenu/OptionsMenu.js index 11738cb3e..89d2d605b 100644 --- a/src/routes/Player/OptionsMenu/OptionsMenu.js +++ b/src/routes/Player/OptionsMenu/OptionsMenu.js @@ -9,7 +9,7 @@ const { useServices } = require('stremio/services'); const Option = require('./Option'); const styles = require('./styles'); -const OptionsMenu = ({ className, stream, playbackDevices }) => { +const OptionsMenu = ({ className, stream, playbackDevices, style }) => { const { t } = useTranslation(); const { core } = useServices(); const platform = usePlatform(); @@ -70,7 +70,7 @@ const OptionsMenu = ({ className, stream, playbackDevices }) => { event.nativeEvent.optionsMenuClosePrevented = true; }, []); return ( -
+
{ streamingUrl || downloadUrl ?