diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 5b93db0..6232b84 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -47,12 +47,14 @@ pub async fn start_download(app: AppHandle, url: String, options: DownloadOption let status = if res.is_ok() { "success" } else { "failed" }; // Add to history + let output_dir = options.output_path.clone(); // Store the directory user selected + let item = HistoryItem { id: id_clone, title: metadata.title, thumbnail: metadata.thumbnail, url: url, - output_path: format!("{}/", options.output_path), // Rough path, real path is dynamic + output_path: output_dir, timestamp: chrono::Utc::now(), status: status.to_string(), format: options.quality, diff --git a/src/views/Home.vue b/src/views/Home.vue index f4dca96..2be54d4 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -67,11 +67,18 @@ async function startDownload() { { title: metadata.value.title, thumbnail: "", id: metadata.value.id } : // Playlist metadata.value; // Video - const id = await invoke('start_download', { - url: url.value, - options: options.value, - metadata: metaToSend - }) + // Output template + // IMPORTANT: history item should store the directory, not the full template path + // The downloader handles the template appending internally. + + // We need to pass the directory path to the command, which is what options.value.output_path holds. + // The downloader.rs logic appends the filename template. + + const id = await invoke('start_download', { + url: url.value, + options: options.value, + metadata: metaToSend + }) // Add to queue store immediately for UI queueStore.addTask({