Merge branch 'pr/445' into 420

This commit is contained in:
RogueMaster
2022-11-25 01:30:39 -05:00
4 changed files with 34 additions and 1 deletions

View File

@@ -614,6 +614,19 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
} }
consumed = true; consumed = true;
} }
} else if(event->key == InputKeyBack) {
if(event->type == InputTypeShort) {
bool is_root = false;
with_view_model(
browser->view, FileBrowserModel * model, { is_root = model->is_root; }, false);
if(!is_root && !file_browser_worker_is_in_start_folder(browser->worker)) {
consumed = true;
if(!is_root) {
file_browser_worker_folder_exit(browser->worker);
}
}
}
} }
return consumed; return consumed;

View File

@@ -37,6 +37,8 @@ struct BrowserWorker {
FuriThread* thread; FuriThread* thread;
FuriString* filter_extension; FuriString* filter_extension;
FuriString* path_start;
FuriString* path_current;
FuriString* path_next; FuriString* path_next;
int32_t item_sel_idx; int32_t item_sel_idx;
uint32_t load_offset; uint32_t load_offset;
@@ -293,6 +295,7 @@ static int32_t browser_worker(void* context) {
int32_t file_idx = 0; int32_t file_idx = 0;
browser_folder_init(browser, path, filename, &items_cnt, &file_idx); browser_folder_init(browser, path, filename, &items_cnt, &file_idx);
furi_string_set(browser->path_current, path);
FURI_LOG_D( FURI_LOG_D(
TAG, TAG,
"Enter folder: %s items: %lu idx: %ld", "Enter folder: %s items: %lu idx: %ld",
@@ -315,6 +318,7 @@ static int32_t browser_worker(void* context) {
// Pop previous selected item index from history array // Pop previous selected item index from history array
idx_last_array_pop_back(&file_idx, browser->idx_last); idx_last_array_pop_back(&file_idx, browser->idx_last);
} }
furi_string_set(browser->path_current, path);
FURI_LOG_D( FURI_LOG_D(
TAG, TAG,
"Exit to: %s items: %lu idx: %ld", "Exit to: %s items: %lu idx: %ld",
@@ -369,8 +373,14 @@ BrowserWorker*
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->path_start = 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);
if(browser_path_is_file(browser->path_start)) {
browser_path_trim(browser->path_start);
}
browser->thread = furi_thread_alloc_ex("BrowserWorker", 2048, browser_worker, browser); browser->thread = furi_thread_alloc_ex("BrowserWorker", 2048, browser_worker, browser);
furi_thread_start(browser->thread); furi_thread_start(browser->thread);
@@ -386,6 +396,8 @@ void file_browser_worker_free(BrowserWorker* browser) {
furi_string_free(browser->filter_extension); furi_string_free(browser->filter_extension);
furi_string_free(browser->path_next); furi_string_free(browser->path_next);
furi_string_free(browser->path_current);
furi_string_free(browser->path_start);
idx_last_array_clear(browser->idx_last); idx_last_array_clear(browser->idx_last);
@@ -444,6 +456,11 @@ void file_browser_worker_folder_enter(BrowserWorker* browser, FuriString* path,
furi_thread_flags_set(furi_thread_get_id(browser->thread), WorkerEvtFolderEnter); furi_thread_flags_set(furi_thread_get_id(browser->thread), WorkerEvtFolderEnter);
} }
bool file_browser_worker_is_in_start_folder(BrowserWorker* browser) {
furi_assert(browser);
return (furi_string_cmp(browser->path_start, browser->path_current) == 0);
}
void file_browser_worker_folder_exit(BrowserWorker* browser) { void file_browser_worker_folder_exit(BrowserWorker* browser) {
furi_assert(browser); furi_assert(browser);
furi_thread_flags_set(furi_thread_get_id(browser->thread), WorkerEvtFolderExit); furi_thread_flags_set(furi_thread_get_id(browser->thread), WorkerEvtFolderExit);

View File

@@ -52,6 +52,8 @@ void file_browser_worker_set_config(
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);
bool file_browser_worker_is_in_start_folder(BrowserWorker* browser);
void file_browser_worker_folder_exit(BrowserWorker* browser); void file_browser_worker_folder_exit(BrowserWorker* browser);
void file_browser_worker_folder_refresh(BrowserWorker* browser, int32_t item_idx); void file_browser_worker_folder_refresh(BrowserWorker* browser, int32_t item_idx);

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params entry,status,name,type,params
Version,+,7.52,, Version,+,7.6,,
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,,
@@ -836,6 +836,7 @@ Function,+,file_browser_worker_folder_enter,void,"BrowserWorker*, FuriString*, i
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"
Function,+,file_browser_worker_free,void,BrowserWorker* Function,+,file_browser_worker_free,void,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"
1 entry status name type params
2 Version + 7.52 7.6
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
836 Function + file_browser_worker_folder_exit void BrowserWorker*
837 Function + file_browser_worker_folder_refresh void BrowserWorker*, int32_t
838 Function + file_browser_worker_free void BrowserWorker*
839 Function + file_browser_worker_is_in_start_folder _Bool BrowserWorker*
840 Function + file_browser_worker_load void BrowserWorker*, uint32_t, uint32_t
841 Function + file_browser_worker_set_callback_context void BrowserWorker*, void*
842 Function + file_browser_worker_set_config void BrowserWorker*, FuriString*, const char*, _Bool