@@ -113,7 +113,6 @@ pub fn init(ui: &AppWindow) {
113113
114114 logic_cb ! ( video_editor_update_ui_state, ui) ;
115115 logic_cb ! ( video_editor_show_new_project_dialog, ui) ;
116- logic_cb ! ( video_editor_new_project, ui, config) ;
117116 logic_cb ! ( video_editor_init_recent, ui) ;
118117 logic_cb ! ( video_editor_show_recent_dialog, ui) ;
119118 logic_cb ! ( video_editor_open_recent_project, ui, index) ;
@@ -228,38 +227,32 @@ fn video_editor_update_ui_state(ui: &AppWindow) {
228227}
229228
230229fn video_editor_show_new_project_dialog ( ui : & AppWindow ) {
231- global_store ! ( ui) . set_video_editor_is_show_new_project_dialog ( true ) ;
232- }
233-
234- fn video_editor_new_project ( ui : & AppWindow , config : UIVideoEditorNewProjectConfig ) {
235230 let ui_weak = ui. as_weak ( ) ;
236- global_store ! ( ui) . set_video_editor_is_show_new_project_dialog ( false ) ;
237-
238- let preview_config : VideoEditorPreviewConfig = config . preview_config . clone ( ) . into ( ) ;
239- db_update_preview_config ( ui . as_weak ( ) , preview_config ) ;
231+ let ui_preview_config = global_store ! ( ui)
232+ . get_video_editor_new_project_config ( )
233+ . preview_config ;
234+ let preview_config : ProjectPreviewConfig = ui_preview_config . clone ( ) . into ( ) ;
240235
241236 tokio:: spawn ( async move {
242- let Some ( dir) = picker_directory ( ui_weak. clone ( ) , & tr ( "Choose project directory" ) , "" )
243- else {
237+ let Some ( mut path) = picker_save_file (
238+ ui_weak. clone ( ) ,
239+ & tr ( "New Project" ) ,
240+ & tr ( "Wayshot Project" ) ,
241+ & [ PROJECT_EXT ] ,
242+ & format ! ( "untitled_{}" , chrono:: Utc :: now( ) . format( "%Y%m%d_%H%M%S" ) ) ,
243+ ) else {
244244 return ;
245245 } ;
246246
247- let project_name_trimmed = config. name . trim ( ) . to_string ( ) ;
248- if project_name_trimmed. is_empty ( ) {
249- toast:: async_toast_warn (
250- ui_weak. clone ( ) ,
251- tr ( "Project name cannot be empty or whitespace only" ) . into ( ) ,
252- ) ;
253- return ;
247+ if path. extension ( ) . is_none ( ) {
248+ path. set_extension ( PROJECT_EXT ) ;
254249 }
255250
256- let mut path = dir. join ( & project_name_trimmed) ;
257- path. set_extension ( PROJECT_EXT ) ;
258251 let project_name = path
259- . file_name ( )
260- . map ( |f| f . to_string_lossy ( ) . to_string ( ) )
261- . unwrap_or_else ( || project_name_trimmed . clone ( ) ) ;
262- let preview_config : ProjectPreviewConfig = config . preview_config . clone ( ) . into ( ) ;
252+ . file_stem ( )
253+ . and_then ( |s| s . to_str ( ) )
254+ . unwrap_or ( "Untitled" )
255+ . to_string ( ) ;
263256
264257 let ( manager, playlist) = {
265258 let mut state = PROJECT_STATE . lock ( ) . unwrap ( ) ;
@@ -290,8 +283,8 @@ fn video_editor_new_project(ui: &AppWindow, config: UIVideoEditorNewProjectConfi
290283 global_store ! ( ui) . set_video_editor_is_unsaved ( false ) ;
291284 global_store ! ( ui) . set_video_editor_new_project_config (
292285 UIVideoEditorNewProjectConfig {
293- name : project_name_trimmed . into ( ) ,
294- preview_config : preview_config . into ( ) ,
286+ name : project_name . clone ( ) . into ( ) ,
287+ preview_config : ui_preview_config ,
295288 } ,
296289 ) ;
297290 crate :: toast_success!( ui, format!( "New project created: {}" , project_name) ) ;
0 commit comments