/* * room-info.c * * Copyright (C) 2012 Collabora Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "room-info.h" #include "room-info-internal.h" #include #include #include /** * SECTION: room-info * @title: TpRoomInfo * @short_description: a room found by #TpRoomList * * #TpRoomInfo represents a room found during a room listing using * #TpRoomList. * * See also: #TpRoomList */ /** * TpRoomInfo: * * Data structure representing a #TpRoomInfo. * * Since: 0.19.0 */ /** * TpRoomInfoClass: * * The class of a #TpRoomInfo. * * Since: 0.19.0 */ G_DEFINE_TYPE (TpRoomInfo, tp_room_info, G_TYPE_OBJECT) struct _TpRoomInfoPriv { TpHandle handle; gchar *channel_type; GHashTable *info; }; static void tp_room_info_finalize (GObject *object) { TpRoomInfo *self = TP_ROOM_INFO (object); void (*chain_up) (GObject *) = ((GObjectClass *) tp_room_info_parent_class)->finalize; g_free (self->priv->channel_type); g_hash_table_unref (self->priv->info); if (chain_up != NULL) chain_up (object); } static void tp_room_info_class_init ( TpRoomInfoClass *klass) { GObjectClass *oclass = G_OBJECT_CLASS (klass); oclass->finalize = tp_room_info_finalize; g_type_class_add_private (klass, sizeof (TpRoomInfoPriv)); } static void tp_room_info_init (TpRoomInfo *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TYPE_ROOM_INFO, TpRoomInfoPriv); } TpRoomInfo * _tp_room_info_new (GValueArray *dbus_struct) { TpRoomInfo *room; const gchar *channel_type; GHashTable *info; g_return_val_if_fail (dbus_struct != NULL, NULL); g_return_val_if_fail (dbus_struct->n_values == 3, NULL); /* We don't want to expose the GValueArray in the API so it's not * a GObject property. */ room = g_object_new (TP_TYPE_ROOM_INFO, NULL); tp_value_array_unpack (dbus_struct, 3, &room->priv->handle, &channel_type, &info); room->priv->channel_type = g_strdup (channel_type); room->priv->info = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) tp_g_value_slice_free); tp_g_hash_table_update (room->priv->info, info, (GBoxedCopyFunc) g_strdup, (GBoxedCopyFunc) tp_g_value_slice_dup); return room; } /** * tp_room_info_get_handle: * @self: a #TpRoomInfo * * * * Returns: the #TpHandle of the room * * Since: 0.19.0 */ TpHandle tp_room_info_get_handle (TpRoomInfo *self) { return self->priv->handle; } /** * tp_room_info_get_channel_type: * @self: a #TpRoomInfo * * * * Returns: a string representing the D-Bus interface name of * the channel type of the room * * Since: 0.19.0 */ const gchar * tp_room_info_get_channel_type (TpRoomInfo *self) { return self->priv->channel_type; } /** * tp_room_info_get_handle_name: * @self: a #TpRoomInfo * * * * Returns: the identifier of the room (as would be returned * by inspecting the #TpHandle returned by tp_room_info_get_handle()) * * Since: 0.19.0 */ const gchar * tp_room_info_get_handle_name (TpRoomInfo *self) { return tp_asv_get_string (self->priv->info, "handle-name"); } /** * tp_room_info_get_name: * @self: a #TpRoomInfo * * * * Returns: the human-readable name of the room if different * from the handle * * Since: 0.19.0 */ const gchar * tp_room_info_get_name (TpRoomInfo *self) { return tp_asv_get_string (self->priv->info, "name"); } /** * tp_room_info_get_description: * @self: a #TpRoomInfo * * * * Returns: a description of the room's overall purpose * * Since: 0.19.0 */ const gchar * tp_room_info_get_description (TpRoomInfo *self) { return tp_asv_get_string (self->priv->info, "description"); } /** * tp_room_info_get_subject: * @self: a #TpRoomInfo * * * * Returns: the current subject of conversation in the room * * Since: 0.19.0 */ const gchar * tp_room_info_get_subject (TpRoomInfo *self) { return tp_asv_get_string (self->priv->info, "subject"); } /** * tp_room_info_get_members_count: * @self: a #TpRoomInfo * @known: either %NULL, or a location in which to store %TRUE if the * returned value is meaningful * * * * Returns: the number of members in the room * * Since: 0.19.0 */ guint tp_room_info_get_members_count (TpRoomInfo *self, gboolean *known) { return tp_asv_get_uint32 (self->priv->info, "members", known); } /** * tp_room_info_get_requires_password: * @self: a #TpRoomInfo * @known: either %NULL, or a location in which to store %TRUE if the * returned value is meaningful * * * * Returns: %TRUE if the room requires a password to enter * * Since: 0.19.0 */ gboolean tp_room_info_get_requires_password (TpRoomInfo *self, gboolean *known) { return tp_asv_get_boolean (self->priv->info, "password", known); } /** * tp_room_info_get_invite_only: * @self: a #TpRoomInfo * @known: either %NULL, or a location in which to store %TRUE if the * returned value is meaningful * * * * Returns: %TRUE if you cannot join the room, but must be invited * * Since: 0.19.0 */ gboolean tp_room_info_get_invite_only (TpRoomInfo *self, gboolean *known) { return tp_asv_get_boolean (self->priv->info, "invite-only", known); } /** * tp_room_info_get_room_id: * @self: a #TpRoomInfo * * * * Returns: the human-readable identifier of the room * * Since: 0.19.0 */ const gchar * tp_room_info_get_room_id (TpRoomInfo *self) { return tp_asv_get_string (self->priv->info, "room-id"); } /** * tp_room_info_get_server: * @self: a #TpRoomInfo * * * * Returns: the DNS name of the server hosting the room * * Since: 0.19.0 */ const gchar * tp_room_info_get_server (TpRoomInfo *self) { return tp_asv_get_string (self->priv->info, "server"); }