This makes life a lot easier.
{
ChimeConnectionPrivate *priv = CHIME_CONNECTION_GET_PRIVATE (cxn);
- chime_object_collection_init(&priv->calls);
+ chime_object_collection_init(cxn, &priv->calls);
}
void chime_destroy_calls(ChimeConnection *cxn)
g_return_if_fail(CHIME_IS_CONNECTION(cxn));
ChimeConnectionPrivate *priv = CHIME_CONNECTION_GET_PRIVATE (cxn);
- chime_object_collection_init(&priv->contacts);
+ chime_object_collection_init(cxn, &priv->contacts);
fetch_contacts(cxn, NULL);
}
{
ChimeConnectionPrivate *priv = CHIME_CONNECTION_GET_PRIVATE (cxn);
- chime_object_collection_init(&priv->conversations);
+ chime_object_collection_init(cxn, &priv->conversations);
chime_jugg_subscribe(cxn, priv->device_channel, "Conversation",
conv_jugg_cb, NULL);
{
ChimeConnectionPrivate *priv = CHIME_CONNECTION_GET_PRIVATE (cxn);
- chime_object_collection_init(&priv->meetings);
+ chime_object_collection_init(cxn, &priv->meetings);
chime_jugg_subscribe(cxn, priv->device_channel, "JoinableMeetings",
joinable_meetings_jugg_cb, NULL);
* hash table in its ->dispose() */
gboolean is_dead;
ChimeObjectCollection *collection;
+ ChimeConnection *cxn;
} ChimeObjectPrivate;
enum
chime_debug("Object disposed: %p\n", self);
+ if (priv->cxn)
+ g_clear_object(&priv->cxn);
+
G_OBJECT_CLASS(chime_object_parent_class)->dispose(object);
}
{
}
+ChimeConnection *chime_object_get_connection(ChimeObject *self)
+{
+ ChimeObjectPrivate *priv;
+
+ g_return_val_if_fail(CHIME_IS_OBJECT(self), NULL);
+
+ priv = chime_object_get_instance_private (self);
+
+ return priv->cxn;
+
+}
const gchar *chime_object_get_id(ChimeObject *self)
{
ChimeObjectPrivate *priv;
priv->generation = collection->generation;
+ if (!priv->cxn)
+ priv->cxn = g_object_ref(collection->cxn);
+
if (!priv->collection) {
priv->collection = collection;
g_hash_table_insert(collection->by_id, priv->id, object);
}
}
-void chime_object_collection_init(ChimeObjectCollection *coll)
+void chime_object_collection_init(ChimeConnection *cxn, ChimeObjectCollection *coll)
{
coll->by_id = g_hash_table_new_full(g_str_hash, g_str_equal,
NULL, unhash_object);
coll->by_name = g_hash_table_new(g_str_hash, g_str_equal);
coll->generation = 0;
+ coll->cxn = cxn;
}
void chime_object_collection_destroy(ChimeObjectCollection *coll)
GHashTable *by_id;
GHashTable *by_name;
gint64 generation;
+ ChimeConnection *cxn;
} ChimeObjectCollection;
struct _ChimeObjectClass {
GObjectClass parent_class;
};
+ChimeConnection *chime_object_get_connection(ChimeObject *self);
const gchar *chime_object_get_id(ChimeObject *self);
const gchar *chime_object_get_name(ChimeObject *self);
gboolean chime_object_is_dead(ChimeObject *self);
void chime_object_rename(ChimeObject *self, const gchar *name);
-void chime_object_collection_init(ChimeObjectCollection *coll);
+void chime_object_collection_init(ChimeConnection *cxn, ChimeObjectCollection *coll);
void chime_object_collection_destroy(ChimeObjectCollection *coll);
ChimeObject *chime_connection_object_by_name(ChimeObjectCollection *coll,
{
ChimeConnectionPrivate *priv = CHIME_CONNECTION_GET_PRIVATE (cxn);
- chime_object_collection_init(&priv->rooms);
+ chime_object_collection_init(cxn, &priv->rooms);
chime_jugg_subscribe(cxn, priv->profile_channel, "VisibleRooms",
visible_rooms_jugg_cb, NULL);