Skip to content

Commit 5b7b26c

Browse files
committed
Merge branch 'dev'
2 parents 1fadb36 + ff03816 commit 5b7b26c

File tree

8 files changed

+304
-56
lines changed

8 files changed

+304
-56
lines changed

src-tauri/src/cache.rs

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,39 @@
1-
use crate::{app::{self, AppState}, errors};
1+
use crate::{app::{self, AppState}, errors, package};
22

33
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
44
pub enum UserCacheKey {
5-
LastEditorVersion
5+
LastEditorVersion,
66
}
77

88
#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)]
99
#[serde(rename_all = "camelCase")]
1010
pub struct UserCache {
11-
pub last_editor_version: Option<String>
11+
pub last_editor_version: Option<String>,
12+
pub git_packages: Vec<package::MinimalPackage>,
13+
pub local_packages: Vec<package::MinimalPackage>,
1214
}
1315

1416
impl Default for UserCache {
1517
fn default() -> Self {
1618
Self {
17-
last_editor_version: None
19+
last_editor_version: None,
20+
git_packages: Vec::new(),
21+
local_packages: Vec::new(),
1822
}
1923
}
2024
}
2125

2226
// commands
2327

2428
#[tauri::command]
25-
pub fn cmd_get_user_cache(app_state: tauri::State<AppState>) -> Result<UserCache, errors::AnyError> {
26-
let user_cache = app::get_user_cache(&app_state)?;
29+
pub fn cmd_get_user_cache(app_handle: tauri::AppHandle, app_state: tauri::State<'_, AppState>) -> Result<UserCache, errors::AnyError> {
30+
//let user_cache = app::get_user_cache(&app_state)?;
31+
let mut user_cache = app_state.user_cache.lock()
32+
.map_err(|_| errors::str_error("Failed to get user_cache. Is it locked?"))?;
33+
34+
user_cache.local_packages.retain(|x| std::path::Path::new(&x.name).exists());
35+
app::save_user_cache_to_disk(&user_cache, &app_handle)?;
36+
2737
Ok(user_cache.clone())
2838
}
2939

@@ -46,6 +56,42 @@ pub fn cmd_set_user_cache_value(app_handle: tauri::AppHandle, app_state: tauri::
4656
_ => return Err(errors::str_error("Invalid key")),
4757
}
4858

59+
app::save_user_cache_to_disk(&user_cache, &app_handle)?;
60+
Ok(())
61+
}
62+
63+
#[tauri::command]
64+
pub fn cmd_add_git_package_to_cache(app_handle: tauri::AppHandle, app_state: tauri::State<AppState>, package: package::MinimalPackage) -> Result<(), errors::AnyError> {
65+
let mut user_cache = app_state.user_cache.lock()
66+
.map_err(|_| errors::str_error("Failed to get user_cache. Is it locked?"))?;
67+
user_cache.git_packages.push(package);
68+
app::save_user_cache_to_disk(&user_cache, &app_handle)?;
69+
Ok(())
70+
}
71+
72+
#[tauri::command]
73+
pub fn cmd_add_local_package_to_cache(app_handle: tauri::AppHandle, app_state: tauri::State<AppState>, package: package::MinimalPackage) -> Result<(), errors::AnyError> {
74+
let mut user_cache = app_state.user_cache.lock()
75+
.map_err(|_| errors::str_error("Failed to get user_cache. Is it locked?"))?;
76+
user_cache.local_packages.push(package);
77+
app::save_user_cache_to_disk(&user_cache, &app_handle)?;
78+
Ok(())
79+
}
80+
81+
#[tauri::command]
82+
pub fn cmd_remove_git_package_from_cache(app_handle: tauri::AppHandle, app_state: tauri::State<AppState>, package: package::MinimalPackage) -> Result<(), errors::AnyError> {
83+
let mut user_cache = app_state.user_cache.lock()
84+
.map_err(|_| errors::str_error("Failed to get user_cache. Is it locked?"))?;
85+
user_cache.git_packages.retain(|p| p.name != package.name && p.version != package.version);
86+
app::save_user_cache_to_disk(&user_cache, &app_handle)?;
87+
Ok(())
88+
}
89+
90+
#[tauri::command]
91+
pub fn cmd_remove_local_package_from_cache(app_handle: tauri::AppHandle, app_state: tauri::State<AppState>, package: package::MinimalPackage) -> Result<(), errors::AnyError> {
92+
let mut user_cache = app_state.user_cache.lock()
93+
.map_err(|_| errors::str_error("Failed to get user_cache. Is it locked?"))?;
94+
user_cache.local_packages.retain(|p| p.name != package.name);
4995
app::save_user_cache_to_disk(&user_cache, &app_handle)?;
5096
Ok(())
5197
}

src-tauri/src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ fn main() {
3434
cache::cmd_get_user_cache,
3535
cache::cmd_save_user_cache,
3636
cache::cmd_set_user_cache_value,
37+
cache::cmd_add_git_package_to_cache,
38+
cache::cmd_add_local_package_to_cache,
39+
cache::cmd_remove_git_package_from_cache,
40+
cache::cmd_remove_local_package_from_cache,
3741
// project
3842
project::cmd_get_default_project_path,
3943
project::cmd_remove_missing_projects,

src/components/editor-version-select.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default function EditorVersionSelect(props: Props) {
3131
const className =
3232
(props.style ?? "link") === "link"
3333
? (props.className ?? "") +
34-
" text-stone-200 underline underline-offset-4 decoration-stone-600"
34+
" text-stone-200 underline underline-offset-4 decoration-stone-400"
3535
: (props.className ?? "") + " ";
3636
return (
3737
<>

src/context/new-project-context.tsx

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ export namespace NewProjectContext {
7171
interface PackageInfo {
7272
gitPackages: TauriTypes.MinimalPackage[];
7373
localPackages: TauriTypes.MinimalPackage[];
74-
selectedPackages: string[];
74+
selectedPackages: SelectedPackage[];
75+
}
76+
77+
interface SelectedPackage {
78+
name: string;
79+
version?: string;
7580
}
7681

7782
interface FilesInfo {
@@ -142,7 +147,7 @@ export namespace NewProjectContext {
142147
}
143148
| {
144149
type: "set_packages";
145-
packages: string[];
150+
packages: SelectedPackage[];
146151
}
147152
| { type: "set_files_root"; root: TauriTypes.FileDir }
148153
| { type: "set_files_open_folders"; folders: string[] }
@@ -156,7 +161,9 @@ export namespace NewProjectContext {
156161
| { type: "set_new_template_version"; version: string }
157162
| { type: "set_new_template_description"; description: string }
158163
| { type: "add_git_package"; package: { id: string; url: string } }
159-
| { type: "add_local_package"; package: { path: string } };
164+
| { type: "add_local_package"; package: { path: string } }
165+
| { type: "remove_git_package"; package: TauriTypes.MinimalPackage }
166+
| { type: "remove_local_package"; package: TauriTypes.MinimalPackage };
160167

161168
const reducer = (state: State, action: Action): State => {
162169
switch (action.type) {
@@ -323,6 +330,30 @@ export namespace NewProjectContext {
323330
],
324331
},
325332
};
333+
case "remove_git_package":
334+
return {
335+
...state,
336+
packageInfo: {
337+
...state.packageInfo,
338+
gitPackages: state.packageInfo.gitPackages.filter(
339+
(x) =>
340+
x.name !== action.package.name &&
341+
x.version !== action.package.version
342+
),
343+
},
344+
};
345+
case "remove_local_package":
346+
return {
347+
...state,
348+
packageInfo: {
349+
...state.packageInfo,
350+
localPackages: state.packageInfo.localPackages.filter(
351+
(x) =>
352+
x.name !== action.package.name &&
353+
x.version !== action.package.version
354+
),
355+
},
356+
};
326357
default:
327358
return state;
328359
}

src/utils/tauri-router.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { TauriTypes } from "./tauri-types";
33

44
export namespace TauriRouter {
55
// app
6+
67
export async function show_path_in_file_manager(path: string): Promise<void> {
78
return invoke("cmd_show_path_in_file_manager", { path });
89
}
@@ -20,6 +21,7 @@ export namespace TauriRouter {
2021
}
2122

2223
// prefs
24+
2325
export async function get_prefs(): Promise<TauriTypes.Prefs> {
2426
return invoke("cmd_get_prefs");
2527
}
@@ -60,6 +62,34 @@ export namespace TauriRouter {
6062
return invoke("cmd_set_user_cache_value", { key, value });
6163
}
6264

65+
export async function add_git_package_to_cache(
66+
_package: TauriTypes.MinimalPackage
67+
): Promise<void> {
68+
return invoke("cmd_add_git_package_to_cache", { ["package"]: _package });
69+
}
70+
71+
export async function remove_git_package_from_cache(
72+
_package: TauriTypes.MinimalPackage
73+
): Promise<void> {
74+
return invoke("cmd_remove_git_package_from_cache", {
75+
["package"]: _package,
76+
});
77+
}
78+
79+
export async function add_local_package_to_cache(
80+
_package: TauriTypes.MinimalPackage
81+
): Promise<void> {
82+
return invoke("cmd_add_local_package_to_cache", { ["package"]: _package });
83+
}
84+
85+
export async function remove_local_package_from_cache(
86+
_package: TauriTypes.MinimalPackage
87+
): Promise<void> {
88+
return invoke("cmd_remove_local_package_from_cache", {
89+
["package"]: _package,
90+
});
91+
}
92+
6393
// project
6494

6595
export async function get_default_project_path(): Promise<string> {

src/utils/tauri-types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ export namespace TauriTypes {
2323

2424
export interface UserCache {
2525
lastEditorVersion?: string;
26+
gitPackages: TauriTypes.MinimalPackage[];
27+
localPackages: TauriTypes.MinimalPackage[];
2628
}
2729

2830
export enum UserCacheKey {

src/views/new-project/new-project-body.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ export default function NewProjectBody() {
6969
template: initialTemplateInfo.selectedTemplate,
7070
editorVersion: initialTemplateInfo.editorVersion,
7171
packages: packages.filter((x) =>
72-
pack.selectedPackages.includes(x.name)
72+
pack.selectedPackages.some(
73+
(y) => y.name === x.name && y.version === x.version
74+
)
7375
),
7476
selectedFiles: [
7577
"package/package.json",
@@ -134,7 +136,9 @@ export default function NewProjectBody() {
134136
template: template.selectedTemplate,
135137
editorVersion: template.editorVersion,
136138
packages: packages.filter((x) =>
137-
pack.selectedPackages.includes(x.name)
139+
pack.selectedPackages.some(
140+
(y) => y.name === x.name && y.version === x.version
141+
)
138142
),
139143
selectedFiles: trimmedPaths,
140144
};

0 commit comments

Comments
 (0)