1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Copyright (C) 2007-2008 Collabora Ltd.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 * Authors: Xavier Claessens <xclaesse@gmail.com>
28 #include "empathy-chatroom.h"
29 #include "empathy-utils.h"
31 #define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EMPATHY_TYPE_CHATROOM, EmpathyChatroomPriv))
33 struct _EmpathyChatroomPriv {
37 gboolean auto_connect;
40 static void empathy_chatroom_class_init (EmpathyChatroomClass *klass);
41 static void empathy_chatroom_init (EmpathyChatroom *chatroom);
42 static void chatroom_finalize (GObject *object);
43 static void chatroom_get_property (GObject *object,
47 static void chatroom_set_property (GObject *object,
60 G_DEFINE_TYPE (EmpathyChatroom, empathy_chatroom, G_TYPE_OBJECT);
63 empathy_chatroom_class_init (EmpathyChatroomClass *klass)
65 GObjectClass *object_class = G_OBJECT_CLASS (klass);
67 object_class->finalize = chatroom_finalize;
68 object_class->get_property = chatroom_get_property;
69 object_class->set_property = chatroom_set_property;
71 g_object_class_install_property (object_class,
73 g_param_spec_object ("account",
75 "The account associated with an chatroom",
79 g_object_class_install_property (object_class,
81 g_param_spec_string ("room",
83 "Chatroom represented as 'room@server'",
87 g_object_class_install_property (object_class,
89 g_param_spec_string ("name",
95 g_object_class_install_property (object_class,
97 g_param_spec_boolean ("auto_connect",
98 "Chatroom Auto Connect",
104 g_type_class_add_private (object_class, sizeof (EmpathyChatroomPriv));
108 empathy_chatroom_init (EmpathyChatroom *chatroom)
113 chatroom_finalize (GObject *object)
115 EmpathyChatroomPriv *priv;
117 priv = GET_PRIV (object);
119 g_object_unref (priv->account);
123 (G_OBJECT_CLASS (empathy_chatroom_parent_class)->finalize) (object);
127 chatroom_get_property (GObject *object,
132 EmpathyChatroomPriv *priv;
134 priv = GET_PRIV (object);
138 g_value_set_object (value, priv->account);
141 g_value_set_string (value, priv->room);
144 g_value_set_string (value, priv->name);
146 case PROP_AUTO_CONNECT:
147 g_value_set_boolean (value, priv->auto_connect);
150 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
156 chatroom_set_property (GObject *object,
161 EmpathyChatroomPriv *priv;
163 priv = GET_PRIV (object);
167 empathy_chatroom_set_account (EMPATHY_CHATROOM (object),
168 g_value_get_object (value));
171 empathy_chatroom_set_room (EMPATHY_CHATROOM (object),
172 g_value_get_string (value));
175 empathy_chatroom_set_name (EMPATHY_CHATROOM (object),
176 g_value_get_string (value));
178 case PROP_AUTO_CONNECT:
179 empathy_chatroom_set_auto_connect (EMPATHY_CHATROOM (object),
180 g_value_get_boolean (value));
183 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
189 empathy_chatroom_new (McAccount *account,
192 g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
193 g_return_val_if_fail (room != NULL, NULL);
195 return g_object_new (EMPATHY_TYPE_CHATROOM,
202 empathy_chatroom_new_full (McAccount *account,
205 gboolean auto_connect)
207 g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
208 g_return_val_if_fail (room != NULL, NULL);
210 return g_object_new (EMPATHY_TYPE_CHATROOM,
214 "auto_connect", auto_connect,
219 empathy_chatroom_get_account (EmpathyChatroom *chatroom)
221 EmpathyChatroomPriv *priv;
223 g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
225 priv = GET_PRIV (chatroom);
226 return priv->account;
230 empathy_chatroom_set_account (EmpathyChatroom *chatroom,
233 EmpathyChatroomPriv *priv;
235 g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
236 g_return_if_fail (MC_IS_ACCOUNT (account));
238 priv = GET_PRIV (chatroom);
240 if (account == priv->account) {
244 g_object_unref (priv->account);
246 priv->account = g_object_ref (account);
248 g_object_notify (G_OBJECT (chatroom), "account");
252 empathy_chatroom_get_room (EmpathyChatroom *chatroom)
254 EmpathyChatroomPriv *priv;
256 g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
258 priv = GET_PRIV (chatroom);
263 empathy_chatroom_set_room (EmpathyChatroom *chatroom,
266 EmpathyChatroomPriv *priv;
268 g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
269 g_return_if_fail (room != NULL);
271 priv = GET_PRIV (chatroom);
274 priv->room = g_strdup (room);
276 g_object_notify (G_OBJECT (chatroom), "room");
280 empathy_chatroom_get_name (EmpathyChatroom *chatroom)
282 EmpathyChatroomPriv *priv;
284 g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
286 priv = GET_PRIV (chatroom);
288 if (G_STR_EMPTY (priv->name)) {
296 empathy_chatroom_set_name (EmpathyChatroom *chatroom,
299 EmpathyChatroomPriv *priv;
301 g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
303 priv = GET_PRIV (chatroom);
308 priv->name = g_strdup (name);
311 g_object_notify (G_OBJECT (chatroom), "name");
315 empathy_chatroom_get_auto_connect (EmpathyChatroom *chatroom)
317 EmpathyChatroomPriv *priv;
319 g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
321 priv = GET_PRIV (chatroom);
322 return priv->auto_connect;
326 empathy_chatroom_set_auto_connect (EmpathyChatroom *chatroom,
327 gboolean auto_connect)
329 EmpathyChatroomPriv *priv;
331 g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
333 priv = GET_PRIV (chatroom);
335 priv->auto_connect = auto_connect;
337 g_object_notify (G_OBJECT (chatroom), "auto-connect");
341 empathy_chatroom_equal (gconstpointer v1,
344 McAccount *account_a;
345 McAccount *account_b;
349 g_return_val_if_fail (EMPATHY_IS_CHATROOM (v1), FALSE);
350 g_return_val_if_fail (EMPATHY_IS_CHATROOM (v2), FALSE);
352 account_a = empathy_chatroom_get_account (EMPATHY_CHATROOM (v1));
353 account_b = empathy_chatroom_get_account (EMPATHY_CHATROOM (v2));
355 room_a = empathy_chatroom_get_room (EMPATHY_CHATROOM (v1));
356 room_b = empathy_chatroom_get_room (EMPATHY_CHATROOM (v2));
358 return empathy_account_equal (account_a, account_b) && g_str_equal (room_a, room_b);