Beispiel #1
0
Datei: iptc.c Projekt: Limsik/e17
   running = 1;
}

static void
_iptc_thread(void         *data,
             Ecore_Thread *thread __UNUSED__)
{
   Enlil_IPTC_Thread_Data *t_data = data;
   const char *file = t_data->file;
   IptcData *d;
   int i;

   LOG_INFO("Load IPTC data from the photo %s", file);

   d = iptc_data_new_from_jpeg(file);
   if(!d)
     goto end;

   for (i = 0; i < (int)d->count; i++)
     {
        IptcDataSet *e = d->datasets[i];
        Enlil_IPTC *iptc = calloc(1, sizeof(Enlil_IPTC));
        t_data->l = eina_list_append(t_data->l, iptc);
        char buf[256];

        iptc->record = e->record;
        iptc->tag = e->tag;
        iptc->name = eina_stringshare_add(iptc_tag_get_name(e->record, e->tag));
        iptc->title = eina_stringshare_add(iptc_tag_get_title(e->record, e->tag));
        iptc->format = eina_stringshare_add(iptc_format_get_name(iptc_dataset_get_format (e)));
/* Function of no arguments returning new Data object */
static PyObject *
open_file(PyObject *self, PyObject *args)
{
	char *filename;
	int fd;
	DataObject *data_obj;
	unsigned char file_hdr[2], jpeg_hdr[2] = {0xff,0xd8};

	if (!PyArg_ParseTuple(args, "s:new", &filename))
		return NULL;

	/* check if the file exists first.  We close this fd just
	 * because, but maybe in the future there is a case for
	 * keeping it around. */
	fd = open(filename, O_RDONLY);
	if (fd < 0)
		return PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);

	/* read the first 2 bytes, and check it looks like a jpeg */
	if (read(fd, file_hdr, 2) < 2)	{
		close(fd);
		return PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
	}
	if (memcmp(jpeg_hdr, file_hdr, 2) != 0)	{
		close(fd);
		PyErr_SetString(PyExc_ValueError,
				"This file does not appear to be a JPEG file\n");
		return NULL;
	}
	close(fd);

	data_obj = newDataObject(args);
	if (data_obj == NULL)
		return PyErr_NoMemory();

	/* save the filename for later */
	data_obj->filename = PyString_FromString(filename);
	if (!data_obj->filename) {
		Py_DECREF(data_obj);
		return PyErr_NoMemory();
	}

	/* firstly, try and get the existing data */
	data_obj->d = iptc_data_new_from_jpeg(filename);
	if (data_obj->d) {
		/* read the existing iptc data into the dataset objects */
		int i;
		for (i=0; i < data_obj->d->count; i++) {
			IptcDataSet *e = data_obj->d->datasets[i];
			DataSetObject *ds = newDataSetObject(e);
			/* XXX bail out? */

			/* dataset objects hold a reference to their
			 * parent dataobject */
			ds->parent = data_obj;
			Py_INCREF(data_obj);

			ds->state = VALID;

			PyList_Append(data_obj->DataSet_list, (PyObject *)ds);
		}
	} else {
		/* create a new, empty data object */
		data_obj->d = iptc_data_new();
		if (!data_obj->d)
			return PyErr_NoMemory();
	}

	data_obj->state = OPEN;

	return (PyObject*)data_obj;
}