aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-03-20 08:42:59 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-03-20 08:42:59 +0000
commitfeb2481e5564f7819e2c0ffc752e41f383a63351 (patch)
treea82ad925bdb463695760f1fa7aca4d5abd327524
parentbb78543a00939f08b07a6f1eaf6d8b1691c8431a (diff)
downloadgnunet-gtk-feb2481e5564f7819e2c0ffc752e41f383a63351.tar.gz
gnunet-gtk-feb2481e5564f7819e2c0ffc752e41f383a63351.zip
- changes
-rw-r--r--src/gns/gnunet-gns-gtk.c206
1 files changed, 134 insertions, 72 deletions
diff --git a/src/gns/gnunet-gns-gtk.c b/src/gns/gnunet-gns-gtk.c
index c7b47363..f7d8e42b 100644
--- a/src/gns/gnunet-gns-gtk.c
+++ b/src/gns/gnunet-gns-gtk.c
@@ -73,6 +73,54 @@ get_object (const char *name)
73} 73}
74 74
75 75
76void pseu_change_cont (void *cls,
77 int32_t success,
78 const char *emsg)
79{
80 GNUNET_break (0);
81}
82
83
84/**
85 * Task run on shutdown.
86 *
87 * @param cls unused
88 * @param tc scheduler context, unused
89 */
90static void
91shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
92{
93
94 struct GNUNET_GNS_Context *gns = cls;
95 GNUNET_assert (gns != NULL);
96 if (NULL != gns->ns)
97 {
98 GNUNET_NAMESTORE_disconnect (gns->ns, GNUNET_NO);
99 gns->ns = NULL;
100 }
101 if (NULL != gns->pkey)
102 {
103 GNUNET_CRYPTO_rsa_key_free (gns->pkey);
104 gns->pkey = NULL;
105 }
106 if (NULL != zonekey_directory)
107 {
108 GNUNET_free (zonekey_directory);
109 zonekey_directory = NULL;
110 }
111 GNUNET_free (gns);
112}
113
114
115void
116GNUNET_GNS_GTK_shutdown (void *user_data)
117{
118 GNUNET_GTK_tray_icon_destroy ();
119 GNUNET_GTK_main_loop_quit (ml);
120 GNUNET_SCHEDULER_add_now (&shutdown_task, user_data);
121}
122
123
76/** 124/**
77 * The user edited the preferred name (PSEU) of this namespace. 125 * The user edited the preferred name (PSEU) of this namespace.
78 * Push the update to the namestore. 126 * Push the update to the namestore.
@@ -84,9 +132,22 @@ void
84GNUNET_GNS_GTK_pseu_entry_changed_cb (GtkEditable *editable, 132GNUNET_GNS_GTK_pseu_entry_changed_cb (GtkEditable *editable,
85 gpointer user_data) 133 gpointer user_data)
86{ 134{
87 GNUNET_break (0); // FIXME, not implemented 135 struct GNUNET_GNS_Context *gns = user_data;
88} 136 struct GNUNET_NAMESTORE_RecordData rd;
137 const gchar * pseu;
89 138
139 pseu = gtk_entry_get_text (GTK_ENTRY(editable));
140 if ((pseu != NULL) && (0 != strcmp ("", pseu)))
141 {
142 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "New Pseudonym is `%s'\n", pseu);
143 rd.flags = GNUNET_NAMESTORE_TYPE_PSEU;
144 rd.expiration = GNUNET_TIME_absolute_get_forever();
145 rd.flags = GNUNET_NAMESTORE_RF_AUTHORITY;
146 rd.data_size = strlen (pseu) + 1;
147 rd.data = strdup (pseu);
148 GNUNET_NAMESTORE_record_create(gns->ns, gns->pkey, "+", &rd, pseu_change_cont, gns);
149 }
150}
90 151
91/** 152/**
92 * The user toggled the 'autoshort' option. Update the configuration. 153 * The user toggled the 'autoshort' option. Update the configuration.
@@ -129,7 +190,8 @@ GNUNET_GNS_GTK_zone_open_dialog_response_cb (GtkDialog * dialog,
129 gint response_id, 190 gint response_id,
130 gpointer user_data) 191 gpointer user_data)
131{ 192{
132 GtkBuilder *builder = user_data; 193 struct GNUNET_GNS_Context *gns = user_data;
194 GtkBuilder *builder = gns->builder;
133 char *filename; 195 char *filename;
134 196
135 if (GTK_RESPONSE_OK != response_id) 197 if (GTK_RESPONSE_OK != response_id)
@@ -213,36 +275,6 @@ GNUNET_GNS_GTK_public_key_copy_button_clicked_cb (GtkButton *button,
213} 275}
214 276
215 277
216/**
217 * Task run on shutdown.
218 *
219 * @param cls unused
220 * @param tc scheduler context, unused
221 */
222static void
223shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
224{
225
226 struct GNUNET_GNS_Context *gns = cls;
227 GNUNET_assert (gns != NULL);
228 if (NULL != gns->ns)
229 {
230 GNUNET_NAMESTORE_disconnect (gns->ns, GNUNET_NO);
231 gns->ns = NULL;
232 }
233 if (NULL != gns->pkey)
234 {
235 GNUNET_CRYPTO_rsa_key_free (gns->pkey);
236 gns->pkey = NULL;
237 }
238 if (NULL != zonekey_directory)
239 {
240 GNUNET_free (zonekey_directory);
241 zonekey_directory = NULL;
242 }
243 GNUNET_free (gns);
244}
245
246 278
247/** 279/**
248 * Callback invoked if the application is supposed to exit (via menu). 280 * Callback invoked if the application is supposed to exit (via menu).
@@ -277,6 +309,74 @@ GNUNET_GNS_GTK_main_window_delete_event_cb (GtkWidget *widget,
277 GNUNET_SCHEDULER_add_now (&shutdown_task, user_data); 309 GNUNET_SCHEDULER_add_now (&shutdown_task, user_data);
278} 310}
279 311
312
313void
314close_error_box (GtkDialog *dialog,
315 gint response_id,
316 gpointer user_data)
317{
318 struct GNUNET_GNS_Context *gns = user_data;
319 GNUNET_GNS_GTK_shutdown (gns);
320}
321
322static void
323namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
324{
325 struct GNUNET_GNS_Context *gns = cls;
326 struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc;
327 char *label;
328
329 if ((tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT) != 0)
330 {
331 char * message = _("Namestore service is not running!\n");
332 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
333 message);
334 GtkWidget *dialog, *label, *content_area;
335 dialog = gtk_dialog_new_with_buttons (_("ERROR"),
336 GTK_WINDOW (main_window),
337 GTK_DIALOG_DESTROY_WITH_PARENT,
338 GTK_STOCK_OK,
339 GTK_RESPONSE_NONE,
340 NULL);
341 content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
342 label = gtk_label_new (message);
343 /* Ensure that the dialog box is destroyed when the user responds. */
344 g_signal_connect_swapped (dialog,
345 "response",
346 G_CALLBACK(close_error_box),
347 gns);
348 /* Add the label, and show everything we've added to the dialog. */
349 gtk_container_add (GTK_CONTAINER (content_area), label);
350 gtk_widget_show_all (dialog);
351 return;
352 }
353
354 GNUNET_CRYPTO_short_hash_to_enc(&gns->zone, &shenc);
355 zone_as_string = GNUNET_strdup ((char *) &shenc);
356 label = g_markup_printf_escaped (_("<b>Editing zone %s</b>"),
357 zone_as_string);
358 gtk_label_set_markup (GTK_LABEL (get_object ("GNUNET_GNS_GTK_zone_label")),
359 label);
360 g_free (label);
361
362 GNUNET_GTK_set_icon_search_path ();
363 GNUNET_GTK_setup_nls ();
364 /* setup main window */
365 main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window"));
366 //gtk_window_maximize (GTK_WINDOW (main_window));
367 GNUNET_GTK_tray_icon_create (GTK_WINDOW (main_window),
368 "gnunet-gtk" /* FIXME: different icon? */ ,
369 "gnunet-gns-gtk");
370
371 /* make GUI visible */
372 if (!tray_only)
373 {
374 gtk_widget_show (main_window);
375 gtk_window_present (GTK_WINDOW (main_window));
376 }
377}
378
379
280/** 380/**
281 * Actual main function run right after GNUnet's scheduler 381 * Actual main function run right after GNUnet's scheduler
282 * is initialized. Initializes up GTK and Glade. 382 * is initialized. Initializes up GTK and Glade.
@@ -288,24 +388,9 @@ static void
288run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 388run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
289{ 389{
290 struct GNUNET_GNS_Context *gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context)); 390 struct GNUNET_GNS_Context *gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context));
291 struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc;
292 char *keyfile; 391 char *keyfile;
293 char *label;
294 392
295 ml = cls; 393 ml = cls;
296 /*
297 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (),
298 "gns",
299 "ZONEKEY_DIRECTORY",
300 &zonekey_direc struct GNUNET_CRYPTO_ShortHashAsciiEncoded shenc;
301 GNUNET_CRYPTO_short_hash_to_enc(&zc_ctx->zone, &shenc);tory))
302 {
303 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
304 _("Option `%s' missing in section `%s'\n"),
305 "ZONEKEY_DIRECTORY", "namestore");
306 return;
307 }*/
308
309 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (), 394 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (),
310 "gns", 395 "gns",
311 "ZONEKEY", 396 "ZONEKEY",
@@ -352,30 +437,7 @@ run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
352 gns->ls = GTK_LIST_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_type_liststore")); 437 gns->ls = GTK_LIST_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_type_liststore"));
353 GNUNET_assert (NULL != gns->ts); 438 GNUNET_assert (NULL != gns->ts);
354 439
355 GNUNET_CRYPTO_short_hash_to_enc(&gns->zone, &shenc); 440 GNUNET_CLIENT_service_test("namestore", get_configuration(), GNUNET_TIME_UNIT_SECONDS, &namestore_service_check, gns);
356 zone_as_string = GNUNET_strdup ((char *) &shenc);
357 label = g_markup_printf_escaped (_("<b>Editing zone %s</b>"),
358 zone_as_string);
359 gtk_label_set_markup (GTK_LABEL (get_object ("GNUNET_GNS_GTK_zone_label")),
360 label);
361 g_free (label);
362
363 GNUNET_GTK_set_icon_search_path ();
364 GNUNET_GTK_setup_nls ();
365 /* setup main window */
366 main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window"));
367 //gtk_window_maximize (GTK_WINDOW (main_window));
368 GNUNET_GTK_tray_icon_create (GTK_WINDOW (main_window),
369 "gnunet-gtk" /* FIXME: different icon? */ ,
370 "gnunet-gns-gtk");
371
372 /* make GUI visible */
373 if (!tray_only)
374 {
375 gtk_widget_show (main_window);
376 gtk_window_present (GTK_WINDOW (main_window));
377 }
378
379} 441}
380 442
381 443