44#include <gui/elements.h>
55#include <core/common_defines.h>
66#include "archive/archive_i.h"
7+ #include "assets_icons.h"
78
89typedef struct {
910 FuriString * name ;
10- bool is_dir ;
11+ const Icon * icon ;
1112} FileListItem ;
1213
1314typedef struct {
@@ -30,10 +31,7 @@ static void widget_element_file_list_draw(Canvas* canvas, WidgetElement* element
3031 size_t idx = model -> offset + i ;
3132 if (idx < model -> count ) {
3233 canvas_draw_icon (
33- canvas ,
34- model -> x + 2 ,
35- model -> y + (i * FRAME_HEIGHT ) - 9 ,
36- model -> files [idx ].is_dir ? & I_dir_10px : & I_unknown_10px );
34+ canvas , model -> x + 2 , model -> y + (i * FRAME_HEIGHT ) - 9 , model -> files [idx ].icon );
3735 canvas_draw_str (
3836 canvas ,
3937 model -> x + 15 ,
@@ -99,13 +97,14 @@ WidgetElement* widget_element_file_list_create(
9997 model -> files = malloc (sizeof (FileListItem ) * count );
10098 Storage * storage = furi_record_open (RECORD_STORAGE );
10199 for (size_t i = 0 ; i < count ; i ++ ) {
102- FileInfo fileinfo ;
103100 model -> files [i ].name = furi_string_alloc ();
104101 path_extract_filename (files [i ], model -> files [i ].name , false);
105- model -> files [i ].is_dir = false;
106-
107- if (storage_common_stat (storage , furi_string_get_cstr (files [i ]), & fileinfo ) == FSE_OK ) {
108- model -> files [i ].is_dir = file_info_is_dir (& fileinfo );
102+ if (storage_dir_exists (storage , furi_string_get_cstr (files [i ]))) {
103+ model -> files [i ].icon = & I_dir_10px ;
104+ } else {
105+ const char * ext = strrchr (furi_string_get_cstr (model -> files [i ].name ), '.' );
106+ model -> files [i ].icon = (ext && strcasecmp (ext , ".js" ) == 0 ) ? & I_js_script_10px :
107+ & I_unknown_10px ;
109108 }
110109 }
111110 furi_record_close (RECORD_STORAGE );
0 commit comments