Skip to content

Commit d690be8

Browse files
committed
Merge branch 'dev'
2 parents d34c7ea + f010c84 commit d690be8

File tree

17 files changed

+780
-298
lines changed

17 files changed

+780
-298
lines changed

README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,11 @@
2626
## Building
2727

2828
```bash
29+
pnpm i
30+
2931
# move into src folder
3032
cd .\src\
3133

32-
# if npm
33-
npm run tauri build
34-
35-
# if pnpm
3634
pnpm tauri build
3735
```
3836

src-tauri/src/generate.rs

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::{collections::HashMap, path::PathBuf};
22

33
use flate2::{read::GzDecoder, write::GzEncoder};
44

5-
use crate::{app::{self, AppState}, editor::{self, UnityEditorInstall}, errors, io_utils, package::{self, MinimalPackage}, template::SurfaceTemplate};
5+
use crate::{app::{self, AppState}, editor::{self, UnityEditorInstall}, errors, io_utils, package::{self, MinimalPackage}, template::{EditorVersionPackageList, SurfaceTemplate}};
66

77
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
88
#[serde(rename_all = "camelCase")]
@@ -38,6 +38,8 @@ pub fn generate_project(app: &tauri::AppHandle, app_state: &tauri::State<'_, App
3838
return Err(errors::str_error(format!("Project already exists at {}", package_cache_dir_out.display()).as_str()));
3939
}
4040

41+
let cached_editor_packages = crate::template::read_editor_version_packages(&app, &template_info.editor_version.version.clone())?;
42+
4143
let package_cache_dir = io_utils::get_cache_appended_dir(app, "new_project_package")?;
4244
if template_info.is_empty {
4345
// make a new project
@@ -60,15 +62,15 @@ pub fn generate_project(app: &tauri::AppHandle, app_state: &tauri::State<'_, App
6062

6163
let packages_dir = package_cache_dir_out
6264
.join("Packages");
63-
modify_package_json(&packages_dir, &template_info.packages, &package_cache_dir_out)?;
65+
modify_package_json(&packages_dir, &template_info.packages, &package_cache_dir_out, &cached_editor_packages)?;
6466
} else {
6567
let packages_dir = package_cache_dir
6668
.join("package")
6769
.join("ProjectData~")
6870
.join("Packages");
6971

7072
unpack_package_into_cache(&package_cache_dir, &template_info)?;
71-
modify_package_json(&packages_dir, &template_info.packages, &package_cache_dir_out)?;
73+
modify_package_json(&packages_dir, &template_info.packages, &package_cache_dir_out, &cached_editor_packages)?;
7274
}
7375

7476
// create project directory
@@ -117,6 +119,27 @@ pub fn generate_project(app: &tauri::AppHandle, app_state: &tauri::State<'_, App
117119
std::fs::write(&editor_version_path, editor_version)?;
118120

119121
create_gitignore(package_cache_dir_out)?;
122+
123+
// create package-lock file
124+
let package_lock_path = package_cache_dir_out
125+
.join("Packages")
126+
.join("packages-lock")
127+
.with_extension("json");
128+
129+
let lock_dependencies = template_info.packages
130+
.iter()
131+
.filter(|x| cached_editor_packages.packages.get(&x.name).is_some())
132+
.collect::<Vec<_>>();
133+
let mut serde_hash_map = serde_json::Map::new();
134+
for dep in lock_dependencies.iter() {
135+
let value = cached_editor_packages.packages.get(&dep.name).unwrap();
136+
serde_hash_map.insert(dep.name.clone(), serde_json::to_value(value)?);
137+
}
138+
139+
let json_str = serde_json::json!({
140+
"dependencies": serde_hash_map
141+
});
142+
std::fs::write(&package_lock_path, serde_json::to_string_pretty(&json_str)?)?;
120143

121144
Ok(package_cache_dir_out.clone())
122145
}
@@ -126,8 +149,10 @@ pub fn generate_template(app: &tauri::AppHandle, app_state: &tauri::State<AppSta
126149
let package_cache_dir = io_utils::get_cache_appended_dir(app, "new_template_package")?;
127150
let package_cache_dir_out = io_utils::get_cache_appended_dir(app, "new_template_package_output")?;
128151

152+
let cached_editor_packages = crate::template::read_editor_version_packages(&app, &template_info.template.editor_version.version.clone())?;
153+
129154
unpack_package_into_cache(&package_cache_dir, &template_info.template)?;
130-
modify_package_json(&package_cache_dir, &template_info.template.packages, &package_cache_dir_out)?;
155+
modify_package_json(&package_cache_dir, &template_info.template.packages, &package_cache_dir_out, &cached_editor_packages)?;
131156

132157
// modify package.json
133158
let package_json_path = package_cache_dir
@@ -260,7 +285,7 @@ fn unpack_package_into_cache(output: &PathBuf, template_info: &TemplateInfoForGe
260285
Ok(())
261286
}
262287

263-
fn modify_package_json(json_root: &PathBuf, packages: &Vec<MinimalPackage>, output_path: &PathBuf) -> Result<(), errors::AnyError> {
288+
fn modify_package_json(json_root: &PathBuf, packages: &Vec<MinimalPackage>, output_path: &PathBuf, cached_editor_packages: &EditorVersionPackageList) -> Result<(), errors::AnyError> {
264289
// modify package.json for dependencies
265290
std::fs::create_dir_all(&json_root)?;
266291

@@ -304,6 +329,23 @@ fn modify_package_json(json_root: &PathBuf, packages: &Vec<MinimalPackage>, outp
304329
println!("Rest package: {:?}", package);
305330
let name = package.name.clone();
306331
let version = package.version.clone();
332+
333+
let is_bad = {
334+
if let Some(package) = cached_editor_packages.packages.get(&name) {
335+
if package.source.as_ref().is_some_and(|x| x == "embedded") {
336+
true
337+
} else {
338+
false
339+
}
340+
} else {
341+
false
342+
}
343+
};
344+
345+
if is_bad {
346+
continue;
347+
}
348+
307349
dependencies.insert(name, serde_json::Value::String(version));
308350
}
309351

src-tauri/src/main.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ fn main() {
6464
project::cmd_open_project_in_editor,
6565
project::cmd_change_project_editor_version,
6666
project::cmd_fetch_project_thumbnail,
67+
project::cmd_pin_project,
68+
project::cmd_unpin_project,
6769
// editors
6870
editor::cmd_get_editors,
6971
editor::cmd_open_unity_hub,

src-tauri/src/prefs.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ pub enum PrefsKey {
88
HubEditorsPath,
99
HubAppDataPath,
1010
NewProjectPath,
11+
ProjectSortType
1112
}
1213

1314
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
@@ -21,6 +22,7 @@ pub struct Prefs {
2122
pub hub_editors_path: Option<PathBuf>,
2223
// typically C:\Users\nomno\AppData\Roaming\UnityHub\
2324
pub hub_appdata_path: Option<PathBuf>,
25+
pub project_sort_type: Option<crate::project::SortType>
2426
}
2527

2628
impl Default for Prefs {
@@ -47,6 +49,8 @@ impl Default for Prefs {
4749
hub_editors_path: None,
4850

4951
hub_appdata_path: Some(dirs_next::config_dir().unwrap().join("UnityHub")),
52+
53+
project_sort_type: None
5054
}
5155
}
5256
}
@@ -85,8 +89,11 @@ pub fn cmd_save_prefs(app_handle: tauri::AppHandle, app_state: tauri::State<AppS
8589
}
8690

8791
#[tauri::command]
88-
pub fn cmd_set_pref_value(app_state: tauri::State<'_, AppState>, key: PrefsKey, value: serde_json::Value) -> Result<(), errors::AnyError> {
89-
let mut prefs = app::get_prefs(&app_state)?;
92+
pub fn cmd_set_pref_value(app_handle: tauri::AppHandle, app_state: tauri::State<'_, AppState>, key: PrefsKey, value: serde_json::Value) -> Result<(), errors::AnyError> {
93+
// let mut prefs = app::get_prefs(&app_state)?;
94+
let mut prefs = app_state.prefs.lock()
95+
.map_err(|_| errors::str_error("Failed to get prefs. Is it locked?"))?;
96+
9097
match key {
9198
PrefsKey::NewProjectPath => {
9299
prefs.new_project_path = serde_json::from_value(value)?;
@@ -100,7 +107,13 @@ pub fn cmd_set_pref_value(app_state: tauri::State<'_, AppState>, key: PrefsKey,
100107
PrefsKey::HubAppDataPath => {
101108
prefs.hub_appdata_path = serde_json::from_value(value)?;
102109
},
110+
PrefsKey::ProjectSortType => {
111+
prefs.project_sort_type = serde_json::from_value(value)?;
112+
},
103113
// _ => return Err(errors::str_error("Invalid key")),
104114
}
115+
116+
app::save_prefs_to_disk(&prefs, &app_handle)?;
117+
105118
Ok(())
106119
}

0 commit comments

Comments
 (0)