@@ -40,6 +40,7 @@ enum Action {
40
40
OpenFile { path : PathBuf } ,
41
41
DeleteFiles { paths : Vec < String > } ,
42
42
GetLog ,
43
+ GeneratePlaylist { paths : Vec < String > } ,
43
44
44
45
LoadPlatforms ,
45
46
StartTagging { config : TaggerConfigs , playlist : Option < UIPlaylist > } ,
@@ -265,7 +266,23 @@ async fn handle_message(text: &str, websocket: &mut WebSocket, context: &mut Soc
265
266
Action :: OpenSettingsFolder => opener:: open ( Settings :: get_folder ( ) ?. to_str ( ) . unwrap ( ) ) ?,
266
267
Action :: OpenFolder { path } => { opener:: open ( & path) . ok ( ) ; } ,
267
268
Action :: OpenFile { path } => { opener:: open ( & path) . ok ( ) ; } ,
268
- Action :: DeleteFiles { paths } => { trash:: delete_all ( & paths) ?; }
269
+ Action :: DeleteFiles { paths } => { trash:: delete_all ( & paths) ?; } ,
270
+
271
+ Action :: GeneratePlaylist { paths } => {
272
+ let playlist = onetagger_playlist:: create_m3u_playlist ( & paths. into_iter ( ) . map ( |i| i. into ( ) ) . collect :: < Vec < _ > > ( ) ) ;
273
+ if let Some ( path) = tinyfiledialogs:: save_file_dialog_with_filter (
274
+ "Save playlist" ,
275
+ & std:: env:: current_dir ( ) ?. to_string_lossy ( ) . to_string ( ) ,
276
+ & [ "m3u" , "m3u8" ] ,
277
+ "Save playlist"
278
+ ) {
279
+ std:: fs:: write ( & path, playlist) ?;
280
+ send_socket ( websocket, json ! ( {
281
+ "action" : "notify" ,
282
+ "message" : format!( "Playlist saved to: {path}" )
283
+ } ) ) . await . ok ( ) ;
284
+ }
285
+ }
269
286
270
287
Action :: LoadPlatforms => {
271
288
let platforms = tokio:: task:: spawn_blocking ( || {
0 commit comments