From cf290361c50f52fb9045111db0088292b263e20d Mon Sep 17 00:00:00 2001 From: Jeff Date: Mon, 4 Apr 2022 19:38:54 +0800 Subject: [PATCH 1/7] I18n fix --- src/Items.js | 6 +++--- src/index.css | 6 +++--- src/index.js | 10 ++++++++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Items.js b/src/Items.js index 60f46b5..504d4fd 100644 --- a/src/Items.js +++ b/src/Items.js @@ -168,7 +168,7 @@ function Items({kw,items, setItems}) { return [ { type: 'li', - text: 'Open', + text: t("rmenu-open"), callback: () => { open_file_location(row) } @@ -176,13 +176,13 @@ function Items({kw,items, setItems}) { // { type: 'li', - text: 'Copy Path', + text: t("rmenu-copy-path"), callback: () => copy(row.abs_path) }, { type: 'li', - text: 'Open in Terminal', + text: t("rmenu-open-in-terminal"), callback: () => { open_file_location_in_terminal(row) } diff --git a/src/index.css b/src/index.css index 7aad588..4798a74 100644 --- a/src/index.css +++ b/src/index.css @@ -20,9 +20,9 @@ body { div.ms-SelectionZone { } -/*div.ms-Callout-container > div {*/ -/* width: 100% !important;*/ -/*}*/ +.search-box div.ms-Callout-container > div { + width: 100% !important; +} .ms-BasePicker-text { border: 1px solid rgb(96, 94, 92); diff --git a/src/index.js b/src/index.js index 8e3a34d..ac1967f 100644 --- a/src/index.js +++ b/src/index.js @@ -49,7 +49,10 @@ let _ = i18n "cancel":"Cancel", "add_exclude_path_err":"Invalid path", "upgrade":"Upgrade", - "version":"Version V" + "version":"Version V", + "rmenu-open":"Open", + "rmenu-copy-path":"Copy Path", + "rmenu-open-in-terminal":"Open in Terminal", } }, @@ -79,7 +82,10 @@ let _ = i18n "cancel":"取消", "add_exclude_path_err":"非法路径", "upgrade":"升级", - "version":"版本 V" + "version":"版本 V", + "rmenu-open":"打开", + "rmenu-copy-path":"复制路径", + "rmenu-open-in-terminal":"Terminal打开", } } }, From c8baf82417aa39c0e89bc6f7556c851c44fc4c90 Mon Sep 17 00:00:00 2001 From: Jeff Date: Mon, 4 Apr 2022 20:37:12 +0800 Subject: [PATCH 2/7] Progress indicator --- src/App.css | 38 -------------------------------------- src/App.js | 35 ++++++++++++++++++++++++++++++----- src/index.css | 34 ++++++++++++++++++++++++++++++++-- src/index.js | 5 ++++- src/utils.js | 24 ++++++++++++++---------- 5 files changed, 80 insertions(+), 56 deletions(-) delete mode 100644 src/App.css diff --git a/src/App.css b/src/App.css deleted file mode 100644 index 78b8850..0000000 --- a/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/src/App.js b/src/App.js index d184f9c..f8e76f8 100644 --- a/src/App.js +++ b/src/App.js @@ -1,11 +1,10 @@ import * as React from 'react'; import {useEffect, useState} from 'react'; -import './App.css'; import Items from "./Items"; import {Scrollbars} from 'react-custom-scrollbars'; import SearchBox from "./SearchBox"; -import {Dialog, DialogFooter, DialogType, PrimaryButton} from "@fluentui/react"; -import {change_lang, get_lang} from "./utils"; +import {Dialog, DialogFooter, DialogType, PrimaryButton, ProgressIndicator} from "@fluentui/react"; +import {change_lang, get_lang, walk_metrics} from "./utils"; import {appWindow} from '@tauri-apps/api/window' import {useBoolean} from '@fluentui/react-hooks'; import Tab from "./Tab"; @@ -29,10 +28,11 @@ const App = ({setTheme,theme}) => { const [hideDialog, {toggle: toggleHideDialog}] = useBoolean(true); let [init, setInit] = useState(false); let [lang, setLang] = useState(false); - const { t } = useTranslation(); + let [percent, setPercent] = useState(0); + let [totalFiles, setTotalFiles] = useState(0); + const { t } = useTranslation(); useEffect(() => { - if (!init) { get_lang().then(lang => { @@ -52,6 +52,14 @@ const App = ({setTheme,theme}) => { } }) + setInterval(()=>{ + walk_metrics().then(({percent,total_files}) => { + console.log(123) + setPercent(percent); + setTotalFiles(total_files); + }) + },2000) + appWindow.listen('reindex', ({event, payload}) => { if (hideDialog) { toggleHideDialog(); @@ -84,6 +92,23 @@ const App = ({setTheme,theme}) => { +
+ +
+
+ {t("progress")} +
+
+ +
+
+
+ {t("file-indexed")}{totalFiles.toLocaleString()} +
+ {/*
*/} + {/* V{version}*/} + {/*
*/} +
); }; diff --git a/src/index.css b/src/index.css index 4798a74..80b41c0 100644 --- a/src/index.css +++ b/src/index.css @@ -6,7 +6,7 @@ body { user-select: none; } .body { - padding: 10px 10px; + padding: 10px 10px 0 10px; } .ms-FocusZone { @@ -51,7 +51,7 @@ div.ms-SelectionZone { } .items { - height: calc(100vh - 125px); + height: calc(100vh - 142px); } .items .ms-DetailsList{ @@ -141,3 +141,33 @@ body { .ms-Dropdown{ width: 290px !important; } + + +.status-bar{ + padding: 3px 0 ; + display: flex; + flex-direction: row-reverse; + height: 20px; + border-top: 1px solid #eee; + font-size: 13px; + /*justify-content: space-between;*/ +} +.status-bar .progress{ + width: 160px; + display: flex; +} +.status-bar .progress>.name{ + margin-right: 5px; + white-space: nowrap; +} +.status-bar .progress>.cmpt{ + width: 160px !important; + display: flex; + /*display: flex;*/ +} +.status-bar .progress .ms-ProgressIndicator{ + width: 100% !important; +} +.status-bar .files{ + margin-right: 20px; +} \ No newline at end of file diff --git a/src/index.js b/src/index.js index ac1967f..05061d8 100644 --- a/src/index.js +++ b/src/index.js @@ -53,7 +53,8 @@ let _ = i18n "rmenu-open":"Open", "rmenu-copy-path":"Copy Path", "rmenu-open-in-terminal":"Open in Terminal", - + "progress":"Progress: ", + "file-indexed":"File indexed: ", } }, "zh-CN":{ @@ -86,6 +87,8 @@ let _ = i18n "rmenu-open":"打开", "rmenu-copy-path":"复制路径", "rmenu-open-in-terminal":"Terminal打开", + "progress":"进度: ", + "file-indexed":"已索引文件: ", } } }, diff --git a/src/utils.js b/src/utils.js index 26a4148..34e4dae 100644 --- a/src/utils.js +++ b/src/utils.js @@ -6,11 +6,13 @@ const fileType2ext = { 3: "mp4 mov avi flv f4v mkv", 2: "doc txt pdf ppt pptx docx xlsx xls", } + export async function suggest(kw) { return await invoke('suggest', { kw: kw }); } + export async function search(kw, no) { let ext = fileType2ext[no]; let dirOpt = undefined; @@ -26,7 +28,6 @@ export async function search(kw, no) { }); } - export function open_file_location_in_terminal(row) { let _ = invoke('open_file_in_terminal', { kw: row.abs_path @@ -38,9 +39,9 @@ export function open_file_location(row) { kw: row.abs_path }); } + export async function get_lang() { - return await invoke('get_lang', { - }); + return await invoke('get_lang', {}); } export function change_lang(lang) { @@ -50,9 +51,13 @@ export function change_lang(lang) { } +export async function walk_metrics() { + return await invoke('walk_metrics', {}); + +} + export async function get_theme() { - return await invoke('get_theme', { - }); + return await invoke('get_theme', {}); } export function change_theme(theme) { @@ -60,6 +65,7 @@ export function change_theme(theme) { theme: theme }); } + export async function add_exclude_path(path) { return await invoke('add_exclude_path', { @@ -68,19 +74,17 @@ export async function add_exclude_path(path) { } export async function remove_exclude_path(path) { - return await invoke('remove_exclude_path', { + return await invoke('remove_exclude_path', { path: path }); } export function upgrade() { - let _ = invoke('upgrade', { - }); + let _ = invoke('upgrade', {}); } export function reindex() { - let _ = invoke('reindex', { - }); + let _ = invoke('reindex', {}); } export async function get_exclude_paths() { From d8779c8848ffbd819b0d4ac88be1a9d43f7631e5 Mon Sep 17 00:00:00 2001 From: Jeff Date: Mon, 4 Apr 2022 23:35:04 +0800 Subject: [PATCH 3/7] Add Traditional Chinese support --- src-tauri/Cargo.lock | 420 +++++++++++++++++++++++++++++++++- src-tauri/Cargo.toml | 2 +- src-tauri/src/idx_store.rs | 13 ++ src-tauri/src/indexing.rs | 6 +- src-tauri/src/walk_exec.rs | 39 +--- src-tauri/src/walk_metrics.rs | 9 + 6 files changed, 451 insertions(+), 38 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 244a3b3..68cdcc9 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -82,6 +82,7 @@ dependencies = [ "webbrowser", "windows 0.29.0", "winres", + "zhconv", ] [[package]] @@ -575,6 +576,36 @@ dependencies = [ "cache-padded", ] +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen", +] + +[[package]] +name = "const_format" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22bc6cd49b0ec407b680c3e380182b6ac63b73991cb7602de350352fc309b614" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef196d5d972878a48da7decb7686eded338b4858fbabeed513d63a7c98b2b82d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -1012,6 +1043,35 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +[[package]] +name = "encoding_rs" +version = "0.8.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "enum-iterator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "enumflags2" version = "0.7.3" @@ -1426,6 +1486,18 @@ dependencies = [ "wasi 0.10.2+wasi-snapshot-preview1", ] +[[package]] +name = "getset" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "gio" version = "0.15.7" @@ -1469,6 +1541,19 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "git2" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3826a6e0e2215d7a41c2bfc7c9244123969273f3476b939a226aac0ab56e9e3c" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "url", +] + [[package]] name = "glib" version = "0.15.9" @@ -1620,6 +1705,25 @@ dependencies = [ "syn", ] +[[package]] +name = "h2" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.11.2" @@ -1659,6 +1763,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + [[package]] name = "html5ever" version = "0.25.1" @@ -1690,12 +1800,35 @@ dependencies = [ "itoa 1.0.1", ] +[[package]] +name = "http-body" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + [[package]] name = "http-range" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" +[[package]] +name = "httparse" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + [[package]] name = "humantime" version = "1.3.0" @@ -1705,6 +1838,43 @@ dependencies = [ "quick-error", ] +[[package]] +name = "hyper" +version = "0.14.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.1", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "ico" version = "0.1.0" @@ -1816,6 +1986,12 @@ dependencies = [ "libc", ] +[[package]] +name = "ipnet" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" + [[package]] name = "itertools" version = "0.10.3" @@ -2016,6 +2192,30 @@ version = "0.2.119" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" +[[package]] +name = "libgit2-sys" +version = "0.13.2+1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a42de9a51a5c12e00fc0e4ca6bc2ea43582fc6418488e8f615e905d886f258b" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libz-sys" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f35facd4a5673cb5a48822be2be1d4236c1c99cb4113cab7061ac720d5bf859" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linked-hash-map" version = "0.5.4" @@ -2194,6 +2394,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + [[package]] name = "miniz_oxide" version = "0.3.7" @@ -2226,12 +2432,26 @@ dependencies = [ "kernel32-sys", "libc", "log", - "miow", + "miow 0.2.2", "net2", "slab", "winapi 0.2.8", ] +[[package]] +name = "mio" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +dependencies = [ + "libc", + "log", + "miow 0.3.7", + "ntapi", + "wasi 0.11.0+wasi-snapshot-preview1", + "winapi 0.3.9", +] + [[package]] name = "mio-extras" version = "2.0.6" @@ -2240,7 +2460,7 @@ checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" dependencies = [ "lazycell", "log", - "mio", + "mio 0.6.23", "slab", ] @@ -2256,6 +2476,15 @@ dependencies = [ "ws2_32-sys", ] +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "murmurhash32" version = "0.2.0" @@ -2384,7 +2613,7 @@ dependencies = [ "fsevent-sys", "inotify", "libc", - "mio", + "mio 0.6.23", "mio-extras", "walkdir", "winapi 0.3.9", @@ -2404,6 +2633,15 @@ dependencies = [ "zvariant_derive", ] +[[package]] +name = "ntapi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "num-integer" version = "0.1.44" @@ -3152,6 +3390,42 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "reqwest" +version = "0.11.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "lazy_static", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "rfd" version = "0.7.0" @@ -3648,6 +3922,15 @@ dependencies = [ "strum_macros 0.22.0", ] +[[package]] +name = "strum" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb" +dependencies = [ + "strum_macros 0.23.1", +] + [[package]] name = "strum_macros" version = "0.18.0" @@ -3684,6 +3967,19 @@ dependencies = [ "syn", ] +[[package]] +name = "strum_macros" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38" +dependencies = [ + "heck 0.3.3", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "subtle" version = "2.4.1" @@ -3701,6 +3997,20 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "sysinfo" +version = "0.23.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f3c0db8e08e06cfd352a043bd0143498fb7d42783a6e941da83b55464eb27d2" +dependencies = [ + "cfg-if 1.0.0", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi 0.3.9", +] + [[package]] name = "system-deps" version = "3.2.0" @@ -4179,9 +4489,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" dependencies = [ "bytes", + "libc", "memchr", + "mio 0.8.2", "num_cpus", "pin-project-lite", + "socket2", + "winapi 0.3.9", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", ] [[package]] @@ -4193,6 +4531,12 @@ dependencies = [ "serde", ] +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + [[package]] name = "tracing" version = "0.1.32" @@ -4270,6 +4614,12 @@ dependencies = [ "serde_json", ] +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + [[package]] name = "twox-hash" version = "1.6.2" @@ -4396,6 +4746,24 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[package]] +name = "vergen" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3893329bee75c101278e0234b646fa72221547d63f97fb66ac112a0569acd110" +dependencies = [ + "anyhow", + "cfg-if 1.0.0", + "chrono", + "enum-iterator", + "getset", + "git2", + "rustc_version 0.4.0", + "rustversion", + "sysinfo", + "thiserror", +] + [[package]] name = "version-compare" version = "0.0.11" @@ -4431,6 +4799,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -4443,6 +4821,12 @@ version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" version = "0.2.79" @@ -4846,6 +5230,15 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1" +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "winres" version = "0.1.12" @@ -5012,6 +5405,27 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zhconv" +version = "0.1.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dd792f0aa4c0d31295063f1fd70f697cce83d97f010c18b49d2c34b149b7a7" +dependencies = [ + "aho-corasick", + "console_error_panic_hook", + "const_format", + "hex-literal", + "itertools", + "lazy_static", + "once_cell", + "regex", + "reqwest", + "sha2", + "strum 0.23.0", + "vergen", + "wasm-bindgen", +] + [[package]] name = "zstd" version = "0.10.0+zstd.1.5.2" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 7ab05f2..ba2e759 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -45,7 +45,7 @@ jwalk = "0.6.0" convert_case = "0.1.0" lazy_static = "1.4.0" webbrowser = "0.6.0" - +zhconv = "0.1.0-beta.2" [features] # by default Tauri runs in production mode # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL diff --git a/src-tauri/src/idx_store.rs b/src-tauri/src/idx_store.rs index de155af..b7abc84 100644 --- a/src-tauri/src/idx_store.rs +++ b/src-tauri/src/idx_store.rs @@ -19,6 +19,7 @@ use tantivy::{doc, Index, IndexReader, IndexWriter, ReloadPolicy}; use crate::file_view::FileView; use crate::utils; use crate::utils::is_ascii_alphanumeric; +use zhconv::{zhconv, Variant}; lazy_static! { pub static ref IDX_STORE: IdxStore = { @@ -48,6 +49,7 @@ impl IdxStore { } let space = " "; let hans = hans.replace("-", space).replace("_", space); + let hans = zhconv(&hans, Variant::ZhHans); let words = self.tokenizer.cut(&hans, false); let mut token_text: HashSet = vec![].into_iter().collect(); @@ -56,6 +58,17 @@ impl IdxStore { token_text.insert(word.to_string()); } token_text.insert(hans.clone()); + + let hans = zhconv(&hans, Variant::ZhHant); + let words = self.tokenizer.cut(&hans, false); + + let mut token_text: HashSet = vec![].into_iter().collect(); + + for word in words { + token_text.insert(word.to_string()); + } + token_text.insert(hans.clone()); + token_text.into_iter().collect::>().join(" ") } diff --git a/src-tauri/src/indexing.rs b/src-tauri/src/indexing.rs index 7b37e1c..927fc72 100644 --- a/src-tauri/src/indexing.rs +++ b/src-tauri/src/indexing.rs @@ -2,6 +2,7 @@ use crate::idx_store::IDX_STORE; use crate::kv_store::CONF_STORE; use crate::{utils, walk_exec, watch_exec}; use log::info; +use crate::walk_metrics::WALK_METRICS; #[cfg(windows)] use log::error; @@ -43,7 +44,7 @@ fn do_run() { }; IDX_STORE.disable_full_indexing(); - + WALK_METRICS.write().unwrap().end_of_no_reindex(); info!("start fs watch"); #[cfg(windows)] @@ -51,11 +52,10 @@ fn do_run() { if reindex { info!("use watcher due to reindex"); watch_exec::run(); - }else { + } else { info!("try use usn"); win_watch(); } - } #[cfg(unix)] watch_exec::run(); diff --git a/src-tauri/src/walk_exec.rs b/src-tauri/src/walk_exec.rs index 922a27c..9cdc9a4 100644 --- a/src-tauri/src/walk_exec.rs +++ b/src-tauri/src/walk_exec.rs @@ -10,30 +10,23 @@ use jwalk::{DirEntry, WalkDir}; use log::info; use std::sync::{Arc, Mutex}; +use crate::walk_metrics::WALK_METRICS; use std::time::SystemTime; -static mut WALK_METRICS: Option>> = None; - pub fn home_dir() -> String { let option = dirs::home_dir(); option.unwrap().to_str().unwrap().to_string() } pub unsafe fn get_walk_matrix() -> WalkMatrixView { - if WALK_METRICS.is_none() && !IDX_STORE.is_full_indexing() { - return WalkMatrixView::new(100, IDX_STORE.num_docs()); - } WALK_METRICS - .clone() - .unwrap() - .lock() + .read() .unwrap() .view(move || IDX_STORE.num_docs()) } use crate::user_setting::USER_SETTING; pub fn run() { - init_walk_matrix(); let home = utils::norm(&home_dir()); start_walk_home_matrix(); @@ -69,23 +62,11 @@ fn need_skip_home(home: &String) -> bool { } fn end_walk_home_matrix() { - unsafe { - let walk_matrix0 = WALK_METRICS.clone().unwrap(); - walk_matrix0.lock().unwrap().end_home(); - } + WALK_METRICS.read().unwrap().end_home(); } fn start_walk_home_matrix() { - unsafe { - let walk_matrix0 = WALK_METRICS.clone().unwrap(); - walk_matrix0.lock().unwrap().start_home(); - } -} - -fn init_walk_matrix() { - unsafe { - WALK_METRICS = Some(Arc::new(Mutex::new(WalkMetrics::default()))); - } + WALK_METRICS.write().unwrap().start_home(); } #[cfg(unix)] @@ -107,14 +88,10 @@ fn unix_walk_root(home: String) { } fn inc_root_walk_metrics(sz: usize, i: usize) { - unsafe { - WALK_METRICS - .clone() - .unwrap() - .lock() - .unwrap() - .root_inc_percent((i + 1) as u32, sz as u32); - } + WALK_METRICS + .write() + .unwrap() + .root_inc_percent((i + 1) as u32, sz as u32); } #[cfg(windows)] diff --git a/src-tauri/src/walk_metrics.rs b/src-tauri/src/walk_metrics.rs index 77ec3cd..3c652fc 100644 --- a/src-tauri/src/walk_metrics.rs +++ b/src-tauri/src/walk_metrics.rs @@ -5,6 +5,10 @@ use std::sync::{Arc, RwLock}; use std::thread; use std::time::Duration; +lazy_static! { + pub static ref WALK_METRICS: RwLock = RwLock::new(WalkMetrics::default()); +} + #[derive(Debug)] pub struct WalkMetrics { percent: Arc>, @@ -70,6 +74,11 @@ impl WalkMetrics { self.home_over.store(true, Ordering::Relaxed); } + pub fn end_of_no_reindex(&self) { + self.home_over.store(true, Ordering::Relaxed); + *self.percent.write().unwrap() = 100; + } + pub fn root_inc_percent(&mut self, walked_dir: u32, total_dir: u32) { *self.percent.write().unwrap() = (walked_dir * 70 / total_dir) + 30; } From ff2fddd6e8d85cd8c3e61719c4cf5de6880d9dd7 Mon Sep 17 00:00:00 2001 From: Jeff Date: Tue, 5 Apr 2022 11:53:59 +0800 Subject: [PATCH 4/7] Traditional Chinese index & highlighting fix --- src-tauri/Cargo.toml | 6 ++-- src-tauri/src/file_view.rs | 6 +++- src-tauri/src/idx_store.rs | 43 ++++++++++++++---------- src-tauri/src/indexing.rs | 2 +- src-tauri/src/ui.rs | 8 +++-- src-tauri/tauri.conf.json | 2 +- src/App.js | 26 ++++++++------- src/Items.js | 5 ++- src/SearchBox.js | 67 +++++++++++++++++++++++--------------- src/Tab.js | 9 +++-- 10 files changed, 103 insertions(+), 71 deletions(-) diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index ba2e759..3b81cab 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "app" -version = "0.1.0" +version = "0.6.0" description = "A Tauri App" authors = ["you"] license = "" @@ -54,5 +54,5 @@ default = [ "custom-protocol" ] # DO NOT remove this custom-protocol = [ "tauri/custom-protocol" ] -#[profile.test] -#opt-level=3 +[profile.test] +opt-level=3 diff --git a/src-tauri/src/file_view.rs b/src-tauri/src/file_view.rs index bede6e7..e0f23f5 100644 --- a/src-tauri/src/file_view.rs +++ b/src-tauri/src/file_view.rs @@ -9,7 +9,11 @@ pub struct FileView { pub size: u64, pub is_dir: bool, } - +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct SearchResult { + pub file_view: Vec, + pub tokenized: String, +} #[test] fn t1() { let file = FileView { diff --git a/src-tauri/src/idx_store.rs b/src-tauri/src/idx_store.rs index b7abc84..7f3b847 100644 --- a/src-tauri/src/idx_store.rs +++ b/src-tauri/src/idx_store.rs @@ -16,7 +16,7 @@ use tantivy::query::{BooleanQuery, FuzzyTermQuery, Occur, QueryParser, TermQuery use tantivy::schema::*; use tantivy::{doc, Index, IndexReader, IndexWriter, ReloadPolicy}; -use crate::file_view::FileView; +use crate::file_view::{FileView, SearchResult}; use crate::utils; use crate::utils::is_ascii_alphanumeric; use zhconv::{zhconv, Variant}; @@ -48,7 +48,7 @@ impl IdxStore { return self.ascii_tokenize(hans); } let space = " "; - let hans = hans.replace("-", space).replace("_", space); + let hans = hans.replace("-", space).replace("+",space).replace("_", space); let hans = zhconv(&hans, Variant::ZhHans); let words = self.tokenizer.cut(&hans, false); @@ -59,22 +59,16 @@ impl IdxStore { } token_text.insert(hans.clone()); - let hans = zhconv(&hans, Variant::ZhHant); - let words = self.tokenizer.cut(&hans, false); - - let mut token_text: HashSet = vec![].into_iter().collect(); - - for word in words { - token_text.insert(word.to_string()); - } - token_text.insert(hans.clone()); - token_text.into_iter().collect::>().join(" ") } fn ascii_tokenize(&self, asc: String) -> String { - let string = asc.to_case(Case::Title).to_lowercase(); - return format!("{} {}", string, asc.to_lowercase()); + let title_lowercase = asc.to_case(Case::Title).to_lowercase(); + let raw_lowercase = asc.to_lowercase(); + if title_lowercase.eq(&raw_lowercase) { + return title_lowercase; + } + return format!("{} {}", title_lowercase, raw_lowercase); } pub fn tokenize(&self, hans: String) -> String { // return hans; @@ -84,6 +78,8 @@ impl IdxStore { } let space = " "; let hans = hans.replace("-", space).replace("_", space); + let hans = zhconv(&hans, Variant::ZhHans); + let words = self.tokenizer.cut(&hans, false); let mut token_text: HashSet = vec![].into_iter().collect(); @@ -145,12 +141,13 @@ impl IdxStore { limit: usize, is_dir_opt: Option, ext_opt: Option, - ) -> Vec { + ) -> SearchResult { let searcher = self.reader.searcher(); + let tokenized = self.search_tokenize(kw); let kw_query = self .query_parser - .parse_query(&self.search_tokenize(kw)) + .parse_query(&tokenized) .ok() .unwrap(); let mut subqueries = vec![(Occur::Must, kw_query)]; @@ -203,7 +200,11 @@ impl IdxStore { // } let file_views = self.parse_file_views(paths); - file_views + SearchResult{ + file_view: file_views, + tokenized + } + } pub fn suggest(&self, kw: String, limit: usize) -> Vec { @@ -501,4 +502,12 @@ mod tests { let string = idx_store.tokenize("DataPatchController.java".to_string()); println!("{}", string); } + + #[test] + fn t6() { + let hans = zhconv("安全浏览器", Variant::ZhHans); + println!("{}", hans); + let hans = zhconv("安全瀏覽器", Variant::ZhHans); + println!("{}", hans); + } } diff --git a/src-tauri/src/indexing.rs b/src-tauri/src/indexing.rs index 927fc72..2685408 100644 --- a/src-tauri/src/indexing.rs +++ b/src-tauri/src/indexing.rs @@ -23,7 +23,7 @@ use crate::usn_journal_watcher::Watcher; const STORE_PATH: &'static str = "orangecachedata"; #[cfg(windows)] const RECYCLE_PATH: &'static str = "$RECYCLE.BIN"; -const VERSION: &'static str = "0.4.0"; +const VERSION: &'static str = "0.6.0"; const LAST_INDEX_TS: &'static str = "last_index_ts"; pub fn run() { diff --git a/src-tauri/src/ui.rs b/src-tauri/src/ui.rs index fc0aa75..007fc5c 100644 --- a/src-tauri/src/ui.rs +++ b/src-tauri/src/ui.rs @@ -1,5 +1,5 @@ -use crate::file_view::FileView; - +use crate::file_view::{FileView, SearchResult}; +use log::info; use crate::idx_store::IDX_STORE; use crate::walk_metrics::WalkMatrixView; @@ -85,6 +85,7 @@ fn upgrade() { } #[tauri::command] async fn suggest(kw: String) -> Vec { + info!("suggest kw :{}",kw); IDX_STORE.suggest(kw, 20) } @@ -93,7 +94,8 @@ async fn search( mut kw: String, is_dir_opt: Option, ext_opt: Option, -) -> Vec { +) -> SearchResult { + info!("search kw :{}",kw); if kw.eq("") { kw = "*".to_string(); } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index f32a774..d7cc31e 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "package": { "productName": "Orange", - "version": "0.5.0" + "version": "0.6.0" }, "build": { "distDir": "../build", diff --git a/src/App.js b/src/App.js index f8e76f8..f84d47e 100644 --- a/src/App.js +++ b/src/App.js @@ -20,9 +20,10 @@ const dialogContentProps = { }; -const App = ({setTheme,theme}) => { +const App = ({setTheme, theme}) => { const [items, setItems] = useState([]); + const [tokenized, setTokenized] = useState(''); const [kw, setKw] = useState(''); const [selectedKey, setSelectedKey] = useState(0); const [hideDialog, {toggle: toggleHideDialog}] = useBoolean(true); @@ -31,13 +32,13 @@ const App = ({setTheme,theme}) => { let [percent, setPercent] = useState(0); let [totalFiles, setTotalFiles] = useState(0); - const { t } = useTranslation(); + const {t} = useTranslation(); useEffect(() => { if (!init) { get_lang().then(lang => { - if (lang==="default") { - let localeLang= navigator.language || navigator.userLanguage; + if (lang === "default") { + let localeLang = navigator.language || navigator.userLanguage; let _ = i18next.changeLanguage(localeLang, (err, t) => { if (err) return console.log('something went wrong loading', err); t('key'); @@ -52,13 +53,13 @@ const App = ({setTheme,theme}) => { } }) - setInterval(()=>{ - walk_metrics().then(({percent,total_files}) => { - console.log(123) + setInterval(() => { + walk_metrics().then(({percent, total_files}) => { + console.log("walk_metrics") setPercent(percent); setTotalFiles(total_files); }) - },2000) + }, 2000) appWindow.listen('reindex', ({event, payload}) => { if (hideDialog) { @@ -81,15 +82,16 @@ const App = ({setTheme,theme}) => { {/**/} - +
- +
- +
@@ -99,7 +101,7 @@ const App = ({setTheme,theme}) => { {t("progress")}
- +
diff --git a/src/Items.js b/src/Items.js index 504d4fd..a6dfe76 100644 --- a/src/Items.js +++ b/src/Items.js @@ -12,7 +12,7 @@ import {useTranslation} from "react-i18next"; initializeFileTypeIcons(undefined); -function Items({kw,items, setItems}) { +function Items({kw,items, tokenized,setItems}) { const { t } = useTranslation(); @@ -114,7 +114,7 @@ function Items({kw,items, setItems}) { isPadded: true, onRender: (item) => { return - + {item.name} ; @@ -195,7 +195,6 @@ function Items({kw,items, setItems}) { { let row = props.item; - row.kw = kw; return
diff --git a/src/SearchBox.js b/src/SearchBox.js index 3ca74bf..3d20c08 100644 --- a/src/SearchBox.js +++ b/src/SearchBox.js @@ -7,34 +7,20 @@ function top6(json) { return R.take(6)(json); } -async function filterSuggestedTags(filter, selectedItems) { - let res = await suggest(filter); - let titles = R.map(x => ({name: x, key: x}))(R.uniq(R.map( - x => (x.name) - )(res))); - - if (titles[0]) { - if (titles[0].name !== filter) { - titles.unshift({name: filter, key: filter}) - } - } - - return top6(titles); -} - -const SearchBox = ({setItems, kw, setKw, selectedKey}) => { +const SearchBox = ({setItems, kw, setKw, selectedKey,setTokenized}) => { let [init, setInit] = useState(false); let [handler, setHandler] = useState(); useEffect(() => { let number = setInterval(async () => { if (!init) { let kw0 = "*"; - let items = await search(kw0, selectedKey); - if (R.isEmpty(items) || R.isNil(items)) { + let {file_view,tokenized} = await search(kw0, selectedKey); + if (R.isEmpty(file_view) || R.isNil(file_view)) { return; } - setItems(items); + setItems(file_view); + setTokenized(tokenized) setKw(kw0); setInit(true) } @@ -48,14 +34,34 @@ const SearchBox = ({setItems, kw, setKw, selectedKey}) => { clearInterval(handler); } }, [init]) + + async function filterSuggestedTags(filter, selectedItems) { + let res = await suggest(kw); + + let titles = R.map(x => ({name: x, key: x}))(R.uniq(R.map( + x => (x.name) + )(res))); + + if (titles[0]) { + if (titles[0].name !== kw) { + titles.unshift({name: kw, key: kw}) + } + } + + return top6(titles); + } + return (
{ - setItems(items); + setTimeout(()=>{ + setKw(kw0); + },100) + search(kw0, selectedKey).then(({file_view,tokenized}) => { + setItems(file_view); + setTokenized(tokenized); }); return e; }} @@ -71,21 +77,28 @@ const SearchBox = ({setItems, kw, setKw, selectedKey}) => { pickerCalloutProps={{doNotLayer: true}} inputProps={{ id: "pickerId", - value: "", + value: kw, onKeyUp: onKeyUp }} + onInputChange={(e)=>{ + setKw(e); + }} />
); async function onKeyUp(event) { let keyCode = event.keyCode; + let kw0 = event.target.value; + console.log("keyCode: "+keyCode+", kw0:"+kw0) + setKw(kw0); if (keyCode === 13 || keyCode === 27) { - let kw = event.target.value; + document.body.click(); - setKw(kw); - let items = await search(kw, selectedKey); - setItems(items); + console.log("onKeyUp") + let {file_view,tokenized} = await search(kw0, selectedKey); + setItems(file_view); + setTokenized(tokenized); } } }; diff --git a/src/Tab.js b/src/Tab.js index 9cd31a8..0eba26b 100644 --- a/src/Tab.js +++ b/src/Tab.js @@ -40,7 +40,7 @@ const dragOptions = { }; -const Tab = ({setSelectedKey, selectedKey, kw, setItems,setTheme,theme,lang,setLang}) => { +const Tab = ({setSelectedKey, selectedKey, kw, setItems,setTheme,theme,lang,setLang,setTokenized}) => { const [isOpen, {setTrue: openPanel, setFalse: dismissPanel}] = useBoolean(false); const {t} = useTranslation(); @@ -213,8 +213,11 @@ const Tab = ({setSelectedKey, selectedKey, kw, setItems,setTheme,theme,lang,setL { let key = event.key.substr(1); setSelectedKey(key) - search(kw, key).then(value => { - setItems(value) + console.log("change tablL:: "+kw) + search(kw, key).then(({file_view,tokenized}) => { + setItems(file_view); + setTokenized(tokenized); + }) }}> {/*https://uifabricicons.azurewebsites.net/?help*/} From 048e98358bd78f7acc8c84dbffe2d280af230759 Mon Sep 17 00:00:00 2001 From: Jeff Date: Tue, 5 Apr 2022 11:55:08 +0800 Subject: [PATCH 5/7] Fmt --- src-tauri/Cargo.lock | 2 +- src-tauri/src/idx_store.rs | 16 +++++++--------- src-tauri/src/indexing.rs | 2 +- src-tauri/src/ui.rs | 12 ++++-------- 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 68cdcc9..ba5b3c6 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -57,7 +57,7 @@ checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" [[package]] name = "app" -version = "0.1.0" +version = "0.6.0" dependencies = [ "chrono", "convert_case 0.1.0", diff --git a/src-tauri/src/idx_store.rs b/src-tauri/src/idx_store.rs index 7f3b847..7f15319 100644 --- a/src-tauri/src/idx_store.rs +++ b/src-tauri/src/idx_store.rs @@ -48,7 +48,10 @@ impl IdxStore { return self.ascii_tokenize(hans); } let space = " "; - let hans = hans.replace("-", space).replace("+",space).replace("_", space); + let hans = hans + .replace("-", space) + .replace("+", space) + .replace("_", space); let hans = zhconv(&hans, Variant::ZhHans); let words = self.tokenizer.cut(&hans, false); @@ -145,11 +148,7 @@ impl IdxStore { let searcher = self.reader.searcher(); let tokenized = self.search_tokenize(kw); - let kw_query = self - .query_parser - .parse_query(&tokenized) - .ok() - .unwrap(); + let kw_query = self.query_parser.parse_query(&tokenized).ok().unwrap(); let mut subqueries = vec![(Occur::Must, kw_query)]; if let Some(is_dir) = is_dir_opt { @@ -200,11 +199,10 @@ impl IdxStore { // } let file_views = self.parse_file_views(paths); - SearchResult{ + SearchResult { file_view: file_views, - tokenized + tokenized, } - } pub fn suggest(&self, kw: String, limit: usize) -> Vec { diff --git a/src-tauri/src/indexing.rs b/src-tauri/src/indexing.rs index 2685408..b3529d7 100644 --- a/src-tauri/src/indexing.rs +++ b/src-tauri/src/indexing.rs @@ -1,8 +1,8 @@ use crate::idx_store::IDX_STORE; use crate::kv_store::CONF_STORE; +use crate::walk_metrics::WALK_METRICS; use crate::{utils, walk_exec, watch_exec}; use log::info; -use crate::walk_metrics::WALK_METRICS; #[cfg(windows)] use log::error; diff --git a/src-tauri/src/ui.rs b/src-tauri/src/ui.rs index 007fc5c..d846c10 100644 --- a/src-tauri/src/ui.rs +++ b/src-tauri/src/ui.rs @@ -1,6 +1,6 @@ use crate::file_view::{FileView, SearchResult}; -use log::info; use crate::idx_store::IDX_STORE; +use log::info; use crate::walk_metrics::WalkMatrixView; use crate::{indexing, utils, walk_exec}; @@ -85,17 +85,13 @@ fn upgrade() { } #[tauri::command] async fn suggest(kw: String) -> Vec { - info!("suggest kw :{}",kw); + info!("suggest kw :{}", kw); IDX_STORE.suggest(kw, 20) } #[tauri::command] -async fn search( - mut kw: String, - is_dir_opt: Option, - ext_opt: Option, -) -> SearchResult { - info!("search kw :{}",kw); +async fn search(mut kw: String, is_dir_opt: Option, ext_opt: Option) -> SearchResult { + info!("search kw :{}", kw); if kw.eq("") { kw = "*".to_string(); } From 3b8477665657dad9ca42786b23d6bcbf8ab72a66 Mon Sep 17 00:00:00 2001 From: Jeff Date: Tue, 5 Apr 2022 12:12:27 +0800 Subject: [PATCH 6/7] Search tokenized fix --- src-tauri/src/idx_store.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src-tauri/src/idx_store.rs b/src-tauri/src/idx_store.rs index 7f15319..e13ddc6 100644 --- a/src-tauri/src/idx_store.rs +++ b/src-tauri/src/idx_store.rs @@ -65,12 +65,18 @@ impl IdxStore { token_text.into_iter().collect::>().join(" ") } + pub fn search_tokenized(&self, hans: String) -> String { + let s = self.search_tokenize(hans); + let t = zhconv(&s, Variant::ZhHant); + format!("{} {}", s, t) + } + fn ascii_tokenize(&self, asc: String) -> String { let title_lowercase = asc.to_case(Case::Title).to_lowercase(); let raw_lowercase = asc.to_lowercase(); - if title_lowercase.eq(&raw_lowercase) { - return title_lowercase; - } + // if title_lowercase.eq(&raw_lowercase) { + // return title_lowercase; + // } return format!("{} {}", title_lowercase, raw_lowercase); } pub fn tokenize(&self, hans: String) -> String { @@ -147,8 +153,8 @@ impl IdxStore { ) -> SearchResult { let searcher = self.reader.searcher(); - let tokenized = self.search_tokenize(kw); - let kw_query = self.query_parser.parse_query(&tokenized).ok().unwrap(); + let tokens = self.search_tokenize(kw.clone()); + let kw_query = self.query_parser.parse_query(&tokens).ok().unwrap(); let mut subqueries = vec![(Occur::Must, kw_query)]; if let Some(is_dir) = is_dir_opt { @@ -201,7 +207,7 @@ impl IdxStore { SearchResult { file_view: file_views, - tokenized, + tokenized: self.search_tokenized(kw), } } From 38cb222392fdc3d8f32fdd417fd434aaadaf5b65 Mon Sep 17 00:00:00 2001 From: Jeff Date: Tue, 5 Apr 2022 12:17:30 +0800 Subject: [PATCH 7/7] Default kw --- src/SearchBox.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SearchBox.js b/src/SearchBox.js index 3d20c08..3311b15 100644 --- a/src/SearchBox.js +++ b/src/SearchBox.js @@ -14,7 +14,7 @@ const SearchBox = ({setItems, kw, setKw, selectedKey,setTokenized}) => { useEffect(() => { let number = setInterval(async () => { if (!init) { - let kw0 = "*"; + let kw0 = ""; let {file_view,tokenized} = await search(kw0, selectedKey); if (R.isEmpty(file_view) || R.isNil(file_view)) { return;