From a7cb84d4b6c4c954106e09691c347f4481ba3279 Mon Sep 17 00:00:00 2001 From: NimBold Date: Sat, 20 Jun 2026 22:33:32 +0330 Subject: [PATCH] fix(downloads): expand tilde to absolute path in download locations --- src/utils/downloadLocations.ts | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/utils/downloadLocations.ts b/src/utils/downloadLocations.ts index d837d50..3bc2ef9 100644 --- a/src/utils/downloadLocations.ts +++ b/src/utils/downloadLocations.ts @@ -1,6 +1,17 @@ -import { join } from '@tauri-apps/api/path'; +import { join, homeDir } from '@tauri-apps/api/path'; import type { DownloadCategory } from '../bindings/DownloadCategory'; +export const expandTilde = async (path: string): Promise => { + if (path.startsWith('~/') || path.startsWith('~\\')) { + const home = await homeDir(); + return join(home, path.slice(2)); + } + if (path === '~') { + return homeDir(); + } + return path; +}; + export const DOWNLOAD_CATEGORIES: DownloadCategory[] = [ 'Musics', 'Movies', @@ -113,18 +124,22 @@ export const resolveCategoryDestination = async ( category: DownloadCategory ): Promise => { const override = settings.categoryDirectoryOverrides[category]?.trim(); - if (override) return override; + if (override) return expandTilde(override); const base = settings.baseDownloadFolder.trim() || '~/Downloads'; + const expandedBase = await expandTilde(base); const subfolder = normalizeCategorySubfolder( settings.categorySubfolders[category] || '', DEFAULT_CATEGORY_SUBFOLDERS[category] ); - return join(base, subfolder); + return join(expandedBase, subfolder); }; export const resolveDownloadFilePath = async ( destination: string, fileName: string -): Promise => join(destination, fileName); +): Promise => { + const expandedDest = await expandTilde(destination); + return join(expandedDest, fileName); +};