diff options
Diffstat (limited to 'src/plugins/fs/fs.c')
-rw-r--r-- | src/plugins/fs/fs.c | 213 |
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 | ||
43 | DownloadList * download_head; | 43 | DownloadList * download_head; |
44 | 44 | ||
45 | UploadList * upload_head; | ||
46 | |||
45 | GtkListStore * search_summary; | 47 | GtkListStore * search_summary; |
46 | 48 | ||
47 | GtkTreeStore * download_summary; | 49 | GtkTreeStore * download_summary; |
48 | 50 | ||
49 | typedef struct { | 51 | GtkTreeStore * upload_summary; |
50 | const FSUI_Event * event; | ||
51 | void * ret; | ||
52 | } SEP_Closure; | ||
53 | 52 | ||
54 | static void saveEventProcessor(void * arg) { | 53 | static 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 | */ | ||
184 | static 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 | */ |
201 | static void fs_summary_start() { | 194 | static 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 | */ |
332 | static void fs_summary_stop() { | 376 | static 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 | |||
348 | void init_fs(struct GE_Context * e, | 390 | void 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 | ||
379 | void done_fs() { | 420 | void 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 | ||