aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/fs/fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/fs/fs.c')
-rw-r--r--src/plugins/fs/fs.c213
1 files changed, 126 insertions, 87 deletions
diff --git a/src/plugins/fs/fs.c b/src/plugins/fs/fs.c
index edd2e045..be00afa7 100644
--- a/src/plugins/fs/fs.c
+++ b/src/plugins/fs/fs.c
@@ -42,29 +42,25 @@ SearchList * search_head;
42 42
43DownloadList * download_head; 43DownloadList * download_head;
44 44
45UploadList * upload_head;
46
45GtkListStore * search_summary; 47GtkListStore * search_summary;
46 48
47GtkTreeStore * download_summary; 49GtkTreeStore * download_summary;
48 50
49typedef struct { 51GtkTreeStore * upload_summary;
50 const FSUI_Event * event;
51 void * ret;
52} SEP_Closure;
53 52
54static void saveEventProcessor(void * arg) { 53static void * eventProcessor(void * unused,
55 SEP_Closure * cls = arg; 54 const FSUI_Event * event) {
56 const FSUI_Event * event = cls->event; 55 void * ret = NULL;
57
58 cls->ret = NULL;
59 DEBUG_BEGIN();
60 switch (event->type) { 56 switch (event->type) {
61 /* search events */ 57 /* search events */
62 case FSUI_search_started: 58 case FSUI_search_started:
63 cls->ret = fs_search_started(event->data.SearchStarted.sc.pos, 59 ret = fs_search_started(event->data.SearchStarted.sc.pos,
64 event->data.SearchStarted.searchURI, 60 event->data.SearchStarted.searchURI,
65 event->data.SearchStarted.anonymityLevel, 61 event->data.SearchStarted.anonymityLevel,
66 0, 62 0,
67 NULL); 63 NULL);
68 break; 64 break;
69 case FSUI_search_result: 65 case FSUI_search_result:
70 fs_search_result_received(event->data.SearchResult.sc.cctx, 66 fs_search_result_received(event->data.SearchResult.sc.cctx,
@@ -85,11 +81,11 @@ static void saveEventProcessor(void * arg) {
85 fs_search_aborted(event->data.SearchSuspended.sc.cctx); 81 fs_search_aborted(event->data.SearchSuspended.sc.cctx);
86 break; 82 break;
87 case FSUI_search_resumed: 83 case FSUI_search_resumed:
88 cls->ret = fs_search_started(event->data.SearchResumed.sc.pos, 84 ret = fs_search_started(event->data.SearchResumed.sc.pos,
89 event->data.SearchResumed.searchURI, 85 event->data.SearchResumed.searchURI,
90 event->data.SearchResumed.anonymityLevel, 86 event->data.SearchResumed.anonymityLevel,
91 event->data.SearchResumed.fisSize, 87 event->data.SearchResumed.fisSize,
92 event->data.SearchResumed.fis); 88 event->data.SearchResumed.fis);
93 case FSUI_search_stopped: 89 case FSUI_search_stopped:
94 fs_search_aborted(event->data.SearchError.sc.cctx); 90 fs_search_aborted(event->data.SearchError.sc.cctx);
95 break; 91 break;
@@ -117,56 +113,68 @@ static void saveEventProcessor(void * arg) {
117 case FSUI_download_stopped: 113 case FSUI_download_stopped:
118 fs_download_stopped(event->data.DownloadCompleted.dc.cctx); 114 fs_download_stopped(event->data.DownloadCompleted.dc.cctx);
119 break; 115 break;
120 case FSUI_download_started: 116 case FSUI_download_started:
121 cls->ret = fs_download_started(event->data.DownloadStarted.dc.pos, 117 ret = fs_download_started(event->data.DownloadStarted.dc.pos,
122 event->data.DownloadStarted.dc.pcctx, 118 event->data.DownloadStarted.dc.pcctx,
123 event->data.DownloadStarted.dc.sctx, 119 event->data.DownloadStarted.dc.sctx,
124 event->data.DownloadStarted.total, 120 event->data.DownloadStarted.total,
125 event->data.DownloadStarted.anonymityLevel, 121 event->data.DownloadStarted.anonymityLevel,
126 &event->data.DownloadStarted.fi, 122 &event->data.DownloadStarted.fi,
127 event->data.DownloadStarted.filename, 123 event->data.DownloadStarted.filename,
128 0, 124 0,
129 get_time()); 125 get_time());
130 break; 126 break;
131 case FSUI_download_resumed: 127 case FSUI_download_resumed:
132 cls->ret = fs_download_started(event->data.DownloadResumed.dc.pos, 128 ret = fs_download_started(event->data.DownloadResumed.dc.pos,
133 event->data.DownloadStarted.dc.pcctx, 129 event->data.DownloadStarted.dc.pcctx,
134 event->data.DownloadStarted.dc.sctx, 130 event->data.DownloadStarted.dc.sctx,
135 event->data.DownloadResumed.total, 131 event->data.DownloadResumed.total,
136 event->data.DownloadResumed.anonymityLevel, 132 event->data.DownloadResumed.anonymityLevel,
137 &event->data.DownloadResumed.fi, 133 &event->data.DownloadResumed.fi,
138 event->data.DownloadResumed.filename, 134 event->data.DownloadResumed.filename,
139 event->data.DownloadResumed.completed, 135 event->data.DownloadResumed.completed,
140 event->data.DownloadResumed.eta); 136 event->data.DownloadResumed.eta);
141 break; 137 break;
142 138
143 139 /* upload events */
144 /* upload */
145 case FSUI_upload_progress: 140 case FSUI_upload_progress:
146 displayUploadUpdate(event->data.UploadProgress.uc.cctx, 141 fs_upload_update(event->data.UploadProgress.uc.cctx,
147 event->data.UploadProgress.filename, 142 event->data.UploadProgress.completed);
148 event->data.UploadProgress.completed,
149 event->data.UploadProgress.total);
150 break; 143 break;
151 case FSUI_upload_completed: 144 case FSUI_upload_completed:
152 displayUploadComplete(event->data.UploadCompleted.uc.cctx, 145 fs_upload_complete(event->data.UploadCompleted.uc.cctx,
153 event->data.UploadCompleted.filename, 146 event->data.UploadCompleted.uri);
154 event->data.UploadCompleted.uri);
155 addLogEntry(_("Upload `%s' complete"),
156 event->data.UploadCompleted.filename);
157 gnunetgtk_notify(NOTIFY_NORMAL,
158 _("Upload `%s' complete"),
159 event->data.UploadCompleted.filename);
160 break; 147 break;
161 case FSUI_upload_error: 148 case FSUI_upload_error:
162 GE_LOG(ectx, 149 fs_upload_error(event->data.UploadError.uc.cctx);
163 GE_ERROR, 150 break;
164 _("Error while uploading: %s\n"), 151 case FSUI_upload_aborted:
165 event->data.UploadError.message); 152 fs_upload_error(event->data.UploadAborted.uc.cctx);
166 gnunetgtk_notify(NOTIFY_NORMAL, 153 break;
167 _("Error while uploading `%s'"), 154 case FSUI_upload_stopped:
168 event->data.UploadError.message); 155 fs_upload_stopped(event->data.UploadStopped.uc.cctx);
156 break;
157 case FSUI_upload_suspended:
158 fs_upload_stopped(event->data.UploadSuspended.uc.cctx);
159 break;
160 case FSUI_upload_started:
161 ret = fs_upload_started(event->data.UploadStarted.uc.pos,
162 event->data.UploadStarted.uc.pcctx,
163 event->data.UploadStarted.filename,
164 NULL,
165 event->data.UploadStarted.total,
166 0);
169 break; 167 break;
168 case FSUI_upload_resumed:
169 ret = fs_upload_started(event->data.UploadResumed.uc.pos,
170 event->data.UploadResumed.uc.pcctx,
171 event->data.UploadResumed.filename,
172 NULL, /* FIXME: maybe completed!? */
173 event->data.UploadResumed.total,
174 event->data.UploadResumed.completed);
175 break;
176
177 /* TODO: unindex events */
170 default: 178 default:
171 GE_BREAK(ectx, 0); 179 GE_BREAK(ectx, 0);
172 GE_LOG(ectx, 180 GE_LOG(ectx,
@@ -175,38 +183,26 @@ static void saveEventProcessor(void * arg) {
175 event->type); 183 event->type);
176 break; 184 break;
177 } 185 }
178 DEBUG_END(); 186 return ret;
179}
180
181/**
182 * FSUI event handler.
183 */
184static void * eventProcessor(void * unused,
185 const FSUI_Event * event) {
186 SEP_Closure cls;
187
188 cls.event = event;
189 cls.ret = NULL;
190 gtkSaveCall(&saveEventProcessor,
191 &cls);
192 return cls.ret;
193} 187}
194 188
195 189
196
197/** 190/**
198 * Setup the summary views (in particular the models 191 * Setup the summary views (in particular the models
199 * and the renderers). 192 * and the renderers).
200 */ 193 */
201static void fs_summary_start() { 194static void fs_summary_start() {
202 GtkComboBoxEntry * searchCB; 195 GtkComboBoxEntry * searchCB;
196 GtkWidget * uploadEntry;
203 GtkTreeView * searchList; 197 GtkTreeView * searchList;
204 GtkTreeView * downloadList; 198 GtkTreeView * downloadList;
199 GtkTreeView * uploadList;
205 GtkListStore * model; 200 GtkListStore * model;
206 GtkCellRenderer * renderer; 201 GtkCellRenderer * renderer;
207 GtkTreeViewColumn * column; 202 GtkTreeViewColumn * column;
208 int col; 203 int col;
209 204
205 /* search namespace selection setup */
210 searchCB 206 searchCB
211 = GTK_COMBO_BOX_ENTRY(glade_xml_get_widget(getMainXML(), 207 = GTK_COMBO_BOX_ENTRY(glade_xml_get_widget(getMainXML(),
212 "fssearchKeywordComboBoxEntry")); 208 "fssearchKeywordComboBoxEntry"));
@@ -221,6 +217,8 @@ static void fs_summary_start() {
221 GTK_TREE_MODEL(model)); 217 GTK_TREE_MODEL(model));
222 gtk_combo_box_entry_set_text_column(searchCB, 218 gtk_combo_box_entry_set_text_column(searchCB,
223 NS_SEARCH_DESCRIPTION); 219 NS_SEARCH_DESCRIPTION);
220
221 /* search summary setup */
224 searchList = GTK_TREE_VIEW(glade_xml_get_widget(getMainXML(), 222 searchList = GTK_TREE_VIEW(glade_xml_get_widget(getMainXML(),
225 "activeSearchesSummary")); 223 "activeSearchesSummary"));
226 search_summary = 224 search_summary =
@@ -262,7 +260,7 @@ static void fs_summary_start() {
262 gtk_tree_view_column_set_sort_column_id(column, SEARCH_SUMMARY_RESULT_COUNT); 260 gtk_tree_view_column_set_sort_column_id(column, SEARCH_SUMMARY_RESULT_COUNT);
263 gtk_tree_view_column_set_resizable(column, TRUE); 261 gtk_tree_view_column_set_resizable(column, TRUE);
264 262
265 263 /* download summary setup */
266 downloadList = GTK_TREE_VIEW(glade_xml_get_widget(getMainXML(), 264 downloadList = GTK_TREE_VIEW(glade_xml_get_widget(getMainXML(),
267 "activeDownloadsList")); 265 "activeDownloadsList"));
268 download_summary = 266 download_summary =
@@ -324,10 +322,56 @@ static void fs_summary_start() {
324 gtk_tree_view_column_set_reorderable(column, TRUE); 322 gtk_tree_view_column_set_reorderable(column, TRUE);
325 /*gtk_tree_view_column_set_sort_indicator(column, TRUE);*/ 323 /*gtk_tree_view_column_set_sort_indicator(column, TRUE);*/
326 gtk_tree_view_column_set_resizable(column, TRUE); 324 gtk_tree_view_column_set_resizable(column, TRUE);
325
326 /* upload summary setup */
327 uploadList = GTK_TREE_VIEW(glade_xml_get_widget(getMainXML(),
328 "activeUploadsList"));
329 upload_summary =
330 gtk_tree_store_new(UPLOAD_NUM,
331 G_TYPE_STRING, /* filename */
332 G_TYPE_INT, /* progress */
333 G_TYPE_STRING,
334 G_TYPE_POINTER); /* URI (as string) - after completion */
335 gtk_tree_view_set_model(uploadList,
336 GTK_TREE_MODEL(upload_summary));
337 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(uploadList),
338 GTK_SELECTION_MULTIPLE);
339 renderer = gtk_cell_renderer_progress_new();
340 col = gtk_tree_view_insert_column_with_attributes(uploadList,
341 -1,
342 _("Filename"),
343 renderer,
344 "text", UPLOAD_FILENAME,
345 "value", UPLOAD_PROGRESS,
346 NULL);
347 gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(uploadList,
348 col - 1),
349 TRUE);
350 renderer = gtk_cell_renderer_text_new();
351 col = gtk_tree_view_insert_column_with_attributes(uploadList,
352 -1,
353 _("URI"),
354 renderer,
355 "text", UPLOAD_URISTRING,
356 NULL);
357 gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(uploadList,
358 col - 1),
359 TRUE);
360
361 /* upload entry setup */
362 uploadEntry
363 = glade_xml_get_widget(getMainXML(),
364 "uploadFilenameComboBoxEntry");
365
366 model = gtk_list_store_new(1, G_TYPE_STRING);
367 gtk_combo_box_set_model(GTK_COMBO_BOX(uploadEntry),
368 GTK_TREE_MODEL(model));
369 gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(uploadEntry),
370 0);
327} 371}
328 372
329/** 373/**
330 * Shutdown. 374 * Shutdown the summary dialogs.
331 */ 375 */
332static void fs_summary_stop() { 376static void fs_summary_stop() {
333 GtkComboBox * searchCB; 377 GtkComboBox * searchCB;
@@ -343,8 +387,6 @@ static void fs_summary_stop() {
343 387
344 388
345 389
346
347
348void init_fs(struct GE_Context * e, 390void init_fs(struct GE_Context * e,
349 struct GC_Configuration * c) { 391 struct GC_Configuration * c) {
350 GtkWidget * tab; 392 GtkWidget * tab;
@@ -366,14 +408,13 @@ void init_fs(struct GE_Context * e,
366 ctx = FSUI_start(ectx, 408 ctx = FSUI_start(ectx,
367 cfg, 409 cfg,
368 "gnunet-gtk", 410 "gnunet-gtk",
369 128, 411 128, /* FIXME: allow user to configure download parallelism */
370 YES, 412 YES,
371 &eventProcessor, 413 &eventProcessor,
372 NULL); 414 NULL);
373 fs_collection_start(ectx, cfg); 415 fs_collection_start();
374 fs_summary_start(); 416 fs_summary_start();
375 fs_upload_start(ectx, cfg); 417 fs_namespace_start();
376 fs_namespace_start(ectx, cfg);
377} 418}
378 419
379void done_fs() { 420void done_fs() {
@@ -384,9 +425,7 @@ void done_fs() {
384 "fsnotebook"); 425 "fsnotebook");
385 gtk_widget_hide(tab); 426 gtk_widget_hide(tab);
386 fs_summary_stop(); 427 fs_summary_stop();
387 fs_collection_stop();
388 fs_namespace_stop(); 428 fs_namespace_stop();
389 fs_upload_stop();
390 FSUI_stop(ctx); 429 FSUI_stop(ctx);
391} 430}
392 431