aboutsummaryrefslogtreecommitdiff
path: root/src/fs/gnunet-fs-gtk-edit_publish_dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/gnunet-fs-gtk-edit_publish_dialog.c')
-rw-r--r--src/fs/gnunet-fs-gtk-edit_publish_dialog.c788
1 files changed, 395 insertions, 393 deletions
diff --git a/src/fs/gnunet-fs-gtk-edit_publish_dialog.c b/src/fs/gnunet-fs-gtk-edit_publish_dialog.c
index 3e960cf4..e6cbd105 100644
--- a/src/fs/gnunet-fs-gtk-edit_publish_dialog.c
+++ b/src/fs/gnunet-fs-gtk-edit_publish_dialog.c
@@ -55,16 +55,16 @@ GNUNET_GTK_edit_file_information_keyword_list_del_button_clicked_cb ()
55 GtkTreeModel *tm; 55 GtkTreeModel *tm;
56 GtkTreeIter iter; 56 GtkTreeIter iter;
57 57
58 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 58 tv = GTK_TREE_VIEW (gtk_builder_get_object
59 "GNUNET_GTK_edit_file_information_keyword_list_tree_view")); 59 (builder,
60 "GNUNET_GTK_edit_file_information_keyword_list_tree_view"));
60 sel = gtk_tree_view_get_selection (tv); 61 sel = gtk_tree_view_get_selection (tv);
61 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) 62 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter))
62 { 63 {
63 GNUNET_break (0); 64 GNUNET_break (0);
64 return; 65 return;
65 } 66 }
66 gtk_list_store_remove (GTK_LIST_STORE (tm), 67 gtk_list_store_remove (GTK_LIST_STORE (tm), &iter);
67 &iter);
68} 68}
69 69
70void 70void
@@ -75,10 +75,11 @@ GNUNET_GTK_edit_file_information_keyword_list_add_button_clicked_cb ()
75 GtkListStore *ls; 75 GtkListStore *ls;
76 GtkTreeIter iter; 76 GtkTreeIter iter;
77 77
78 ls = GTK_LIST_STORE (gtk_builder_get_object (builder, 78 ls = GTK_LIST_STORE (gtk_builder_get_object
79 "GNUNET_GTK_keyword_list_store")); 79 (builder, "GNUNET_GTK_keyword_list_store"));
80 entry = GTK_ENTRY (gtk_builder_get_object (builder, 80 entry =
81 "GNUNET_GTK_edit_file_information_keyword_entry")); 81 GTK_ENTRY (gtk_builder_get_object
82 (builder, "GNUNET_GTK_edit_file_information_keyword_entry"));
82 keyword = gtk_entry_get_text (entry); 83 keyword = gtk_entry_get_text (entry);
83 if (strlen (keyword) > 0) 84 if (strlen (keyword) > 0)
84 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, keyword, -1); 85 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, keyword, -1);
@@ -93,78 +94,92 @@ GNUNET_GTK_edit_file_information_keyword_entry_changed_cb ()
93 GtkEntry *entry; 94 GtkEntry *entry;
94 GtkWidget *button; 95 GtkWidget *button;
95 96
96 button = GTK_WIDGET (gtk_builder_get_object (builder, 97 button =
97 "GNUNET_GTK_edit_file_information_keyword_list_add_button")); 98 GTK_WIDGET (gtk_builder_get_object
98 entry = GTK_ENTRY (gtk_builder_get_object (builder, 99 (builder,
99 "GNUNET_GTK_edit_file_information_keyword_entry")); 100 "GNUNET_GTK_edit_file_information_keyword_list_add_button"));
101 entry =
102 GTK_ENTRY (gtk_builder_get_object
103 (builder, "GNUNET_GTK_edit_file_information_keyword_entry"));
100 keyword = gtk_entry_get_text (entry); 104 keyword = gtk_entry_get_text (entry);
101 gtk_widget_set_sensitive (button, 105 gtk_widget_set_sensitive (button, (strlen (keyword) > 0) ? TRUE : FALSE);
102 (strlen (keyword) > 0) ? TRUE : FALSE);
103} 106}
104 107
105 108
106static void 109static void
107metadata_selection_changed_cb (GtkTreeSelection *ts, 110metadata_selection_changed_cb (GtkTreeSelection * ts, gpointer user_data)
108 gpointer user_data)
109{ 111{
110 GtkTreeView *tv; 112 GtkTreeView *tv;
111 GtkTreeSelection *sel; 113 GtkTreeSelection *sel;
112 GtkWidget *button; 114 GtkWidget *button;
113 115
114 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 116 tv = GTK_TREE_VIEW (gtk_builder_get_object
115 "GNUNET_GTK_edit_file_information_metadata_tree_view")); 117 (builder,
118 "GNUNET_GTK_edit_file_information_metadata_tree_view"));
116 sel = gtk_tree_view_get_selection (tv); 119 sel = gtk_tree_view_get_selection (tv);
117 button = GTK_WIDGET (gtk_builder_get_object (builder, 120 button =
118 "GNUNET_GTK_edit_file_information_metadata_delete_button")); 121 GTK_WIDGET (gtk_builder_get_object
122 (builder,
123 "GNUNET_GTK_edit_file_information_metadata_delete_button"));
119 gtk_widget_set_sensitive (button, 124 gtk_widget_set_sensitive (button,
120 gtk_tree_selection_get_selected (sel, NULL, NULL)); 125 gtk_tree_selection_get_selected (sel, NULL, NULL));
121} 126}
122 127
123 128
124static void 129static void
125keyword_selection_changed_cb (GtkTreeSelection *ts, 130keyword_selection_changed_cb (GtkTreeSelection * ts, gpointer user_data)
126 gpointer user_data)
127{ 131{
128 GtkTreeView *tv; 132 GtkTreeView *tv;
129 GtkTreeSelection *sel; 133 GtkTreeSelection *sel;
130 GtkWidget *button; 134 GtkWidget *button;
131 135
132 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 136 tv = GTK_TREE_VIEW (gtk_builder_get_object
133 "GNUNET_GTK_edit_file_information_keyword_list_tree_view")); 137 (builder,
138 "GNUNET_GTK_edit_file_information_keyword_list_tree_view"));
134 sel = gtk_tree_view_get_selection (tv); 139 sel = gtk_tree_view_get_selection (tv);
135 button = GTK_WIDGET (gtk_builder_get_object (builder, 140 button =
136 "GNUNET_GTK_edit_file_information_keyword_list_del_button")); 141 GTK_WIDGET (gtk_builder_get_object
142 (builder,
143 "GNUNET_GTK_edit_file_information_keyword_list_del_button"));
137 144
138 gtk_widget_set_sensitive (button, 145 gtk_widget_set_sensitive (button,
139 gtk_tree_selection_get_selected (sel, NULL, NULL)); 146 gtk_tree_selection_get_selected (sel, NULL, NULL));
140 button = GTK_WIDGET (gtk_builder_get_object (builder, 147 button =
141 "GNUNET_GTK_edit_file_information_keyword_list_normalize_button")); 148 GTK_WIDGET (gtk_builder_get_object
149 (builder,
150 "GNUNET_GTK_edit_file_information_keyword_list_normalize_button"));
142 gtk_widget_set_sensitive (button, 151 gtk_widget_set_sensitive (button,
143 gtk_tree_selection_get_selected (sel, NULL, NULL)); 152 gtk_tree_selection_get_selected (sel, NULL, NULL));
144} 153}
145 154
146 155
147void 156void
148GNUNET_GTK_edit_file_information_metadata_value_entry_changed_cb () 157GNUNET_GTK_edit_file_information_metadata_value_entry_changed_cb ()
149{ 158{
150 GtkTreeView *tv; 159 GtkTreeView *tv;
151 GtkTreeSelection *sel; 160 GtkTreeSelection *sel;
152 const char *value; 161 const char *value;
153 GtkEntry *entry; 162 GtkEntry *entry;
154 GtkWidget *button; 163 GtkWidget *button;
155 164
156 entry = GTK_ENTRY (gtk_builder_get_object (builder, 165 entry =
157 "GNUNET_GTK_edit_file_information_metadata_value_entry")); 166 GTK_ENTRY (gtk_builder_get_object
167 (builder,
168 "GNUNET_GTK_edit_file_information_metadata_value_entry"));
158 value = gtk_entry_get_text (entry); 169 value = gtk_entry_get_text (entry);
159 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 170 tv = GTK_TREE_VIEW (gtk_builder_get_object
160 "GNUNET_GTK_edit_file_information_metadata_type_tree_view")); 171 (builder,
172 "GNUNET_GTK_edit_file_information_metadata_type_tree_view"));
161 sel = gtk_tree_view_get_selection (tv); 173 sel = gtk_tree_view_get_selection (tv);
162 button = GTK_WIDGET (gtk_builder_get_object (builder, 174 button =
163 "GNUNET_GTK_edit_file_information_metadata_add_button")); 175 GTK_WIDGET (gtk_builder_get_object
176 (builder,
177 "GNUNET_GTK_edit_file_information_metadata_add_button"));
164 gtk_widget_set_sensitive (button, 178 gtk_widget_set_sensitive (button,
165 (strlen (value) > 0) 179 (strlen (value) >
166 ? gtk_tree_selection_get_selected (sel, NULL, NULL) 180 0) ? gtk_tree_selection_get_selected (sel, NULL,
167 : FALSE); 181 NULL) :
182 FALSE);
168} 183}
169 184
170 185
@@ -175,39 +190,39 @@ GNUNET_GTK_edit_file_information_keyword_entry_activate_cb ()
175} 190}
176 191
177 192
178void 193void GNUNET_GTK_edit_file_information_metadata_preview_file_chooser_button_file_set_cb (GtkFileChooserButton * widget, gpointer user_data)
179GNUNET_GTK_edit_file_information_metadata_preview_file_chooser_button_file_set_cb (GtkFileChooserButton *widget,
180 gpointer user_data)
181{ 194{
182 gchar *fn; 195 gchar *fn;
183 GtkImage *image; 196 GtkImage *image;
184 197
185 fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); 198 fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget));
186 image = GTK_IMAGE (gtk_builder_get_object (builder, 199 image =
187 "GNUNET_GTK_edit_file_information_metadata_preview_image")); 200 GTK_IMAGE (gtk_builder_get_object
201 (builder,
202 "GNUNET_GTK_edit_file_information_metadata_preview_image"));
188 gtk_image_set_from_file (image, fn); 203 gtk_image_set_from_file (image, fn);
189 preview_changed = GNUNET_YES; 204 preview_changed = GNUNET_YES;
190} 205}
191 206
192 207
193void 208void
194GNUNET_GTK_edit_file_information_metadata_delete_button_clicked_cb() 209GNUNET_GTK_edit_file_information_metadata_delete_button_clicked_cb ()
195{ 210{
196 GtkTreeView *tv; 211 GtkTreeView *tv;
197 GtkTreeSelection *sel; 212 GtkTreeSelection *sel;
198 GtkTreeModel *tm; 213 GtkTreeModel *tm;
199 GtkTreeIter iter; 214 GtkTreeIter iter;
200 215
201 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 216 tv = GTK_TREE_VIEW (gtk_builder_get_object
202 "GNUNET_GTK_edit_file_information_metadata_tree_view")); 217 (builder,
218 "GNUNET_GTK_edit_file_information_metadata_tree_view"));
203 sel = gtk_tree_view_get_selection (tv); 219 sel = gtk_tree_view_get_selection (tv);
204 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter)) 220 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter))
205 { 221 {
206 GNUNET_break (0); 222 GNUNET_break (0);
207 return; 223 return;
208 } 224 }
209 gtk_list_store_remove (GTK_LIST_STORE (tm), 225 gtk_list_store_remove (GTK_LIST_STORE (tm), &iter);
210 &iter);
211} 226}
212 227
213 228
@@ -227,70 +242,63 @@ GNUNET_GTK_edit_file_information_metadata_add_button_clicked_cb ()
227 size_t slen; 242 size_t slen;
228 char *pos; 243 char *pos;
229 244
230 entry = GTK_ENTRY (gtk_builder_get_object (builder, 245 entry =
231 "GNUNET_GTK_edit_file_information_metadata_value_entry")); 246 GTK_ENTRY (gtk_builder_get_object
247 (builder,
248 "GNUNET_GTK_edit_file_information_metadata_value_entry"));
232 value = gtk_entry_get_text (entry); 249 value = gtk_entry_get_text (entry);
233 if ((value == NULL) || (strlen (value) == 0)) 250 if ((value == NULL) || (strlen (value) == 0))
234 { 251 {
235 GNUNET_break (0); 252 GNUNET_break (0);
236 return; 253 return;
237 } 254 }
238 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 255 tv = GTK_TREE_VIEW (gtk_builder_get_object
239 "GNUNET_GTK_edit_file_information_metadata_type_tree_view")); 256 (builder,
257 "GNUNET_GTK_edit_file_information_metadata_type_tree_view"));
240 tm = gtk_tree_view_get_model (tv); 258 tm = gtk_tree_view_get_model (tv);
241 sel = gtk_tree_view_get_selection (tv); 259 sel = gtk_tree_view_get_selection (tv);
242 if (TRUE != gtk_tree_selection_get_selected (sel, 260 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter))
243 &tm, 261 {
244 &iter)) 262 GNUNET_break (0);
263 return;
264 }
265 gtk_tree_model_get (tm, &iter, 1, &type, -1);
266 ls = GTK_LIST_STORE (gtk_builder_get_object
267 (builder, "GNUNET_GTK_meta_data_list_store"));
268 if ((type == EXTRACTOR_METATYPE_FILENAME) &&
269 (value[strlen (value) - 1] != '/') && (is_directory))
270 {
271 GNUNET_asprintf (&avalue, "%s/", value);
272 /* if user typed '\' instead of '/', change it! */
273 slen = strlen (avalue);
274 while ((slen > 1) && (avalue[slen - 2] == '\\'))
245 { 275 {
246 GNUNET_break (0); 276 avalue[slen - 2] = '/';
247 return; 277 avalue[slen - 1] = '\0';
248 } 278 slen--;
249 gtk_tree_model_get (tm,
250 &iter,
251 1, &type, -1);
252 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
253 "GNUNET_GTK_meta_data_list_store"));
254 if ( (type == EXTRACTOR_METATYPE_FILENAME) &&
255 (value[strlen(value)-1] != '/') &&
256 (is_directory) )
257 {
258 GNUNET_asprintf (&avalue,
259 "%s/",
260 value);
261 /* if user typed '\' instead of '/', change it! */
262 slen = strlen (avalue);
263 while ( (slen > 1) &&
264 (avalue[slen-2] == '\\') )
265 {
266 avalue[slen-2] = '/';
267 avalue[slen-1] = '\0';
268 slen--;
269 }
270 while (NULL != (pos = strstr (avalue, "\\")))
271 *pos = '/';
272 /* remove '../' everywhere */
273 while (NULL != (pos = strstr (avalue, "../")))
274 {
275 pos[0] = '_';
276 pos[1] = '_';
277 pos[2] = '_';
278 }
279 ivalue = avalue;
280 } 279 }
281 else 280 while (NULL != (pos = strstr (avalue, "\\")))
281 *pos = '/';
282 /* remove '../' everywhere */
283 while (NULL != (pos = strstr (avalue, "../")))
282 { 284 {
283 ivalue = value; 285 pos[0] = '_';
284 avalue = NULL; 286 pos[1] = '_';
287 pos[2] = '_';
285 } 288 }
286 289 ivalue = avalue;
287 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 290 }
288 0, type, 291 else
289 1, (guint) EXTRACTOR_METAFORMAT_UTF8, 292 {
290 2, EXTRACTOR_metatype_to_string (type), 293 ivalue = value;
291 3, ivalue, 294 avalue = NULL;
292 -1); 295 }
293 GNUNET_free_non_null (avalue); 296
297 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, type, 1,
298 (guint) EXTRACTOR_METAFORMAT_UTF8, 2,
299 EXTRACTOR_metatype_to_string (type), 3,
300 ivalue, -1);
301 GNUNET_free_non_null (avalue);
294 gtk_entry_set_text (GTK_ENTRY (entry), ""); 302 gtk_entry_set_text (GTK_ENTRY (entry), "");
295} 303}
296 304
@@ -304,19 +312,14 @@ GNUNET_GTK_edit_file_information_metadata_add_button_clicked_cb ()
304 * @return GNUNET_OK to continue to iterate 312 * @return GNUNET_OK to continue to iterate
305 */ 313 */
306static int 314static int
307add_keyword (void *cls, 315add_keyword (void *cls, const char *keyword, int is_mandatory)
308 const char *keyword,
309 int is_mandatory)
310{ 316{
311 GtkListStore *ls; 317 GtkListStore *ls;
312 GtkTreeIter iter; 318 GtkTreeIter iter;
313 319
314 ls = GTK_LIST_STORE (gtk_builder_get_object (builder, 320 ls = GTK_LIST_STORE (gtk_builder_get_object
315 "GNUNET_GTK_keyword_list_store")); 321 (builder, "GNUNET_GTK_keyword_list_store"));
316 gtk_list_store_insert_with_values (ls, &iter, 322 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, keyword, -1);
317 G_MAXINT,
318 0, keyword,
319 -1);
320 return GNUNET_OK; 323 return GNUNET_OK;
321} 324}
322 325
@@ -337,40 +340,33 @@ add_keyword (void *cls,
337 * @param data actual meta-data found 340 * @param data actual meta-data found
338 * @param data_len number of bytes in data 341 * @param data_len number of bytes in data
339 * @return 0 to continue extracting 342 * @return 0 to continue extracting
340 */ 343 */
341static int 344static int
342add_meta_item (void *cls, 345add_meta_item (void *cls, const char *plugin_name, enum EXTRACTOR_MetaType type,
343 const char *plugin_name, 346 enum EXTRACTOR_MetaFormat format, const char *data_mime_type,
344 enum EXTRACTOR_MetaType type, 347 const char *data, size_t data_len)
345 enum EXTRACTOR_MetaFormat format,
346 const char *data_mime_type,
347 const char *data,
348 size_t data_len)
349{ 348{
350 GtkListStore *ls; 349 GtkListStore *ls;
351 GtkTreeIter iter; 350 GtkTreeIter iter;
352 351
353 switch (format) 352 switch (format)
354 { 353 {
355 case EXTRACTOR_METAFORMAT_UTF8: 354 case EXTRACTOR_METAFORMAT_UTF8:
356 case EXTRACTOR_METAFORMAT_C_STRING: 355 case EXTRACTOR_METAFORMAT_C_STRING:
357 ls = GTK_LIST_STORE (gtk_builder_get_object (builder, 356 ls = GTK_LIST_STORE (gtk_builder_get_object
358 "GNUNET_GTK_meta_data_list_store")); 357 (builder, "GNUNET_GTK_meta_data_list_store"));
359 gtk_list_store_insert_with_values (ls, &iter, 358 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, (guint) type, 1,
360 G_MAXINT, 359 (guint) format, 2,
361 0, (guint) type, 360 EXTRACTOR_metatype_to_string (type), 3,
362 1, (guint) format, 361 data, -1);
363 2, EXTRACTOR_metatype_to_string (type), 362 break;
364 3, data, 363 case EXTRACTOR_METAFORMAT_UNKNOWN:
365 -1); 364 break;
366 break; 365 case EXTRACTOR_METAFORMAT_BINARY:
367 case EXTRACTOR_METAFORMAT_UNKNOWN: 366 break;
368 break; 367 default:
369 case EXTRACTOR_METAFORMAT_BINARY: 368 GNUNET_break (0);
370 break; 369 }
371 default:
372 GNUNET_break (0);
373 }
374 return 0; 370 return 0;
375} 371}
376 372
@@ -388,15 +384,13 @@ add_meta_item (void *cls,
388 * @param client_info pointer to client context set upon creation (can be modified) 384 * @param client_info pointer to client context set upon creation (can be modified)
389 * @return GNUNET_SYSERR (aborts after first call) 385 * @return GNUNET_SYSERR (aborts after first call)
390 */ 386 */
391static int 387static int
392file_information_extract (void *cls, 388file_information_extract (void *cls, struct GNUNET_FS_FileInformation *fi,
393 struct GNUNET_FS_FileInformation *fi, 389 uint64_t length,
394 uint64_t length, 390 struct GNUNET_CONTAINER_MetaData *meta,
395 struct GNUNET_CONTAINER_MetaData *meta, 391 struct GNUNET_FS_Uri **uri,
396 struct GNUNET_FS_Uri **uri, 392 struct GNUNET_FS_BlockOptions *bo, int *do_index,
397 struct GNUNET_FS_BlockOptions *bo, 393 void **client_info)
398 int *do_index,
399 void **client_info)
400{ 394{
401 GtkImage *img; 395 GtkImage *img;
402 GdkPixbuf *pixbuf; 396 GdkPixbuf *pixbuf;
@@ -407,38 +401,45 @@ file_information_extract (void *cls,
407 if (NULL != *uri) 401 if (NULL != *uri)
408 GNUNET_FS_uri_ksk_get_keywords (*uri, &add_keyword, NULL); 402 GNUNET_FS_uri_ksk_get_keywords (*uri, &add_keyword, NULL);
409 if (NULL != meta) 403 if (NULL != meta)
404 {
405 GNUNET_CONTAINER_meta_data_iterate (meta, &add_meta_item, NULL);
406 pixbuf = GNUNET_FS_GTK_get_thumbnail_from_meta_data (meta);
407 if (pixbuf != NULL)
410 { 408 {
411 GNUNET_CONTAINER_meta_data_iterate (meta, 409 img =
412 &add_meta_item, 410 GTK_IMAGE (gtk_builder_get_object
413 NULL); 411 (builder,
414 pixbuf = GNUNET_FS_GTK_get_thumbnail_from_meta_data (meta); 412 "GNUNET_GTK_edit_file_information_metadata_preview_image"));
415 if (pixbuf != NULL) 413 gtk_image_set_from_pixbuf (img, pixbuf);
416 {
417 img = GTK_IMAGE (gtk_builder_get_object (builder,
418 "GNUNET_GTK_edit_file_information_metadata_preview_image"));
419 gtk_image_set_from_pixbuf (img,
420 pixbuf);
421 }
422 } 414 }
423 tp = bo->expiration_time.abs_value / 1000; /* ms to seconds */ 415 }
416 tp = bo->expiration_time.abs_value / 1000; /* ms to seconds */
424 t = gmtime (&tp); 417 t = gmtime (&tp);
425 if (t == NULL) 418 if (t == NULL)
426 year = 0; 419 year = 0;
427 else 420 else
428 year = t->tm_year + 1900; 421 year = t->tm_year + 1900;
429 gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 422 gtk_spin_button_set_value (GTK_SPIN_BUTTON
430 "GNUNET_GTK_edit_file_information_expiration_year_spin_button")), 423 (gtk_builder_get_object
431 year); 424 (builder,
432 gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 425 "GNUNET_GTK_edit_file_information_expiration_year_spin_button")),
433 "GNUNET_GTK_edit_file_information_anonymity_spin_button")), 426 year);
434 bo->anonymity_level); 427 gtk_spin_button_set_value (GTK_SPIN_BUTTON
435 gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 428 (gtk_builder_get_object
436 "GNUNET_GTK_edit_file_information_priority_spin_button")), 429 (builder,
437 bo->content_priority); 430 "GNUNET_GTK_edit_file_information_anonymity_spin_button")),
438 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, 431 bo->anonymity_level);
439 "GNUNET_GTK_edit_file_information_index_check_button")), 432 gtk_spin_button_set_value (GTK_SPIN_BUTTON
440 *do_index); 433 (gtk_builder_get_object
441 return GNUNET_SYSERR; /* only visit top-level item */ 434 (builder,
435 "GNUNET_GTK_edit_file_information_priority_spin_button")),
436 bo->content_priority);
437 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
438 (gtk_builder_get_object
439 (builder,
440 "GNUNET_GTK_edit_file_information_index_check_button")),
441 *do_index);
442 return GNUNET_SYSERR; /* only visit top-level item */
442} 443}
443 444
444 445
@@ -458,70 +459,62 @@ file_information_extract (void *cls,
458 * @param data actual meta-data found 459 * @param data actual meta-data found
459 * @param data_len number of bytes in data 460 * @param data_len number of bytes in data
460 * @return 0 to continue extracting 461 * @return 0 to continue extracting
461 */ 462 */
462static int 463static int
463preserve_meta_items (void *cls, 464preserve_meta_items (void *cls, const char *plugin_name,
464 const char *plugin_name, 465 enum EXTRACTOR_MetaType type,
465 enum EXTRACTOR_MetaType type, 466 enum EXTRACTOR_MetaFormat format,
466 enum EXTRACTOR_MetaFormat format, 467 const char *data_mime_type, const char *data,
467 const char *data_mime_type, 468 size_t data_len)
468 const char *data,
469 size_t data_len)
470{ 469{
471 struct GNUNET_CONTAINER_MetaData *md = cls; 470 struct GNUNET_CONTAINER_MetaData *md = cls;
472 GtkTreeModel *tm; 471 GtkTreeModel *tm;
473 GtkTreeIter iter; 472 GtkTreeIter iter;
474 gchar *value; 473 gchar *value;
475 guint ntype; 474 guint ntype;
476 guint nformat; 475 guint nformat;
477 int keep; 476 int keep;
478 477
479 keep = GNUNET_NO; 478 keep = GNUNET_NO;
480 switch (format) 479 switch (format)
480 {
481 case EXTRACTOR_METAFORMAT_UTF8:
482 case EXTRACTOR_METAFORMAT_C_STRING:
483 tm = GTK_TREE_MODEL (gtk_builder_get_object
484 (builder, "GNUNET_GTK_meta_data_list_store"));
485 if (TRUE == gtk_tree_model_get_iter_first (tm, &iter))
481 { 486 {
482 case EXTRACTOR_METAFORMAT_UTF8: 487 do
483 case EXTRACTOR_METAFORMAT_C_STRING: 488 {
484 tm = GTK_TREE_MODEL (gtk_builder_get_object (builder, 489 gtk_tree_model_get (tm, &iter, 0, &ntype, 1, &nformat, 3, &value, -1);
485 "GNUNET_GTK_meta_data_list_store")); 490 if ((ntype == type) && (nformat == format) &&
486 if (TRUE == 491 (0 == strcmp (value, data)))
487 gtk_tree_model_get_iter_first (tm, &iter)) 492 {
488 { 493 gtk_list_store_remove (GTK_LIST_STORE (tm), &iter);
489 do 494 keep = GNUNET_YES;
490 { 495 g_free (value);
491 gtk_tree_model_get (tm, &iter, 496 break;
492 0, &ntype, 497 }
493 1, &nformat, 498 g_free (value);
494 3, &value, 499 }
495 -1); 500 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
496 if ( (ntype == type) &&
497 (nformat == format) &&
498 (0 == strcmp (value, data)) )
499 {
500 gtk_list_store_remove (GTK_LIST_STORE (tm), &iter);
501 keep = GNUNET_YES;
502 g_free (value);
503 break;
504 }
505 g_free (value);
506 }
507 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
508 }
509 break;
510 case EXTRACTOR_METAFORMAT_UNKNOWN:
511 break;
512 case EXTRACTOR_METAFORMAT_BINARY:
513 if (preview_changed == GNUNET_NO)
514 keep = GNUNET_YES;
515 break;
516 default:
517 GNUNET_break (0);
518 break;
519 } 501 }
502 break;
503 case EXTRACTOR_METAFORMAT_UNKNOWN:
504 break;
505 case EXTRACTOR_METAFORMAT_BINARY:
506 if (preview_changed == GNUNET_NO)
507 keep = GNUNET_YES;
508 break;
509 default:
510 GNUNET_break (0);
511 break;
512 }
520 if (GNUNET_YES == keep) 513 if (GNUNET_YES == keep)
521 GNUNET_break (GNUNET_OK == 514 GNUNET_break (GNUNET_OK ==
522 GNUNET_CONTAINER_meta_data_insert (md, 515 GNUNET_CONTAINER_meta_data_insert (md, plugin_name, type,
523 plugin_name, type, format, 516 format, data_mime_type,
524 data_mime_type, data, data_len)); 517 data, data_len));
525 return 0; 518 return 0;
526} 519}
527 520
@@ -539,15 +532,13 @@ preserve_meta_items (void *cls,
539 * @param client_info pointer to client context set upon creation (can be modified) 532 * @param client_info pointer to client context set upon creation (can be modified)
540 * @return GNUNET_SYSERR (aborts after first call) 533 * @return GNUNET_SYSERR (aborts after first call)
541 */ 534 */
542static int 535static int
543file_information_update (void *cls, 536file_information_update (void *cls, struct GNUNET_FS_FileInformation *fi,
544 struct GNUNET_FS_FileInformation *fi, 537 uint64_t length,
545 uint64_t length, 538 struct GNUNET_CONTAINER_MetaData *meta,
546 struct GNUNET_CONTAINER_MetaData *meta, 539 struct GNUNET_FS_Uri **uri,
547 struct GNUNET_FS_Uri **uri, 540 struct GNUNET_FS_BlockOptions *bo, int *do_index,
548 struct GNUNET_FS_BlockOptions *bo, 541 void **client_info)
549 int *do_index,
550 void **client_info)
551{ 542{
552 char **short_fn = cls; 543 char **short_fn = cls;
553 struct GNUNET_CONTAINER_MetaData *nm; 544 struct GNUNET_CONTAINER_MetaData *nm;
@@ -556,7 +547,7 @@ file_information_update (void *cls,
556 struct GNUNET_FS_Uri *nxt; 547 struct GNUNET_FS_Uri *nxt;
557 struct GNUNET_FS_Uri *mrg; 548 struct GNUNET_FS_Uri *mrg;
558 gchar *value; 549 gchar *value;
559 guint ntype; 550 guint ntype;
560 guint nformat; 551 guint nformat;
561 GtkSpinButton *sb; 552 GtkSpinButton *sb;
562 gchar *fn; 553 gchar *fn;
@@ -565,15 +556,25 @@ file_information_update (void *cls,
565 const char *mime; 556 const char *mime;
566 GFile *f; 557 GFile *f;
567 GFileInfo *finfo; 558 GFileInfo *finfo;
568 559
569 bo->anonymity_level = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 560 bo->anonymity_level =
570 "GNUNET_GTK_edit_file_information_anonymity_spin_button"))); 561 gtk_spin_button_get_value (GTK_SPIN_BUTTON
571 bo->content_priority = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 562 (gtk_builder_get_object
572 "GNUNET_GTK_edit_file_information_priority_spin_button"))); 563 (builder,
573 *do_index = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, 564 "GNUNET_GTK_edit_file_information_anonymity_spin_button")));
574 "GNUNET_GTK_edit_file_information_index_check_button"))); 565 bo->content_priority =
575 sb =GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 566 gtk_spin_button_get_value (GTK_SPIN_BUTTON
576 "GNUNET_GTK_edit_file_information_expiration_year_spin_button")); 567 (gtk_builder_get_object
568 (builder,
569 "GNUNET_GTK_edit_file_information_priority_spin_button")));
570 *do_index =
571 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
572 (gtk_builder_get_object
573 (builder,
574 "GNUNET_GTK_edit_file_information_index_check_button")));
575 sb = GTK_SPIN_BUTTON (gtk_builder_get_object
576 (builder,
577 "GNUNET_GTK_edit_file_information_expiration_year_spin_button"));
577 bo->expiration_time = GNUNET_FS_GTK_get_expiration_time (sb); 578 bo->expiration_time = GNUNET_FS_GTK_get_expiration_time (sb);
578 /* update URI */ 579 /* update URI */
579 if (NULL != (*uri)) 580 if (NULL != (*uri))
@@ -581,95 +582,83 @@ file_information_update (void *cls,
581 *uri = NULL; 582 *uri = NULL;
582 nxt = NULL; 583 nxt = NULL;
583 mrg = NULL; 584 mrg = NULL;
584 585
585 tm = GTK_TREE_MODEL (gtk_builder_get_object (builder, 586 tm = GTK_TREE_MODEL (gtk_builder_get_object
586 "GNUNET_GTK_keyword_list_store")); 587 (builder, "GNUNET_GTK_keyword_list_store"));
587 if (TRUE == 588 if (TRUE == gtk_tree_model_get_iter_first (tm, &iter))
588 gtk_tree_model_get_iter_first (tm, &iter)) 589 {
590 do
589 { 591 {
590 do 592 gtk_tree_model_get (tm, &iter, 0, &value, -1);
591 { 593 nxt = GNUNET_FS_uri_ksk_create_from_args (1, (const char **) &value);
592 gtk_tree_model_get (tm, &iter, 594 mrg = GNUNET_FS_uri_ksk_merge (nxt, *uri);
593 0, &value, 595 GNUNET_FS_uri_destroy (nxt);
594 -1); 596 if (NULL != *uri)
595 nxt = GNUNET_FS_uri_ksk_create_from_args (1, (const char**) &value); 597 GNUNET_FS_uri_destroy (*uri);
596 mrg = GNUNET_FS_uri_ksk_merge (nxt, *uri); 598 *uri = mrg;
597 GNUNET_FS_uri_destroy (nxt); 599 g_free (value);
598 if (NULL != *uri)
599 GNUNET_FS_uri_destroy (*uri);
600 *uri = mrg;
601 g_free (value);
602 }
603 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
604 } 600 }
601 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
602 }
605 603
606 /* update meta */ 604 /* update meta */
607 nm = GNUNET_CONTAINER_meta_data_create (); 605 nm = GNUNET_CONTAINER_meta_data_create ();
608 GNUNET_CONTAINER_meta_data_iterate (meta, 606 GNUNET_CONTAINER_meta_data_iterate (meta, &preserve_meta_items, nm);
609 &preserve_meta_items,
610 nm);
611 607
612 GNUNET_CONTAINER_meta_data_clear (meta); 608 GNUNET_CONTAINER_meta_data_clear (meta);
613 tm = GTK_TREE_MODEL (gtk_builder_get_object (builder, 609 tm = GTK_TREE_MODEL (gtk_builder_get_object
614 "GNUNET_GTK_meta_data_list_store")); 610 (builder, "GNUNET_GTK_meta_data_list_store"));
615 if (TRUE == 611 if (TRUE == gtk_tree_model_get_iter_first (tm, &iter))
616 gtk_tree_model_get_iter_first (tm, &iter)) 612 {
613 do
617 { 614 {
618 do 615 gtk_tree_model_get (tm, &iter, 0, &ntype, 1, &nformat, 3, &value, -1);
619 { 616 GNUNET_CONTAINER_meta_data_insert (nm, "<user>", ntype, nformat,
620 gtk_tree_model_get (tm, &iter, 617 "text/plain", value,
621 0, &ntype, 618 strlen (value) + 1);
622 1, &nformat, 619 g_free (value);
623 3, &value,
624 -1);
625 GNUNET_CONTAINER_meta_data_insert (nm,
626 "<user>",
627 ntype,
628 nformat,
629 "text/plain",
630 value,
631 strlen (value)+1);
632 g_free (value);
633 }
634 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
635 } 620 }
621 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
622 }
636 GNUNET_CONTAINER_meta_data_merge (meta, nm); 623 GNUNET_CONTAINER_meta_data_merge (meta, nm);
637 if (preview_changed == GNUNET_YES) 624 if (preview_changed == GNUNET_YES)
625 {
626 fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER
627 (gtk_builder_get_object
628 (builder,
629 "GNUNET_GTK_edit_file_information_metadata_preview_file_chooser_button")));
630 f = g_file_new_for_path (fn);
631 finfo =
632 g_file_query_info (f, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, 0, NULL,
633 NULL);
634 if (FALSE == g_file_load_contents (f, NULL, &data, &data_size, NULL, NULL))
638 { 635 {
639 fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (gtk_builder_get_object (builder, 636 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
640 "GNUNET_GTK_edit_file_information_metadata_preview_file_chooser_button"))); 637 _("Could not load preview `%s' into memory\n"), fn);
641 f = g_file_new_for_path (fn);
642 finfo = g_file_query_info (f, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, 0, NULL, NULL);
643 if (FALSE == g_file_load_contents (f, NULL, &data, &data_size, NULL, NULL))
644 {
645 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
646 _("Could not load preview `%s' into memory\n"),
647 fn);
648 }
649 else
650 {
651 mime = g_file_info_get_attribute_string (finfo,
652 G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
653 GNUNET_CONTAINER_meta_data_insert (meta,
654 "<user>",
655 EXTRACTOR_METATYPE_THUMBNAIL,
656 EXTRACTOR_METAFORMAT_BINARY,
657 mime,
658 data,
659 data_size);
660 }
661 g_object_unref (finfo);
662 g_object_unref (f);
663 } 638 }
639 else
640 {
641 mime =
642 g_file_info_get_attribute_string (finfo,
643 G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
644 GNUNET_CONTAINER_meta_data_insert (meta, "<user>",
645 EXTRACTOR_METATYPE_THUMBNAIL,
646 EXTRACTOR_METAFORMAT_BINARY, mime,
647 data, data_size);
648 }
649 g_object_unref (finfo);
650 g_object_unref (f);
651 }
664 GNUNET_CONTAINER_meta_data_destroy (nm); 652 GNUNET_CONTAINER_meta_data_destroy (nm);
665 653
666 /* update short_fn */ 654 /* update short_fn */
667 GNUNET_free_non_null (*short_fn); 655 GNUNET_free_non_null (*short_fn);
668 *short_fn = GNUNET_CONTAINER_meta_data_get_first_by_types (meta, 656 *short_fn =
669 EXTRACTOR_METATYPE_FILENAME, 657 GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
670 -1); 658 EXTRACTOR_METATYPE_FILENAME,
659 -1);
671 /* FIXME: update expiration time? (not yet in dialog!) */ 660 /* FIXME: update expiration time? (not yet in dialog!) */
672 return GNUNET_SYSERR; /* only visit top-level item */ 661 return GNUNET_SYSERR; /* only visit top-level item */
673} 662}
674 663
675 664
@@ -677,11 +666,9 @@ file_information_update (void *cls,
677 * Open the dialog to edit file information data. 666 * Open the dialog to edit file information data.
678 */ 667 */
679void 668void
680GNUNET_FS_GTK_edit_publish_dialog (int *do_index, 669GNUNET_FS_GTK_edit_publish_dialog (int *do_index, char **short_fn,
681 char **short_fn, 670 guint * anonymity_level, guint * priority,
682 guint *anonymity_level, 671 struct GNUNET_FS_FileInformation *fip)
683 guint *priority,
684 struct GNUNET_FS_FileInformation *fip)
685{ 672{
686 GtkWidget *ad; 673 GtkWidget *ad;
687 GtkListStore *ls; 674 GtkListStore *ls;
@@ -692,77 +679,92 @@ GNUNET_FS_GTK_edit_publish_dialog (int *do_index,
692 GtkTreeSelection *sel; 679 GtkTreeSelection *sel;
693 680
694 GNUNET_assert (builder == NULL); 681 GNUNET_assert (builder == NULL);
695 builder = GNUNET_GTK_get_new_builder ("gnunet_fs_gtk_publish_edit_dialog.glade"); 682 builder =
683 GNUNET_GTK_get_new_builder ("gnunet_fs_gtk_publish_edit_dialog.glade");
696 if (builder == NULL) 684 if (builder == NULL)
697 { 685 {
698 GNUNET_break (0); 686 GNUNET_break (0);
699 return; 687 return;
700 } 688 }
701 preview_changed = GNUNET_NO; 689 preview_changed = GNUNET_NO;
702 GNUNET_FS_GTK_setup_expiration_year_adjustment (builder); 690 GNUNET_FS_GTK_setup_expiration_year_adjustment (builder);
703 if (GNUNET_FS_file_information_is_directory (fip)) 691 if (GNUNET_FS_file_information_is_directory (fip))
704 { 692 {
705 /* indexing does not apply to directories */ 693 /* indexing does not apply to directories */
706 gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, 694 gtk_widget_hide (GTK_WIDGET
707 "GNUNET_GTK_edit_file_information_index_check_button"))); 695 (gtk_builder_get_object
708 gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, 696 (builder,
709 "GNUNET_GTK_edit_file_information_index_label"))); 697 "GNUNET_GTK_edit_file_information_index_check_button")));
710 698 gtk_widget_hide (GTK_WIDGET
711 } 699 (gtk_builder_get_object
712 700 (builder,
713 ad = GTK_WIDGET (gtk_builder_get_object (builder, 701 "GNUNET_GTK_edit_file_information_index_label")));
714 "GNUNET_GTK_edit_file_information_dialog")); 702
715 ls = GTK_LIST_STORE (gtk_builder_get_object (builder, 703 }
716 "GNUNET_GTK_metatype_list_store")); 704
705 ad = GTK_WIDGET (gtk_builder_get_object
706 (builder, "GNUNET_GTK_edit_file_information_dialog"));
707 ls = GTK_LIST_STORE (gtk_builder_get_object
708 (builder, "GNUNET_GTK_metatype_list_store"));
717 max_type = EXTRACTOR_metatype_get_max (); 709 max_type = EXTRACTOR_metatype_get_max ();
718 type = 1; 710 type = 1;
719 while (type < max_type - 1) 711 while (type < max_type - 1)
720 { 712 {
721 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 713 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0,
722 0, EXTRACTOR_metatype_to_string (type), 714 EXTRACTOR_metatype_to_string (type), 1,
723 1, type, 715 type, 2,
724 2, EXTRACTOR_metatype_to_description (type), 716 EXTRACTOR_metatype_to_description (type),
725 -1); 717 -1);
726 type++; 718 type++;
727 } 719 }
728 720
729 GNUNET_FS_file_information_inspect (fip, 721 GNUNET_FS_file_information_inspect (fip, &file_information_extract, NULL);
730 &file_information_extract, 722 tv = GTK_TREE_VIEW (gtk_builder_get_object
731 NULL); 723 (builder,
732 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 724 "GNUNET_GTK_edit_file_information_metadata_type_tree_view"));
733 "GNUNET_GTK_edit_file_information_metadata_type_tree_view"));
734 sel = gtk_tree_view_get_selection (tv); 725 sel = gtk_tree_view_get_selection (tv);
735 g_signal_connect(G_OBJECT(sel), "changed", 726 g_signal_connect (G_OBJECT (sel), "changed",
736 G_CALLBACK(GNUNET_GTK_edit_file_information_metadata_value_entry_changed_cb), NULL); 727 G_CALLBACK
737 728 (GNUNET_GTK_edit_file_information_metadata_value_entry_changed_cb),
738 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 729 NULL);
739 "GNUNET_GTK_edit_file_information_metadata_tree_view")); 730
731 tv = GTK_TREE_VIEW (gtk_builder_get_object
732 (builder,
733 "GNUNET_GTK_edit_file_information_metadata_tree_view"));
740 sel = gtk_tree_view_get_selection (tv); 734 sel = gtk_tree_view_get_selection (tv);
741 g_signal_connect(G_OBJECT(sel), "changed", 735 g_signal_connect (G_OBJECT (sel), "changed",
742 G_CALLBACK(metadata_selection_changed_cb), NULL); 736 G_CALLBACK (metadata_selection_changed_cb), NULL);
743 737
744 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder, 738 tv = GTK_TREE_VIEW (gtk_builder_get_object
745 "GNUNET_GTK_edit_file_information_keyword_list_tree_view")); 739 (builder,
740 "GNUNET_GTK_edit_file_information_keyword_list_tree_view"));
746 sel = gtk_tree_view_get_selection (tv); 741 sel = gtk_tree_view_get_selection (tv);
747 g_signal_connect(G_OBJECT(sel), "changed", 742 g_signal_connect (G_OBJECT (sel), "changed",
748 G_CALLBACK(keyword_selection_changed_cb), NULL); 743 G_CALLBACK (keyword_selection_changed_cb), NULL);
749 gtk_window_set_title (GTK_WINDOW (ad), *short_fn); 744 gtk_window_set_title (GTK_WINDOW (ad), *short_fn);
750 if (GTK_RESPONSE_OK != gtk_dialog_run (GTK_DIALOG (ad))) 745 if (GTK_RESPONSE_OK != gtk_dialog_run (GTK_DIALOG (ad)))
751 { 746 {
752 gtk_widget_destroy (ad); 747 gtk_widget_destroy (ad);
753 g_object_unref (G_OBJECT (builder)); 748 g_object_unref (G_OBJECT (builder));
754 builder = NULL; 749 builder = NULL;
755 return; 750 return;
756 } 751 }
757 GNUNET_FS_file_information_inspect (fip, 752 GNUNET_FS_file_information_inspect (fip, &file_information_update, short_fn);
758 &file_information_update, 753 *anonymity_level =
759 short_fn); 754 gtk_spin_button_get_value (GTK_SPIN_BUTTON
760 *anonymity_level = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 755 (gtk_builder_get_object
761 "GNUNET_GTK_edit_file_information_anonymity_spin_button"))); 756 (builder,
762 *priority = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, 757 "GNUNET_GTK_edit_file_information_anonymity_spin_button")));
763 "GNUNET_GTK_edit_file_information_priority_spin_button"))); 758 *priority =
764 *do_index = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, 759 gtk_spin_button_get_value (GTK_SPIN_BUTTON
765 "GNUNET_GTK_edit_file_information_index_check_button"))); 760 (gtk_builder_get_object
761 (builder,
762 "GNUNET_GTK_edit_file_information_priority_spin_button")));
763 *do_index =
764 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
765 (gtk_builder_get_object
766 (builder,
767 "GNUNET_GTK_edit_file_information_index_check_button")));
766 gtk_widget_destroy (ad); 768 gtk_widget_destroy (ad);
767 g_object_unref (G_OBJECT (builder)); 769 g_object_unref (G_OBJECT (builder));
768 builder = NULL; 770 builder = NULL;