diff options
Diffstat (limited to 'libempathy-gtk/empathy-chat.c')
-rw-r--r-- | libempathy-gtk/empathy-chat.c | 81 |
1 files changed, 66 insertions, 15 deletions
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 9c5e47b0e..1729e5305 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -64,7 +64,7 @@ #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChat) typedef struct { EmpathyTpChat *tp_chat; - McAccount *account; + EmpathyAccount *account; gchar *id; gchar *name; gchar *subject; @@ -201,7 +201,7 @@ chat_new_connection_cb (EmpathyAccountManager *manager, EmpathyChat *chat) { EmpathyChatPriv *priv = GET_PRIV (chat); - McAccount *account; + EmpathyAccount *account; account = empathy_account_manager_get_account (manager, connection); if (!priv->tp_chat && empathy_account_equal (account, priv->account) && @@ -1161,6 +1161,56 @@ chat_contacts_completion_func (const gchar *s1, return ret; } +static gchar * +build_part_message (guint reason, + const gchar *name, + EmpathyContact *actor, + const gchar *message) +{ + GString *s = g_string_new (""); + const gchar *actor_name = NULL; + + if (actor != NULL) { + actor_name = empathy_contact_get_name (actor); + } + + /* Having an actor only really makes sense for a few actions... */ + switch (reason) { + case TP_CHANNEL_GROUP_CHANGE_REASON_OFFLINE: + g_string_append_printf (s, _("%s has disconnected"), name); + break; + case TP_CHANNEL_GROUP_CHANGE_REASON_KICKED: + if (actor_name != NULL) { + g_string_append_printf (s, _("%s was kicked by %s"), + name, actor_name); + } else { + g_string_append_printf (s, _("%s was kicked"), name); + } + break; + case TP_CHANNEL_GROUP_CHANGE_REASON_BANNED: + if (actor_name != NULL) { + g_string_append_printf (s, _("%s was banned by %s"), + name, actor_name); + } else { + g_string_append_printf (s, _("%s was banned"), name); + } + break; + default: + g_string_append_printf (s, _("%s has left the room"), name); + } + + if (!EMP_STR_EMPTY (message)) { + /* Note to translators: this string is appended to + * notifications like "foo has left the room", with the message + * given by the user living the room. If this poses a problem, + * please let us know. :-) + */ + g_string_append_printf (s, _(" (%s)"), message); + } + + return g_string_free (s, FALSE); +} + static void chat_members_changed_cb (EmpathyTpChat *tp_chat, EmpathyContact *contact, @@ -1171,20 +1221,21 @@ chat_members_changed_cb (EmpathyTpChat *tp_chat, EmpathyChat *chat) { EmpathyChatPriv *priv = GET_PRIV (chat); + const gchar *name = empathy_contact_get_name (contact); + gchar *str; - if (priv->block_events_timeout_id == 0) { - gchar *str; + if (priv->block_events_timeout_id != 0) + return; - if (is_member) { - str = g_strdup_printf (_("%s has joined the room"), - empathy_contact_get_name (contact)); - } else { - str = g_strdup_printf (_("%s has left the room"), - empathy_contact_get_name (contact)); - } - empathy_chat_view_append_event (chat->view, str); - g_free (str); + if (is_member) { + str = g_strdup_printf (_("%s has joined the room"), + name); + } else { + str = build_part_message (reason, name, actor, message); } + + empathy_chat_view_append_event (chat->view, str); + g_free (str); } static gboolean @@ -1562,7 +1613,7 @@ empathy_chat_class_init (EmpathyChatClass *klass) g_param_spec_object ("account", "Account of the chat", "The account of the chat", - MC_TYPE_ACCOUNT, + EMPATHY_TYPE_ACCOUNT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, @@ -1753,7 +1804,7 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, show_pending_messages (chat); } -McAccount * +EmpathyAccount * empathy_chat_get_account (EmpathyChat *chat) { EmpathyChatPriv *priv = GET_PRIV (chat); |