aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/fs/search.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/fs/search.c')
-rw-r--r--src/plugins/fs/search.c129
1 files changed, 128 insertions, 1 deletions
diff --git a/src/plugins/fs/search.c b/src/plugins/fs/search.c
index d1e5676a..a851b6cb 100644
--- a/src/plugins/fs/search.c
+++ b/src/plugins/fs/search.c
@@ -203,6 +203,123 @@ on_search_copy_uri_activate(void * cls,
203 return FALSE; 203 return FALSE;
204} 204}
205 205
206
207#ifndef MINGW
208static char *
209selectFile() {
210 GladeXML * uploadXML;
211 GtkFileChooser * dialog;
212 char * ret;
213
214 uploadXML
215 = glade_xml_new(getGladeFileName(),
216 "directorySaveDialog",
217 PACKAGE_NAME);
218 connectGladeWithPlugins(uploadXML);
219 dialog = GTK_FILE_CHOOSER(glade_xml_get_widget(uploadXML,
220 "directorySaveDialog"));
221 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL)
222 ret = gtk_file_chooser_get_filename(dialog);
223 else
224 ret = NULL;
225 gtk_widget_destroy(GTK_WIDGET(dialog));
226 UNREF(uploadXML);
227 return ret;
228}
229
230#else /* MINGW */
231
232static char *
233selectFile() {
234 return plibc_ChooseFile(_("Choose the name under which you want to save the search results."),
235 OFN_SHAREAWARE);
236}
237#endif /* MINGW */
238
239static int
240on_save_search_activate(void * cls,
241 GtkWidget * searchEntry) {
242 SearchList * list = cls;
243 char * name;
244 char * directory;
245 unsigned long long dir_len;
246 unsigned int fis_size;
247 ECRS_FileInfo * fis;
248 struct ECRS_MetaData * meta;
249 GtkTreeModel * model;
250 GtkTreeIter iter;
251 unsigned int pos;
252
253 model = gtk_tree_view_get_model(list->treeview);
254 if (TRUE != gtk_tree_model_get_iter_first(model, &iter)) {
255 addLogEntry(_("No search results yet, cannot save!"));
256 return FALSE;
257 }
258
259 name = selectFile("");
260 if (name == NULL)
261 return FALSE;
262 fis = NULL;
263 fis_size = 0;
264 GROW(fis,
265 fis_size,
266 list->resultsReceived);
267 pos = 0;
268 do {
269 if (pos == fis_size)
270 GROW(fis,
271 fis_size,
272 pos + 1);
273 gtk_tree_model_get(model,
274 &iter,
275 SEARCH_URI, &fis[pos].uri,
276 SEARCH_META, &fis[pos].meta,
277 -1);
278 pos++;
279 } while (gtk_tree_model_iter_next(model,
280 &iter));
281 meta = ECRS_createMetaData();
282 ECRS_addToMetaData(meta,
283 EXTRACTOR_KEYWORDS,
284 list->searchString);
285 ECRS_addToMetaData(meta,
286 EXTRACTOR_DESCRIPTION,
287 _("Saved search results"));
288 ECRS_addToMetaData(meta,
289 EXTRACTOR_SOFTWARE,
290 "gnunet-gtk");
291 if (OK != ECRS_createDirectory(NULL,
292 &directory,
293 &dir_len,
294 fis_size,
295 fis,
296 meta)) {
297 addLogEntry(_("Internal error."));
298 GE_BREAK(NULL, 0);
299 ECRS_freeMetaData(meta);
300 GROW(fis,
301 fis_size,
302 0);
303 FREE(name);
304 return FALSE;
305 }
306 ECRS_freeMetaData(meta);
307 GROW(fis,
308 fis_size,
309 0);
310 if (OK != disk_file_write(NULL,
311 name,
312 directory,
313 dir_len,
314 "644")) {
315 addLogEntry(_("Error writing file `%s'."),
316 name);
317 }
318 FREE(directory);
319 FREE(name);
320 return FALSE;
321}
322
206static gint 323static gint
207search_click_handler(void * cls, 324search_click_handler(void * cls,
208 GdkEvent *event) { 325 GdkEvent *event) {
@@ -220,6 +337,7 @@ search_click_handler(void * cls,
220 return FALSE; 337 return FALSE;
221 list->last_x = event_button->x; 338 list->last_x = event_button->x;
222 list->last_y = event_button->y; 339 list->last_y = event_button->y;
340 menu = GTK_MENU(gtk_menu_new());
223 entry = gtk_menu_item_new_with_label(_("_Copy URI to Clipboard")); 341 entry = gtk_menu_item_new_with_label(_("_Copy URI to Clipboard"));
224 g_signal_connect_swapped (entry, 342 g_signal_connect_swapped (entry,
225 "activate", 343 "activate",
@@ -228,7 +346,16 @@ search_click_handler(void * cls,
228 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(entry))), 346 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(entry))),
229 TRUE); 347 TRUE);
230 gtk_widget_show(entry); 348 gtk_widget_show(entry);
231 menu = GTK_MENU(gtk_menu_new()); 349 gtk_menu_shell_append(GTK_MENU_SHELL(menu),
350 entry);
351 entry = gtk_menu_item_new_with_label(_("_Save results as directory"));
352 g_signal_connect_swapped (entry,
353 "activate",
354 G_CALLBACK(on_save_search_activate),
355 list);
356 gtk_label_set_use_underline(GTK_LABEL(gtk_bin_get_child(GTK_BIN(entry))),
357 TRUE);
358 gtk_widget_show(entry);
232 gtk_menu_shell_append(GTK_MENU_SHELL(menu), 359 gtk_menu_shell_append(GTK_MENU_SHELL(menu),
233 entry); 360 entry);
234 gtk_menu_popup (menu, 361 gtk_menu_popup (menu,