diff --git a/packages/gui/src-tauri/Cargo.lock b/packages/gui/src-tauri/Cargo.lock index 084781c..f276b59 100644 --- a/packages/gui/src-tauri/Cargo.lock +++ b/packages/gui/src-tauri/Cargo.lock @@ -1622,6 +1622,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "os_pipe" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6a252f1f8c11e84b3ab59d7a488e48e4478a93937e027076638c49536204639" +dependencies = [ + "libc", + "windows-sys 0.42.0", +] + [[package]] name = "overload" version = "0.1.1" @@ -2339,6 +2349,16 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "siphasher" version = "0.3.10" @@ -2552,6 +2572,7 @@ dependencies = [ "objc", "once_cell", "open", + "os_pipe", "percent-encoding", "rand 0.8.5", "raw-window-handle", @@ -2561,6 +2582,7 @@ dependencies = [ "serde_json", "serde_repr", "serialize-to-javascript", + "shared_child", "state", "tar", "tauri-macros", diff --git a/packages/gui/src-tauri/Cargo.toml b/packages/gui/src-tauri/Cargo.toml index 8e3c1b4..6576123 100644 --- a/packages/gui/src-tauri/Cargo.toml +++ b/packages/gui/src-tauri/Cargo.toml @@ -17,7 +17,7 @@ tauri-build = { version = "1.2.0", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.2.0", features = ["http-all", "shell-open", "window-all"] } +tauri = { version = "1.2.0", features = ["fs-read-dir", "http-all", "shell-all", "window-all"] } uuid = "1.2.1" futures = "0.3" diff --git a/packages/gui/src-tauri/src/handlers/packages.rs b/packages/gui/src-tauri/src/handlers/packages.rs index 6df1455..4e77c9a 100644 --- a/packages/gui/src-tauri/src/handlers/packages.rs +++ b/packages/gui/src-tauri/src/handlers/packages.rs @@ -1,4 +1,5 @@ #[tauri::command] pub fn install_package(package: String) { println!("installing: {}", package); + } \ No newline at end of file diff --git a/packages/gui/src-tauri/tauri.conf.json b/packages/gui/src-tauri/tauri.conf.json index 3fd334d..9b417d5 100644 --- a/packages/gui/src-tauri/tauri.conf.json +++ b/packages/gui/src-tauri/tauri.conf.json @@ -18,10 +18,26 @@ "scope": ["https://api.tea.xyz/v1/*", "https://github.com/*"] }, "shell": { - "all": false, - "execute": false, + "all": true, + "execute": true, "open": true, - "scope": [], + "scope": [ + { + "name": "tea-install", + "cmd": "tea", + "args": [{ "validator": "\\S+" }, "true"] + }, + { + "name": "node", + "cmd": "node", + "args": ["--version"] + }, + { + "name": "list-packages", + "cmd": "ls", + "args": ["-R ~/.tea/tea.xyz/var/www | grep 'xz\\|gz'"] + } + ], "sidecar": false }, "window": { @@ -55,6 +71,13 @@ "startDragging": true, "unmaximize": true, "unminimize": true + }, + "fs": { + "readDir": true, + "scope": [ + "$HOME/.tea/*", + "$APPDATA/*" + ] } }, "bundle": { diff --git a/packages/gui/src/components/SearchPackages/SearchPackages.svelte b/packages/gui/src/components/SearchPackages/SearchPackages.svelte index 1307062..e6a2bbd 100644 --- a/packages/gui/src/components/SearchPackages/SearchPackages.svelte +++ b/packages/gui/src/components/SearchPackages/SearchPackages.svelte @@ -3,42 +3,46 @@ import Fuse from 'fuse.js'; import { packages as packagesStore, initializePackages } from '$libs/stores'; import SortingButtons from './SortingButtons.svelte'; - import type { Package } from '@tea/ui/types'; + import type { GUIPackage } from '$libs/types'; + import { PackageStates } from '$libs/types'; import PackageCard from '@tea/ui/PackageCard/PackageCard.svelte'; import SearchInput from '@tea/ui/SearchInput/SearchInput.svelte'; import Preloader from '@tea/ui/Preloader/Preloader.svelte'; import { onMount } from 'svelte'; - let allPackages: Package[] = []; - let packagesIndex: Fuse; - let packages: Package[] = []; + import { installPackage } from '@api'; + + let allPackages: GUIPackage[] = []; + let packagesIndex: Fuse; + let packages: GUIPackage[] = []; let initialized = false; let sortBy = 'popularity'; let sortDirection: 'asc' | 'desc' = 'desc'; - const searchLimit = 5; + const searchLimit = 10; - const setPackages = (pkgs: Package[]) => { - console.log('pkgs sub', pkgs); - packages = pkgs.sort((a, b) => { - if (sortBy === 'popularity') { - const aPop = +a.dl_count + a.installs; - const bPop = +b.dl_count + b.installs; - return sortDirection === 'asc' ? aPop - bPop : bPop - aPop; - } else { - // most recent - const aDate = new Date(a.last_modified); - const bDate = new Date(b.last_modified); - return sortDirection === 'asc' ? +aDate - +bDate : +bDate - +aDate; - } - }); + const setPackages = (pkgs: GUIPackage[], isSearch?: boolean) => { + packages = isSearch + ? pkgs + : pkgs.sort((a, b) => { + if (sortBy === 'popularity') { + const aPop = +a.dl_count + a.installs; + const bPop = +b.dl_count + b.installs; + return sortDirection === 'asc' ? aPop - bPop : bPop - aPop; + } else { + // most recent + const aDate = new Date(a.last_modified); + const bDate = new Date(b.last_modified); + return sortDirection === 'asc' ? +aDate - +bDate : +bDate - +aDate; + } + }); }; packagesStore.subscribe((v) => { allPackages = v; setPackages(allPackages); - if (!packagesIndex) { + if (!packagesIndex && allPackages.length) { // dont remove or this can get crazy packagesIndex = new Fuse(allPackages, { keys: ['name', 'full_name', 'desc'] @@ -54,15 +58,11 @@ }); const onSearch = (term: string) => { - if (term !== '' && term.length > 3) { - const res = packagesIndex.search(term); - const matchingPackages = []; - for (let i = 0; i < searchLimit; i++) { - if (res[i]) { - matchingPackages.push(res[i].item); - } - } - setPackages(matchingPackages); + if (term !== '' && term.length > 1) { + const res = packagesIndex.search(term, { limit: searchLimit }); + const matchingPackages: GUIPackage[] = res.map((v) => v.item); + + setPackages(matchingPackages, true); } else { setPackages(allPackages); } @@ -73,6 +73,15 @@ sortDirection = dir; setPackages(packages); }; + + const getCTALabel = (state: PackageStates): string => { + return { + [PackageStates.AVAILABLE]: 'INSTALL', + [PackageStates.INSTALLED]: 'INSTALLED', + [PackageStates.INSTALLING]: 'INSTALLING', + [PackageStates.UNINSTALLED]: 'RE-INSTALL' + }[state]; + };
@@ -87,9 +96,24 @@