aboutsummaryrefslogtreecommitdiff
path: root/src/fs/gnunet-fs-gtk-main_window_file_search.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/gnunet-fs-gtk-main_window_file_search.c')
-rw-r--r--src/fs/gnunet-fs-gtk-main_window_file_search.c210
1 files changed, 93 insertions, 117 deletions
diff --git a/src/fs/gnunet-fs-gtk-main_window_file_search.c b/src/fs/gnunet-fs-gtk-main_window_file_search.c
index 2fec7fcc..9d776eec 100644
--- a/src/fs/gnunet-fs-gtk-main_window_file_search.c
+++ b/src/fs/gnunet-fs-gtk-main_window_file_search.c
@@ -35,11 +35,15 @@ static GtkBuilder *builder;
35 * User double-clicked on namespace or pressed enter; 35 * User double-clicked on namespace or pressed enter;
36 * move namespace root to the 'keywords' line. 36 * move namespace root to the 'keywords' line.
37 */ 37 */
38void 38void
39GNUNET_GTK_search_dialog_namespace_tree_view_row_activated_cb (GtkTreeView *tree_view, 39GNUNET_GTK_search_dialog_namespace_tree_view_row_activated_cb (GtkTreeView *
40 GtkTreePath *path, 40 tree_view,
41 GtkTreeViewColumn *column, 41 GtkTreePath *
42 gpointer user_data) 42 path,
43 GtkTreeViewColumn
44 * column,
45 gpointer
46 user_data)
43{ 47{
44 GtkTreeModel *ls; 48 GtkTreeModel *ls;
45 GtkTreeSelection *sel; 49 GtkTreeSelection *sel;
@@ -47,27 +51,22 @@ GNUNET_GTK_search_dialog_namespace_tree_view_row_activated_cb (GtkTreeView
47 GtkTreeIter iter; 51 GtkTreeIter iter;
48 char *root; 52 char *root;
49 53
50 query = GTK_ENTRY (gtk_builder_get_object (builder, 54 query =
51 "GNUNET_GTK_search_dialog_keyword_entry")); 55 GTK_ENTRY (gtk_builder_get_object
52 sel = gtk_tree_view_get_selection (tree_view); 56 (builder, "GNUNET_GTK_search_dialog_keyword_entry"));
53 if (TRUE == 57 sel = gtk_tree_view_get_selection (tree_view);
54 gtk_tree_selection_get_selected (sel, 58 if (TRUE == gtk_tree_selection_get_selected (sel, &ls, &iter))
55 &ls, 59 {
56 &iter)) 60 gtk_tree_model_get (ls, &iter, 1, &root, -1);
57 { 61 gtk_entry_set_text (query, root);
58 gtk_tree_model_get (ls, &iter, 62 GNUNET_free (root);
59 1, &root, 63 }
60 -1);
61 gtk_entry_set_text (query,
62 root);
63 GNUNET_free (root);
64 }
65} 64}
66 65
67 66
68void 67void
69GNUNET_GTK_search_dialog_search_button_clicked_cb (GtkWidget * dummy, 68GNUNET_GTK_search_dialog_search_button_clicked_cb (GtkWidget * dummy,
70 gpointer data) 69 gpointer data)
71{ 70{
72 GtkEntry *query; 71 GtkEntry *query;
73 GtkSpinButton *anonymity; 72 GtkSpinButton *anonymity;
@@ -80,47 +79,41 @@ GNUNET_GTK_search_dialog_search_button_clicked_cb (GtkWidget * dummy,
80 GtkTreeSelection *sel; 79 GtkTreeSelection *sel;
81 GtkTreeIter iter; 80 GtkTreeIter iter;
82 81
83 query = GTK_ENTRY (gtk_builder_get_object (builder, 82 query =
84 "GNUNET_GTK_search_dialog_keyword_entry")); 83 GTK_ENTRY (gtk_builder_get_object
85 anonymity = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 84 (builder, "GNUNET_GTK_search_dialog_keyword_entry"));
86 "GNUNET_GTK_search_dialog_anonymity_spin_button")); 85 anonymity =
87 namespace = GTK_TREE_VIEW (gtk_builder_get_object (builder, 86 GTK_SPIN_BUTTON (gtk_builder_get_object
88 "GNUNET_GTK_search_dialog_namespace_tree_view")); 87 (builder,
88 "GNUNET_GTK_search_dialog_anonymity_spin_button"));
89 namespace =
90 GTK_TREE_VIEW (gtk_builder_get_object
91 (builder, "GNUNET_GTK_search_dialog_namespace_tree_view"));
89 keywords = gtk_entry_get_text (query); 92 keywords = gtk_entry_get_text (query);
90 nsid = NULL; 93 nsid = NULL;
91 sel = gtk_tree_view_get_selection (namespace); 94 sel = gtk_tree_view_get_selection (namespace);
92 if (TRUE == 95 if (TRUE == gtk_tree_selection_get_selected (sel, &ls, &iter))
93 gtk_tree_selection_get_selected (sel, 96 gtk_tree_model_get (ls, &iter, 2, &nsid, -1);
94 &ls,
95 &iter))
96 gtk_tree_model_get (ls, &iter,
97 2, &nsid,
98 -1);
99 if (nsid != NULL) 97 if (nsid != NULL)
98 {
99 uri = GNUNET_FS_uri_sks_create_from_nsid (nsid, keywords);
100 GNUNET_assert (uri != NULL);
101 }
102 else
103 {
104 emsg = NULL;
105 uri = GNUNET_FS_uri_ksk_create (keywords, &emsg);
106 if (uri == NULL)
100 { 107 {
101 uri = GNUNET_FS_uri_sks_create_from_nsid (nsid, 108 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Invalid keyword string `%s': %s"),
102 keywords); 109 keywords, emsg);
103 GNUNET_assert (uri != NULL); 110 GNUNET_free_non_null (emsg);
104 } 111 return;
105 else
106 {
107 emsg = NULL;
108 uri = GNUNET_FS_uri_ksk_create (keywords, &emsg);
109 if (uri == NULL)
110 {
111 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
112 _("Invalid keyword string `%s': %s"),
113 keywords,
114 emsg);
115 GNUNET_free_non_null (emsg);
116 return;
117 }
118 } 112 }
119 GNUNET_FS_search_start (GNUNET_FS_GTK_get_fs_handle (), 113 }
120 uri, 114 GNUNET_FS_search_start (GNUNET_FS_GTK_get_fs_handle (), uri,
121 gtk_spin_button_get_value_as_int (anonymity), 115 gtk_spin_button_get_value_as_int (anonymity),
122 GNUNET_FS_SEARCH_OPTION_NONE, 116 GNUNET_FS_SEARCH_OPTION_NONE, NULL);
123 NULL);
124 GNUNET_FS_uri_destroy (uri); 117 GNUNET_FS_uri_destroy (uri);
125} 118}
126 119
@@ -136,12 +129,8 @@ GNUNET_GTK_search_dialog_search_button_clicked_cb (GtkWidget * dummy,
136 * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort 129 * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort
137 */ 130 */
138static int 131static int
139add_namespace_to_ls (void *cls, 132add_namespace_to_ls (void *cls, const GNUNET_HashCode * pseudonym,
140 const GNUNET_HashCode * 133 const struct GNUNET_CONTAINER_MetaData *md, int rating)
141 pseudonym,
142 const struct
143 GNUNET_CONTAINER_MetaData * md,
144 int rating)
145{ 134{
146 GtkListStore *ls = cls; 135 GtkListStore *ls = cls;
147 char *root; 136 char *root;
@@ -152,41 +141,36 @@ add_namespace_to_ls (void *cls,
152 char *emsg; 141 char *emsg;
153 struct GNUNET_FS_Uri *uri; 142 struct GNUNET_FS_Uri *uri;
154 GtkTreeIter iter; 143 GtkTreeIter iter;
155 144
156 ns_name = GNUNET_PSEUDONYM_id_to_name (GNUNET_FS_GTK_get_configuration (), 145 ns_name =
157 pseudonym); 146 GNUNET_PSEUDONYM_id_to_name (GNUNET_FS_GTK_get_configuration (),
147 pseudonym);
158 nsid = GNUNET_malloc (sizeof (GNUNET_HashCode)); 148 nsid = GNUNET_malloc (sizeof (GNUNET_HashCode));
159 *nsid = *pseudonym; 149 *nsid = *pseudonym;
160 root = NULL; 150 root = NULL;
161 uris = GNUNET_CONTAINER_meta_data_get_by_type (md, 151 uris = GNUNET_CONTAINER_meta_data_get_by_type (md, EXTRACTOR_METATYPE_URI);
162 EXTRACTOR_METATYPE_URI);
163 if (uris != NULL) 152 if (uris != NULL)
164 { 153 {
165 emsg = NULL; 154 emsg = NULL;
166 uri = GNUNET_FS_uri_parse (uris, &emsg); 155 uri = GNUNET_FS_uri_parse (uris, &emsg);
167 if (uri == NULL) 156 if (uri == NULL)
168 GNUNET_free (emsg); 157 GNUNET_free (emsg);
169 root = GNUNET_FS_uri_sks_get_content_id (uri); 158 root = GNUNET_FS_uri_sks_get_content_id (uri);
170 GNUNET_FS_uri_destroy (uri); 159 GNUNET_FS_uri_destroy (uri);
171 } 160 }
172 description = GNUNET_CONTAINER_meta_data_get_first_by_types (md, 161 description =
173 EXTRACTOR_METATYPE_TITLE, 162 GNUNET_CONTAINER_meta_data_get_first_by_types (md,
174 EXTRACTOR_METATYPE_BOOK_TITLE, 163 EXTRACTOR_METATYPE_TITLE,
175 EXTRACTOR_METATYPE_DESCRIPTION, 164 EXTRACTOR_METATYPE_BOOK_TITLE,
176 EXTRACTOR_METATYPE_SUMMARY, 165 EXTRACTOR_METATYPE_DESCRIPTION,
177 EXTRACTOR_METATYPE_ALBUM, 166 EXTRACTOR_METATYPE_SUMMARY,
178 EXTRACTOR_METATYPE_COMMENT, 167 EXTRACTOR_METATYPE_ALBUM,
179 EXTRACTOR_METATYPE_SUBJECT, 168 EXTRACTOR_METATYPE_COMMENT,
180 EXTRACTOR_METATYPE_KEYWORDS, 169 EXTRACTOR_METATYPE_SUBJECT,
181 -1); 170 EXTRACTOR_METATYPE_KEYWORDS,
182 gtk_list_store_insert_with_values (ls, 171 -1);
183 &iter, 172 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, ns_name, 1, root,
184 G_MAXINT, 173 2, nsid, 3, description, -1);
185 0, ns_name,
186 1, root,
187 2, nsid,
188 3, description,
189 -1);
190 GNUNET_free (ns_name); 174 GNUNET_free (ns_name);
191 GNUNET_free_non_null (root); 175 GNUNET_free_non_null (root);
192 GNUNET_free_non_null (description); 176 GNUNET_free_non_null (description);
@@ -198,43 +182,35 @@ add_namespace_to_ls (void *cls,
198 * Search selected in 'file' menu. 182 * Search selected in 'file' menu.
199 */ 183 */
200void 184void
201GNUNET_GTK_main_menu_file_search_activate_cb (GtkWidget * dummy, 185GNUNET_GTK_main_menu_file_search_activate_cb (GtkWidget * dummy, gpointer data)
202 gpointer data)
203{ 186{
204 GtkWidget *ad; 187 GtkWidget *ad;
205 GtkListStore *ls; 188 GtkListStore *ls;
206 GtkTreeIter iter; 189 GtkTreeIter iter;
207 GNUNET_HashCode *nsid; 190 GNUNET_HashCode *nsid;
208 191
209 GNUNET_assert (builder == NULL); 192 GNUNET_assert (builder == NULL);
210 builder = GNUNET_GTK_get_new_builder ("gnunet_fs_gtk_search_dialog.glade"); 193 builder = GNUNET_GTK_get_new_builder ("gnunet_fs_gtk_search_dialog.glade");
211 if (builder == NULL) 194 if (builder == NULL)
212 return; 195 return;
213 ad = GTK_WIDGET (gtk_builder_get_object (builder, 196 ad = GTK_WIDGET (gtk_builder_get_object
214 "GNUNET_GTK_search_dialog")); 197 (builder, "GNUNET_GTK_search_dialog"));
215 ls = GTK_LIST_STORE (gtk_builder_get_object (builder, 198 ls = GTK_LIST_STORE (gtk_builder_get_object
216 "GNUNET_GTK_namespace_list_store")); 199 (builder, "GNUNET_GTK_namespace_list_store"));
217 GNUNET_PSEUDONYM_list_all (GNUNET_FS_GTK_get_configuration (), 200 GNUNET_PSEUDONYM_list_all (GNUNET_FS_GTK_get_configuration (),
218 &add_namespace_to_ls, 201 &add_namespace_to_ls, ls);
219 ls);
220 gtk_dialog_run (GTK_DIALOG (ad)); 202 gtk_dialog_run (GTK_DIALOG (ad));
221 203
222 /* free nsids from 'ls' */ 204 /* free nsids from 'ls' */
223 if (TRUE == 205 if (TRUE == gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ls), &iter))
224 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ls), 206 {
225 &iter)) 207 do
226 { 208 {
227 do 209 gtk_tree_model_get (GTK_TREE_MODEL (ls), &iter, 2, &nsid, -1);
228 { 210 GNUNET_free (nsid);
229 gtk_tree_model_get (GTK_TREE_MODEL (ls),
230 &iter,
231 2, &nsid,
232 -1);
233 GNUNET_free (nsid);
234 }
235 while (TRUE == gtk_tree_model_iter_next (GTK_TREE_MODEL (ls),
236 &iter));
237 } 211 }
212 while (TRUE == gtk_tree_model_iter_next (GTK_TREE_MODEL (ls), &iter));
213 }
238 gtk_widget_destroy (ad); 214 gtk_widget_destroy (ad);
239 g_object_unref (G_OBJECT (builder)); 215 g_object_unref (G_OBJECT (builder));
240 builder = NULL; 216 builder = NULL;