From 84a18dee8b6044facfdde00d36f9a27b59f02d45 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 31 Jan 2012 11:02:18 +0000 Subject: -misc bugfixes to progress dialog for publishing --- contrib/gnunet_fs_gtk_progress_dialog.glade | 41 +++------------ src/fs/gnunet-fs-gtk-main_window_file_publish.c | 69 +++++++++++++++++-------- 2 files changed, 53 insertions(+), 57 deletions(-) diff --git a/contrib/gnunet_fs_gtk_progress_dialog.glade b/contrib/gnunet_fs_gtk_progress_dialog.glade index 8f2b1743..6e63b9ee 100644 --- a/contrib/gnunet_fs_gtk_progress_dialog.glade +++ b/contrib/gnunet_fs_gtk_progress_dialog.glade @@ -1,19 +1,18 @@ - + - False 2 center-on-parent 800 600 True - + True - False + vertical 2 @@ -37,15 +36,12 @@ - True - True 0 True - False True @@ -57,43 +53,23 @@ True - False 2 - - - gtk-ok - False - True - True - True - True - - - - False - False - end - 1 - - gtk-cancel - False True True True True - + False False - end - 2 + 1 @@ -106,12 +82,7 @@ - - - - - - + 100 diff --git a/src/fs/gnunet-fs-gtk-main_window_file_publish.c b/src/fs/gnunet-fs-gtk-main_window_file_publish.c index 6aa622c5..948078a1 100644 --- a/src/fs/gnunet-fs-gtk-main_window_file_publish.c +++ b/src/fs/gnunet-fs-gtk-main_window_file_publish.c @@ -86,6 +86,9 @@ struct AddDirClientContext GtkTextView *progress_dialog_textview; GtkTextBuffer *progress_dialog_textbuffer; GtkTextMark *progress_dialog_textmark; + + unsigned int done; + unsigned int total; }; void @@ -821,8 +824,11 @@ add_item (struct AddDirClientContext *adcc, GtkTreeStore *ts, GNUNET_CONTAINER_meta_data_delete (item->meta, EXTRACTOR_METATYPE_MIMETYPE, NULL, 0); GNUNET_FS_meta_data_make_directory (item->meta); - GNUNET_FS_uri_ksk_add_keyword (item->ksk_uri, GNUNET_FS_DIRECTORY_MIME, - GNUNET_NO); + if (NULL == item->ksk_uri) + item->ksk_uri = GNUNET_FS_uri_ksk_create (GNUNET_FS_DIRECTORY_MIME, NULL); + else + GNUNET_FS_uri_ksk_add_keyword (item->ksk_uri, GNUNET_FS_DIRECTORY_MIME, + GNUNET_NO); fi = GNUNET_FS_file_information_create_empty_directory ( GNUNET_FS_GTK_get_fs_handle (), row_reference, item->ksk_uri, item->meta, &adcc->directory_scan_bo, item->filename); @@ -834,8 +840,6 @@ add_item (struct AddDirClientContext *adcc, GtkTreeStore *ts, item->ksk_uri, item->meta, adcc->directory_scan_do_index, &adcc->directory_scan_bo); } - GNUNET_CONTAINER_meta_data_destroy (item->meta); - GNUNET_FS_uri_destroy (item->ksk_uri); if (item->is_directory) file_size_fancy = GNUNET_strdup (MARKER_DIR_FILE_SIZE); else @@ -850,8 +854,6 @@ add_item (struct AddDirClientContext *adcc, GtkTreeStore *ts, 6, (guint64) adcc->directory_scan_bo.expiration_time.abs_value, 7, (guint) adcc->directory_scan_bo.replication_level, -1); GNUNET_free (file_size_fancy); - GNUNET_free (item->short_filename); - GNUNET_free (item->filename); } @@ -877,7 +879,7 @@ add_share_items_to_treestore (struct AddDirClientContext *adcc, sibling_iter = &last_added; if (item->is_directory) add_share_items_to_treestore (adcc, - item, + item->children_head, sibling_iter); } } @@ -929,36 +931,58 @@ directory_scan_cb (void *cls, { struct AddDirClientContext *adcc = cls; char *s; + gdouble fraction; gtk_progress_bar_pulse (adcc->progress_dialog_bar); switch (reason) { case GNUNET_FS_DIRSCANNER_FILE_START: - if (filename != NULL) + GNUNET_assert (filename != NULL); + if (is_directory) { - if (is_directory) - GNUNET_asprintf (&s, _("Scanning directory `%s'.\n"), filename); - else - GNUNET_asprintf (&s, _("Scanning file `%s'.\n"), filename); + GNUNET_asprintf (&s, _("Scanning directory `%s'.\n"), filename); insert_progress_dialog_text (adcc, s); GNUNET_free (s); } + else + adcc->total++; break; case GNUNET_FS_DIRSCANNER_FILE_IGNORED: - if (filename != NULL) - { - GNUNET_asprintf (&s, - _("Failed to scan `%s', because it does not exist.\n"), - filename); - insert_progress_dialog_text (adcc, s); - GNUNET_free (s); - } + GNUNET_assert (filename != NULL); + GNUNET_asprintf (&s, + _("Failed to scan `%s' (access error). Skipping.\n"), + filename); + insert_progress_dialog_text (adcc, s); + GNUNET_free (s); break; case GNUNET_FS_DIRSCANNER_ALL_COUNTED: - // FIXME... + fraction = (adcc->total == 0) ? 1.0 : (1.0 * adcc->done) / adcc->total; + GNUNET_asprintf (&s, "%u/%u (%3f%%)", + adcc->done, + adcc->total, + 100.0 * fraction); + gtk_progress_bar_set_text (adcc->progress_dialog_bar, + s); + GNUNET_free (s); + gtk_progress_bar_set_fraction (adcc->progress_dialog_bar, + fraction); break; case GNUNET_FS_DIRSCANNER_EXTRACT_FINISHED: - // FIXME... + GNUNET_asprintf (&s, _("Processed file `%s'.\n"), filename); + insert_progress_dialog_text (adcc, s); + GNUNET_free (s); + adcc->done++; + GNUNET_assert (adcc->done <= adcc->total); + fraction = (adcc->total == 0) ? 1.0 : (1.0 * adcc->done) / adcc->total; + GNUNET_asprintf (&s, "%u/%u (%3f%%)", + adcc->done, + adcc->total, + 100.0 * fraction); + gtk_progress_bar_set_text (adcc->progress_dialog_bar, + s); + GNUNET_free (s); + gtk_progress_bar_set_fraction (adcc->progress_dialog_bar, + fraction); break; case GNUNET_FS_DIRSCANNER_INTERNAL_ERROR: insert_progress_dialog_text (adcc, _("Operation failed (press cancel)\n")); @@ -1026,6 +1050,7 @@ scan_file_or_directory (struct MainPublishingDialogContext *ctx, &iter, FALSE); gtk_window_set_transient_for (GTK_WINDOW (adcc->progress_dialog), adcc->ctx->master_pubdialog); + gtk_window_set_title (GTK_WINDOW (adcc->progress_dialog), filename); gtk_window_present (GTK_WINDOW (adcc->progress_dialog)); update_selectivity (ctx); -- cgit v1.2.3