diff options
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.c | 210 |
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 | */ |
38 | void | 38 | void |
39 | GNUNET_GTK_search_dialog_namespace_tree_view_row_activated_cb (GtkTreeView *tree_view, | 39 | GNUNET_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 | ||
68 | void | 67 | void |
69 | GNUNET_GTK_search_dialog_search_button_clicked_cb (GtkWidget * dummy, | 68 | GNUNET_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 | */ |
138 | static int | 131 | static int |
139 | add_namespace_to_ls (void *cls, | 132 | add_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 | */ |
200 | void | 184 | void |
201 | GNUNET_GTK_main_menu_file_search_activate_cb (GtkWidget * dummy, | 185 | GNUNET_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; |