static void chatroom_set_property (GObject *object, guint param_id, const GValue *value, GParamSpec *pspec) { EmpathyChatroomPriv *priv; priv = GET_PRIV (object); switch (param_id) { case PROP_ACCOUNT: empathy_chatroom_set_account (EMPATHY_CHATROOM (object), g_value_get_object (value)); break; case PROP_ROOM: empathy_chatroom_set_room (EMPATHY_CHATROOM (object), g_value_get_string (value)); break; case PROP_NAME: empathy_chatroom_set_name (EMPATHY_CHATROOM (object), g_value_get_string (value)); break; case PROP_AUTO_CONNECT: empathy_chatroom_set_auto_connect (EMPATHY_CHATROOM (object), g_value_get_boolean (value)); break; case PROP_FAVORITE: empathy_chatroom_set_favorite (EMPATHY_CHATROOM (object), g_value_get_boolean (value)); break; case PROP_TP_CHAT: empathy_chatroom_set_tp_chat (EMPATHY_CHATROOM (object), g_value_get_object (value)); 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); break; }; }
static void chatroom_set_property (GObject *object, guint param_id, const GValue *value, GParamSpec *pspec) { EmpathyChatroomPriv *priv; priv = GET_PRIV (object); switch (param_id) { case PROP_ACCOUNT: empathy_chatroom_set_account (EMPATHY_CHATROOM (object), g_value_get_object (value)); break; case PROP_ROOM: empathy_chatroom_set_room (EMPATHY_CHATROOM (object), g_value_get_string (value)); break; case PROP_NAME: empathy_chatroom_set_name (EMPATHY_CHATROOM (object), g_value_get_string (value)); break; case PROP_AUTO_CONNECT: empathy_chatroom_set_auto_connect (EMPATHY_CHATROOM (object), g_value_get_boolean (value)); break; case PROP_FAVORITE: priv->favorite = g_value_get_boolean (value); if (!priv->favorite) { empathy_chatroom_set_auto_connect (EMPATHY_CHATROOM (object), FALSE); } break; case PROP_TP_CHAT: { GObject *chat = 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; } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; }; }
static void tp_roomlist_inspect_handles_cb (TpConnection *connection, const gchar **names, const GError *error, gpointer user_data, GObject *list) { GSList *chatrooms = user_data; if (error != NULL) { DEBUG ("Error: %s", error->message); return; } while (*names != NULL) { EmpathyChatroom *chatroom = chatrooms->data; empathy_chatroom_set_room (chatroom, *names); g_signal_emit (list, signals[NEW_ROOM], 0, chatroom); names++; chatrooms = chatrooms->next; } }
END_TEST START_TEST (test_empathy_chatroom_manager_change_chatroom) { EmpathyChatroomManager *mgr; gchar *file; EmpathyAccount *account; EmpathyAccountManager *account_manager; struct chatroom_t chatrooms[] = { { "name1", "room1", TRUE, TRUE }, { "name2", "room2", FALSE, TRUE }}; EmpathyChatroom *chatroom; account_manager = empathy_account_manager_dup_singleton (); account = get_test_account (); copy_xml_file (CHATROOM_SAMPLE, "foo.xml"); file = get_user_xml_file ("foo.xml"); /* change the chatrooms XML file to use the account we just created */ fail_unless (change_account_name_in_file (account, file)); mgr = empathy_chatroom_manager_dup_singleton (file); check_chatrooms_list (mgr, account, chatrooms, 2); /* change room2 name */ chatroom = empathy_chatroom_manager_find (mgr, account, "room2"); fail_if (chatroom == NULL); empathy_chatroom_set_name (chatroom, "new_name"); /* reload chatrooms file */ g_object_unref (mgr); mgr = empathy_chatroom_manager_dup_singleton (file); chatrooms[1].name = "new_name"; check_chatrooms_list (mgr, account, chatrooms, 2); /* change room2 auto-connect status */ chatroom = empathy_chatroom_manager_find (mgr, account, "room2"); fail_if (chatroom == NULL); empathy_chatroom_set_auto_connect (chatroom, TRUE); /* reload chatrooms file */ g_object_unref (mgr); mgr = empathy_chatroom_manager_dup_singleton (file); chatrooms[1].auto_connect = TRUE; check_chatrooms_list (mgr, account, chatrooms, 2); /* change room2 room */ chatroom = empathy_chatroom_manager_find (mgr, account, "room2"); fail_if (chatroom == NULL); empathy_chatroom_set_room (chatroom, "new_room"); /* reload chatrooms file */ g_object_unref (mgr); mgr = empathy_chatroom_manager_dup_singleton (file); chatrooms[1].room = "new_room"; check_chatrooms_list (mgr, account, chatrooms, 2); g_object_unref (mgr); g_free (file); g_object_unref (account); g_object_unref (account_manager); }
static void tp_roomlist_got_rooms_cb (TpChannel *channel, const GPtrArray *rooms, gpointer user_data, GObject *list) { EmpathyTpRoomlistPriv *priv = GET_PRIV (list); EmpathyChatroom *chatroom; guint i; GArray *handles = NULL; GSList *chatrooms = NULL; for (i = 0; i < rooms->len; i++) { const GValue *room_name_value; const GValue *handle_name_value; GValueArray *room_struct; guint handle; const gchar *channel_type; GHashTable *info; /* Get information */ room_struct = g_ptr_array_index (rooms, i); handle = g_value_get_uint (g_value_array_get_nth (room_struct, 0)); channel_type = g_value_get_string (g_value_array_get_nth (room_struct, 1)); info = g_value_get_boxed (g_value_array_get_nth (room_struct, 2)); room_name_value = g_hash_table_lookup (info, "name"); handle_name_value = g_hash_table_lookup (info, "handle-name"); if (tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_TEXT)) { continue; } chatroom = empathy_chatroom_new (priv->account); if (room_name_value != NULL) { empathy_chatroom_set_name (chatroom, g_value_get_string (room_name_value)); } if (handle_name_value != NULL) { empathy_chatroom_set_room (chatroom, g_value_get_string (handle_name_value)); /* We have the room ID, we can directly emit it */ g_signal_emit (list, signals[NEW_ROOM], 0, chatroom); g_object_unref (chatroom); } else { /* We don't have the room ID, we'll inspect all handles * at once and then emit rooms */ if (handles == NULL) { handles = g_array_new (FALSE, FALSE, sizeof (guint)); } g_array_append_val (handles, handle); chatrooms = g_slist_prepend (chatrooms, chatroom); } } if (handles != NULL) { chatrooms = g_slist_reverse (chatrooms); tp_cli_connection_call_inspect_handles (priv->connection, -1, TP_HANDLE_TYPE_ROOM, handles, tp_roomlist_inspect_handles_cb, chatrooms, tp_roomlist_chatrooms_free, list); g_array_free (handles, TRUE); } }