diff --git a/src/App.tsx b/src/App.tsx index 7ac326f..4c8a4a9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -70,6 +70,10 @@ export default function App({ children }: { children: React.ReactNode }) { const EMBED_VIDEO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_video_metadata); const EMBED_AUDIO_METADATA = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata); const EMBED_AUDIO_THUMBNAIL = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail); + const USE_COOKIES = useSettingsPageStatesStore(state => state.settings.use_cookies); + const IMPORT_COOKIES_FROM = useSettingsPageStatesStore(state => state.settings.import_cookies_from); + const COOKIES_BROWSER = useSettingsPageStatesStore(state => state.settings.cookies_browser); + const COOKIES_FILE = useSettingsPageStatesStore(state => state.settings.cookies_file); const isErrored = useDownloaderPageStatesStore((state) => state.isErrored); const isErrorExpected = useDownloaderPageStatesStore((state) => state.isErrorExpected); @@ -112,6 +116,13 @@ export default function App({ children }: { children: React.ReactNode }) { if (STRICT_DOWNLOADABILITY_CHECK && !formatId) args.push('--check-all-formats'); if (STRICT_DOWNLOADABILITY_CHECK && formatId) args.push('--check-formats'); if (USE_PROXY && PROXY_URL) args.push('--proxy', PROXY_URL); + if (USE_COOKIES) { + if (IMPORT_COOKIES_FROM === 'browser' && COOKIES_BROWSER) { + args.push('--cookies-from-browser', COOKIES_BROWSER); + } else if (IMPORT_COOKIES_FROM === 'file' && COOKIES_FILE) { + args.push('--cookies', COOKIES_FILE); + } + }; const command = Command.sidecar('binaries/yt-dlp', args); let jsonOutput = ''; @@ -273,6 +284,14 @@ export default function App({ children }: { children: React.ReactNode }) { args.push('--limit-rate', `${RATE_LIMIT}`); } + if (USE_COOKIES) { + if (IMPORT_COOKIES_FROM === 'browser' && COOKIES_BROWSER) { + args.push('--cookies-from-browser', COOKIES_BROWSER); + } else if (IMPORT_COOKIES_FROM === 'file' && COOKIES_FILE) { + args.push('--cookies', COOKIES_FILE); + } + } + console.log('Starting download with args:', args); const command = Command.sidecar('binaries/yt-dlp', args); diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx index dad0b54..be1ec26 100644 --- a/src/pages/settings.tsx +++ b/src/pages/settings.tsx @@ -7,7 +7,7 @@ import { Switch } from "@/components/ui/switch"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import { toast } from "sonner"; -import { ArrowDownToLine, ArrowRight, BrushCleaning, EthernetPort, ExternalLink, FileVideo, Folder, FolderOpen, Info, Loader2, LucideIcon, Monitor, Moon, Radio, RotateCcw, RotateCw, Sun, Terminal, WandSparkles, Wifi, Wrench } from "lucide-react"; +import { ArrowDownToLine, ArrowRight, BrushCleaning, Cookie, EthernetPort, ExternalLink, FileVideo, Folder, FolderOpen, Info, Loader2, LucideIcon, Monitor, Moon, Radio, RotateCcw, RotateCw, Sun, Terminal, WandSparkles, Wifi, Wrench } from "lucide-react"; import { cn } from "@/lib/utils"; import { useEffect } from "react"; import { useTheme } from "@/providers/themeProvider"; @@ -95,6 +95,11 @@ export default function SettingsPage() { const embedVideoMetadata = useSettingsPageStatesStore(state => state.settings.embed_video_metadata); const embedAudioMetadata = useSettingsPageStatesStore(state => state.settings.embed_audio_metadata); const embedAudioThumbnail = useSettingsPageStatesStore(state => state.settings.embed_audio_thumbnail); + const useCookies = useSettingsPageStatesStore(state => state.settings.use_cookies); + const importCookiesFrom = useSettingsPageStatesStore(state => state.settings.import_cookies_from); + const cookiesBrowser = useSettingsPageStatesStore(state => state.settings.cookies_browser); + const cookiesFile = useSettingsPageStatesStore(state => state.settings.cookies_file); + const websocketPort = useSettingsPageStatesStore(state => state.settings.websocket_port); const isChangingWebSocketPort = useSettingsPageStatesStore(state => state.isChangingWebSocketPort); const setIsChangingWebSocketPort = useSettingsPageStatesStore(state => state.setIsChangingWebSocketPort); @@ -384,9 +389,14 @@ export default function SettingsPage() { value="network" className="data-[state=active]:bg-primary data-[state=active]:text-primary-foreground justify-start px-3 py-1.5 gap-2" > Network + Cookies
- +

Max Parallel Downloads

Set maximum number of allowed parallel downloads

@@ -432,7 +442,7 @@ export default function SettingsPage() {
- +

Theme

Choose app interface theme

@@ -455,7 +465,7 @@ export default function SettingsPage() {
- +

Download Folder

Set default download folder (directory)

@@ -515,7 +525,7 @@ export default function SettingsPage() {
- +

Video Format

Choose in which format the final video file will be saved

@@ -580,7 +590,7 @@ export default function SettingsPage() { />
- +

Embed Metadata

Wheather to embed metadata in video/audio files (info, chapters)

@@ -611,7 +621,7 @@ export default function SettingsPage() { />
- +

Proxy

Use proxy for downloads, Unblocks blocked sites in your region (download speed may affect, some sites may not work)

@@ -693,6 +703,93 @@ export default function SettingsPage() {
+ +
+

Cookies

+

Use cookies to access exclusive/private (login-protected) contents from sites (use wisely, over-use can even block/ban your account)

+
+ saveSettingsKey('use_cookies', checked)} + /> + +
+ saveSettingsKey('import_cookies_from', value)} + disabled={!useCookies} + > +
+ + +
+
+ + +
+
+
+ + +
+
+ +
+ + +
+
+
+
diff --git a/src/services/store.ts b/src/services/store.ts index b5dd523..68f4958 100644 --- a/src/services/store.ts +++ b/src/services/store.ts @@ -141,6 +141,11 @@ export const useSettingsPageStatesStore = create((set) embed_video_metadata: false, embed_audio_metadata: true, embed_audio_thumbnail: true, + use_cookies: false, + import_cookies_from: 'browser', + cookies_browser: 'firefox', + cookies_file: '', + // extension settings websocket_port: 53511 }, isUsingDefaultSettings: true, @@ -185,6 +190,11 @@ export const useSettingsPageStatesStore = create((set) embed_video_metadata: false, embed_audio_metadata: true, embed_audio_thumbnail: true, + use_cookies: false, + import_cookies_from: 'browser', + cookies_browser: 'firefox', + cookies_file: '', + // extension settings websocket_port: 53511 }, isUsingDefaultSettings: true diff --git a/src/types/settings.ts b/src/types/settings.ts index 4a2d76d..e03201c 100644 --- a/src/types/settings.ts +++ b/src/types/settings.ts @@ -22,6 +22,10 @@ export interface Settings { embed_video_metadata: boolean; embed_audio_metadata: boolean; embed_audio_thumbnail: boolean; + use_cookies: boolean; + import_cookies_from: string; + cookies_browser: string; + cookies_file: string; // extension settings websocket_port: number; } \ No newline at end of file