aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/fs/upload.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/fs/upload.c')
-rw-r--r--src/plugins/fs/upload.c231
1 files changed, 89 insertions, 142 deletions
diff --git a/src/plugins/fs/upload.c b/src/plugins/fs/upload.c
index b4bf68cb..500830ba 100644
--- a/src/plugins/fs/upload.c
+++ b/src/plugins/fs/upload.c
@@ -186,7 +186,7 @@ fs_upload_started(struct FSUI_UploadList * fsui,
186 return ret; 186 return ret;
187} 187}
188 188
189/* *************** Glade UI event handling ************** */ 189/* *************** user upload event handling ************** */
190 190
191 191
192void on_selectAlternativePreviewButton_selection_changed_fs(GtkWidget * preview, 192void on_selectAlternativePreviewButton_selection_changed_fs(GtkWidget * preview,
@@ -224,50 +224,17 @@ void on_metaDataDialogMetaDataAddButton_clicked_fs(gpointer dummy,
224 "metaDataDialogMetaDataList"); 224 "metaDataDialogMetaDataList");
225} 225}
226 226
227typedef struct {
228 int anon;
229 int doRec;
230 int doIndex;
231 int deepIndex;
232 const char * filename;
233 struct ECRS_URI * keywordURI;
234 struct ECRS_URI * gkeywordURI;
235 struct ECRS_MetaData * meta;
236 struct FSUI_UploadList * fsui_list; // FIXME: use this!
237} UploadClosure;
238
239static void * doUpload(void * cls) {
240 UploadClosure * uc = cls;
241
242 uc->fsui_list = FSUI_startUpload(ctx,
243 uc->filename,
244 (DirectoryScanCallback) &disk_directory_scan,
245 ectx,
246 uc->anon,
247 1000, /* FIXME: priority */
248 uc->doIndex,
249 YES, /* FIXME: do extract */
250 uc->deepIndex,
251 uc->meta,
252 uc->gkeywordURI,
253 uc->keywordURI);
254 return NULL;
255}
256
257void on_fsinsertuploadbutton_clicked_fs(gpointer dummy, 227void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
258 GtkWidget * uploadButton) { 228 GtkWidget * uploadButton) {
259 UploadClosure uc;
260 const char * filenamerest; 229 const char * filenamerest;
261 GtkWidget * uploadLine; 230 const char * filename;
262 GtkWidget * entry;
263 GtkWidget * dialog; 231 GtkWidget * dialog;
264 GtkWidget * recBut;
265 GtkWidget * idxBut;
266 GtkWidget * deepIndex;
267 EXTRACTOR_ExtractorList * extractors; 232 EXTRACTOR_ExtractorList * extractors;
268 char * config; 233 char * config;
234 struct ECRS_URI * keywordURI;
235 struct ECRS_URI * gkeywordURI;
236 struct ECRS_MetaData * meta;
269 237
270 DEBUG_BEGIN();
271 extractors = EXTRACTOR_loadDefaultLibraries(); 238 extractors = EXTRACTOR_loadDefaultLibraries();
272 config = NULL; 239 config = NULL;
273 GC_get_configuration_value_string(cfg, 240 GC_get_configuration_value_string(cfg,
@@ -281,10 +248,8 @@ void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
281 FREE(config); 248 FREE(config);
282 } 249 }
283 250
284 uploadLine = glade_xml_get_widget(getMainXML(), 251 filename = getEntryLineValue(getMainXML(),
285 "uploadFilenameComboBoxEntry"); 252 "uploadFilenameComboBoxEntry");
286 entry = gtk_bin_get_child(GTK_BIN(uploadLine));
287 uc.filename = gtk_entry_get_text(GTK_ENTRY(entry));
288 metaXML 253 metaXML
289 = glade_xml_new(getGladeFileName(), 254 = glade_xml_new(getGladeFileName(),
290 "metaDataDialog", 255 "metaDataDialog",
@@ -292,155 +257,137 @@ void on_fsinsertuploadbutton_clicked_fs(gpointer dummy,
292 connectGladeWithPlugins(metaXML); 257 connectGladeWithPlugins(metaXML);
293 dialog = glade_xml_get_widget(metaXML, 258 dialog = glade_xml_get_widget(metaXML,
294 "metaDataDialog"); 259 "metaDataDialog");
295 uc.meta = ECRS_createMetaData(); 260 meta = ECRS_createMetaData();
296 ECRS_extractMetaData(ectx, 261 ECRS_extractMetaData(ectx,
297 uc.meta, 262 meta,
298 uc.filename, 263 filename,
299 extractors); 264 extractors);
300 EXTRACTOR_removeAll(extractors); 265 EXTRACTOR_removeAll(extractors);
301 filenamerest = &uc.filename[strlen(uc.filename)-1]; 266 filenamerest = &filename[strlen(filename)-1];
302 while ( (filenamerest > uc.filename) && 267 while ( (filenamerest > filename) &&
303 (filenamerest[-1] != DIR_SEPARATOR) ) 268 (filenamerest[-1] != DIR_SEPARATOR) )
304 filenamerest--; 269 filenamerest--;
305 ECRS_addToMetaData(uc.meta, 270 ECRS_addToMetaData(meta,
306 EXTRACTOR_FILENAME, 271 EXTRACTOR_FILENAME,
307 filenamerest); 272 filenamerest);
308 createMetaDataListTreeView(metaXML, 273 createMetaDataListTreeView(metaXML,
309 "metaDataDialogMetaDataList", 274 "metaDataDialogMetaDataList",
310 "previewImage", 275 "previewImage",
311 uc.meta); 276 meta);
312 uc.keywordURI = ECRS_metaDataToUri(uc.meta); 277 keywordURI = ECRS_metaDataToUri(meta);
313 ECRS_freeMetaData(uc.meta); 278 ECRS_freeMetaData(meta);
314 createKeywordListTreeView(metaXML, 279 createKeywordListTreeView(metaXML,
315 "metaDataDialogKeywordList", 280 "metaDataDialogKeywordList",
316 uc.keywordURI); 281 keywordURI);
317 ECRS_freeUri(uc.keywordURI); 282 ECRS_freeUri(keywordURI);
318 createMetaTypeComboBox(metaXML, 283 createMetaTypeComboBox(metaXML,
319 "metaDataDialogMetaTypeComboBox"); 284 "metaDataDialogMetaTypeComboBox");
320 gtk_dialog_set_default_response(GTK_DIALOG(dialog), 285 gtk_dialog_set_default_response(GTK_DIALOG(dialog),
321 GTK_RESPONSE_OK); 286 GTK_RESPONSE_OK);
322 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) { 287 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) {
323 addLogEntry(_("Uploading `%s'"), filenamerest); 288 meta = getMetaDataFromList(metaXML,
324 289 "metaDataDialogMetaDataList",
325 recBut = glade_xml_get_widget(getMainXML(), 290 "previewImage");
326 "scopeRecursiveButton"); 291 keywordURI = getKeywordURIFromList(metaXML,
327 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(recBut))) 292 "metaDataDialogKeywordList");
328 uc.doRec = YES; 293 gkeywordURI = ECRS_stringToUri(ectx,
329 else 294 ECRS_URI_PREFIX
330 uc.doRec = NO; 295 ECRS_SEARCH_INFIX);
331 idxBut = glade_xml_get_widget(getMainXML(), 296 FSUI_startUpload(ctx,
332 "indexbutton"); 297 filename,
333 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(idxBut))) 298 (DirectoryScanCallback) &disk_directory_scan,
334 uc.doIndex = YES; 299 ectx,
335 else 300 getSpinButtonValue(getMainXML(),
336 uc.doIndex = NO; 301 "uploadAnonymityLevelSpinButton"),
337 302 getSpinButtonValue(getMainXML(),
338 uc.meta = getMetaDataFromList(metaXML, 303 "contentPrioritySpinButton"),
339 "metaDataDialogMetaDataList", 304 getToggleButtonValue(getMainXML(),
340 "previewImage"); 305 "indexbutton"),
341 uc.keywordURI = getKeywordURIFromList(metaXML, 306 getToggleButtonValue(getMainXML(),
342 "metaDataDialogKeywordList"); 307 "doExtractCheckButton"),
343 uc.anon = getSpinButtonValue(getMainXML(), 308 getToggleButtonValue(getMainXML(),
344 "uploadAnonymityLevelSpinButton"); 309 "deepIndexCheckButton"),
345 deepIndex = glade_xml_get_widget(getMainXML(), 310 meta,
346 "deepIndexCheckButton"); 311 gkeywordURI,
347 uc.deepIndex = (TRUE == gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(deepIndex))) ? YES : NO; 312 keywordURI);
348 uc.gkeywordURI = ECRS_stringToUri(ectx, 313 ECRS_freeMetaData(meta);
349 ECRS_URI_PREFIX 314 ECRS_freeUri(gkeywordURI);
350 ECRS_SEARCH_INFIX); 315 ECRS_freeUri(keywordURI);
351 run_with_save_calls(&doUpload,
352 &uc);
353 ECRS_freeMetaData(uc.meta);
354 ECRS_freeUri(uc.gkeywordURI);
355 ECRS_freeUri(uc.keywordURI);
356 } 316 }
357 gtk_widget_destroy (dialog); 317 gtk_widget_destroy (dialog);
358 UNREF(metaXML); 318 UNREF(metaXML);
359 metaXML = NULL; 319 metaXML = NULL;
360 DEBUG_END();
361} 320}
362 321
363static char * selectFile(const char *oldfilename) {
364#ifndef MINGW 322#ifndef MINGW
365 GtkWidget *dialog; 323
324static char *
325selectFile(const char * oldfilename) {
366 GladeXML * uploadXML; 326 GladeXML * uploadXML;
367 GtkWidget * recBut; 327 GtkFileChooser * dialog;
368 char *ret; 328 char * ret;
369 329
370 uploadXML 330 uploadXML
371 = glade_xml_new(getGladeFileName(), 331 = glade_xml_new(getGladeFileName(),
372 "uploadfilechooserdialog", 332 "uploadfilechooserdialog",
373 PACKAGE_NAME); 333 PACKAGE_NAME);
374 connectGladeWithPlugins(uploadXML); 334 connectGladeWithPlugins(uploadXML);
375 dialog = glade_xml_get_widget(uploadXML, 335 dialog = GTK_FILE_CHOOSER(glade_xml_get_widget(uploadXML,
376 "uploadfilechooserdialog"); 336 "uploadfilechooserdialog"));
377 337 gtk_file_chooser_set_filename(dialog,
378 recBut = glade_xml_get_widget(getMainXML(), 338 oldfilename);
379 "scopeRecursiveButton"); 339 if (getToggleButtonValue(getMainXML(),
380 340 "scopeRecursiveButton"))
381 /* show the user last used dir */ 341 gtk_file_chooser_set_action(dialog,
382 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
383 oldfilename);
384
385 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(recBut)))
386 gtk_file_chooser_set_action(GTK_FILE_CHOOSER(dialog),
387 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); 342 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
388 343 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL)
389 if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) { 344 ret = gtk_file_chooser_get_filename(dialog);
390 char * filename; 345 else
391
392 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
393 ret = STRDUP(filename);
394 g_free(filename);
395 } else
396 ret = NULL; 346 ret = NULL;
397 347 gtk_widget_destroy(GTK_WIDGET(dialog));
398 gtk_widget_destroy (dialog);
399 UNREF(uploadXML); 348 UNREF(uploadXML);
400 return ret; 349 return ret;
350}
351
401#else /* MINGW */ 352#else /* MINGW */
402 GtkWidget *fileBut;
403 char *fn;
404
405 fileBut = glade_xml_get_widget(getMainXML(),
406 "scopeFileOnlyButton");
407 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(fileBut)))
408 fn = plibc_ChooseFile(_("Choose the file you want to publish."),
409 OFN_FILEMUSTEXIST | OFN_SHAREAWARE);
410 else
411 fn = plibc_ChooseDir(_("Choose the directory you want to publish."),
412 BIF_USENEWUI | BIF_SHAREABLE | BIF_NONEWFOLDERBUTTON);
413 353
414 return fn; 354static char *
415#endif /* MINGW */ 355selectFile(const char * oldfilename) {
356 if (getToggleButtonValue(getMainXML(),
357 "scopeFileOnlyButton"))
358 return plibc_ChooseFile(_("Choose the file you want to publish."),
359 OFN_FILEMUSTEXIST | OFN_SHAREAWARE);
360 return plibc_ChooseDir(_("Choose the directory you want to publish."),
361 BIF_USENEWUI | BIF_SHAREABLE | BIF_NONEWFOLDERBUTTON);
416} 362}
363#endif /* MINGW */
417 364
418void on_mainFileSharingInsertBrowseButton_clicked_fs(GtkWidget * browseButton, 365void on_mainFileSharingInsertBrowseButton_clicked_fs(GtkWidget * browseButton,
419 gpointer dummy) { 366 gpointer dummy) {
420 char * filename; 367 char * filename;
421 const char *oldfilename; 368 const char *oldfilename;
422 GtkWidget * uploadLine; 369 GtkWidget * uploadLine;
423 GtkWidget * entry; 370 GtkEntry * entry;
424 GtkListStore * model; 371 GtkListStore * model;
425 GtkTreeIter iter; 372 GtkTreeIter iter;
426 373
427 uploadLine = glade_xml_get_widget(getMainXML(), 374 uploadLine = glade_xml_get_widget(getMainXML(),
428 "uploadFilenameComboBoxEntry"); 375 "uploadFilenameComboBoxEntry");
429 entry = gtk_bin_get_child(GTK_BIN(uploadLine)); 376 entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(uploadLine)));
430 oldfilename = gtk_entry_get_text(GTK_ENTRY(entry)); 377 oldfilename = gtk_entry_get_text(entry);
431 if ((filename = selectFile(oldfilename))) { 378 if (NULL == (filename = selectFile(oldfilename)))
432 gtk_entry_set_text(GTK_ENTRY(entry), 379 return;
433 filename); 380 gtk_entry_set_text(entry,
434 model = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(uploadLine))); 381 filename);
435 gtk_list_store_prepend(model, 382 model = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(uploadLine)));
436 &iter); 383 gtk_list_store_prepend(model,
437 gtk_list_store_set(model, 384 &iter);
438 &iter, 385 gtk_list_store_set(model,
439 0, 386 &iter,
440 filename, 387 0,
441 -1); 388 filename,
442 free(filename); 389 -1);
443 } 390 free(filename);
444} 391}
445 392
446/* end of upload.c */ 393/* end of upload.c */