@@ -39,55 +39,59 @@ fn video_editor_playlist_item_import(ui: &AppWindow) {
3939 return ;
4040 } ;
4141
42- let playlist_item = {
43- let mut state = PROJECT_STATE . lock ( ) . unwrap ( ) ;
44- if let Some ( ref mut s) = * state {
45- match s. playlist . add_file ( file_path. clone ( ) ) {
46- Ok ( index) => s. playlist . get_item ( index) . cloned ( ) ,
47- Err ( e) => {
48- toast:: async_toast_warn (
49- ui_weak. clone ( ) ,
50- format ! ( "Failed to add to playlist: {}" , e) ,
51- ) ;
52- return ;
53- }
54- }
55- } else {
56- None
57- }
58- } ;
59-
60- let Some ( playlist_item) = playlist_item else {
61- toast:: async_toast_warn ( ui_weak. clone ( ) , "Failed to get playlist item" . to_string ( ) ) ;
62- return ;
63- } ;
42+ import_file_to_playlist ( ui_weak, file_path) . await ;
43+ } ) ;
44+ }
6445
65- // Preload audio cache for video/audio files
66- let metadata = get_metadata ( & file_path) . ok ( ) ;
67- if let Some ( ref metadata) = metadata
68- && let Some ( audio_meta) = metadata. audios . first ( )
69- {
70- let file_path = file_path. clone ( ) ;
71- let audio_meta = audio_meta. clone ( ) ;
72- tokio:: task:: spawn_blocking ( move || {
73- let cache = get_global_audio_display_cache ( ) ;
74- if let Err ( e) = cache. load_and_cache ( & file_path, audio_meta. index , & audio_meta) {
75- log:: warn!(
76- "Failed to preload audio cache for {}: {:?}" ,
77- file_path. display( ) ,
78- e
46+ pub async fn import_file_to_playlist ( ui_weak : Weak < AppWindow > , file_path : PathBuf ) {
47+ let playlist_item = {
48+ let mut state = PROJECT_STATE . lock ( ) . unwrap ( ) ;
49+ if let Some ( ref mut s) = * state {
50+ match s. playlist . add_file ( file_path. clone ( ) ) {
51+ Ok ( index) => s. playlist . get_item ( index) . cloned ( ) ,
52+ Err ( e) => {
53+ toast:: async_toast_warn (
54+ ui_weak. clone ( ) ,
55+ format ! ( "Failed to add to playlist: {}" , e) ,
7956 ) ;
80- } else {
81- log:: debug!( "Preloaded audio cache for {}" , file_path. display( ) ) ;
57+ return ;
8258 }
83- } ) ;
59+ }
60+ } else {
61+ None
8462 }
63+ } ;
8564
86- _ = ui_weak. upgrade_in_event_loop ( move |ui| {
87- let item: UIVideoEditorPlaylistItem = playlist_item. into ( ) ;
88- crate :: toast_success!( ui, format!( "Imported: {}" , item. name) ) ;
89- store_video_editor_playlist ! ( ui) . push ( item) ;
65+ let Some ( playlist_item) = playlist_item else {
66+ toast:: async_toast_warn ( ui_weak. clone ( ) , "Failed to get playlist item" . to_string ( ) ) ;
67+ return ;
68+ } ;
69+
70+ // Preload audio cache for video/audio files
71+ let metadata = get_metadata ( & file_path) . ok ( ) ;
72+ if let Some ( ref metadata) = metadata
73+ && let Some ( audio_meta) = metadata. audios . first ( )
74+ {
75+ let file_path = file_path. clone ( ) ;
76+ let audio_meta = audio_meta. clone ( ) ;
77+ tokio:: task:: spawn_blocking ( move || {
78+ let cache = get_global_audio_display_cache ( ) ;
79+ if let Err ( e) = cache. load_and_cache ( & file_path, audio_meta. index , & audio_meta) {
80+ log:: warn!(
81+ "Failed to preload audio cache for {}: {:?}" ,
82+ file_path. display( ) ,
83+ e
84+ ) ;
85+ } else {
86+ log:: debug!( "Preloaded audio cache for {}" , file_path. display( ) ) ;
87+ }
9088 } ) ;
89+ }
90+
91+ _ = ui_weak. upgrade_in_event_loop ( move |ui| {
92+ let item: UIVideoEditorPlaylistItem = playlist_item. into ( ) ;
93+ crate :: toast_success!( ui, format!( "Imported: {}" , item. name) ) ;
94+ store_video_editor_playlist ! ( ui) . push ( item) ;
9195 } ) ;
9296}
9397
0 commit comments