summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b1a768e)
raw | patch | inline | side by side (parent: b1a768e)
author | gouldtj <gouldtj@users.sourceforge.net> | |
Wed, 27 Jun 2007 06:29:41 +0000 (06:29 +0000) | ||
committer | gouldtj <gouldtj@users.sourceforge.net> | |
Wed, 27 Jun 2007 06:29:41 +0000 (06:29 +0000) |
Adding in the ability to open files. Which required some changes. But,
now everything seems happy. Can't break it all anymore.
now everything seems happy. Can't break it all anymore.
src/extension/implementation/script.cpp | patch | blob | history | |
src/extension/implementation/script.h | patch | blob | history |
index f8cdfd9f2c17e063774a10300a931b0f4ed8f031..e4a7c57475cebb5f5d51ec43eff8bd9916cf09b3 100644 (file)
#include "../system.h"
#include "extension/effect.h"
#include "extension/output.h"
+#include "extension/input.h"
#include "extension/db.h"
#include "script.h"
#include "dialogs/dialog-events.h"
Script::prefs_input(Inkscape::Extension::Input *module,
const gchar *filename)
{
- /*return module->autogui(); */
- return NULL;
+ return module->autogui(NULL, NULL);
}
Script::open(Inkscape::Extension::Input *module,
const gchar *filenameArg)
{
-#if 0
- Glib::ustring filename = filenameArg;
-
- gchar *tmpname;
+ std::list<std::string> params;
// FIXME: process the GError instead of passing NULL
- gint tempfd = g_file_open_tmp("ink_ext_XXXXXX", &tmpname, NULL);
- if (tempfd == -1) {
- /* Error, couldn't create temporary filename */
- if (errno == EINVAL) {
- /* The last six characters of template were not XXXXXX. Now template is unchanged. */
- perror("Extension::Script: template for filenames is misconfigured.\n");
- exit(-1);
- } else if (errno == EEXIST) {
- /* Now the contents of template are undefined. */
- perror("Extension::Script: Could not create a unique temporary filename\n");
- return NULL;
- } else {
- perror("Extension::Script: Unknown error creating temporary filename\n");
- exit(-1);
- }
+ std::string tempfilename_out;
+ int tempfd_out = 0;
+ try {
+ tempfd_out = Glib::file_open_tmp(tempfilename_out, "ink_ext_XXXXXX");
+ } catch (...) {
+ /// \todo Popup dialog here
+ return NULL;
}
- Glib::ustring tempfilename_out = tmpname;
- g_free(tmpname);
-
- gsize bytesRead = 0;
- gsize bytesWritten = 0;
- GError *error = NULL;
- Glib::ustring local_filename =
- g_filename_from_utf8( filename.c_str(), -1,
- &bytesRead, &bytesWritten, &error);
+ std::string lfilename = Glib::filename_from_utf8(filenameArg);
- int data_read = execute(command, local_filename, tempfilename_out);
+ file_listener fileout;
+ int data_read = execute(command, params, lfilename, fileout);
+ fileout.toFile(tempfilename_out);
- SPDocument *mydoc = NULL;
+ SPDocument * mydoc = NULL;
if (data_read > 10) {
if (helper_extension.size()==0) {
mydoc = Inkscape::Extension::open(
- Inkscape::Extension::db.get(SP_MODULE_KEY_INPUT_SVG),
- tempfilename_out.c_str());
+ Inkscape::Extension::db.get(SP_MODULE_KEY_INPUT_SVG),
+ tempfilename_out.c_str());
} else {
mydoc = Inkscape::Extension::open(
- Inkscape::Extension::db.get(helper_extension.c_str()),
- tempfilename_out.c_str());
+ Inkscape::Extension::db.get(helper_extension.c_str()),
+ tempfilename_out.c_str());
}
- }
+ } // data_read
- if (mydoc != NULL)
- sp_document_set_uri(mydoc, (const gchar *)filename.c_str());
+ if (mydoc != NULL) {
+ sp_document_set_uri(mydoc, filenameArg);
+ }
// make sure we don't leak file descriptors from g_file_open_tmp
- close(tempfd);
- // FIXME: convert to utf8 (from "filename encoding") and unlink_utf8name
- unlink(tempfilename_out.c_str());
+ close(tempfd_out);
+ unlink(tempfilename_out.c_str());
return mydoc;
-#endif
-}
+} // open
@@ -857,10 +839,11 @@ Script::effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::View *do
fileout.toFile(tempfilename_out);
SPDocument * mydoc = NULL;
- if (data_read > 10)
+ if (data_read > 10) {
mydoc = Inkscape::Extension::open(
Inkscape::Extension::db.get(SP_MODULE_KEY_INPUT_SVG),
tempfilename_out.c_str());
+ } // data_read
// make sure we don't leak file descriptors from g_file_open_tmp
close(tempfd_in);
index d8970cf15ac518ea2d584d6e620c443c7ae4e4cd..417b42a891d6f6185037f22fb451a78f8a22c920 100644 (file)
sigc::connection _conn;
Glib::RefPtr<Glib::IOChannel> _channel;
Glib::RefPtr<Glib::MainLoop> _main_loop;
+ bool _dead;
public:
- file_listener () { };
+ file_listener () : _dead(false) { };
~file_listener () {
_conn.disconnect();
};
+ bool isDead () { return _dead; }
+
void init (int fd, Glib::RefPtr<Glib::MainLoop> main) {
_channel = Glib::IOChannel::create_from_fd(fd);
_channel->set_encoding();
Glib::IOStatus status;
Glib::ustring out;
- status = _channel->read_to_end(out);
+ status = _channel->read_line(out);
+ _string += out;
if (status != Glib::IO_STATUS_NORMAL) {
_main_loop->quit();
+ _dead = true;
return false;
}
- _string += out;
return true;
};