X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fdialog%2Focaldialogs.cpp;h=ba572336cf50df620cc7555f6a4d18f1b270afeb;hb=9acbda558d50be3b21e4b384be758bc12a461072;hp=0c20ffa43ae2058cbe988dd3f97fed28d3101736;hpb=23e15eec955c0a73ba9f94178dbd0e6e82886ed5;p=inkscape.git diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp index 0c20ffa43..ba572336c 100644 --- a/src/ui/dialog/ocaldialogs.cpp +++ b/src/ui/dialog/ocaldialogs.cpp @@ -1,7 +1,7 @@ -/** - * Implementation of the ocal dialog interfaces defined in ocaldialog.h - * - * Authors: +/** @file + * @brief Open Clip Art Library integration dialogs - implementation + */ +/* Authors: * Bruno Dilly * Other dudes from The Inkscape Organization * @@ -24,6 +24,8 @@ #include "interface.h" #include "gc-core.h" #include +#include "io/sys.h" +#include "preferences.h" namespace Inkscape { @@ -72,7 +74,7 @@ FileExportToOCALDialog::FileExportToOCALDialog(Gtk::Window &parentWindow, /* Set our dialog type (save, export, etc...)*/ dialogType = fileTypes; Gtk::VBox *vbox = get_vbox(); - + Gtk::Label *fileLabel = new Gtk::Label(_("File")); fileNameEntry = new Gtk::Entry(); @@ -192,7 +194,7 @@ FileExportToOCALPasswordDialog::FileExportToOCALPasswordDialog(Gtk::Window &pare passBox.pack_start(*passLabel); passBox.pack_start(*passwordEntry, Gtk::PACK_EXPAND_WIDGET, 3); vbox->pack_start(passBox); - + add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); set_default(*add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK)); @@ -277,27 +279,37 @@ void FileListViewText::on_cursor_changed() GnomeVFSFileSize bytes_written; GnomeVFSResult result; guint8 buffer[8192]; + Glib::ustring fileUrl; + // FIXME: this would be better as a per-user OCAL cache of files + // instead of filling /tmp with downloads. + // // create file path - const std::string tmptemplate = "ocal-XXXXXX"; + const std::string tmptemplate = "ocal-"; std::string tmpname; - int fd = Glib::file_open_tmp(tmpname, tmptemplate); - if (fd<0) return; + int fd = Inkscape::IO::file_open_tmp(tmpname, tmptemplate); + if (fd<0) { + g_warning("Error creating temp file"); + return; + } close(fd); - Glib::ustring myFilename = Glib::path_get_dirname(tmpname); - myFilename.append(G_DIR_SEPARATOR_S); + // make sure we don't collide with other users on the same machine + myFilename = tmpname; + myFilename.append("-"); myFilename.append(get_text(posArray[0], 2)); + // rename based on original image's name, retaining extension if (rename(tmpname.c_str(),myFilename.c_str())<0) { unlink(tmpname.c_str()); g_warning("Error creating destination file '%s': %s", myFilename.c_str(), strerror(errno)); - return; + goto failquit; } //get file url - Glib::ustring fileUrl = get_text(posArray[0], 1); //http url + fileUrl = get_text(posArray[0], 1); //http url + //Inkscape::Preferences *prefs = Inkscape::Preferences::get(); //Glib::ustring fileUrl = "dav://"; //dav url - //fileUrl.append(prefs_get_string_attribute("options.ocalurl", "str")); + //fileUrl.append(prefs->getString("/options/ocalurl/str")); //fileUrl.append("/dav.php/"); //fileUrl.append(get_text(posArray[0], 3)); //author dir //fileUrl.append("/"); @@ -314,12 +326,12 @@ void FileListViewText::on_cursor_changed() } if (result != GNOME_VFS_OK) { g_warning("Error creating temp file '%s': %s", myFilename.c_str(), gnome_vfs_result_to_string(result)); - return; + goto fail; } result = gnome_vfs_open (&from_handle, fileUrl.c_str(), GNOME_VFS_OPEN_READ); if (result != GNOME_VFS_OK) { g_warning("Could not find the file in Open Clip Art Library."); - return; + goto fail; } // copy the file while (1) { @@ -331,29 +343,34 @@ void FileListViewText::on_cursor_changed() } if (result != GNOME_VFS_OK) { g_warning("%s", gnome_vfs_result_to_string(result)); - return; + goto fail; } result = gnome_vfs_write (to_handle, buffer, bytes_read, &bytes_written); if (result != GNOME_VFS_OK) { g_warning("%s", gnome_vfs_result_to_string(result)); - return; + goto fail; } if (bytes_read != bytes_written){ g_warning("Bytes read not equal to bytes written"); - return; + goto fail; } } } myPreview->showImage(myFilename); myLabel->set_text(get_text(posArray[0], 4)); #endif + return; +fail: + unlink(myFilename.c_str()); +failquit: + myFilename = ""; } /* * Callback for row activated */ -void FileListViewText::on_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) +void FileListViewText::on_row_activated(const Gtk::TreeModel::Path& /*path*/, Gtk::TreeViewColumn* /*column*/) { this->on_cursor_changed(); myButton->activate(); @@ -368,6 +385,8 @@ Glib::ustring FileListViewText::getFilename() return myFilename; } + +#ifdef WITH_GNOME_VFS /** * Read callback for xmlReadIO(), used below */ @@ -388,6 +407,8 @@ static int vfs_read_callback (GnomeVFSHandle *handle, char* buf, int nb) return -1; } } +#endif + /** * Callback for user input into searchTagEntry @@ -399,11 +420,12 @@ void FileImportFromOCALDialog::searchTagEntryChangedCallback() notFoundLabel->hide(); descriptionLabel->set_text(""); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::ustring searchTag = searchTagEntry->get_text(); // create the ocal uri to get rss feed Glib::ustring uri = "http://"; - uri.append(prefs_get_string_attribute("options.ocalurl", "str")); + uri.append(prefs->getString("/options/ocalurl/str")); uri.append("/media/feed/rss/"); uri.append(searchTag); if (!Glib::get_charset()) //If we are not utf8 @@ -418,13 +440,13 @@ void FileImportFromOCALDialog::searchTagEntryChangedCallback() result = gnome_vfs_open (&from_handle, uri.c_str(), GNOME_VFS_OPEN_READ); if (result != GNOME_VFS_OK) { - sp_ui_error_dialog(_("Failed to receive the Open Clip Art Library RSS feed. Verify if the server name is correct in Configuration->Misc (e.g.: openclipart.org)")); + sp_ui_error_dialog(_("Failed to receive the Open Clip Art Library RSS feed. Verify if the server name is correct in Configuration->Import/Export (e.g.: openclipart.org)")); return; } // create the resulting xml document tree // this initialize the library and test mistakes between compiled and shared library used - LIBXML_TEST_VERSION + LIBXML_TEST_VERSION xmlDoc *doc = NULL; xmlNode *root_element = NULL; @@ -436,7 +458,7 @@ void FileImportFromOCALDialog::searchTagEntryChangedCallback() g_warning("Failed to parse %s\n", uri.c_str()); return; } - + // get the root element node root_element = xmlDocGetRootElement(doc); @@ -460,11 +482,12 @@ void FileImportFromOCALDialog::searchTagEntryChangedCallback() // free the global variables that may have been allocated by the parser xmlCleanupParser(); return; -#endif +#endif } + /** - * Prints the names of the all the xml elements + * Prints the names of the all the xml elements * that are siblings or children of a given xml node */ void FileImportFromOCALDialog::print_xml_element_names(xmlNode * a_node) @@ -509,11 +532,11 @@ void FileImportFromOCALDialog::print_xml_element_names(xmlNode * a_node) /** * Constructor. Not called directly. Use the factory. */ -FileImportFromOCALDialog::FileImportFromOCALDialog(Gtk::Window& parentWindow, - const Glib::ustring &dir, - FileDialogType fileTypes, - const Glib::ustring &title) : - FileDialogOCALBase(title, parentWindow) +FileImportFromOCALDialog::FileImportFromOCALDialog(Gtk::Window& parentWindow, + const Glib::ustring &/*dir*/, + FileDialogType fileTypes, + const Glib::ustring &title) : + FileDialogOCALBase(title, parentWindow) { // Initalize to Autodetect extension = NULL; @@ -522,11 +545,13 @@ FileImportFromOCALDialog::FileImportFromOCALDialog(Gtk::Window& parentWindow, dialogType = fileTypes; Gtk::VBox *vbox = get_vbox(); - Gtk::Label *tagLabel = new Gtk::Label(_("Search Tag")); + Gtk::Label *tagLabel = new Gtk::Label(_("Search for:")); notFoundLabel = new Gtk::Label(_("No files matched your search")); descriptionLabel = new Gtk::Label(); - descriptionLabel->set_max_width_chars(60); + descriptionLabel->set_max_width_chars(260); + descriptionLabel->set_size_request(500, -1); descriptionLabel->set_single_line_mode(false); + descriptionLabel->set_line_wrap(true); messageBox.pack_start(*notFoundLabel); descriptionBox.pack_start(*descriptionLabel); searchTagEntry = new Gtk::Entry(); @@ -549,7 +574,7 @@ FileImportFromOCALDialog::FileImportFromOCALDialog(Gtk::Window& parentWindow, listScrolledWindow.add(*filesList); // only show the scrollbars when they are necessary: listScrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); - filesList->set_column_title(0, _("Files Found")); + filesList->set_column_title(0, _("Files found")); listScrolledWindow.set_size_request(400, 180); filesList->get_column(1)->set_visible(false); // file url filesList->get_column(2)->set_visible(false); // tmp file path @@ -557,7 +582,7 @@ FileImportFromOCALDialog::FileImportFromOCALDialog(Gtk::Window& parentWindow, filesList->get_column(4)->set_visible(false); // file description filesBox.pack_start(listScrolledWindow); filesBox.pack_start(*filesPreview); - vbox->pack_start(tagBox); + vbox->pack_start(tagBox, false, false); vbox->pack_start(messageBox); vbox->pack_start(filesBox); vbox->pack_start(descriptionBox);