5
#include "eldbus_model_private.h"
11
#define MY_CLASS ELDBUS_MODEL_CLASS
12
#define MY_CLASS_NAME "Eldbus_Model"
15
eldbus_model_connect_do(Eldbus_Model_Data *pd)
17
if (pd->type == ELDBUS_CONNECTION_TYPE_ADDRESS)
20
pd->connection = eldbus_address_connection_get(pd->address);
22
pd->connection = eldbus_private_address_connection_get(pd->address);
27
pd->connection = eldbus_private_connection_get(pd->type);
29
pd->connection = eldbus_connection_get(pd->type);
32
// TODO: Register for disconnection event
35
DBG("Unable to setup a connection [%i - %s] %i",
36
pd->type, pd->address, pd->private);
41
_eldbus_model_connect(Eo *obj EINA_UNUSED,
42
Eldbus_Model_Data *pd,
43
Eldbus_Connection_Type type,
48
pd->address = eina_stringshare_add(address);
53
_eldbus_model_connection_set(Eo *obj EINA_UNUSED,
54
Eldbus_Model_Data *pd,
55
Eldbus_Connection *dbus)
57
Eldbus_Connection *tounref = pd->connection;
59
eldbus_connection_ref(dbus);
60
pd->connection = NULL;
61
if (tounref) eldbus_connection_unref(tounref);
62
pd->connection = dbus;
65
static Eldbus_Connection *
66
_eldbus_model_connection_get(const Eo *obj EINA_UNUSED, Eldbus_Model_Data *pd)
68
return pd->connection;
72
_eldbus_model_efl_object_finalize(Eo *obj, Eldbus_Model_Data *pd)
74
if (!pd->connection) eldbus_model_connect_do(pd);
75
if (!pd->connection) return NULL;
77
return efl_finalize(efl_super(obj, ELDBUS_MODEL_CLASS));
81
_eldbus_model_efl_object_invalidate(Eo *obj, Eldbus_Model_Data *pd)
83
Eldbus_Connection *connection = pd->connection;
85
pd->connection = NULL;
86
if (connection) eldbus_connection_unref(connection);
88
efl_invalidate(efl_super(obj, MY_CLASS));
92
_eldbus_model_efl_object_destructor(Eo *obj, Eldbus_Model_Data *pd)
94
eina_stringshare_del(pd->unique_name);
95
pd->unique_name = NULL;
97
eina_stringshare_del(pd->address);
100
efl_destructor(efl_super(obj, MY_CLASS));
104
_eldbus_model_address_get(const Eo *obj EINA_UNUSED, Eldbus_Model_Data *pd)
110
_eldbus_model_private_get(const Eo *obj EINA_UNUSED, Eldbus_Model_Data *pd)
115
static Eldbus_Connection_Type
116
_eldbus_model_type_get(const Eo *obj EINA_UNUSED, Eldbus_Model_Data *pd)
122
_eldbus_model_efl_model_property_set(Eo *obj,
123
Eldbus_Model_Data *pd EINA_UNUSED,
124
const char *property,
125
Eina_Value *value EINA_UNUSED)
127
Eina_Error err = EFL_MODEL_ERROR_READ_ONLY;
129
if (!eina_streq(property, UNIQUE_NAME_PROPERTY))
130
err = EFL_MODEL_ERROR_NOT_FOUND;
131
return efl_loop_future_rejected(obj, err);
135
_eldbus_model_efl_model_property_get(const Eo *obj,
136
Eldbus_Model_Data *pd,
137
const char *property)
139
DBG("(%p): property=%s", obj, property);
141
if (!eina_streq(property, UNIQUE_NAME_PROPERTY)) goto on_error;
143
if (!pd->connection) eldbus_model_connect_do(pd);
145
if (pd->unique_name == NULL)
147
const char *unique_name;
149
unique_name = eldbus_connection_unique_name_get(pd->connection);
150
if (!unique_name) goto on_error;
151
pd->unique_name = eina_stringshare_add(unique_name);
154
return eina_value_string_new(pd->unique_name);
157
return eina_value_error_new(EFL_MODEL_ERROR_NOT_FOUND);
160
static Eina_Iterator *
161
_eldbus_model_efl_model_properties_get(const Eo *obj EINA_UNUSED,
162
Eldbus_Model_Data *pd EINA_UNUSED)
164
char *unique[] = { UNIQUE_NAME_PROPERTY };
166
return EINA_C_ARRAY_ITERATOR_NEW(unique);
170
_eldbus_model_efl_model_child_add(Eo *obj EINA_UNUSED,
171
Eldbus_Model_Data *pd EINA_UNUSED)
177
_eldbus_model_efl_model_child_del(Eo *obj EINA_UNUSED,
178
Eldbus_Model_Data *pd EINA_UNUSED,
179
Efl_Object *child EINA_UNUSED)
184
_eldbus_model_efl_model_children_slice_get(Eo *obj EINA_UNUSED,
185
Eldbus_Model_Data *pd EINA_UNUSED,
186
unsigned int start EINA_UNUSED,
187
unsigned int count EINA_UNUSED)
189
return efl_loop_future_rejected(obj,
190
EFL_MODEL_ERROR_NOT_SUPPORTED);
194
_eldbus_model_efl_model_children_count_get(const Eo *obj EINA_UNUSED,
195
Eldbus_Model_Data *pd EINA_UNUSED)
200
#include "eldbus_model.eo.c"