diff --git a/applications/main/archive/helpers/archive_browser.c b/applications/main/archive/helpers/archive_browser.c index 97a3496f6..c72220c6a 100644 --- a/applications/main/archive/helpers/archive_browser.c +++ b/applications/main/archive/helpers/archive_browser.c @@ -74,7 +74,9 @@ static void archive_list_item_cb( browser->view, ArchiveBrowserViewModel * model, { - files_array_sort(model->files); + if(model->item_cnt <= BROWSER_SORT_THRESHOLD) { + files_array_sort(model->files); + } model->list_loading = false; }, true); diff --git a/applications/main/archive/views/archive_browser_view.c b/applications/main/archive/views/archive_browser_view.c index d40b716b8..5182bb8e6 100644 --- a/applications/main/archive/views/archive_browser_view.c +++ b/applications/main/archive/views/archive_browser_view.c @@ -398,15 +398,20 @@ static bool archive_view_input(InputEvent* event, void* context) { bool in_menu; bool move_fav_mode; + bool is_loading; with_view_model( browser->view, ArchiveBrowserViewModel * model, { in_menu = model->menu; move_fav_mode = model->move_fav; + is_loading = model->folder_loading || model->list_loading; }, false); + if(is_loading) { + return false; + } if(in_menu) { if(event->type != InputTypeShort) { return true; // RETURN diff --git a/applications/services/gui/modules/file_browser.c b/applications/services/gui/modules/file_browser.c index 2b8f2a271..0dbd4b8a2 100644 --- a/applications/services/gui/modules/file_browser.c +++ b/applications/services/gui/modules/file_browser.c @@ -478,7 +478,7 @@ static void browser_list_item_cb( browser->view, FileBrowserModel * model, { - if(model->item_cnt < 430) { + if(model->item_cnt <= BROWSER_SORT_THRESHOLD) { FuriString* selected = NULL; if(model->item_idx > 0) { selected = furi_string_alloc_set( @@ -646,7 +646,10 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) { bool is_loading = false; with_view_model( - browser->view, FileBrowserModel * model, { is_loading = model->folder_loading; }, false); + browser->view, + FileBrowserModel * model, + { is_loading = model->folder_loading || model->list_loading; }, + false); if(is_loading) { return false; diff --git a/applications/services/gui/modules/file_browser_worker.c b/applications/services/gui/modules/file_browser_worker.c index 8e56ab273..9d219429b 100644 --- a/applications/services/gui/modules/file_browser_worker.c +++ b/applications/services/gui/modules/file_browser_worker.c @@ -418,7 +418,7 @@ static int32_t browser_worker(void* context) { if(flags & WorkerEvtLoad) { FURI_LOG_D( TAG, "Load offset: %lu cnt: %lu", browser->load_offset, browser->load_count); - if(items_cnt > 430) { + if(items_cnt > BROWSER_SORT_THRESHOLD) { browser_folder_load_chunked( browser, path, browser->load_offset, browser->load_count); } else { diff --git a/applications/services/gui/modules/file_browser_worker.h b/applications/services/gui/modules/file_browser_worker.h index 19a9337ff..859b11be4 100644 --- a/applications/services/gui/modules/file_browser_worker.h +++ b/applications/services/gui/modules/file_browser_worker.h @@ -7,6 +7,8 @@ extern "C" { #endif +#define BROWSER_SORT_THRESHOLD 400 + typedef struct BrowserWorker BrowserWorker; typedef void (*BrowserWorkerFolderOpenCallback)( void* context,