27
27
#define CON_LOCK(x) (g_static_rec_mutex_lock(&(x)->priv->con_man_lock))
28
28
#define CON_UNLOCK(x) (g_static_rec_mutex_unlock(&(x)->priv->con_man_lock))
30
G_DEFINE_TYPE (CamelIMAPXConnManager, camel_imapx_conn_manager, CAMEL_TYPE_OBJECT)
30
#define CAMEL_IMAPX_CONN_MANAGER_GET_PRIVATE(obj) \
31
(G_TYPE_INSTANCE_GET_PRIVATE \
32
((obj), CAMEL_TYPE_IMAPX_CONN_MANAGER, CamelIMAPXConnManagerPrivate))
35
CamelIMAPXConnManager,
36
camel_imapx_conn_manager,
32
39
struct _CamelIMAPXConnManagerPrivate {
33
40
GSList *connections;
34
41
guint n_connections;
42
gpointer store; /* weak pointer */
36
43
GStaticRecMutex con_man_lock;
37
44
gboolean clearing_connections;
87
imapx_conn_manager_set_store (CamelIMAPXConnManager *con_man,
90
g_return_if_fail (CAMEL_IS_STORE (store));
91
g_return_if_fail (con_man->priv->store == NULL);
93
con_man->priv->store = store;
95
g_object_add_weak_pointer (
96
G_OBJECT (store), &con_man->priv->store);
100
imapx_conn_manager_set_property (GObject *object,
105
switch (property_id) {
107
imapx_conn_manager_set_store (
108
CAMEL_IMAPX_CONN_MANAGER (object),
109
g_value_get_object (value));
113
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
117
imapx_conn_manager_get_property (GObject *object,
122
switch (property_id) {
126
camel_imapx_conn_manager_get_store (
127
CAMEL_IMAPX_CONN_MANAGER (object)));
131
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
135
imapx_conn_manager_dispose (GObject *object)
137
CamelIMAPXConnManagerPrivate *priv;
139
priv = CAMEL_IMAPX_CONN_MANAGER_GET_PRIVATE (object);
141
imapx_prune_connections (CAMEL_IMAPX_CONN_MANAGER (object));
143
if (priv->store != NULL) {
144
g_object_remove_weak_pointer (
145
G_OBJECT (priv->store), &priv->store);
149
/* Chain up to parent's dispose() method. */
150
G_OBJECT_CLASS (camel_imapx_conn_manager_parent_class)->dispose (object);
75
154
imapx_conn_manager_finalize (GObject *object)
77
CamelIMAPXConnManager *con_man = CAMEL_IMAPX_CONN_MANAGER (object);
79
imapx_prune_connections (con_man);
80
g_static_rec_mutex_free (&con_man->priv->con_man_lock);
81
g_object_unref (con_man->priv->store);
156
CamelIMAPXConnManagerPrivate *priv;
158
priv = CAMEL_IMAPX_CONN_MANAGER_GET_PRIVATE (object);
160
g_static_rec_mutex_free (&priv->con_man_lock);
162
/* Chain up to parent's finalize() method. */
163
G_OBJECT_CLASS (camel_imapx_conn_manager_parent_class)->finalize (object);
89
171
g_type_class_add_private (class, sizeof (CamelIMAPXConnManagerPrivate));
91
173
object_class = G_OBJECT_CLASS (class);
174
object_class->set_property = imapx_conn_manager_set_property;
175
object_class->get_property = imapx_conn_manager_get_property;
176
object_class->dispose = imapx_conn_manager_dispose;
92
177
object_class->finalize = imapx_conn_manager_finalize;
179
g_object_class_install_property (
182
g_param_spec_object (
185
"The CamelStore to which we belong",
188
G_PARAM_CONSTRUCT_ONLY |
189
G_PARAM_STATIC_STRINGS));
96
193
camel_imapx_conn_manager_init (CamelIMAPXConnManager *con_man)
98
con_man->priv = G_TYPE_INSTANCE_GET_PRIVATE (
99
con_man, CAMEL_TYPE_OBJECT, CamelIMAPXConnManagerPrivate);
195
con_man->priv = CAMEL_IMAPX_CONN_MANAGER_GET_PRIVATE (con_man);
101
197
/* default is 1 connection */
102
198
con_man->priv->n_connections = 1;
291
387
CamelIMAPXConnManager *
292
388
camel_imapx_conn_manager_new (CamelStore *store)
294
CamelIMAPXConnManager *con_man;
296
con_man = g_object_new (CAMEL_TYPE_IMAPX_CONN_MANAGER, NULL);
297
con_man->priv->store = g_object_ref (store);
390
g_return_val_if_fail (CAMEL_IS_STORE (store), NULL);
392
return g_object_new (
393
CAMEL_TYPE_IMAPX_CONN_MANAGER, "store", store, NULL);
397
camel_imapx_conn_manager_get_store (CamelIMAPXConnManager *con_man)
399
g_return_val_if_fail (CAMEL_IS_IMAPX_CONN_MANAGER (con_man), NULL);
401
return CAMEL_STORE (con_man->priv->store);