[FL-976] Removing lambdas (#1849)
* Removing lambdas... * Wake the fk up, Gordon! We have a citadel to burn! * Here comes the Nihilanth * Lambda documentation Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
@@ -139,10 +139,7 @@ FileBrowser* file_browser_alloc(FuriString* result_path) {
|
||||
browser->result_path = result_path;
|
||||
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
items_array_init(model->items);
|
||||
return false;
|
||||
});
|
||||
browser->view, FileBrowserModel * model, { items_array_init(model->items); }, false);
|
||||
|
||||
return browser;
|
||||
}
|
||||
@@ -151,10 +148,7 @@ void file_browser_free(FileBrowser* browser) {
|
||||
furi_assert(browser);
|
||||
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
items_array_clear(model->items);
|
||||
return false;
|
||||
});
|
||||
browser->view, FileBrowserModel * model, { items_array_clear(model->items); }, false);
|
||||
|
||||
view_free(browser->view);
|
||||
free(browser);
|
||||
@@ -178,11 +172,13 @@ void file_browser_configure(
|
||||
browser->hide_ext = hide_ext;
|
||||
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
browser->view,
|
||||
FileBrowserModel * model,
|
||||
{
|
||||
model->file_icon = file_icon;
|
||||
model->hide_ext = hide_ext;
|
||||
return false;
|
||||
});
|
||||
},
|
||||
false);
|
||||
}
|
||||
|
||||
void file_browser_start(FileBrowser* browser, FuriString* path) {
|
||||
@@ -199,14 +195,16 @@ void file_browser_stop(FileBrowser* browser) {
|
||||
furi_assert(browser);
|
||||
file_browser_worker_free(browser->worker);
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
browser->view,
|
||||
FileBrowserModel * model,
|
||||
{
|
||||
items_array_reset(model->items);
|
||||
model->item_cnt = 0;
|
||||
model->item_idx = 0;
|
||||
model->array_offset = 0;
|
||||
model->list_offset = 0;
|
||||
return false;
|
||||
});
|
||||
},
|
||||
false);
|
||||
}
|
||||
|
||||
void file_browser_set_callback(FileBrowser* browser, FileBrowserCallback callback, void* context) {
|
||||
@@ -257,7 +255,9 @@ static void browser_update_offset(FileBrowser* browser) {
|
||||
furi_assert(browser);
|
||||
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
browser->view,
|
||||
FileBrowserModel * model,
|
||||
{
|
||||
uint16_t bounds = model->item_cnt > (LIST_ITEMS - 1) ? 2 : model->item_cnt;
|
||||
|
||||
if((model->item_cnt > (LIST_ITEMS - 1)) &&
|
||||
@@ -272,9 +272,8 @@ static void browser_update_offset(FileBrowser* browser) {
|
||||
model->list_offset =
|
||||
CLAMP(model->item_idx - 1, (int32_t)model->item_cnt - bounds, 0);
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
},
|
||||
false);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -285,7 +284,9 @@ static void
|
||||
int32_t load_offset = 0;
|
||||
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
browser->view,
|
||||
FileBrowserModel * model,
|
||||
{
|
||||
items_array_reset(model->items);
|
||||
if(is_root) {
|
||||
model->item_cnt = item_cnt;
|
||||
@@ -303,8 +304,8 @@ static void
|
||||
model->is_root = is_root;
|
||||
model->list_loading = true;
|
||||
model->folder_loading = false;
|
||||
return true;
|
||||
});
|
||||
},
|
||||
true);
|
||||
browser_update_offset(browser);
|
||||
|
||||
file_browser_worker_load(browser->worker, load_offset, ITEM_LIST_LEN_MAX);
|
||||
@@ -319,7 +320,9 @@ static void browser_list_load_cb(void* context, uint32_t list_load_offset) {
|
||||
back_item.type = BrowserItemTypeBack;
|
||||
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
browser->view,
|
||||
FileBrowserModel * model,
|
||||
{
|
||||
items_array_reset(model->items);
|
||||
model->array_offset = list_load_offset;
|
||||
if(!model->is_root) {
|
||||
@@ -329,8 +332,8 @@ static void browser_list_load_cb(void* context, uint32_t list_load_offset) {
|
||||
model->array_offset += 1;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
},
|
||||
true);
|
||||
|
||||
BrowserItem_t_clear(&back_item);
|
||||
}
|
||||
@@ -371,11 +374,13 @@ static void
|
||||
}
|
||||
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
browser->view,
|
||||
FileBrowserModel * model,
|
||||
{
|
||||
items_array_push_back(model->items, item);
|
||||
// TODO: calculate if element is visible
|
||||
return true;
|
||||
});
|
||||
},
|
||||
true);
|
||||
furi_string_free(item.display_name);
|
||||
furi_string_free(item.path);
|
||||
if(item.custom_icon_data) {
|
||||
@@ -383,10 +388,7 @@ static void
|
||||
}
|
||||
} else {
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
model->list_loading = false;
|
||||
return true;
|
||||
});
|
||||
browser->view, FileBrowserModel * model, { model->list_loading = false; }, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -395,10 +397,7 @@ static void browser_long_load_cb(void* context) {
|
||||
FileBrowser* browser = (FileBrowser*)context;
|
||||
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
model->folder_loading = true;
|
||||
return true;
|
||||
});
|
||||
browser->view, FileBrowserModel * model, { model->folder_loading = true; }, true);
|
||||
}
|
||||
|
||||
static void browser_draw_frame(Canvas* canvas, uint16_t idx, bool scrollbar) {
|
||||
@@ -508,17 +507,16 @@ 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;
|
||||
return false;
|
||||
});
|
||||
browser->view, FileBrowserModel * model, { is_loading = model->folder_loading; }, false);
|
||||
|
||||
if(is_loading) {
|
||||
return false;
|
||||
} else if(event->key == InputKeyUp || event->key == InputKeyDown) {
|
||||
if(event->type == InputTypeShort || event->type == InputTypeRepeat) {
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
browser->view,
|
||||
FileBrowserModel * model,
|
||||
{
|
||||
if(event->key == InputKeyUp) {
|
||||
model->item_idx =
|
||||
((model->item_idx - 1) + model->item_cnt) % model->item_cnt;
|
||||
@@ -543,8 +541,8 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
|
||||
browser->worker, load_offset, ITEM_LIST_LEN_MAX);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
},
|
||||
true);
|
||||
browser_update_offset(browser);
|
||||
consumed = true;
|
||||
}
|
||||
@@ -553,7 +551,9 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
|
||||
BrowserItem_t* selected_item = NULL;
|
||||
int32_t select_index = 0;
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
browser->view,
|
||||
FileBrowserModel * model,
|
||||
{
|
||||
if(browser_is_item_in_array(model, model->item_idx)) {
|
||||
selected_item =
|
||||
items_array_get(model->items, model->item_idx - model->array_offset);
|
||||
@@ -562,8 +562,8 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
|
||||
select_index -= 1;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
},
|
||||
false);
|
||||
|
||||
if(selected_item) {
|
||||
if(selected_item->type == BrowserItemTypeBack) {
|
||||
@@ -584,10 +584,7 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
|
||||
if(event->type == InputTypeShort) {
|
||||
bool is_root = false;
|
||||
with_view_model(
|
||||
browser->view, (FileBrowserModel * model) {
|
||||
is_root = model->is_root;
|
||||
return false;
|
||||
});
|
||||
browser->view, FileBrowserModel * model, { is_root = model->is_root; }, false);
|
||||
if(!is_root) {
|
||||
file_browser_worker_folder_exit(browser->worker);
|
||||
}
|
||||
|
Reference in New Issue
Block a user