@@ -5,34 +5,43 @@ import Adw from "gi://Adw";
55import GLib from "gi://GLib" ;
66import Gio from "gi://Gio" ;
77
8- const INT32_MAX = 2147483647 ;
9-
10- const ItemClass = GObject . registerClass ( {
11- GTypeName : 'Item' ,
12- Properties : {
13- 'id' : GObject . ParamSpec . int (
14- 'id' , 'ID' , 'An ID' ,
15- GObject . ParamFlags . READWRITE | GObject . ParamFlags . CONSTRUCT ,
16- 0 , INT32_MAX , 0
17- ) ,
18- 'url' : GObject . ParamSpec . string (
19- 'url' , 'URL' , 'A URL' ,
20- GObject . ParamFlags . READWRITE | GObject . ParamFlags . CONSTRUCT ,
21- ''
22- ) ,
8+ const ItemClass = GObject . registerClass (
9+ {
10+ GTypeName : "Item" ,
11+ Properties : {
12+ id : GObject . ParamSpec . int (
13+ "id" ,
14+ "ID" ,
15+ "An ID" ,
16+ GObject . ParamFlags . READWRITE | GObject . ParamFlags . CONSTRUCT ,
17+ 0 ,
18+ GLib . MAXINT32 ,
19+ 0 ,
20+ ) ,
21+ url : GObject . ParamSpec . string (
22+ "url" ,
23+ "URL" ,
24+ "A URL" ,
25+ GObject . ParamFlags . READWRITE | GObject . ParamFlags . CONSTRUCT ,
26+ "" ,
27+ ) ,
28+ } ,
2329 } ,
24- } , class ItemClass extends Gom . Resource { } ) ;
30+ class ItemClass extends Gom . Resource { } ,
31+ ) ;
2532
2633let adapter , repository ;
2734
2835function initDatabase ( ) {
2936 adapter = new Gom . Adapter ( ) ;
30- adapter . open_sync ( ' :memory:' , ) ;
37+ adapter . open_sync ( " :memory:" , ) ;
3138 repository = new Gom . Repository ( { adapter : adapter } ) ;
3239
33- ItemClass . set_table ( 'items' ) ;
34- ItemClass . set_primary_key ( 'id' ) ;
40+ // Set up table and primary key
41+ ItemClass . set_table ( "items" ) ;
42+ ItemClass . set_primary_key ( "id" ) ;
3543
44+ // Perform automatic migration
3645 repository . automatic_migrate_sync ( 1 , [ ItemClass ] ) ;
3746}
3847
@@ -52,34 +61,33 @@ function showToast(overlay, message) {
5261
5362initDatabase ( ) ;
5463
55- const url_entry = workbench . builder . get_object ( "url_entry " ) ;
64+ const text_entry = workbench . builder . get_object ( "text_entry " ) ;
5665const id_entry = workbench . builder . get_object ( "id_entry" ) ;
5766const insert_button = workbench . builder . get_object ( "insert_button" ) ;
58- const find_button = workbench . builder . get_object ( "find_button" ) ;
59- const filter_entry = workbench . builder . get_object ( "filter_entry" ) ;
60- const filter_button = workbench . builder . get_object ( "filter_button" ) ;
67+ const search_entry = workbench . builder . get_object ( "search_entry" ) ;
6168const result_label = workbench . builder . get_object ( "result_label" ) ;
6269const overlay = workbench . builder . get_object ( "overlay" ) ;
63-
6470const data_model = new Gio . ListStore ( { item_type : ItemClass } ) ;
6571const column_view = workbench . builder . get_object ( "column_view" ) ;
6672const col1 = workbench . builder . get_object ( "col1" ) ;
6773const col2 = workbench . builder . get_object ( "col2" ) ;
74+ var count = 0 ;
6875
6976insert_button . connect ( "clicked" , ( ) => {
70- const url = url_entry . text ;
77+ const url = text_entry . text ;
7178 const item = new ItemClass ( { repository : repository , url : url } ) ;
7279 const success = item . save_sync ( ) ;
80+
7381 if ( success ) {
7482 showToast ( overlay , "Item inserted successfully" ) ;
7583 data_model . append ( item ) ;
84+ id_entry . set_range ( 1 , ++ count ) ;
7685 } else {
77- result_label . label = "Failed to insert item" ;
7886 showToast ( overlay , "Failed to insert item" ) ;
7987 }
8088} ) ;
8189
82- find_button . connect ( "clicked " , ( ) => {
90+ id_entry . connect ( "value-changed " , ( ) => {
8391 data_model . remove_all ( ) ;
8492 const id = parseInt ( id_entry . text ) ;
8593 const filter = Gom . Filter . new_eq ( ItemClass , "id" , id ) ;
@@ -89,49 +97,42 @@ find_button.connect("clicked", () => {
8997 } else {
9098 result_label . label = "Item not found" ;
9199 }
92-
93100} ) ;
94101
95- filter_button . connect ( "clicked " , ( ) => {
102+ search_entry . connect ( "search-changed " , ( ) => {
96103 data_model . remove_all ( ) ;
97- const filter_text = filter_entry . text . trim ( ) ;
104+ const filter_text = search_entry . text . trim ( ) ;
98105 if ( filter_text === "" ) {
99- result_label . label = "Enter a value " ;
106+ result_label . label = "" ;
100107 return ;
101108 }
102-
103- const filter = Gom . Filter . new_glob ( ItemClass , ' url' , `*${ filter_text } *` ) ;
109+ // Create a filter for Text matching
110+ const filter = Gom . Filter . new_glob ( ItemClass , " url" , `*${ filter_text } *` ) ;
104111 const filtered_items = repository . find_sync ( ItemClass , filter ) ;
105112
106- if ( filtered_items ) {
107- const count = filtered_items . get_count ( ) ;
108- if ( count > 0 ) {
109- filtered_items . fetch_async ( 0 , count , ( ) => {
110- for ( let i = 0 ; i < count ; i ++ ) {
111- const item = filtered_items . get_index ( i ) ;
112- if ( item ) {
113- data_model . append ( item ) ;
114- }
115- }
116- result_label . label = "Loaded successfully" ;
117- } ) ;
118- } else {
119- result_label . label = "No matching items found" ;
120- }
113+ if ( filtered_items && filtered_items . get_count ( ) > 0 ) {
114+ filtered_items . fetch_async ( 0 , filtered_items . get_count ( ) , ( ) => {
115+ for ( let i = 0 ; i < filtered_items . get_count ( ) ; i ++ ) {
116+ const item = filtered_items . get_index ( i ) ;
117+ if ( item ) data_model . append ( item ) ;
118+ }
119+ result_label . label = "Loaded successfully" ;
120+ } ) ;
121121 } else {
122122 result_label . label = "No matching items found" ;
123123 }
124124} ) ;
125125
126-
127126const factory_col1 = col1 . factory ;
127+
128128factory_col1 . connect ( "setup" , ( _self , list_item ) => {
129129 const label = new Gtk . Label ( {
130130 margin_start : 12 ,
131131 margin_end : 12 ,
132132 } ) ;
133133 list_item . set_child ( label ) ;
134134} ) ;
135+
135136factory_col1 . connect ( "bind" , ( _self , list_item ) => {
136137 const label_widget = list_item . get_child ( ) ;
137138 const model_item = list_item . get_item ( ) ;
@@ -146,6 +147,7 @@ factory_col2.connect("setup", (_self, list_item) => {
146147 } ) ;
147148 list_item . set_child ( label ) ;
148149} ) ;
150+
149151factory_col2 . connect ( "bind" , ( _self , list_item ) => {
150152 const label_widget = list_item . get_child ( ) ;
151153 const model_item = list_item . get_item ( ) ;
0 commit comments