From 1c86451f1d34bdac7540be28a41232ba928cba67 Mon Sep 17 00:00:00 2001 From: Tanishq Gangwani Date: Fri, 24 Oct 2025 00:43:24 +0530 Subject: [PATCH 1/2] feat: add search online function --- package-lock.json | 16 ++++----- package.json | 2 +- src-tauri/src/lib.rs | 56 ++++++++++++++++++----------- src/components/OnlineSearchPage.jsx | 33 ++++++++++++++--- 4 files changed, 73 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index 316c60e..2233351 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@tauri-apps/api": "^2.6.0", "@tauri-apps/plugin-global-shortcut": "^2.3.0", - "@tauri-apps/plugin-opener": "^2", + "@tauri-apps/plugin-opener": "^2.5.0", "fuse.js": "^7.1.0", "react": "^18.3.1", "react-dom": "^18.3.1" @@ -1087,9 +1087,9 @@ ] }, "node_modules/@tauri-apps/api": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.6.0.tgz", - "integrity": "sha512-hRNcdercfgpzgFrMXWwNDBN0B7vNzOzRepy6ZAmhxi5mDLVPNrTpo9MGg2tN/F7JRugj4d2aF7E1rtPXAHaetg==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.9.0.tgz", + "integrity": "sha512-qD5tMjh7utwBk9/5PrTA/aGr3i5QaJ/Mlt7p8NilQ45WgbifUNPyKWsA63iQ8YfQq6R8ajMapU+/Q8nMcPRLNw==", "license": "Apache-2.0 OR MIT", "funding": { "type": "opencollective", @@ -1323,12 +1323,12 @@ } }, "node_modules/@tauri-apps/plugin-opener": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-opener/-/plugin-opener-2.4.0.tgz", - "integrity": "sha512-43VyN8JJtvKWJY72WI/KNZszTpDpzHULFxQs0CJBIYUdCRowQ6Q1feWTDb979N7nldqSuDOaBupZ6wz2nvuWwQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-opener/-/plugin-opener-2.5.0.tgz", + "integrity": "sha512-B0LShOYae4CZjN8leiNDbnfjSrTwoZakqKaWpfoH6nXiJwt6Rgj6RnVIffG3DoJiKsffRhMkjmBV9VeilSb4TA==", "license": "MIT OR Apache-2.0", "dependencies": { - "@tauri-apps/api": "^2.6.0" + "@tauri-apps/api": "^2.8.0" } }, "node_modules/@types/babel__core": { diff --git a/package.json b/package.json index 1cd08dd..8eb89bd 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "@tauri-apps/api": "^2.6.0", "@tauri-apps/plugin-global-shortcut": "^2.3.0", - "@tauri-apps/plugin-opener": "^2", + "@tauri-apps/plugin-opener": "^2.5.0", "fuse.js": "^7.1.0", "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 51a3195..44d5c35 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -242,8 +242,7 @@ fn index_applications() -> Vec { .into_iter() .filter_map(|e| e.ok()) { - let path = entry.path(); - if is_app_file(&path.to_path_buf()) { + let path = entry.path(); if is_app_file(&path.to_path_buf()) { if let (Ok(metadata), Some(name)) = (path.metadata(), path.file_name().and_then(|n| n.to_str())) { let modified = metadata .modified() @@ -497,6 +496,12 @@ fn refresh_file_index( Ok(()) } +#[tauri::command] +fn hide_window(app: tauri::AppHandle) { + if let Some(window) = app.get_webview_window("main") { + let _ = window.hide(); + } +} fn start_clipboard_monitor(app_handle: tauri::AppHandle, db: Arc>) { std::thread::spawn(move || { let mut last_content = String::new(); @@ -545,8 +550,31 @@ fn start_clipboard_monitor(app_handle: tauri::AppHandle, db: Arc { - console.log("Selected:", item); + const { getItemProps } = useKeyboardNavigation([query], async (item, idx) => { + await handleSearch(query); }); + // 2. Removed the redundant useEffect hook. + // 'useKeyboardNavigation' already handles the Enter key. + + const handleSearch = async (searchQuery) => { + if (!searchQuery.trim()) return; + + try { + // Construct search URL (Google search) + const searchUrl = `https://www.google.com/search?q=${encodeURIComponent(searchQuery)}`; + + // 3. Call the correct 'openUrl' function + await openUrl(searchUrl); + + // Hide the PathFinder window + await invoke('hide_window'); + } catch (error) { + console.error("Failed to open browser:", error); + } + }; + return (
handleSearch(query)} > 🌐 - Search online for “{query}” + Search online for "{query}"
); -} +} \ No newline at end of file From 4d3007424aa70aa39d058a0b2e256914b2288214 Mon Sep 17 00:00:00 2001 From: Tanishq Gangwani Date: Sun, 26 Oct 2025 09:56:39 +0530 Subject: [PATCH 2/2] fix: browser search for random query that is not in the list --- src/components/HomeOptions.jsx | 67 ++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/src/components/HomeOptions.jsx b/src/components/HomeOptions.jsx index 7dd3e27..03cdb9a 100644 --- a/src/components/HomeOptions.jsx +++ b/src/components/HomeOptions.jsx @@ -1,4 +1,6 @@ import { useKeyboardNavigation } from "../hooks/useKeyboardNavigation"; +import { openUrl } from '@tauri-apps/plugin-opener'; +import { invoke } from '@tauri-apps/api/core'; import Fuse from "fuse.js"; const OPTIONS = [ @@ -14,29 +16,54 @@ export default function HomeOptions({ query, onSelect, clearQuery }) { ? fuse.search(query).map((result) => result.item) : OPTIONS; - const { getItemProps } = useKeyboardNavigation(filtered, (item) => { - onSelect(item.page); - clearQuery(); + const handleSearch = async (searchQuery) => { + if (!searchQuery.trim()) return; + + try { + // Construct search URL (Google search) + const searchUrl = `https://www.google.com/search?q=${encodeURIComponent(searchQuery)}`; + + // Open URL in browser + await openUrl(searchUrl); + + // Hide the PathFinder window + await invoke('hide_window'); + + // Clear query + clearQuery(); + } catch (error) { + console.error("Failed to open browser:", error); + } + }; + + // If no matches, show web search option + const itemsToShow = filtered.length > 0 + ? filtered + : [{ title: `Search online for "${query}"`, icon: "🌐", isWebSearch: true }]; + + const { getItemProps } = useKeyboardNavigation(itemsToShow, (item) => { + if (item.isWebSearch) { + // Trigger web search + handleSearch(query); + } else { + // Navigate to page + onSelect(item.page); + clearQuery(); + } }); + return (
- {filtered.length ? ( - filtered.map((opt, idx) => ( -
- {opt.icon} - {opt.title} -
- )) - ) : ( -
- 🌐 - Search online for "{query}" + {itemsToShow.map((opt, idx) => ( +
+ {opt.icon} + {opt.title}
- )} + ))}
); -} +} \ No newline at end of file