Skip to content

Commit 9a21dae

Browse files
gornekichskotopes
andauthored
[FL-3008], [FL-2734], [FL-2766], [FL-2898] NFC bug fixes (#2098)
* nfc: rework mf classic update * nfc: rename cache folder to .cache * nfc: fix ATQA order bytes in nfc files * file browser: add hide dot files option * nfc: fix iso-14443-4 uid cards emulation * nfc: fix unit tests Co-authored-by: あく <[email protected]>
1 parent c43ec41 commit 9a21dae

File tree

14 files changed

+88
-60
lines changed

14 files changed

+88
-60
lines changed

applications/debug/unit_tests/nfc/nfc_test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ static void mf_classic_generator_test(uint8_t uid_len, MfClassicType type) {
393393
"nfc_device_save == true assert failed\r\n");
394394
// Verify that key cache is saved
395395
FuriString* key_cache_name = furi_string_alloc();
396-
furi_string_set_str(key_cache_name, "/ext/nfc/cache/");
396+
furi_string_set_str(key_cache_name, "/ext/nfc/.cache/");
397397
for(size_t i = 0; i < uid_len; i++) {
398398
furi_string_cat_printf(key_cache_name, "%02X", uid[i]);
399399
}

applications/main/archive/helpers/archive_browser.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,11 @@ static void archive_file_browser_set_path(
8080
ArchiveBrowserView* browser,
8181
FuriString* path,
8282
const char* filter_ext,
83-
bool skip_assets) {
83+
bool skip_assets,
84+
bool hide_dot_files) {
8485
furi_assert(browser);
8586
if(!browser->worker_running) {
86-
browser->worker = file_browser_worker_alloc(path, filter_ext, skip_assets);
87+
browser->worker = file_browser_worker_alloc(path, filter_ext, skip_assets, hide_dot_files);
8788
file_browser_worker_set_callback_context(browser->worker, browser);
8889
file_browser_worker_set_folder_callback(browser->worker, archive_folder_open_cb);
8990
file_browser_worker_set_list_callback(browser->worker, archive_list_load_cb);
@@ -92,7 +93,8 @@ static void archive_file_browser_set_path(
9293
browser->worker_running = true;
9394
} else {
9495
furi_assert(browser->worker);
95-
file_browser_worker_set_config(browser->worker, path, filter_ext, skip_assets);
96+
file_browser_worker_set_config(
97+
browser->worker, path, filter_ext, skip_assets, hide_dot_files);
9698
}
9799
}
98100

@@ -473,7 +475,7 @@ void archive_switch_tab(ArchiveBrowserView* browser, InputKey key) {
473475
if(archive_is_dir_exists(browser->path)) {
474476
bool skip_assets = (strcmp(archive_get_tab_ext(tab), "*") == 0) ? false : true;
475477
archive_file_browser_set_path(
476-
browser, browser->path, archive_get_tab_ext(tab), skip_assets);
478+
browser, browser->path, archive_get_tab_ext(tab), skip_assets, false);
477479
tab_empty = false; // Empty check will be performed later
478480
}
479481
}

applications/services/dialogs/dialogs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ typedef struct DialogsApp DialogsApp;
1919
* File browser dialog extra options
2020
* @param extension file extension to be offered for selection
2121
* @param skip_assets true - do not show assets folders
22+
* @param hide_dot_files true - hide dot files
2223
* @param icon file icon pointer, NULL for default icon
2324
* @param hide_ext true - hide extensions for files
2425
* @param item_loader_callback callback function for providing custom icon & entry name
@@ -27,6 +28,7 @@ typedef struct DialogsApp DialogsApp;
2728
typedef struct {
2829
const char* extension;
2930
bool skip_assets;
31+
bool hide_dot_files;
3032
const Icon* icon;
3133
bool hide_ext;
3234
FileBrowserLoadItemCallback item_loader_callback;

applications/services/dialogs/dialogs_api.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ bool dialog_file_browser_show(
2020
.file_icon = options ? options->icon : NULL,
2121
.hide_ext = options ? options->hide_ext : true,
2222
.skip_assets = options ? options->skip_assets : true,
23+
.hide_dot_files = options ? options->hide_dot_files : true,
2324
.preselected_filename = path,
2425
.item_callback = options ? options->item_loader_callback : NULL,
2526
.item_callback_context = options ? options->item_loader_context : NULL,

applications/services/dialogs/dialogs_message.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ typedef struct {
1111
const char* extension;
1212
bool skip_assets;
1313
bool hide_ext;
14+
bool hide_dot_files;
1415
const Icon* file_icon;
1516
FuriString* result_path;
1617
FuriString* preselected_filename;

applications/services/dialogs/dialogs_module_file_browser.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ bool dialogs_app_process_module_file_browser(const DialogsAppMessageDataFileBrow
3838
file_browser_set_callback(
3939
file_browser, dialogs_app_file_browser_callback, file_browser_context);
4040
file_browser_configure(
41-
file_browser, data->extension, data->skip_assets, data->file_icon, data->hide_ext);
41+
file_browser,
42+
data->extension,
43+
data->skip_assets,
44+
data->hide_dot_files,
45+
data->file_icon,
46+
data->hide_ext);
4247
file_browser_set_item_callback(file_browser, data->item_callback, data->item_callback_context);
4348
file_browser_start(file_browser, data->preselected_filename);
4449

applications/services/gui/modules/file_browser.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ struct FileBrowser {
8484
BrowserWorker* worker;
8585
const char* ext_filter;
8686
bool skip_assets;
87+
bool hide_dot_files;
8788
bool hide_ext;
8889

8990
FileBrowserCallback callback;
@@ -163,13 +164,15 @@ void file_browser_configure(
163164
FileBrowser* browser,
164165
const char* extension,
165166
bool skip_assets,
167+
bool hide_dot_files,
166168
const Icon* file_icon,
167169
bool hide_ext) {
168170
furi_assert(browser);
169171

170172
browser->ext_filter = extension;
171173
browser->skip_assets = skip_assets;
172174
browser->hide_ext = hide_ext;
175+
browser->hide_dot_files = hide_dot_files;
173176

174177
with_view_model(
175178
browser->view,
@@ -183,7 +186,8 @@ void file_browser_configure(
183186

184187
void file_browser_start(FileBrowser* browser, FuriString* path) {
185188
furi_assert(browser);
186-
browser->worker = file_browser_worker_alloc(path, browser->ext_filter, browser->skip_assets);
189+
browser->worker = file_browser_worker_alloc(
190+
path, browser->ext_filter, browser->skip_assets, browser->hide_dot_files);
187191
file_browser_worker_set_callback_context(browser->worker, browser);
188192
file_browser_worker_set_folder_callback(browser->worker, browser_folder_open_cb);
189193
file_browser_worker_set_list_callback(browser->worker, browser_list_load_cb);

applications/services/gui/modules/file_browser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ void file_browser_configure(
3030
FileBrowser* browser,
3131
const char* extension,
3232
bool skip_assets,
33+
bool hide_dot_files,
3334
const Icon* file_icon,
3435
bool hide_ext);
3536

applications/services/gui/modules/file_browser_worker.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ struct BrowserWorker {
4242
uint32_t load_offset;
4343
uint32_t load_count;
4444
bool skip_assets;
45+
bool hide_dot_files;
4546
idx_last_array_t idx_last;
4647

4748
void* cb_ctx;
@@ -76,6 +77,13 @@ static bool browser_path_trim(FuriString* path) {
7677
}
7778

7879
static bool browser_filter_by_name(BrowserWorker* browser, FuriString* name, bool is_folder) {
80+
// Skip dot files if enabled
81+
if(browser->hide_dot_files) {
82+
if(furi_string_start_with_str(name, ".")) {
83+
return false;
84+
}
85+
}
86+
7987
if(is_folder) {
8088
// Skip assets folders (if enabled)
8189
if(browser->skip_assets) {
@@ -361,14 +369,18 @@ static int32_t browser_worker(void* context) {
361369
return 0;
362370
}
363371

364-
BrowserWorker*
365-
file_browser_worker_alloc(FuriString* path, const char* filter_ext, bool skip_assets) {
372+
BrowserWorker* file_browser_worker_alloc(
373+
FuriString* path,
374+
const char* filter_ext,
375+
bool skip_assets,
376+
bool hide_dot_files) {
366377
BrowserWorker* browser = malloc(sizeof(BrowserWorker)); //-V773
367378

368379
idx_last_array_init(browser->idx_last);
369380

370381
browser->filter_extension = furi_string_alloc_set(filter_ext);
371382
browser->skip_assets = skip_assets;
383+
browser->hide_dot_files = hide_dot_files;
372384
browser->path_start = furi_string_alloc_set(path);
373385
browser->path_current = furi_string_alloc_set(path);
374386
browser->path_next = furi_string_alloc_set(path);
@@ -437,11 +449,13 @@ void file_browser_worker_set_config(
437449
BrowserWorker* browser,
438450
FuriString* path,
439451
const char* filter_ext,
440-
bool skip_assets) {
452+
bool skip_assets,
453+
bool hide_dot_files) {
441454
furi_assert(browser);
442455
furi_string_set(browser->path_next, path);
443456
furi_string_set(browser->filter_extension, filter_ext);
444457
browser->skip_assets = skip_assets;
458+
browser->hide_dot_files = hide_dot_files;
445459
furi_thread_flags_set(furi_thread_get_id(browser->thread), WorkerEvtConfigChange);
446460
}
447461

applications/services/gui/modules/file_browser_worker.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@ typedef void (*BrowserWorkerListItemCallback)(
2121
bool is_last);
2222
typedef void (*BrowserWorkerLongLoadCallback)(void* context);
2323

24-
BrowserWorker*
25-
file_browser_worker_alloc(FuriString* path, const char* filter_ext, bool skip_assets);
24+
BrowserWorker* file_browser_worker_alloc(
25+
FuriString* path,
26+
const char* filter_ext,
27+
bool skip_assets,
28+
bool hide_dot_files);
2629

2730
void file_browser_worker_free(BrowserWorker* browser);
2831

@@ -48,7 +51,8 @@ void file_browser_worker_set_config(
4851
BrowserWorker* browser,
4952
FuriString* path,
5053
const char* filter_ext,
51-
bool skip_assets);
54+
bool skip_assets,
55+
bool hide_dot_files);
5256

5357
void file_browser_worker_folder_enter(BrowserWorker* browser, FuriString* path, int32_t item_idx);
5458

0 commit comments

Comments
 (0)