@@ -313,6 +313,134 @@ char* choose_file_menu(const char* directory, const char* fileExtensionOrDirecto
313
313
return return_value ;
314
314
}
315
315
316
+ char * choose_file_menu_ (const char * directory , const char * fileExtensionOrDirectory , const char * headers [], int * isdir )
317
+ {
318
+ char path [PATH_MAX ] = "" ;
319
+ DIR * dir ;
320
+ struct dirent * de ;
321
+ int numFiles = 0 ;
322
+ int numDirs = 0 ;
323
+ int i ;
324
+ char * return_value = NULL ;
325
+ int dir_len = strlen (directory );
326
+ char * * files = !(* isdir ) ? gather_files (directory , fileExtensionOrDirectory , & numFiles ) : NULL ;
327
+ char * * dirs = NULL ;
328
+ if (fileExtensionOrDirectory != NULL )
329
+ dirs = gather_files (directory , NULL , & numDirs );
330
+ int total = numDirs + numFiles ;
331
+ if (total == 0 )
332
+ {
333
+ ui_print ("No files found.\n" );
334
+ }
335
+ else
336
+ {
337
+ char * * list = (char * * ) malloc ((total + 1 ) * sizeof (char * ));
338
+ list [total ] = NULL ;
339
+
340
+
341
+ for (i = 0 ; i < numDirs ; i ++ )
342
+ {
343
+ list [i ] = strdup (dirs [i ] + dir_len );
344
+ }
345
+
346
+ for (i = 0 ; i < numFiles ; i ++ )
347
+ {
348
+ list [numDirs + i ] = strdup (files [i ] + dir_len );
349
+ }
350
+
351
+ for (;;)
352
+ {
353
+ // throw away keys pressed previously, so user doesn't
354
+ // accidentally trigger menu items.
355
+ ui_clear_key_queue ();
356
+
357
+ int item_count = ui_start_menu (headers , list );
358
+ int selected = 0 ;
359
+ int chosen_item = -1 ;
360
+
361
+ int has_selection = 0 ;
362
+
363
+ while (chosen_item < 0 && chosen_item != GO_BACK && has_selection == 0 ) {
364
+ //ui_menu_select(); //Why was this not here?!
365
+ int key = ui_wait_key ();
366
+ int visible = ui_text_visible ();
367
+
368
+ //ui_print("Key: %d\n",key);
369
+
370
+ int action = device_handle_key (key , visible );
371
+ int old_selected = selected ;
372
+
373
+ if (action < 0 ) {
374
+ switch (action ) {
375
+ case SCROLL_LEFT :
376
+ ui_menu_offset_dec ();
377
+ break ;
378
+ case SCROLL_RIGHT :
379
+ ui_menu_offset_inc ();
380
+ break ;
381
+ case HIGHLIGHT_UP :
382
+ -- selected ;
383
+ selected = ui_menu_select (selected );
384
+ break ;
385
+ case HIGHLIGHT_DOWN :
386
+ ++ selected ;
387
+ selected = ui_menu_select (selected );
388
+ break ;
389
+ case SELECT_ITEM :
390
+ chosen_item = selected ;
391
+ if (ui_get_showing_back_button ()) {
392
+ if (chosen_item == item_count ) {
393
+ chosen_item = GO_BACK ;
394
+ }
395
+ }
396
+ break ;
397
+ case NO_ACTION :
398
+ break ;
399
+ case GO_BACK :
400
+ chosen_item = GO_BACK ;
401
+ break ;
402
+ case MENU_PRESSED :
403
+ has_selection = 1 ;
404
+ chosen_item = selected ;
405
+ break ;
406
+ }
407
+ }
408
+ }
409
+ if (chosen_item == GO_BACK )
410
+ break ;
411
+ static char ret [PATH_MAX ];
412
+ if (chosen_item < numDirs )
413
+ {
414
+ if (has_selection ) {
415
+ has_selection = 0 ;
416
+ strcpy (ret , dirs [chosen_item ]);
417
+ return_value = ret ;
418
+ * isdir = 1 ;
419
+ LOGE ("%s\n" ,ret );
420
+ break ;
421
+ }
422
+ char * subret = choose_file_menu_ (dirs [chosen_item ], fileExtensionOrDirectory , headers ,isdir );
423
+ if (subret != NULL )
424
+ {
425
+ strcpy (ret , subret );
426
+ return_value = ret ;
427
+ break ;
428
+ }
429
+ continue ;
430
+ }
431
+
432
+ strcpy (ret , files [chosen_item - numDirs ]);
433
+ return_value = ret ;
434
+ break ;
435
+ }
436
+ free_string_array (list );
437
+ }
438
+
439
+ if ( files != NULL ) free_string_array (files );
440
+ free_string_array (dirs );
441
+ return return_value ;
442
+ }
443
+
316
444
317
445
void show_choose_zip_menu ()
318
446
{
@@ -2002,40 +2130,32 @@ void show_fs_menu()
2002
2130
2003
2131
void show_action_menu (char * cmd , int params , char * fileExtensionOrDirectory ) {
2004
2132
int i ;
2133
+ int isdir = 0 ;
2005
2134
static char * headers [] =
2006
- { " File manager" ,"" ,"Select source DIR/FILE:" , NULL ," File manager" ,"" ,"Select destination DIR/FILE:" , NULL };
2007
- static char * head_ [] = { " File manager" ,
2008
- "" ,
2009
- "Choose destination type:" ,
2010
- NULL
2011
- };
2012
- static char * list [] = { "FILE" ,
2013
- "DIR" ,
2014
- NULL
2015
- };
2135
+ { " File manager" ,"" ,"Select source DIR/FILE:" ,"OK: Step into" ,"Menu: Select" , NULL ," File manager" ,"" ,"Select destination DIR/FILE:" ,"OK: Step into" ,"Menu: Select" , NULL };
2016
2136
char * * files = malloc (sizeof (char * )* params );
2017
2137
for (i = 0 ; i < params ; ++ i ) {
2018
- char * temp = choose_file_menu ("/" , fileExtensionOrDirectory , headers + (i * 4 ) );
2138
+ char * temp = choose_file_menu_ ("/" , fileExtensionOrDirectory , headers + (i * 6 ), & isdir );
2019
2139
if ( temp == NULL ) return ;
2020
2140
files [i ]= malloc ((strlen (temp )+ 1 )* sizeof (char ));
2021
2141
strcpy (files [i ],temp );
2022
- if ( i == 0 && fileExtensionOrDirectory != NULL && params > 1 ) {
2023
- int chosen_item = 0 ;
2024
- for (;;) {
2025
- chosen_item = get_menu_selection (head_ , list , 0 );
2026
- if (chosen_item == GO_BACK ) return ;
2027
- break ;
2028
- }
2029
- if (chosen_item ) fileExtensionOrDirectory = NULL ;
2030
- }
2031
2142
}
2032
2143
char command [PATH_MAX ];
2033
- if (params > 1 )
2034
- sprintf (command ,"%s %s %s" ,cmd ,files [0 ],files [1 ]);
2144
+ if (params > 1 ) {
2145
+ if ( !strcmp (cmd ,"mv -f" ) || !isdir )
2146
+ sprintf (command ,"%s %s %s" ,cmd ,files [0 ],files [1 ]);
2147
+ else if ( isdir )
2148
+ sprintf (command ,"%s %s %s %s" ,cmd ,"-R" ,files [0 ],files [1 ]);
2149
+ }
2150
+ else if ( isdir )
2151
+ sprintf (command ,"%s %s %s" ,cmd ,"-R" ,files [0 ]);
2035
2152
else
2036
2153
sprintf (command ,"%s %s" ,cmd ,files [0 ]);
2154
+ ui_end_menu ();
2155
+ ui_print ("Working...\nPlease wait...\n" );
2037
2156
if (__system (command )) LOGE ("%s\n" ,strerror (errno ));
2038
2157
else ui_print ("Success\n" );
2158
+ //LOGE("%s\n",command);
2039
2159
2040
2160
}
2041
2161
@@ -2048,12 +2168,9 @@ void show_file_manager() {
2048
2168
NULL
2049
2169
};
2050
2170
2051
- static char * list [] = { "COPY FILE" ,
2052
- "MOVE FILE" ,
2053
- "DELETE FILE" ,
2054
- "COPY DIR" ,
2055
- "MOVE DIR" ,
2056
- "DELETE DIR" ,
2171
+ static char * list [] = { "COPY" ,
2172
+ "MOVE" ,
2173
+ "DELETE" ,
2057
2174
NULL
2058
2175
};
2059
2176
for (;;) {
@@ -2063,23 +2180,14 @@ void show_file_manager() {
2063
2180
switch (chosen_item )
2064
2181
{
2065
2182
case 0 :
2066
- show_action_menu ("cp -pf " ,2 ,"" );
2183
+ show_action_menu ("cp -p -f " ,2 ,"" );
2067
2184
break ;
2068
2185
case 1 :
2069
2186
show_action_menu ("mv -f" ,2 ,"" );
2070
2187
break ;
2071
2188
case 2 :
2072
2189
show_action_menu ("rm -f" ,1 ,"" );
2073
2190
break ;
2074
- case 3 :
2075
- show_action_menu ("cp -Rpf" ,2 ,NULL );
2076
- break ;
2077
- case 4 :
2078
- show_action_menu ("mv -f" ,2 ,NULL );
2079
- break ;
2080
- case 5 :
2081
- show_action_menu ("rm -Rf" ,1 ,NULL );
2082
- break ;
2083
2191
}
2084
2192
}
2085
2193
}
0 commit comments