file browser: add hide dot files option

This commit is contained in:
gornekich
2022-12-06 15:22:03 +04:00
parent c08f23ef07
commit 79140829b3
11 changed files with 51 additions and 16 deletions

View File

@@ -80,10 +80,11 @@ static void archive_file_browser_set_path(
ArchiveBrowserView* browser, ArchiveBrowserView* browser,
FuriString* path, FuriString* path,
const char* filter_ext, const char* filter_ext,
bool skip_assets) { bool skip_assets,
bool hide_dot_files) {
furi_assert(browser); furi_assert(browser);
if(!browser->worker_running) { if(!browser->worker_running) {
browser->worker = file_browser_worker_alloc(path, filter_ext, skip_assets); browser->worker = file_browser_worker_alloc(path, filter_ext, skip_assets, hide_dot_files);
file_browser_worker_set_callback_context(browser->worker, browser); file_browser_worker_set_callback_context(browser->worker, browser);
file_browser_worker_set_folder_callback(browser->worker, archive_folder_open_cb); file_browser_worker_set_folder_callback(browser->worker, archive_folder_open_cb);
file_browser_worker_set_list_callback(browser->worker, archive_list_load_cb); file_browser_worker_set_list_callback(browser->worker, archive_list_load_cb);
@@ -92,7 +93,8 @@ static void archive_file_browser_set_path(
browser->worker_running = true; browser->worker_running = true;
} else { } else {
furi_assert(browser->worker); furi_assert(browser->worker);
file_browser_worker_set_config(browser->worker, path, filter_ext, skip_assets); file_browser_worker_set_config(
browser->worker, path, filter_ext, skip_assets, hide_dot_files);
} }
} }
@@ -473,7 +475,7 @@ void archive_switch_tab(ArchiveBrowserView* browser, InputKey key) {
if(archive_is_dir_exists(browser->path)) { if(archive_is_dir_exists(browser->path)) {
bool skip_assets = (strcmp(archive_get_tab_ext(tab), "*") == 0) ? false : true; bool skip_assets = (strcmp(archive_get_tab_ext(tab), "*") == 0) ? false : true;
archive_file_browser_set_path( archive_file_browser_set_path(
browser, browser->path, archive_get_tab_ext(tab), skip_assets); browser, browser->path, archive_get_tab_ext(tab), skip_assets, false);
tab_empty = false; // Empty check will be performed later tab_empty = false; // Empty check will be performed later
} }
} }

View File

@@ -19,6 +19,7 @@ typedef struct DialogsApp DialogsApp;
* File browser dialog extra options * File browser dialog extra options
* @param extension file extension to be offered for selection * @param extension file extension to be offered for selection
* @param skip_assets true - do not show assets folders * @param skip_assets true - do not show assets folders
* @param hide_dot_files true - hide dot files
* @param icon file icon pointer, NULL for default icon * @param icon file icon pointer, NULL for default icon
* @param hide_ext true - hide extensions for files * @param hide_ext true - hide extensions for files
* @param item_loader_callback callback function for providing custom icon & entry name * @param item_loader_callback callback function for providing custom icon & entry name
@@ -27,6 +28,7 @@ typedef struct DialogsApp DialogsApp;
typedef struct { typedef struct {
const char* extension; const char* extension;
bool skip_assets; bool skip_assets;
bool hide_dot_files;
const Icon* icon; const Icon* icon;
bool hide_ext; bool hide_ext;
FileBrowserLoadItemCallback item_loader_callback; FileBrowserLoadItemCallback item_loader_callback;

View File

@@ -20,6 +20,7 @@ bool dialog_file_browser_show(
.file_icon = options ? options->icon : NULL, .file_icon = options ? options->icon : NULL,
.hide_ext = options ? options->hide_ext : true, .hide_ext = options ? options->hide_ext : true,
.skip_assets = options ? options->skip_assets : true, .skip_assets = options ? options->skip_assets : true,
.hide_dot_files = options ? options->hide_dot_files : true,
.preselected_filename = path, .preselected_filename = path,
.item_callback = options ? options->item_loader_callback : NULL, .item_callback = options ? options->item_loader_callback : NULL,
.item_callback_context = options ? options->item_loader_context : NULL, .item_callback_context = options ? options->item_loader_context : NULL,

View File

@@ -11,6 +11,7 @@ typedef struct {
const char* extension; const char* extension;
bool skip_assets; bool skip_assets;
bool hide_ext; bool hide_ext;
bool hide_dot_files;
const Icon* file_icon; const Icon* file_icon;
FuriString* result_path; FuriString* result_path;
FuriString* preselected_filename; FuriString* preselected_filename;

View File

@@ -38,7 +38,12 @@ bool dialogs_app_process_module_file_browser(const DialogsAppMessageDataFileBrow
file_browser_set_callback( file_browser_set_callback(
file_browser, dialogs_app_file_browser_callback, file_browser_context); file_browser, dialogs_app_file_browser_callback, file_browser_context);
file_browser_configure( file_browser_configure(
file_browser, data->extension, data->skip_assets, data->file_icon, data->hide_ext); file_browser,
data->extension,
data->skip_assets,
data->hide_dot_files,
data->file_icon,
data->hide_ext);
file_browser_set_item_callback(file_browser, data->item_callback, data->item_callback_context); file_browser_set_item_callback(file_browser, data->item_callback, data->item_callback_context);
file_browser_start(file_browser, data->preselected_filename); file_browser_start(file_browser, data->preselected_filename);

View File

@@ -84,6 +84,7 @@ struct FileBrowser {
BrowserWorker* worker; BrowserWorker* worker;
const char* ext_filter; const char* ext_filter;
bool skip_assets; bool skip_assets;
bool hide_dot_files;
bool hide_ext; bool hide_ext;
FileBrowserCallback callback; FileBrowserCallback callback;
@@ -163,6 +164,7 @@ void file_browser_configure(
FileBrowser* browser, FileBrowser* browser,
const char* extension, const char* extension,
bool skip_assets, bool skip_assets,
bool hide_dot_files,
const Icon* file_icon, const Icon* file_icon,
bool hide_ext) { bool hide_ext) {
furi_assert(browser); furi_assert(browser);
@@ -170,6 +172,7 @@ void file_browser_configure(
browser->ext_filter = extension; browser->ext_filter = extension;
browser->skip_assets = skip_assets; browser->skip_assets = skip_assets;
browser->hide_ext = hide_ext; browser->hide_ext = hide_ext;
browser->hide_dot_files = hide_dot_files;
with_view_model( with_view_model(
browser->view, browser->view,
@@ -183,7 +186,8 @@ void file_browser_configure(
void file_browser_start(FileBrowser* browser, FuriString* path) { void file_browser_start(FileBrowser* browser, FuriString* path) {
furi_assert(browser); furi_assert(browser);
browser->worker = file_browser_worker_alloc(path, browser->ext_filter, browser->skip_assets); browser->worker = file_browser_worker_alloc(
path, browser->ext_filter, browser->skip_assets, browser->hide_dot_files);
file_browser_worker_set_callback_context(browser->worker, browser); file_browser_worker_set_callback_context(browser->worker, browser);
file_browser_worker_set_folder_callback(browser->worker, browser_folder_open_cb); file_browser_worker_set_folder_callback(browser->worker, browser_folder_open_cb);
file_browser_worker_set_list_callback(browser->worker, browser_list_load_cb); file_browser_worker_set_list_callback(browser->worker, browser_list_load_cb);

View File

@@ -30,6 +30,7 @@ void file_browser_configure(
FileBrowser* browser, FileBrowser* browser,
const char* extension, const char* extension,
bool skip_assets, bool skip_assets,
bool hide_dot_files,
const Icon* file_icon, const Icon* file_icon,
bool hide_ext); bool hide_ext);

View File

@@ -42,6 +42,7 @@ struct BrowserWorker {
uint32_t load_offset; uint32_t load_offset;
uint32_t load_count; uint32_t load_count;
bool skip_assets; bool skip_assets;
bool hide_dot_files;
idx_last_array_t idx_last; idx_last_array_t idx_last;
void* cb_ctx; void* cb_ctx;
@@ -76,6 +77,13 @@ static bool browser_path_trim(FuriString* path) {
} }
static bool browser_filter_by_name(BrowserWorker* browser, FuriString* name, bool is_folder) { static bool browser_filter_by_name(BrowserWorker* browser, FuriString* name, bool is_folder) {
// Skip dot files if enabled
if(browser->hide_dot_files) {
if(furi_string_start_with_str(name, ".")) {
return false;
}
}
if(is_folder) { if(is_folder) {
// Skip assets folders (if enabled) // Skip assets folders (if enabled)
if(browser->skip_assets) { if(browser->skip_assets) {
@@ -361,14 +369,18 @@ static int32_t browser_worker(void* context) {
return 0; return 0;
} }
BrowserWorker* BrowserWorker* file_browser_worker_alloc(
file_browser_worker_alloc(FuriString* path, const char* filter_ext, bool skip_assets) { FuriString* path,
const char* filter_ext,
bool skip_assets,
bool hide_dot_files) {
BrowserWorker* browser = malloc(sizeof(BrowserWorker)); //-V773 BrowserWorker* browser = malloc(sizeof(BrowserWorker)); //-V773
idx_last_array_init(browser->idx_last); idx_last_array_init(browser->idx_last);
browser->filter_extension = furi_string_alloc_set(filter_ext); browser->filter_extension = furi_string_alloc_set(filter_ext);
browser->skip_assets = skip_assets; browser->skip_assets = skip_assets;
browser->hide_dot_files = hide_dot_files;
browser->path_start = furi_string_alloc_set(path); browser->path_start = furi_string_alloc_set(path);
browser->path_current = furi_string_alloc_set(path); browser->path_current = furi_string_alloc_set(path);
browser->path_next = furi_string_alloc_set(path); browser->path_next = furi_string_alloc_set(path);
@@ -437,11 +449,13 @@ void file_browser_worker_set_config(
BrowserWorker* browser, BrowserWorker* browser,
FuriString* path, FuriString* path,
const char* filter_ext, const char* filter_ext,
bool skip_assets) { bool skip_assets,
bool hide_dot_files) {
furi_assert(browser); furi_assert(browser);
furi_string_set(browser->path_next, path); furi_string_set(browser->path_next, path);
furi_string_set(browser->filter_extension, filter_ext); furi_string_set(browser->filter_extension, filter_ext);
browser->skip_assets = skip_assets; browser->skip_assets = skip_assets;
browser->hide_dot_files = hide_dot_files;
furi_thread_flags_set(furi_thread_get_id(browser->thread), WorkerEvtConfigChange); furi_thread_flags_set(furi_thread_get_id(browser->thread), WorkerEvtConfigChange);
} }

View File

@@ -21,8 +21,11 @@ typedef void (*BrowserWorkerListItemCallback)(
bool is_last); bool is_last);
typedef void (*BrowserWorkerLongLoadCallback)(void* context); typedef void (*BrowserWorkerLongLoadCallback)(void* context);
BrowserWorker* BrowserWorker* file_browser_worker_alloc(
file_browser_worker_alloc(FuriString* path, const char* filter_ext, bool skip_assets); FuriString* path,
const char* filter_ext,
bool skip_assets,
bool hide_dot_files);
void file_browser_worker_free(BrowserWorker* browser); void file_browser_worker_free(BrowserWorker* browser);
@@ -48,7 +51,8 @@ void file_browser_worker_set_config(
BrowserWorker* browser, BrowserWorker* browser,
FuriString* path, FuriString* path,
const char* filter_ext, const char* filter_ext,
bool skip_assets); bool skip_assets,
bool hide_dot_files);
void file_browser_worker_folder_enter(BrowserWorker* browser, FuriString* path, int32_t item_idx); void file_browser_worker_folder_enter(BrowserWorker* browser, FuriString* path, int32_t item_idx);

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params entry,status,name,type,params
Version,+,8.1,, Version,+,9.0,,
Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,, Header,+,applications/services/cli/cli_vcp.h,,
@@ -806,14 +806,14 @@ Function,-,fgetpos,int,"FILE*, fpos_t*"
Function,-,fgets,char*,"char*, int, FILE*" Function,-,fgets,char*,"char*, int, FILE*"
Function,-,fgets_unlocked,char*,"char*, int, FILE*" Function,-,fgets_unlocked,char*,"char*, int, FILE*"
Function,+,file_browser_alloc,FileBrowser*,FuriString* Function,+,file_browser_alloc,FileBrowser*,FuriString*
Function,+,file_browser_configure,void,"FileBrowser*, const char*, _Bool, const Icon*, _Bool" Function,+,file_browser_configure,void,"FileBrowser*, const char*, _Bool, _Bool, const Icon*, _Bool"
Function,+,file_browser_free,void,FileBrowser* Function,+,file_browser_free,void,FileBrowser*
Function,+,file_browser_get_view,View*,FileBrowser* Function,+,file_browser_get_view,View*,FileBrowser*
Function,+,file_browser_set_callback,void,"FileBrowser*, FileBrowserCallback, void*" Function,+,file_browser_set_callback,void,"FileBrowser*, FileBrowserCallback, void*"
Function,+,file_browser_set_item_callback,void,"FileBrowser*, FileBrowserLoadItemCallback, void*" Function,+,file_browser_set_item_callback,void,"FileBrowser*, FileBrowserLoadItemCallback, void*"
Function,+,file_browser_start,void,"FileBrowser*, FuriString*" Function,+,file_browser_start,void,"FileBrowser*, FuriString*"
Function,+,file_browser_stop,void,FileBrowser* Function,+,file_browser_stop,void,FileBrowser*
Function,+,file_browser_worker_alloc,BrowserWorker*,"FuriString*, const char*, _Bool" Function,+,file_browser_worker_alloc,BrowserWorker*,"FuriString*, const char*, _Bool, _Bool"
Function,+,file_browser_worker_folder_enter,void,"BrowserWorker*, FuriString*, int32_t" Function,+,file_browser_worker_folder_enter,void,"BrowserWorker*, FuriString*, int32_t"
Function,+,file_browser_worker_folder_exit,void,BrowserWorker* Function,+,file_browser_worker_folder_exit,void,BrowserWorker*
Function,+,file_browser_worker_folder_refresh,void,"BrowserWorker*, int32_t" Function,+,file_browser_worker_folder_refresh,void,"BrowserWorker*, int32_t"
@@ -821,7 +821,7 @@ Function,+,file_browser_worker_free,void,BrowserWorker*
Function,+,file_browser_worker_is_in_start_folder,_Bool,BrowserWorker* Function,+,file_browser_worker_is_in_start_folder,_Bool,BrowserWorker*
Function,+,file_browser_worker_load,void,"BrowserWorker*, uint32_t, uint32_t" Function,+,file_browser_worker_load,void,"BrowserWorker*, uint32_t, uint32_t"
Function,+,file_browser_worker_set_callback_context,void,"BrowserWorker*, void*" Function,+,file_browser_worker_set_callback_context,void,"BrowserWorker*, void*"
Function,+,file_browser_worker_set_config,void,"BrowserWorker*, FuriString*, const char*, _Bool" Function,+,file_browser_worker_set_config,void,"BrowserWorker*, FuriString*, const char*, _Bool, _Bool"
Function,+,file_browser_worker_set_folder_callback,void,"BrowserWorker*, BrowserWorkerFolderOpenCallback" Function,+,file_browser_worker_set_folder_callback,void,"BrowserWorker*, BrowserWorkerFolderOpenCallback"
Function,+,file_browser_worker_set_item_callback,void,"BrowserWorker*, BrowserWorkerListItemCallback" Function,+,file_browser_worker_set_item_callback,void,"BrowserWorker*, BrowserWorkerListItemCallback"
Function,+,file_browser_worker_set_list_callback,void,"BrowserWorker*, BrowserWorkerListLoadCallback" Function,+,file_browser_worker_set_list_callback,void,"BrowserWorker*, BrowserWorkerListLoadCallback"
1 entry status name type params
2 Version + 8.1 9.0
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
806 Function - fgets char* char*, int, FILE*
807 Function - fgets_unlocked char* char*, int, FILE*
808 Function + file_browser_alloc FileBrowser* FuriString*
809 Function + file_browser_configure void FileBrowser*, const char*, _Bool, const Icon*, _Bool FileBrowser*, const char*, _Bool, _Bool, const Icon*, _Bool
810 Function + file_browser_free void FileBrowser*
811 Function + file_browser_get_view View* FileBrowser*
812 Function + file_browser_set_callback void FileBrowser*, FileBrowserCallback, void*
813 Function + file_browser_set_item_callback void FileBrowser*, FileBrowserLoadItemCallback, void*
814 Function + file_browser_start void FileBrowser*, FuriString*
815 Function + file_browser_stop void FileBrowser*
816 Function + file_browser_worker_alloc BrowserWorker* FuriString*, const char*, _Bool FuriString*, const char*, _Bool, _Bool
817 Function + file_browser_worker_folder_enter void BrowserWorker*, FuriString*, int32_t
818 Function + file_browser_worker_folder_exit void BrowserWorker*
819 Function + file_browser_worker_folder_refresh void BrowserWorker*, int32_t
821 Function + file_browser_worker_is_in_start_folder _Bool BrowserWorker*
822 Function + file_browser_worker_load void BrowserWorker*, uint32_t, uint32_t
823 Function + file_browser_worker_set_callback_context void BrowserWorker*, void*
824 Function + file_browser_worker_set_config void BrowserWorker*, FuriString*, const char*, _Bool BrowserWorker*, FuriString*, const char*, _Bool, _Bool
825 Function + file_browser_worker_set_folder_callback void BrowserWorker*, BrowserWorkerFolderOpenCallback
826 Function + file_browser_worker_set_item_callback void BrowserWorker*, BrowserWorkerListItemCallback
827 Function + file_browser_worker_set_list_callback void BrowserWorker*, BrowserWorkerListLoadCallback

View File

@@ -1207,6 +1207,7 @@ bool nfc_file_select(NfcDevice* dev) {
const DialogsFileBrowserOptions browser_options = { const DialogsFileBrowserOptions browser_options = {
.extension = NFC_APP_EXTENSION, .extension = NFC_APP_EXTENSION,
.skip_assets = true, .skip_assets = true,
.hide_dot_files = true,
.icon = &I_Nfc_10px, .icon = &I_Nfc_10px,
.hide_ext = true, .hide_ext = true,
.item_loader_callback = NULL, .item_loader_callback = NULL,