mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-16 04:24:45 -07:00
file browser: add hide dot files option
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
|
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user