Skip to content

Commit

Permalink
Merge pull request #389 from Dig03/file-browser-ordering
Browse files Browse the repository at this point in the history
File browser ordering
  • Loading branch information
RogueMaster authored Oct 29, 2022
2 parents 8789c37 + 38d0bc5 commit ac331b8
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 16 deletions.
8 changes: 7 additions & 1 deletion applications/main/archive/helpers/archive_browser.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,13 @@ static void
archive_add_file_item(browser, is_folder, furi_string_get_cstr(item_path));
} else {
with_view_model(
browser->view, ArchiveBrowserViewModel * model, { model->list_loading = false; }, true);
browser->view,
ArchiveBrowserViewModel * model,
{
files_array_sort(model->files);
model->list_loading = false;
},
true);
}
}

Expand Down
29 changes: 22 additions & 7 deletions applications/main/archive/helpers/archive_files.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

#include <m-array.h>
#include <furi.h>
#include <m-algo.h>
#include <m-string.h>
#include <storage/storage.h>
#include "toolbox/path.h"

Expand Down Expand Up @@ -81,13 +83,26 @@ static void ArchiveFile_t_clear(ArchiveFile_t* obj) {
furi_string_free(obj->custom_name);
}

ARRAY_DEF(
files_array,
ArchiveFile_t,
(INIT(API_2(ArchiveFile_t_init)),
SET(API_6(ArchiveFile_t_set)),
INIT_SET(API_6(ArchiveFile_t_init_set)),
CLEAR(API_2(ArchiveFile_t_clear))))
static int ArchiveFile_t_cmp(const ArchiveFile_t* a, const ArchiveFile_t* b) {
if(a->type == ArchiveFileTypeFolder && b->type != ArchiveFileTypeFolder) {
return -1;
}

return furi_string_cmp(a->path, b->path);
}

#define M_OPL_ArchiveFile_t() \
(INIT(API_2(ArchiveFile_t_init)), \
SET(API_6(ArchiveFile_t_set)), \
INIT_SET(API_6(ArchiveFile_t_init_set)), \
CLEAR(API_2(ArchiveFile_t_clear)), \
CMP(API_6(ArchiveFile_t_cmp)), \
SWAP(M_SWAP_DEFAULT), \
EQUAL(API_6(M_EQUAL_DEFAULT)))

ARRAY_DEF(files_array, ArchiveFile_t)

ALGO_DEF(files_array, ARRAY_OPLIST(files_array, M_OPL_ArchiveFile_t()))

void archive_set_file_type(ArchiveFile_t* file, const char* path, bool is_folder, bool is_app);
bool archive_get_items(void* context, const char* path);
Expand Down
40 changes: 32 additions & 8 deletions applications/services/gui/modules/file_browser.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
#include <core/common_defines.h>
#include <core/log.h>
#include "furi_hal_resources.h"
#include "m-string.h"
#include "m-algo.h"
#include <m-array.h>
#include <gui/elements.h>
#include <furi.h>
Expand Down Expand Up @@ -71,13 +73,29 @@ static void BrowserItem_t_clear(BrowserItem_t* obj) {
}
}

ARRAY_DEF(
items_array,
BrowserItem_t,
(INIT(API_2(BrowserItem_t_init)),
SET(API_6(BrowserItem_t_set)),
INIT_SET(API_6(BrowserItem_t_init_set)),
CLEAR(API_2(BrowserItem_t_clear))))
static int BrowserItem_t_cmp(const BrowserItem_t* a, const BrowserItem_t* b) {
// Back indicator comes before everything, then folders, then all other files.
if((a->type == BrowserItemTypeBack) ||
(a->type == BrowserItemTypeFolder && b->type != BrowserItemTypeFolder &&
b->type != BrowserItemTypeBack)) {
return -1;
}

return furi_string_cmp(a->path, b->path);
}

#define M_OPL_BrowserItem_t() \
(INIT(API_2(BrowserItem_t_init)), \
SET(API_6(BrowserItem_t_set)), \
INIT_SET(API_6(BrowserItem_t_init_set)), \
CLEAR(API_2(BrowserItem_t_clear)), \
CMP(API_6(BrowserItem_t_cmp)), \
SWAP(M_SWAP_DEFAULT), \
EQUAL(API_6(M_EQUAL_DEFAULT)))

ARRAY_DEF(items_array, BrowserItem_t)

ALGO_DEF(items_array, ARRAY_OPLIST(items_array, M_OPL_BrowserItem_t()))

struct FileBrowser {
View* view;
Expand Down Expand Up @@ -388,7 +406,13 @@ static void
}
} else {
with_view_model(
browser->view, FileBrowserModel * model, { model->list_loading = false; }, true);
browser->view,
FileBrowserModel * model,
{
items_array_sort(model->items);
model->list_loading = false;
},
true);
}
}

Expand Down

0 comments on commit ac331b8

Please sign in to comment.