diff options
Diffstat (limited to 'src/plugins/fs/upload.c')
-rw-r--r-- | src/plugins/fs/upload.c | 231 |
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 | ||
192 | void on_selectAlternativePreviewButton_selection_changed_fs(GtkWidget * preview, | 192 | void 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 | ||
227 | typedef 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 | |||
239 | static 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 | |||
257 | void on_fsinsertuploadbutton_clicked_fs(gpointer dummy, | 227 | void 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 | ||
363 | static char * selectFile(const char *oldfilename) { | ||
364 | #ifndef MINGW | 322 | #ifndef MINGW |
365 | GtkWidget *dialog; | 323 | |
324 | static char * | ||
325 | selectFile(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; | 354 | static char * |
415 | #endif /* MINGW */ | 355 | selectFile(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 | ||
418 | void on_mainFileSharingInsertBrowseButton_clicked_fs(GtkWidget * browseButton, | 365 | void 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 */ |