Skip to content

Commit c8a67d7

Browse files
committed
Merge branch 'dev'
2 parents d518009 + 30f5717 commit c8a67d7

File tree

8 files changed

+86
-46
lines changed

8 files changed

+86
-46
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "nomnom-unity-hub",
33
"private": true,
4-
"version": "1.0.5",
4+
"version": "1.0.6",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",

src-tauri/src/generate.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ pub fn generate_project(app: &tauri::AppHandle, app_state: &tauri::State<'_, App
116116

117117
let editor_version = template_info.editor_version.version.clone();
118118
let editor_version = format!("m_EditorVersion: {}", editor_version);
119-
std::fs::write(&editor_version_path, editor_version)?;
119+
std::fs::write(&editor_version_path, &editor_version)?;
120120

121121
create_gitignore(package_cache_dir_out)?;
122122

@@ -149,6 +149,9 @@ pub fn generate_project(app: &tauri::AppHandle, app_state: &tauri::State<'_, App
149149
});
150150
std::fs::write(&package_lock_path, serde_json::to_string_pretty(&json_str)?)?;
151151
}
152+
153+
// crate::project::update_project_open_time(app_state, package_cache_dir_out.clone(), app)?;
154+
// crate::project::cmd_open_project_in_editor(app.clone(), app_state.clone(), package_cache_dir_out.clone(), editor_version.clone())?;
152155

153156
Ok(package_cache_dir_out.clone())
154157
}
@@ -399,12 +402,12 @@ fn modify_package_json(json_root: &PathBuf, packages: &Vec<MinimalPackage>, outp
399402
// read any local packages
400403
let local_packages = packages
401404
.iter()
402-
.filter(|x| x._type == package::PackageType::Local)
405+
.filter(|x| x._type == package::PackageType::Local && !x.name.starts_with("com.unity.template."))
403406
.collect::<Vec<_>>();
404407

405408
let rest_packages = packages
406409
.iter()
407-
.filter(|x| x._type != package::PackageType::Local)
410+
.filter(|x| x._type != package::PackageType::Local && !x.name.starts_with("com.unity.template."))
408411
.collect::<Vec<_>>();
409412

410413
let manifest_json_contents = {

src-tauri/src/project.rs

Lines changed: 58 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,41 @@ pub fn get_projects_on_page(app_state: &tauri::State<AppState>, page: usize, per
159159
Ok(projects)
160160
}
161161

162+
pub fn update_project_open_time(app_state: &tauri::State<AppState>, project_path: PathBuf, app_handle: &tauri::AppHandle) -> Result<(), errors::AnyError> {
163+
let time = std::time::UNIX_EPOCH
164+
.elapsed()
165+
.unwrap_or(std::time::Duration::from_secs(0));
166+
let millis = time.as_millis();
167+
168+
let mut projects = app_state.projects.lock()
169+
.map_err(|_| errors::str_error("Failed to get projects. Is it locked?"))?;
170+
let project = projects
171+
.iter_mut()
172+
.find(|x| x.path == project_path)
173+
.ok_or(errors::str_error(format!("Project not found at {:?}", project_path).as_str()))?;
174+
project.last_opened_at = millis;
175+
176+
app::save_projects_to_disk(&projects, &app_handle)?;
177+
178+
Ok(())
179+
}
180+
181+
pub fn open_project(project_path: PathBuf, editor_version: String, app_state: &tauri::State<AppState>, app_handle: &tauri::AppHandle) -> Result<(), errors::AnyError> {
182+
if !project_path.exists() {
183+
return Err(errors::io_not_found("Invalid project path"));
184+
}
185+
186+
let project_path_str = project_path.to_str()
187+
.ok_or(errors::str_error("Invalid project path"))?
188+
.to_string();
189+
190+
let args = vec!["-projectPath".to_string(), project_path_str];
191+
crate::editor::open(editor_version, args, &app_state, false)?;
192+
193+
update_project_open_time(&app_state, project_path, &app_handle)?;
194+
Ok(())
195+
}
196+
162197
// commands
163198

164199
#[tauri::command]
@@ -181,26 +216,38 @@ pub async fn cmd_remove_missing_projects(app_handle: tauri::AppHandle, app_state
181216
}
182217

183218
#[tauri::command]
184-
pub fn cmd_add_project(project_path: PathBuf, app_handle: tauri::AppHandle, app_state: tauri::State<AppState>) -> Result<Project, errors::AnyError> {
219+
pub fn cmd_add_project(project_path: PathBuf, and_open: bool, app_handle: tauri::AppHandle, app_state: tauri::State<AppState>) -> Result<Project, errors::AnyError> {
185220
if !Path::new(&project_path).exists() {
186221
return Err(errors::io_not_found("Invalid project path"));
187222
}
188223

189-
let mut projects = app_state.projects.lock()
190-
.map_err(|_| errors::str_error("Failed to get projects. Is it locked?"))?;
191-
if projects.iter().any(|x| x.path == project_path) {
192-
return Err(errors::str_error("Project already exists"));
224+
{
225+
let projects = app::get_projects(&app_state)?;
226+
if projects.iter().any(|x| x.path == project_path) {
227+
return Err(errors::str_error("Project already exists"));
228+
}
193229
}
194230

195-
let mut project = load(project_path)?;
231+
let mut project = load(project_path.clone())?;
196232
project.added_at = std::time::UNIX_EPOCH
197233
.elapsed()
198234
.unwrap_or(std::time::Duration::from_secs(0))
199235
.as_millis();
200-
projects.insert(0, project.clone());
201-
202-
app::save_projects_to_disk(&projects, &app_handle)?;
203-
236+
237+
{
238+
let mut projects = app_state.projects.lock()
239+
.map_err(|_| errors::str_error("Failed to get projects. Is it locked?"))?;
240+
projects.insert(0, project.clone());
241+
242+
app::save_projects_to_disk(&projects, &app_handle)?;
243+
}
244+
245+
if and_open {
246+
let editor_version = &project.version;
247+
update_project_open_time(&app_state, project_path.clone(), &app_handle)?;
248+
open_project(project_path, editor_version.to_string(), &app_state, &app_handle)?;
249+
}
250+
204251
Ok(project)
205252
}
206253

@@ -237,32 +284,7 @@ pub async fn cmd_get_projects_on_page(app_state: tauri::State<'_, AppState>, pag
237284

238285
#[tauri::command]
239286
pub fn cmd_open_project_in_editor(app_handle: tauri::AppHandle, app_state: tauri::State<AppState>, project_path: PathBuf, editor_version: String) -> Result<(), errors::AnyError> {
240-
if !project_path.exists() {
241-
return Err(errors::io_not_found("Invalid project path"));
242-
}
243-
244-
let project_path_str = project_path.to_str()
245-
.ok_or(errors::str_error("Invalid project path"))?
246-
.to_string();
247-
248-
let args = vec!["-projectPath".to_string(), project_path_str];
249-
crate::editor::open(editor_version, args, &app_state, false)?;
250-
251-
let time = std::time::UNIX_EPOCH
252-
.elapsed()
253-
.unwrap_or(std::time::Duration::from_secs(0));
254-
let millis = time.as_millis();
255-
256-
let mut projects = app_state.projects.lock()
257-
.map_err(|_| errors::str_error("Failed to get projects. Is it locked?"))?;
258-
let project = projects
259-
.iter_mut()
260-
.find(|x| x.path == project_path)
261-
.ok_or(errors::str_error("Project not found"))?;
262-
project.last_opened_at = millis;
263-
264-
app::save_projects_to_disk(&projects, &app_handle)?;
265-
287+
open_project(project_path, editor_version, &app_state, &app_handle)?;
266288
Ok(())
267289
}
268290

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
},
88
"package": {
99
"productName": "Nomnoms Unity Hub",
10-
"version": "1.0.5"
10+
"version": "1.0.6"
1111
},
1212
"tauri": {
1313
"allowlist": {

src/utils/tauri-router.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,11 @@ export namespace TauriRouter {
108108
}
109109

110110
export async function add_project(
111-
projectPath: string
111+
projectPath: string,
112+
andOpen?: boolean
112113
): Promise<TauriTypes.Project> {
113-
return invoke("cmd_add_project", { projectPath });
114+
const andOpenBool = andOpen ? true : false;
115+
return invoke("cmd_add_project", { projectPath, andOpen: andOpenBool });
114116
}
115117

116118
export async function remove_project(projectPath: string): Promise<void> {

src/views/editors/editors-list.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@ export default function EditorsList() {
175175
editors={selectedGroup.editors}
176176
/>
177177
)}
178+
<p className="text-stone-400 text-sm select-none">
179+
To get more editors, use the Unity Hub.
180+
</p>
178181
</div>
179182
</div>
180183
</AsyncComponent>

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import Popup from "reactjs-popup";
1313
import LoadingSpinner from "../../components/svg/loading-spinner";
1414
import NewTemplateView from "./new-template-view";
1515
import { routeErrorToToast } from "../../utils/toast-utils";
16+
import { ValidateInputContext } from "../../components/validate-input";
1617

1718
export type NewProjectData = {
1819
projectName: string;
@@ -75,8 +76,6 @@ export default function NewProjectBody() {
7576
if (globalContext.state.templateFromProject) {
7677
try {
7778
const project = globalContext.state.templateFromProject!;
78-
console.log(project);
79-
console.log(newProjectContext);
8079
const template: TauriTypes.TemplateInfoForGeneration = {
8180
editorVersion: {
8281
version: project.version,
@@ -186,6 +185,14 @@ export default function NewProjectBody() {
186185
const pack = newProjectContext.state.packageInfo;
187186
const files = newProjectContext.state.filesInfo;
188187

188+
const path = basicInfo.path + "\\" + basicInfo.name;
189+
if (await TauriRouter.is_valid_dir(path)) {
190+
routeErrorToToast(new Error(`${path} is already in use.`));
191+
192+
isLoading.set(false);
193+
return;
194+
}
195+
189196
const packages = await TauriRouter.get_default_editor_packages(
190197
template.editorVersion.version
191198
).then((x) => x.concat(pack.gitPackages).concat(pack.localPackages));
@@ -229,7 +236,7 @@ export default function NewProjectBody() {
229236

230237
// console.log(output);
231238

232-
await TauriRouter.add_project(output);
239+
await TauriRouter.add_project(output, true);
233240
await new Promise((resolve) => setTimeout(resolve, 1000));
234241

235242
isLoading.set(false);

src/views/new-project/template-view.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,9 @@ export default function TemplateView() {
297297
// selected={isSelected}
298298
/>
299299
))}
300+
<p className="text-stone-400 text-sm select-none">
301+
To get more templates, use the Unity Hub.
302+
</p>
300303
</div>
301304
</AsyncComponent>
302305
</div>

0 commit comments

Comments
 (0)