@@ -64,6 +64,58 @@ void archive_browser_set_callback(
6464 browser -> context = context ;
6565}
6666
67+ static void archive_update_formatted_path (ArchiveBrowserViewModel * model ) {
68+ ArchiveBrowserView * browser = model -> archive -> browser ;
69+ if (!browser -> path_changed ) {
70+ return ;
71+ }
72+
73+ if (momentum_settings .browser_path_mode == BrowserPathOff || archive_is_home (browser )) {
74+ furi_string_set (browser -> formatted_path , ArchiveTabNames [model -> tab_idx ]);
75+ } else {
76+ const char * path = furi_string_get_cstr (browser -> path );
77+ switch (momentum_settings .browser_path_mode ) {
78+ case BrowserPathFull :
79+ furi_string_set (browser -> formatted_path , browser -> path );
80+ break ;
81+
82+ case BrowserPathBrief : {
83+ furi_string_reset (browser -> formatted_path );
84+ FuriString * token = furi_string_alloc ();
85+ FuriString * remaining = furi_string_alloc_set (path );
86+
87+ while (furi_string_size (remaining ) > 0 ) {
88+ size_t slash_pos = furi_string_search_char (remaining , '/' );
89+ if (slash_pos == FURI_STRING_FAILURE ) {
90+ furi_string_cat_printf (
91+ browser -> formatted_path , "/%s" , furi_string_get_cstr (remaining ));
92+ break ;
93+ }
94+ furi_string_set_n (token , remaining , 0 , slash_pos );
95+ if (furi_string_size (token ) > 0 ) {
96+ furi_string_cat_printf (
97+ browser -> formatted_path , "/%c" , furi_string_get_char (token , 0 ));
98+ }
99+ furi_string_right (remaining , slash_pos + 1 );
100+ }
101+
102+ furi_string_free (token );
103+ furi_string_free (remaining );
104+ break ;
105+ }
106+
107+ case BrowserPathCurrent :
108+ path_extract_basename (path , browser -> formatted_path );
109+ break ;
110+
111+ default :
112+ break ;
113+ }
114+ }
115+
116+ browser -> path_changed = false;
117+ }
118+
67119static void render_item_menu (Canvas * canvas , ArchiveBrowserViewModel * model ) {
68120 if (menu_array_size (model -> context_menu ) == 0 ) {
69121 // Need init context menu
@@ -328,10 +380,15 @@ static void draw_list(Canvas* canvas, ArchiveBrowserViewModel* model) {
328380static void archive_render_status_bar (Canvas * canvas , ArchiveBrowserViewModel * model ) {
329381 furi_assert (model );
330382
331- const char * tab_name = ArchiveTabNames [model -> tab_idx ];
332- if (model -> tab_idx == ArchiveTabSearch &&
333- scene_manager_get_scene_state (model -> archive -> scene_manager , ArchiveAppSceneSearch )) {
334- tab_name = "Searching" ;
383+ const char * tab_name = NULL ;
384+ if (model -> tab_idx == ArchiveTabSearch ) {
385+ if (scene_manager_get_scene_state (model -> archive -> scene_manager , ArchiveAppSceneSearch )) {
386+ tab_name = "Searching" ;
387+ } else {
388+ tab_name = ArchiveTabNames [model -> tab_idx ];
389+ }
390+ } else {
391+ archive_update_formatted_path (model );
335392 }
336393 bool clip = model -> clipboard != NULL ;
337394
@@ -347,7 +404,19 @@ static void archive_render_status_bar(Canvas* canvas, ArchiveBrowserViewModel* m
347404 canvas_draw_rframe (canvas , 0 , 0 , 51 , 13 , 1 ); // frame
348405 canvas_draw_line (canvas , 49 , 1 , 49 , 11 ); // shadow right
349406 canvas_draw_line (canvas , 1 , 11 , 49 , 11 ); // shadow bottom
350- canvas_draw_str_aligned (canvas , 25 , 9 , AlignCenter , AlignBottom , tab_name );
407+ if (tab_name ) {
408+ canvas_draw_str_aligned (canvas , 25 , 9 , AlignCenter , AlignBottom , tab_name );
409+ } else {
410+ elements_scrollable_text_line_centered (
411+ canvas ,
412+ 25 ,
413+ 9 ,
414+ 45 ,
415+ model -> archive -> browser -> formatted_path ,
416+ model -> scroll_counter ,
417+ false,
418+ true);
419+ }
351420
352421 if (clip || model -> select_mode ) {
353422 const uint8_t box_w = clip ? 25 : 31 ;
@@ -670,6 +739,8 @@ ArchiveBrowserView* browser_alloc(void) {
670739 browser -> scroll_timer = furi_timer_alloc (browser_scroll_timer , FuriTimerTypePeriodic , browser );
671740
672741 browser -> path = furi_string_alloc_set (archive_get_default_path (TAB_DEFAULT ));
742+ browser -> formatted_path = furi_string_alloc ();
743+ browser -> path_changed = true;
673744
674745 with_view_model (
675746 browser -> view ,
@@ -703,6 +774,7 @@ void browser_free(ArchiveBrowserView* browser) {
703774 false);
704775
705776 furi_string_free (browser -> path );
777+ furi_string_free (browser -> formatted_path );
706778
707779 view_free (browser -> view );
708780 free (browser );
0 commit comments