Fixed wrong usage of dbus.

This was also the problem causing ethumb generated callback on the client
library always return with success=1 (see ticket #337).



SVN revision: 41287
This commit is contained in:
Rafael Antognolli 2009-07-09 19:26:16 +00:00
parent f9b765ec1c
commit 116c7d3266
3 changed files with 61 additions and 54 deletions

View File

@ -90,7 +90,7 @@ struct _Ethumb_Setup
struct _Ethumb_Request
{
long id;
int id;
const char *file, *key;
const char *thumb, *thumb_key;
struct _Ethumb_Setup setup;
@ -103,9 +103,9 @@ struct _Ethumb_Object
const char *client;
Eina_List *queue;
int nqueue;
long id_count;
long max_id;
long min_id;
int id_count;
int max_id;
int min_id;
E_DBus_Object *dbus_obj;
};
@ -178,7 +178,7 @@ const Ecore_Getopt optdesc = {
}
};
static void _ethumb_dbus_generated_signal(struct _Ethumbd *ed, long *id, const char *thumb_path, const char *thumb_key, Eina_Bool success);
static void _ethumb_dbus_generated_signal(struct _Ethumbd *ed, int *id, const char *thumb_path, const char *thumb_key, Eina_Bool success);
static int
_ethumbd_timeout_cb(void *data)
@ -212,7 +212,7 @@ _ethumbd_timeout_stop(struct _Ethumbd *ed)
}
static int
_ethumb_dbus_check_id(struct _Ethumb_Object *eobject, long id)
_ethumb_dbus_check_id(struct _Ethumb_Object *eobject, int id)
{
if (id < 0 || id > MAX_ID)
return 0;
@ -226,7 +226,7 @@ _ethumb_dbus_check_id(struct _Ethumb_Object *eobject, long id)
}
static void
_ethumb_dbus_inc_max_id(struct _Ethumb_Object *eobject, long id)
_ethumb_dbus_inc_max_id(struct _Ethumb_Object *eobject, int id)
{
if (eobject->min_id < 0 && eobject->max_id < 0)
eobject->min_id = id;
@ -913,7 +913,7 @@ _ethumb_dbus_queue_add_cb(E_DBus_Object *object, DBusMessage *msg)
struct _Ethumb_Object *eobject;
struct _Ethumbd *ed;
struct _Ethumb_Request *request;
long id = -1;
dbus_int32_t id = -1;
dbus_message_iter_init(msg, &iter);
dbus_message_iter_get_basic(&iter, &id);
@ -959,7 +959,7 @@ _ethumb_dbus_queue_add_cb(E_DBus_Object *object, DBusMessage *msg)
end:
reply = dbus_message_new_method_return(msg);
dbus_message_iter_init_append(reply, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT64, &id);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &id);
return reply;
}
@ -968,12 +968,12 @@ _ethumb_dbus_queue_remove_cb(E_DBus_Object *object, DBusMessage *msg)
{
DBusMessage *reply;
DBusMessageIter iter;
long id;
dbus_int32_t id;
struct _Ethumb_Object_Data *odata;
struct _Ethumb_Object *eobject;
struct _Ethumb_Request *request;
struct _Ethumbd *ed;
int r = 0;
dbus_bool_t r = 0;
Eina_List *l;
dbus_message_iter_init(msg, &iter);
@ -1083,10 +1083,10 @@ static int
_ethumb_dbus_fdo_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
{
int type;
int fdo;
dbus_int32_t fdo;
type = dbus_message_iter_get_arg_type(iter);
if (type != DBUS_TYPE_INT32 && type != DBUS_TYPE_INT64)
if (type != DBUS_TYPE_INT32)
{
ERR("invalid param for fdo_set.\n");
return 0;
@ -1103,7 +1103,7 @@ _ethumb_dbus_size_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, str
{
DBusMessageIter oiter;
int type;
int w, h;
dbus_int32_t w, h;
type = dbus_message_iter_get_arg_type(iter);
if (type != DBUS_TYPE_STRUCT)
@ -1128,10 +1128,10 @@ static int
_ethumb_dbus_format_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
{
int type;
int format;
dbus_int32_t format;
type = dbus_message_iter_get_arg_type(iter);
if (type != DBUS_TYPE_INT32 && type != DBUS_TYPE_INT64)
if (type != DBUS_TYPE_INT32)
{
ERR("invalid param for format_set.\n");
return 0;
@ -1149,10 +1149,10 @@ static int
_ethumb_dbus_aspect_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
{
int type;
int aspect;
dbus_int32_t aspect;
type = dbus_message_iter_get_arg_type(iter);
if (type != DBUS_TYPE_INT32 && type != DBUS_TYPE_INT64)
if (type != DBUS_TYPE_INT32)
{
ERR("invalid param for aspect_set.\n");
return 0;
@ -1171,7 +1171,7 @@ _ethumb_dbus_crop_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, str
{
DBusMessageIter oiter;
int type;
float x, y;
double x, y;
type = dbus_message_iter_get_arg_type(iter);
if (type != DBUS_TYPE_STRUCT)
@ -1196,10 +1196,10 @@ static int
_ethumb_dbus_quality_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
{
int type;
int quality;
dbus_int32_t quality;
type = dbus_message_iter_get_arg_type(iter);
if (type != DBUS_TYPE_INT32 && type != DBUS_TYPE_INT64)
if (type != DBUS_TYPE_INT32)
{
ERR("invalid param for quality_set.\n");
return 0;
@ -1218,10 +1218,10 @@ static int
_ethumb_dbus_compress_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
{
int type;
int compress;
dbus_int32_t compress;
type = dbus_message_iter_get_arg_type(iter);
if (type != DBUS_TYPE_INT32 && type != DBUS_TYPE_INT64)
if (type != DBUS_TYPE_INT32)
{
ERR("invalid param for compress_set.\n");
return 0;
@ -1331,10 +1331,10 @@ static int
_ethumb_dbus_document_page_set(struct _Ethumb_Object *eobject, DBusMessageIter *iter, struct _Ethumb_Request *request)
{
int type;
int document_page;
dbus_int32_t document_page;
type = dbus_message_iter_get_arg_type(iter);
if (type != DBUS_TYPE_INT32 && type != DBUS_TYPE_INT64)
if (type != DBUS_TYPE_INT32)
{
ERR("invalid param for document_page_set.\n");
return 0;
@ -1406,7 +1406,7 @@ _ethumb_dbus_ethumb_setup_cb(E_DBus_Object *object, DBusMessage *msg)
struct _Ethumbd *ed;
struct _Ethumb_Object *eobject;
struct _Ethumb_Request *request;
int r = 0;
dbus_bool_t r = 0;
int atype;
dbus_message_iter_init(msg, &iter);
@ -1453,15 +1453,17 @@ end:
}
static void
_ethumb_dbus_generated_signal(struct _Ethumbd *ed, long *id, const char *thumb_path, const char *thumb_key, Eina_Bool success)
_ethumb_dbus_generated_signal(struct _Ethumbd *ed, int *id, const char *thumb_path, const char *thumb_key, Eina_Bool success)
{
DBusMessage *signal;
int current;
const char *opath;
DBusMessageIter iter;
Eina_Bool value;
dbus_bool_t value;
dbus_int32_t id32;
value = success;
id32 = *id;
current = ed->queue.current;
opath = ed->queue.table[current].path;
@ -1469,7 +1471,7 @@ _ethumb_dbus_generated_signal(struct _Ethumbd *ed, long *id, const char *thumb_p
"generated");
dbus_message_iter_init_append(signal, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT64, id);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &id32);
_ethumb_dbus_append_bytearray(&iter, thumb_path);
_ethumb_dbus_append_bytearray(&iter, thumb_key);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &value);
@ -1480,8 +1482,8 @@ _ethumb_dbus_generated_signal(struct _Ethumbd *ed, long *id, const char *thumb_p
static struct _Ethumb_DBus_Method_Table _ethumb_dbus_objects_methods[] =
{
{ "queue_add", "xayayayay", "x", _ethumb_dbus_queue_add_cb },
{ "queue_remove", "x", "b", _ethumb_dbus_queue_remove_cb },
{ "queue_add", "iayayayay", "i", _ethumb_dbus_queue_add_cb },
{ "queue_remove", "i", "b", _ethumb_dbus_queue_remove_cb },
{ "clear_queue", "", "", _ethumb_dbus_queue_clear_cb },
{ "ethumb_setup", "a{sv}", "b", _ethumb_dbus_ethumb_setup_cb },
{ "delete", "", "", _ethumb_dbus_delete_cb },

View File

@ -52,7 +52,7 @@
struct _Ethumb_Client
{
Ethumb *ethumb;
long id_count;
int id_count;
E_DBus_Connection *conn;
E_DBus_Signal_Handler *name_owner_changed_handler;
@ -80,7 +80,7 @@ struct _Ethumb_Client
struct _ethumb_pending_add
{
long id;
dbus_int32_t id;
const char *file;
const char *key;
const char *thumb;
@ -94,7 +94,7 @@ struct _ethumb_pending_add
struct _ethumb_pending_remove
{
long id;
dbus_int32_t id;
void (*remove_cb)(Eina_Bool result, void *data);
void *data;
DBusPendingCall *pending_call;
@ -103,7 +103,7 @@ struct _ethumb_pending_remove
struct _ethumb_pending_gen
{
long id;
dbus_int32_t id;
const char *file;
const char *key;
const char *thumb;
@ -279,7 +279,7 @@ _ethumb_client_start_server_cb(void *data, DBusMessage *msg, DBusError *err)
{
Ethumb_Client *client = data;
DBusMessageIter iter;
unsigned int ret;
dbus_uint32_t ret;
int t;
client->pending_start_service_by_name = NULL;
@ -538,7 +538,8 @@ static void
_ethumb_client_ethumb_setup_cb(void *data, DBusMessage *msg, DBusError *error)
{
DBusMessageIter iter;
int t, result = 0;
int t;
dbus_bool_t result = 0;
Ethumb_Client *client = data;
client->pending_setup = NULL;
@ -598,12 +599,13 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
DBusMessageIter iter, aiter, diter, viter, vaiter;
Ethumb *e = client->ethumb;
const char *entry;
int tw, th, format, aspect, quality, compress;
dbus_int32_t tw, th, format, aspect, quality, compress;
float cx, cy;
double t;
const char *theme_file, *group, *swallow;
const char *directory, *category;
float video_time;
int document_page;
double video_time;
dbus_int32_t document_page;
EINA_SAFETY_ON_NULL_RETURN(client);
client->ethumb_dirty = 0;
@ -649,8 +651,10 @@ ethumb_client_ethumb_setup(Ethumb_Client *client)
_open_variant_iter("crop", "(dd)", viter);
dbus_message_iter_open_container(&viter, DBUS_TYPE_STRUCT, NULL, &vaiter);
ethumb_thumb_crop_align_get(e, &cx, &cy);
dbus_message_iter_append_basic(&vaiter, DBUS_TYPE_DOUBLE, &cx);
dbus_message_iter_append_basic(&vaiter, DBUS_TYPE_DOUBLE, &cy);
t = cx;
dbus_message_iter_append_basic(&vaiter, DBUS_TYPE_DOUBLE, &t);
t = cy;
dbus_message_iter_append_basic(&vaiter, DBUS_TYPE_DOUBLE, &t);
dbus_message_iter_close_container(&viter, &vaiter);
_close_variant_iter(viter);
@ -708,12 +712,12 @@ static void
_ethumb_client_generated_cb(void *data, DBusMessage *msg)
{
DBusMessageIter iter;
long id = -1;
dbus_int32_t id = -1;
const char *thumb;
const char *thumb_key;
Ethumb_Client *client = data;
int t;
int success;
dbus_bool_t success;
Eina_List *l;
int found;
struct _ethumb_pending_gen *pending;
@ -721,7 +725,7 @@ _ethumb_client_generated_cb(void *data, DBusMessage *msg)
dbus_message_iter_init(msg, &iter);
t = dbus_message_iter_get_arg_type(&iter);
if (!_dbus_iter_type_check(t, DBUS_TYPE_INT64))
if (!_dbus_iter_type_check(t, DBUS_TYPE_INT32))
goto end;
dbus_message_iter_get_basic(&iter, &id);
dbus_message_iter_next(&iter);
@ -781,7 +785,7 @@ _ethumb_client_queue_add_cb(void *data, DBusMessage *msg, DBusError *error)
{
DBusMessageIter iter;
int t;
long id = -1;
dbus_int32_t id = -1;
struct _ethumb_pending_add *pending = data;
struct _ethumb_pending_gen *generating;
Ethumb_Client *client = pending->client;
@ -792,7 +796,7 @@ _ethumb_client_queue_add_cb(void *data, DBusMessage *msg, DBusError *error)
goto end;
t = dbus_message_iter_get_arg_type(&iter);
if (!_dbus_iter_type_check(t, DBUS_TYPE_INT64))
if (!_dbus_iter_type_check(t, DBUS_TYPE_INT32))
goto end;
dbus_message_iter_get_basic(&iter, &id);
@ -838,7 +842,7 @@ _ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *ke
"queue_add");
dbus_message_iter_init_append(msg, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT64, &pending->id);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &pending->id);
_ethumb_client_dbus_append_bytearray(&iter, file);
_ethumb_client_dbus_append_bytearray(&iter, key);
_ethumb_client_dbus_append_bytearray(&iter, thumb);
@ -858,7 +862,7 @@ _ethumb_client_queue_remove_cb(void *data, DBusMessage *msg, DBusError *error)
{
DBusMessageIter iter;
int t;
int success = 0;
dbus_bool_t success = 0;
struct _ethumb_pending_remove *pending = data;
Ethumb_Client *client = pending->client;
@ -880,12 +884,13 @@ end:
}
EAPI void
ethumb_client_queue_remove(Ethumb_Client *client, long id, void (*queue_remove_cb)(Eina_Bool success, void *data), void *data)
ethumb_client_queue_remove(Ethumb_Client *client, int id, void (*queue_remove_cb)(Eina_Bool success, void *data), void *data)
{
DBusMessage *msg;
struct _ethumb_pending_remove *pending;
Eina_List *l;
int found;
dbus_int32_t id32 = id;
EINA_SAFETY_ON_NULL_RETURN(client);
pending = calloc(1, sizeof(*pending));
@ -899,7 +904,7 @@ ethumb_client_queue_remove(Ethumb_Client *client, long id, void (*queue_remove_c
_ethumb_dbus_objects_interface,
"queue_remove");
dbus_message_append_args(msg, DBUS_TYPE_INT64, &id, DBUS_TYPE_INVALID);
dbus_message_append_args(msg, DBUS_TYPE_INT32, &id32, DBUS_TYPE_INVALID);
pending->pending_call = e_dbus_message_send(client->conn, msg,
_ethumb_client_queue_remove_cb,
-1, pending);
@ -910,7 +915,7 @@ ethumb_client_queue_remove(Ethumb_Client *client, long id, void (*queue_remove_c
while (l)
{
struct _ethumb_pending_add *pending = l->data;
if (pending->id != id)
if (pending->id != id32)
{
l = l->next;
continue;
@ -934,7 +939,7 @@ ethumb_client_queue_remove(Ethumb_Client *client, long id, void (*queue_remove_c
while (l)
{
struct _ethumb_pending_gen *pending = l->data;
if (pending->id != id)
if (pending->id != id32)
{
l = l->next;
continue;

View File

@ -50,7 +50,7 @@ EAPI Ethumb_Client * ethumb_client_connect(ec_connect_callback_t connect_cb, voi
EAPI void ethumb_client_disconnect(Ethumb_Client *client);
EAPI void ethumb_client_on_server_die_callback_set(Ethumb_Client *client, void (*on_server_die_cb)(Ethumb_Client *client, void *data), void *data);
EAPI void ethumb_client_queue_remove(Ethumb_Client *client, long id, void (*queue_remove_cb)(Eina_Bool success, void *data), void *data);
EAPI void ethumb_client_queue_remove(Ethumb_Client *client, int id, void (*queue_remove_cb)(Eina_Bool success, void *data), void *data);
EAPI void ethumb_client_queue_clear(Ethumb_Client *client);
EAPI void ethumb_client_fdo_set(Ethumb_Client *client, Ethumb_Thumb_FDO_Size s);