]> git.0d.be Git - empathy.git/blobdiff - libempathy/empathy-chatroom.c
Merge commit 'bigon/configure-deprecated-flag'
[empathy.git] / libempathy / empathy-chatroom.c
index cb39455edeb730d871f364643e8e9a9a88a08666..8ffd8a51e11ce2b4766aaa3099bfb68e49f15662 100644 (file)
@@ -35,11 +35,12 @@ typedef struct {
        gchar     *room;
        gchar     *name;
        gboolean   auto_connect;
-  gboolean favorite;
-  /* FIXME: This is crack. We should store EmapthyTpChat but can't
-   * as it's not created in the dispatcher. At some point it should be
-   * automatically created by tp-glib */
-  TpChannel *tp_channel;
+       gboolean favorite;
+       EmpathyTpChat *tp_chat;
+       gchar *subject;
+       guint members_count;
+       gboolean invite_only;
+       gboolean need_password;
 } EmpathyChatroomPriv;
 
 
@@ -59,8 +60,12 @@ enum {
        PROP_ROOM,
        PROP_NAME,
        PROP_AUTO_CONNECT,
-  PROP_FAVORITE,
-  PROP_TP_CHANNEL
+       PROP_FAVORITE,
+       PROP_TP_CHAT,
+       PROP_SUBJECT,
+       PROP_MEMBERS_COUNT,
+       PROP_NEED_PASSWORD,
+       PROP_INVITE_ONLY
 };
 
 G_DEFINE_TYPE (EmpathyChatroom, empathy_chatroom, G_TYPE_OBJECT);
@@ -118,13 +123,58 @@ empathy_chatroom_class_init (EmpathyChatroomClass *klass)
         G_PARAM_STATIC_NICK |
         G_PARAM_STATIC_BLURB));
 
+       g_object_class_install_property (object_class,
+                                        PROP_TP_CHAT,
+                                        g_param_spec_object ("tp-chat",
+                                                             "Chatroom channel wrapper",
+                                                             "The wrapper for the chatroom channel if there is one",
+                                                             EMPATHY_TYPE_TP_CHAT,
+                                                             G_PARAM_READWRITE));
+
+  g_object_class_install_property (object_class,
+      PROP_SUBJECT,
+      g_param_spec_string ("subject",
+        "Subject",
+        "The chatroom's subject",
+        "",
+        G_PARAM_READWRITE |
+        G_PARAM_CONSTRUCT |
+        G_PARAM_STATIC_NAME |
+        G_PARAM_STATIC_NICK |
+        G_PARAM_STATIC_BLURB));
+
+  g_object_class_install_property (object_class,
+      PROP_MEMBERS_COUNT,
+      g_param_spec_uint ("members-count",
+        "Members count",
+        "The chatroom's members count",
+        0,
+        G_MAXUINT,
+        0,
+        G_PARAM_READWRITE |
+        G_PARAM_CONSTRUCT |
+        G_PARAM_STATIC_NAME |
+        G_PARAM_STATIC_NICK |
+        G_PARAM_STATIC_BLURB));
+
+  g_object_class_install_property (object_class,
+      PROP_INVITE_ONLY,
+      g_param_spec_boolean ("invite-only",
+        "Invite Only",
+        "The chatroom is invite only",
+        FALSE,
+        G_PARAM_READWRITE |
+        G_PARAM_CONSTRUCT |
+        G_PARAM_STATIC_NAME |
+        G_PARAM_STATIC_NICK |
+        G_PARAM_STATIC_BLURB));
+
   g_object_class_install_property (object_class,
-      PROP_TP_CHANNEL,
-      g_param_spec_object ("tp-channel",
-        "TpChannel object",
-        "The TpChannel associated with this chatroom if we are in the"
-        " room. NULL otherwise.",
-        TP_TYPE_CHANNEL,
+      PROP_NEED_PASSWORD,
+      g_param_spec_boolean ("need-password",
+        "Password Needed",
+        "The chatroom is password protected",
+        FALSE,
         G_PARAM_READWRITE |
         G_PARAM_CONSTRUCT |
         G_PARAM_STATIC_NAME |
@@ -150,11 +200,8 @@ chatroom_finalize (GObject *object)
 
        priv = GET_PRIV (object);
 
-  if (priv->tp_channel != NULL)
-    {
-      g_object_unref (priv->tp_channel);
-      priv->tp_channel = NULL;
-    }
+       if (priv->tp_chat != NULL)
+               g_object_unref (priv->tp_chat);
 
        g_object_unref (priv->account);
        g_free (priv->room);
@@ -186,11 +233,23 @@ chatroom_get_property (GObject    *object,
        case PROP_AUTO_CONNECT:
                g_value_set_boolean (value, priv->auto_connect);
                break;
-  case PROP_FAVORITE:
-    g_value_set_boolean (value, priv->favorite);
+       case PROP_FAVORITE:
+               g_value_set_boolean (value, priv->favorite);
+               break;
+       case PROP_TP_CHAT:
+               g_value_set_object (value, priv->tp_chat);
+               break;
+  case PROP_SUBJECT:
+    g_value_set_string (value, priv->subject);
+    break;
+  case PROP_MEMBERS_COUNT:
+    g_value_set_uint (value, priv->members_count);
     break;
-  case PROP_TP_CHANNEL:
-    g_value_set_object (value, priv->tp_channel);
+  case PROP_INVITE_ONLY:
+    g_value_set_boolean (value, priv->invite_only);
+    break;
+  case PROP_NEED_PASSWORD:
+    g_value_set_boolean (value, priv->need_password);
     break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
@@ -233,13 +292,37 @@ chatroom_set_property (GObject      *object,
             FALSE);
       }
     break;
-  case PROP_TP_CHANNEL:
-    if (priv->tp_channel != NULL)
-      {
-        g_object_unref (priv->tp_channel);
-      }
+       case PROP_TP_CHAT: {
+               GObject *chat = g_value_dup_object (value);
 
-    priv->tp_channel = g_value_dup_object (value);
+               if (chat == (GObject *) priv->tp_chat)
+                       break;
+
+               g_assert (chat == NULL || priv->tp_chat == NULL);
+
+               if (priv->tp_chat != NULL) {
+                       g_object_unref (priv->tp_chat);
+                       priv->tp_chat = NULL;
+               } else {
+                       priv->tp_chat = EMPATHY_TP_CHAT (chat);
+               }
+               break;
+       }
+  case PROP_SUBJECT:
+    empathy_chatroom_set_subject (EMPATHY_CHATROOM (object),
+        g_value_get_string (value));
+    break;
+  case PROP_MEMBERS_COUNT:
+    empathy_chatroom_set_members_count (EMPATHY_CHATROOM (object),
+        g_value_get_uint (value));
+    break;
+  case PROP_NEED_PASSWORD:
+    empathy_chatroom_set_need_password (EMPATHY_CHATROOM (object),
+        g_value_get_boolean (value));
+    break;
+  case PROP_INVITE_ONLY:
+    empathy_chatroom_set_invite_only (EMPATHY_CHATROOM (object),
+        g_value_get_boolean (value));
     break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
@@ -344,7 +427,7 @@ empathy_chatroom_get_name (EmpathyChatroom *chatroom)
 
        priv = GET_PRIV (chatroom);
        
-       if (G_STR_EMPTY (priv->name)) {
+       if (EMP_STR_EMPTY (priv->name)) {
                return priv->room;
        }
        
@@ -424,3 +507,127 @@ empathy_chatroom_equal (gconstpointer v1,
        return empathy_account_equal (account_a, account_b) && !tp_strdiff (room_a,
       room_b);
 }
+
+EmpathyTpChat *
+empathy_chatroom_get_tp_chat (EmpathyChatroom *chatroom) {
+       EmpathyChatroomPriv *priv;
+
+       g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
+
+       priv = GET_PRIV (chatroom);
+
+       return priv->tp_chat;
+}
+
+const gchar *
+empathy_chatroom_get_subject (EmpathyChatroom *chatroom)
+{
+  EmpathyChatroomPriv *priv;
+
+  g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
+
+  priv = GET_PRIV (chatroom);
+
+  return priv->subject;
+}
+
+void
+empathy_chatroom_set_subject (EmpathyChatroom *chatroom,
+                              const gchar *subject)
+{
+  EmpathyChatroomPriv *priv;
+
+  g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+
+  priv = GET_PRIV (chatroom);
+
+  g_free (priv->subject);
+  priv->subject = NULL;
+
+  if (subject)
+    priv->subject = g_strdup (subject);
+
+  g_object_notify (G_OBJECT (chatroom), "subject");
+}
+
+guint
+empathy_chatroom_get_members_count (EmpathyChatroom *chatroom)
+{
+  EmpathyChatroomPriv *priv;
+
+  g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), 0);
+
+  priv = GET_PRIV (chatroom);
+
+  return priv->members_count;
+}
+
+void
+empathy_chatroom_set_members_count (EmpathyChatroom *chatroom,
+                                    guint count)
+{
+  EmpathyChatroomPriv *priv;
+
+  g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+
+  priv = GET_PRIV (chatroom);
+
+  priv->members_count = count;
+
+  g_object_notify (G_OBJECT (chatroom), "members-count");
+}
+
+gboolean
+empathy_chatroom_get_need_password (EmpathyChatroom *chatroom)
+{
+  EmpathyChatroomPriv *priv;
+
+  g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
+
+  priv = GET_PRIV (chatroom);
+
+  return priv->need_password;
+}
+
+void
+empathy_chatroom_set_need_password (EmpathyChatroom *chatroom,
+                                    gboolean need_password)
+{
+  EmpathyChatroomPriv *priv;
+
+  g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+
+  priv = GET_PRIV (chatroom);
+
+  priv->need_password = need_password;
+
+  g_object_notify (G_OBJECT (chatroom), "need-password");
+}
+
+gboolean
+empathy_chatroom_get_invite_only (EmpathyChatroom *chatroom)
+{
+  EmpathyChatroomPriv *priv;
+
+  g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
+
+  priv = GET_PRIV (chatroom);
+
+  return priv->invite_only;
+}
+
+void
+empathy_chatroom_set_invite_only (EmpathyChatroom *chatroom,
+                                  gboolean invite_only)
+{
+  EmpathyChatroomPriv *priv;
+
+  g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+
+  priv = GET_PRIV (chatroom);
+
+  priv->invite_only = invite_only;
+
+  g_object_notify (G_OBJECT (chatroom), "invite-only");
+}
+