diff --git a/backend/config/settings.py b/backend/config/settings.py index 892416e3..f19688e0 100644 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -223,7 +223,7 @@ CORS_ALLOW_HEADERS = list(default_headers) + [ # TA application settings TA_UPSTREAM = "https://github.com/tubearchivist/tubearchivist" -TA_VERSION = "v0.5.7" +TA_VERSION = "v0.5.8-unstable" # API REST_FRAMEWORK = { diff --git a/backend/requirements.txt b/backend/requirements.txt index 976fa2b4..31a3a214 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -12,4 +12,4 @@ requests==2.32.5 ryd-client==0.0.6 uvicorn==0.35.0 whitenoise==6.9.0 -yt-dlp[default]==2025.8.20 +yt-dlp[default]==2025.8.22 diff --git a/backend/user/serializers.py b/backend/user/serializers.py index dea69916..4a54aa4c 100644 --- a/backend/user/serializers.py +++ b/backend/user/serializers.py @@ -42,6 +42,8 @@ class UserMeConfigSerializer(serializers.Serializer): ) grid_items = serializers.IntegerField(max_value=7, min_value=3) hide_watched = serializers.BooleanField(allow_null=True) + hide_watched_channel = serializers.BooleanField(allow_null=True) + hide_watched_playlist = serializers.BooleanField(allow_null=True) file_size_unit = serializers.ChoiceField(choices=["binary", "metric"]) show_ignored_only = serializers.BooleanField() show_subed_only = serializers.BooleanField(allow_null=True) diff --git a/backend/user/src/user_config.py b/backend/user/src/user_config.py index 5037c390..8cd5c01d 100644 --- a/backend/user/src/user_config.py +++ b/backend/user/src/user_config.py @@ -23,6 +23,8 @@ class UserConfigType(TypedDict, total=False): vid_type_filter: str | None grid_items: int hide_watched: bool | None + hide_watched_channel: bool | None + hide_watched_playlist: bool | None file_size_unit: str show_ignored_only: bool show_subed_only: bool | None @@ -48,6 +50,8 @@ class UserConfig: vid_type_filter=None, grid_items=3, hide_watched=False, + hide_watched_channel=None, + hide_watched_playlist=None, file_size_unit="binary", show_ignored_only=False, show_subed_only=None, diff --git a/frontend/src/api/actions/updateUserConfig.ts b/frontend/src/api/actions/updateUserConfig.ts index d9a4b7f8..0fedd650 100644 --- a/frontend/src/api/actions/updateUserConfig.ts +++ b/frontend/src/api/actions/updateUserConfig.ts @@ -34,6 +34,8 @@ export type UserConfigType = { vid_type_filter: VideoTypes | null; grid_items: number; hide_watched: boolean | null; + hide_watched_channel: boolean | null; + hide_watched_playlist: boolean | null; file_size_unit: 'binary' | 'metric'; show_ignored_only: boolean; show_subed_only: boolean | null; diff --git a/frontend/src/components/Filterbar.tsx b/frontend/src/components/Filterbar.tsx index a03e5392..95f3c8f9 100644 --- a/frontend/src/components/Filterbar.tsx +++ b/frontend/src/components/Filterbar.tsx @@ -21,14 +21,21 @@ import { useFilterBarTempConf } from '../stores/FilterbarTempConf'; import { useVideoSelectionStore } from '../stores/VideoSelectionStore'; import Button from './Button'; import updateDownloadQueue from '../api/actions/updateDownloadQueue'; +import { HideWatchedType } from '../configuration/constants/HideWatched'; type FilterbarProps = { viewStyle: ViewStyleNamesType; + hideWatched: HideWatchedType; showSort?: boolean; showTypeFilter?: boolean; }; -const Filterbar = ({ viewStyle, showSort = true, showTypeFilter = false }: FilterbarProps) => { +const Filterbar = ({ + viewStyle, + hideWatched, + showSort = true, + showTypeFilter = false, +}: FilterbarProps) => { const { userConfig, setUserConfig } = useUserConfigStore(); const { selectedVideoIds, @@ -44,6 +51,7 @@ const Filterbar = ({ viewStyle, showSort = true, showTypeFilter = false }: Filte useFilterBarTempConf(); const currentViewStyle = userConfig[viewStyle]; + const currentHideWatched = userConfig[hideWatched]; const isGridView = currentViewStyle === ViewStylesEnum.Grid; useEffect(() => { @@ -114,10 +122,10 @@ const Filterbar = ({ viewStyle, showSort = true, showTypeFilter = false }: Filte
Filter: