aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-08-07 21:46:01 +0000
committerChristian Grothoff <christian@grothoff.org>2010-08-07 21:46:01 +0000
commitcd2b63beb8818417a4ed07a84623b6ff80a5fba3 (patch)
treea597968f820a303b342a48695b668c593fc86f8d
parente08400d9c4cd06c8619daa295a1e04990559982d (diff)
downloadgnunet-gtk-cd2b63beb8818417a4ed07a84623b6ff80a5fba3.tar.gz
gnunet-gtk-cd2b63beb8818417a4ed07a84623b6ff80a5fba3.zip
done
-rw-r--r--src/common.h7
-rw-r--r--src/gnunet-gtk.c15
-rw-r--r--src/main_window_file_search.c128
3 files changed, 129 insertions, 21 deletions
diff --git a/src/common.h b/src/common.h
index 818adcf3..571d0c05 100644
--- a/src/common.h
+++ b/src/common.h
@@ -99,6 +99,13 @@ GNUNET_GTK_get_le_plugins (void);
99 99
100 100
101/** 101/**
102 * Get cfg.
103 */
104const struct GNUNET_CONFIGURATION_Handle *
105GNUNET_GTK_get_configuration (void);
106
107
108/**
102 * Return handle for file-sharing operations. 109 * Return handle for file-sharing operations.
103 * @return NULL on error 110 * @return NULL on error
104 */ 111 */
diff --git a/src/gnunet-gtk.c b/src/gnunet-gtk.c
index 215d4d8c..d4ce1b10 100644
--- a/src/gnunet-gtk.c
+++ b/src/gnunet-gtk.c
@@ -113,6 +113,11 @@ struct MainContext
113 GtkBuilder *builder; 113 GtkBuilder *builder;
114 114
115 /** 115 /**
116 * Our configuration.
117 */
118 const struct GNUNET_CONFIGURATION_Handle *cfg;
119
120 /**
116 * Handle for file-sharing operations. 121 * Handle for file-sharing operations.
117 */ 122 */
118 struct GNUNET_FS_Handle *fs; 123 struct GNUNET_FS_Handle *fs;
@@ -326,6 +331,15 @@ GNUNET_GTK_get_le_plugins ()
326 return mc->plugins; 331 return mc->plugins;
327} 332}
328 333
334/**
335 * Get cfg.
336 */
337const struct GNUNET_CONFIGURATION_Handle *
338GNUNET_GTK_get_configuration (void)
339{
340 return mc->cfg;
341}
342
329 343
330/** 344/**
331 * Callback invoked if the application is supposed to exit. 345 * Callback invoked if the application is supposed to exit.
@@ -542,6 +556,7 @@ run (void *cls,
542 mc->gml = g_main_loop_new (NULL, TRUE); 556 mc->gml = g_main_loop_new (NULL, TRUE);
543 mc->gmc = g_main_loop_get_context (mc->gml); 557 mc->gmc = g_main_loop_get_context (mc->gml);
544 mc->sched = sched; 558 mc->sched = sched;
559 mc->cfg = cfg;
545 if (mc->builder == NULL) 560 if (mc->builder == NULL)
546 return; 561 return;
547 562
diff --git a/src/main_window_file_search.c b/src/main_window_file_search.c
index 9b5b9f9d..0de40d62 100644
--- a/src/main_window_file_search.c
+++ b/src/main_window_file_search.c
@@ -40,6 +40,11 @@ GNUNET_GTK_search_dialog_search_button_clicked_cb (GtkWidget * dummy,
40 const char *keywords; 40 const char *keywords;
41 char *emsg; 41 char *emsg;
42 struct GNUNET_FS_Uri *uri; 42 struct GNUNET_FS_Uri *uri;
43 GNUNET_HashCode *nsid;
44 GtkTreeModel *ls;
45 GtkTreeView *tv;
46 GtkTreeSelection *sel;
47 GtkTreeIter iter;
43 48
44 query = GTK_ENTRY (gtk_builder_get_object (builder, 49 query = GTK_ENTRY (gtk_builder_get_object (builder,
45 "GNUNET_GTK_search_dialog_keyword_entry")); 50 "GNUNET_GTK_search_dialog_keyword_entry"));
@@ -48,29 +53,38 @@ GNUNET_GTK_search_dialog_search_button_clicked_cb (GtkWidget * dummy,
48 namespace = GTK_TREE_VIEW (gtk_builder_get_object (builder, 53 namespace = GTK_TREE_VIEW (gtk_builder_get_object (builder,
49 "GNUNET_GTK_search_dialog_namespace_tree_view")); 54 "GNUNET_GTK_search_dialog_namespace_tree_view"));
50 keywords = gtk_entry_get_text (query); 55 keywords = gtk_entry_get_text (query);
51 /* FIXME: check if namespace was selected */ 56 nsid = NULL;
52#if 0 57 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
58 "GNUNET_GTK_search_dialog_namespace_tree_view"));
59 sel = gtk_tree_view_get_selection (tv);
53 if (TRUE == 60 if (TRUE ==
54 gtk_list_model_get_active_iter (model, 61 gtk_tree_selection_get_selected (sel,
55 &iter)) 62 &ls,
63 &iter))
64 gtk_tree_model_get (ls, &iter,
65 2, &nsid,
66 -1);
67 if (nsid != NULL)
56 { 68 {
57 gtk_list_model_get (model, &iter, 69 uri = GNUNET_FS_uri_sks_create_from_nsid (nsid,
58 NS_SEARCH_DESCRIPTION, &descStr, 70 keywords);
59 NS_SEARCH_NAME, &nsName, 71 GNUNET_assert (uri != NULL);
60 -1); 72 }
61 // ... 73 else
62 }
63#endif
64 emsg = NULL;
65 uri = GNUNET_FS_uri_ksk_create (keywords, &emsg);
66 if (uri == NULL)
67 { 74 {
68 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 75 emsg = NULL;
69 _("Invalid keyword string `%s': %s"), 76 uri = GNUNET_FS_uri_ksk_create (keywords, &emsg);
70 keywords, 77 if (uri == NULL)
71 emsg); 78 {
72 GNUNET_free_non_null (emsg); 79 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
73 return; 80 (nsid != NULL)
81 ? _("Invalid namespace identifier `%s': %s")
82 : _("Invalid keyword string `%s': %s"),
83 keywords,
84 emsg);
85 GNUNET_free_non_null (emsg);
86 return;
87 }
74 } 88 }
75 GNUNET_FS_search_start (GNUNET_GTK_get_fs_handle (), 89 GNUNET_FS_search_start (GNUNET_GTK_get_fs_handle (),
76 uri, 90 uri,
@@ -81,6 +95,75 @@ GNUNET_GTK_search_dialog_search_button_clicked_cb (GtkWidget * dummy,
81} 95}
82 96
83 97
98
99/**
100 * Add pseudonym data to list store
101 *
102 * @param cls closure (the 'GtkListStore')
103 * @param pseudonym hash code of public key of pseudonym
104 * @param md meta data known about the pseudonym
105 * @param rating the local rating of the pseudonym
106 * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort
107 */
108static int
109add_namespace_to_ls (void *cls,
110 const GNUNET_HashCode *
111 pseudonym,
112 const struct
113 GNUNET_CONTAINER_MetaData * md,
114 int rating)
115{
116 GtkListStore *ls = cls;
117 char *root;
118 char *ns_name;
119 GNUNET_HashCode *nsid;
120 char *description;
121 char *uris;
122 char *emsg;
123 struct GNUNET_FS_Uri *uri;
124 GtkTreeIter iter;
125
126 ns_name = GNUNET_PSEUDONYM_id_to_name (GNUNET_GTK_get_configuration (),
127 pseudonym);
128 nsid = GNUNET_malloc (sizeof (GNUNET_HashCode));
129 *nsid = *pseudonym;
130 root = NULL;
131 uris = GNUNET_CONTAINER_meta_data_get_by_type (md,
132 EXTRACTOR_METATYPE_URI);
133 if (uris != NULL)
134 {
135 emsg = NULL;
136 uri = GNUNET_FS_uri_parse (uris, &emsg);
137 if (uri == NULL)
138 GNUNET_free (emsg);
139 root = GNUNET_FS_uri_sks_get_content_id (uri);
140 GNUNET_FS_uri_destroy (uri);
141 }
142 description = GNUNET_CONTAINER_meta_data_get_first_by_types (md,
143 EXTRACTOR_METATYPE_TITLE,
144 EXTRACTOR_METATYPE_BOOK_TITLE,
145 EXTRACTOR_METATYPE_DESCRIPTION,
146 EXTRACTOR_METATYPE_SUMMARY,
147 EXTRACTOR_METATYPE_ALBUM,
148 EXTRACTOR_METATYPE_COMMENT,
149 EXTRACTOR_METATYPE_SUBJECT,
150 EXTRACTOR_METATYPE_KEYWORDS
151 -1);
152 gtk_list_store_insert_with_values (ls,
153 &iter,
154 G_MAXINT,
155 0, ns_name,
156 1, root,
157 2, nsid,
158 3, description,
159 -1);
160 GNUNET_free (ns_name);
161 GNUNET_free_non_null (root);
162 GNUNET_free_non_null (description);
163 return GNUNET_OK;
164}
165
166
84/** 167/**
85 * Search selected in 'file' menu. 168 * Search selected in 'file' menu.
86 */ 169 */
@@ -99,8 +182,11 @@ GNUNET_GTK_main_menu_file_search_activate_cb (GtkWidget * dummy,
99 "GNUNET_GTK_search_dialog")); 182 "GNUNET_GTK_search_dialog"));
100 ls = GTK_LIST_STORE (gtk_builder_get_object (builder, 183 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
101 "GNUNET_GTK_namespace_list_store")); 184 "GNUNET_GTK_namespace_list_store"));
102 /* FIXME: populate 'ls' */ 185 GNUNET_PSEUDONYM_list_all (GNUNET_GTK_get_configuration (),
186 &add_namespace_to_ls,
187 ls);
103 gtk_dialog_run (GTK_DIALOG (ad)); 188 gtk_dialog_run (GTK_DIALOG (ad));
189 /* FIXME: free nsids from 'ls' */
104 gtk_widget_destroy (ad); 190 gtk_widget_destroy (ad);
105 g_object_unref (G_OBJECT (builder)); 191 g_object_unref (G_OBJECT (builder));
106 builder = NULL; 192 builder = NULL;