@@ -26,18 +26,22 @@ use crate::{
2626} ;
2727
2828mod imp {
29+ use std:: path:: PathBuf ;
30+
2931 use adw:: subclass:: bin:: BinImpl ;
3032 use glib:: subclass:: InitializingObject ;
3133 use glib:: Object ;
3234 use gtk:: gio:: { ListModel , ListStore } ;
3335 use gtk:: subclass:: prelude:: * ;
3436 use gtk:: {
3537 prelude:: * , CompositeTemplate , ListView , SignalListItemFactory , SingleSelection ,
36- TreeExpander , TreeListModel ,
38+ TreeExpander , TreeListModel , TreeListRow ,
3739 } ;
3840
39- use crate :: objects:: { KeyValueItem , TreeNode , TreeNodeKind } ;
41+ use crate :: fs:: collection:: { list_endpoints, list_folders} ;
42+ use crate :: objects:: { TreeNode , TreeNodeKind } ;
4043 use crate :: widgets:: sidebar_row:: SidebarRow ;
44+ use crate :: win:: CarteroWindow ;
4145
4246 #[ derive( CompositeTemplate , Default ) ]
4347 #[ template( resource = "/es/danirod/Cartero/sidebar.ui" ) ]
@@ -81,10 +85,41 @@ mod imp {
8185 let root_model: ListStore = Object :: builder ( )
8286 . property ( "item-type" , TreeNode :: static_type ( ) )
8387 . build ( ) ;
84- TreeListModel :: new ( root_model, false , false , |_obj : & Object | {
88+ TreeListModel :: new ( root_model, false , false , |obj : & Object | {
89+ let tree_node = obj. downcast_ref :: < TreeNode > ( ) ?;
90+
91+ if tree_node. node_type ( ) == TreeNodeKind :: Endpoint {
92+ return None ;
93+ }
94+
95+ let path_buf = PathBuf :: from ( tree_node. path ( ) ) ;
96+ let folders = list_folders ( & path_buf) ;
97+ let child = list_endpoints ( & path_buf) ;
98+ println ! ( "{:?}" , child) ;
99+
85100 let children: ListStore = Object :: builder ( )
86- . property ( "item-type" , KeyValueItem :: static_type ( ) )
101+ . property ( "item-type" , TreeNode :: static_type ( ) )
87102 . build ( ) ;
103+
104+ if let Ok ( folders) = folders {
105+ for f in folders {
106+ let node = TreeNode :: default ( ) ;
107+ node. set_path ( f. to_str ( ) . unwrap ( ) ) ;
108+ node. set_title ( f. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ) ;
109+ node. set_node_type ( TreeNodeKind :: Folder ) ;
110+ children. append ( & node) ;
111+ }
112+ }
113+ if let Ok ( child) = child {
114+ for c in child {
115+ let node = TreeNode :: default ( ) ;
116+ node. set_path ( c. to_str ( ) . unwrap ( ) ) ;
117+ node. set_title ( c. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ) ;
118+ node. set_node_type ( TreeNodeKind :: Endpoint ) ;
119+ children. append ( & node) ;
120+ }
121+ }
122+
88123 let model = children. upcast :: < ListModel > ( ) ;
89124 Some ( model)
90125 } )
@@ -100,8 +135,22 @@ mod imp {
100135
101136 #[ template_callback]
102137 fn on_activate ( list : ListView , pos : u32 , data : & Object ) {
103- println ! ( "activate()" ) ;
104- println ! ( "list = {:?} \n pos = {:?} \n data = {:?}" , list, pos, data) ;
138+ let window = list. root ( ) . and_downcast :: < CarteroWindow > ( ) . unwrap ( ) ;
139+ let Some ( model) = list. model ( ) else {
140+ return ;
141+ } ;
142+
143+ let row = model. item ( pos) . and_downcast :: < TreeListRow > ( ) . unwrap ( ) ;
144+ let inner_value = row. item ( ) . and_downcast :: < TreeNode > ( ) . unwrap ( ) ;
145+
146+ let path = inner_value. path ( ) ;
147+
148+ match inner_value. node_type ( ) {
149+ TreeNodeKind :: Endpoint => {
150+ window. open_endpoint ( & path) ;
151+ }
152+ _ => println ! ( "Not implemented yet, wait a minute" ) ,
153+ }
105154 }
106155
107156 #[ template_callback]
0 commit comments