diff options
author | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-05-20 22:21:46 +0800 |
---|---|---|
committer | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-05-20 22:21:46 +0800 |
commit | 03c369462e1ad4926c66d0a9cef218021b0a14ba (patch) | |
tree | 1392d2191071302b06e9de49e674ac65f7bd9d2a | |
parent | 4e5b9ef6ef5bd395d603e065cd2ac576bcd10df2 (diff) | |
parent | 3f0f8282298f6a13b7866548ccd64d3285e05a9b (diff) | |
download | gsoc2013-empathy-03c369462e1ad4926c66d0a9cef218021b0a14ba.tar gsoc2013-empathy-03c369462e1ad4926c66d0a9cef218021b0a14ba.tar.gz gsoc2013-empathy-03c369462e1ad4926c66d0a9cef218021b0a14ba.tar.bz2 gsoc2013-empathy-03c369462e1ad4926c66d0a9cef218021b0a14ba.tar.lz gsoc2013-empathy-03c369462e1ad4926c66d0a9cef218021b0a14ba.tar.xz gsoc2013-empathy-03c369462e1ad4926c66d0a9cef218021b0a14ba.tar.zst gsoc2013-empathy-03c369462e1ad4926c66d0a9cef218021b0a14ba.zip |
Merge branch 'sms-topup-154-2' into empathy-skype
-rw-r--r-- | libempathy-gtk/empathy-chat-view.c | 16 | ||||
-rw-r--r-- | libempathy-gtk/empathy-chat-view.h | 6 | ||||
-rw-r--r-- | libempathy-gtk/empathy-chat.c | 60 | ||||
-rw-r--r-- | libempathy-gtk/empathy-theme-adium.c | 9 |
4 files changed, 90 insertions, 1 deletions
diff --git a/libempathy-gtk/empathy-chat-view.c b/libempathy-gtk/empathy-chat-view.c index ada669885..720ff2bbf 100644 --- a/libempathy-gtk/empathy-chat-view.c +++ b/libempathy-gtk/empathy-chat-view.c @@ -84,6 +84,22 @@ empathy_chat_view_append_event (EmpathyChatView *view, } void +empathy_chat_view_append_event_markup (EmpathyChatView *view, + const gchar *markup_text, + const gchar *fallback_text) +{ + g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view)); + + if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->append_event_markup) { + EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->append_event_markup (view, + markup_text, + fallback_text); + } else { + empathy_chat_view_append_event (view, fallback_text); + } +} + +void empathy_chat_view_scroll (EmpathyChatView *view, gboolean allow_scrolling) { diff --git a/libempathy-gtk/empathy-chat-view.h b/libempathy-gtk/empathy-chat-view.h index 96365a618..d25797db5 100644 --- a/libempathy-gtk/empathy-chat-view.h +++ b/libempathy-gtk/empathy-chat-view.h @@ -46,6 +46,9 @@ struct _EmpathyChatViewIface { EmpathyMessage *msg); void (*append_event) (EmpathyChatView *view, const gchar *str); + void (*append_event_markup) (EmpathyChatView *view, + const gchar *markup_text, + const gchar *fallback_text); void (*scroll) (EmpathyChatView *view, gboolean allow_scrolling); void (*scroll_down) (EmpathyChatView *view); @@ -75,6 +78,9 @@ void empathy_chat_view_append_message (EmpathyChatView *view, EmpathyMessage *msg); void empathy_chat_view_append_event (EmpathyChatView *view, const gchar *str); +void empathy_chat_view_append_event_markup (EmpathyChatView *view, + const gchar *markup_text, + const gchar *fallback_text); void empathy_chat_view_scroll (EmpathyChatView *view, gboolean allow_scrolling); void empathy_chat_view_scroll_down (EmpathyChatView *view); diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index fd43473dd..1063ad196 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -1200,6 +1200,57 @@ chat_message_received_cb (EmpathyTpChat *tp_chat, } static void +got_credit_uri_prop (TpProxy *proxy, + const GValue *value, + const GError *in_error, + gpointer user_data, + GObject *weak_object) +{ + EmpathyChat *chat = EMPATHY_CHAT (weak_object); + const gchar *uri = g_value_get_string (value); + const gchar *error = _("insufficient balance to send message"); + const gchar *message_body = user_data; + gchar *str, *str_markup = NULL; + + if (in_error != NULL) { + DEBUG ("Failed to get ManageCreditURI: %s", in_error->message); + /* Not fatal, just don't display a 'Top up' link */ + } + + if (message_body != NULL) { + str = g_strdup_printf (_("Error sending message '%s': %s"), message_body, error); + } else { + str = g_strdup_printf (_("Error sending message: %s"), error); + } + + if (!tp_str_empty (uri)) { + gchar *markup_error = g_strdup_printf (_("insufficient balance to send message." + " <a href='%s'>Top up</a>."), uri); + + if (message_body != NULL) { + gchar *escaped_body = g_markup_escape_text (message_body, -1); + + str_markup = g_strdup_printf (_("Error sending message '%s': %s"), + escaped_body, markup_error); + + g_free (escaped_body); + } else { + str_markup = g_strdup_printf (_("Error sending message: %s"), markup_error); + } + + g_free (markup_error); + } + + if (str_markup != NULL) + empathy_chat_view_append_event_markup (chat->view, str_markup, str); + else + empathy_chat_view_append_event (chat->view, str); + + g_free (str); + g_free (str_markup); +} + +static void chat_send_error_cb (EmpathyTpChat *tp_chat, const gchar *message_body, TpChannelTextSendError error_code, @@ -1210,7 +1261,14 @@ chat_send_error_cb (EmpathyTpChat *tp_chat, gchar *str; if (!tp_strdiff (dbus_error, TP_ERROR_STR_INSUFFICIENT_BALANCE)) { - error = _("insufficient balance to send message"); + tp_cli_dbus_properties_call_get ( + empathy_tp_chat_get_connection (tp_chat), + -1, + TP_IFACE_CONNECTION_INTERFACE_BALANCE, + "ManageCreditURI", + got_credit_uri_prop, + g_strdup (message_body), g_free, G_OBJECT (chat)); + return; } else if (!tp_strdiff (dbus_error, TP_ERROR_STR_NOT_CAPABLE)) { error = _("not capable"); } diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c index 88672554f..d22ef2695 100644 --- a/libempathy-gtk/empathy-theme-adium.c +++ b/libempathy-gtk/empathy-theme-adium.c @@ -631,6 +631,14 @@ theme_adium_append_event (EmpathyChatView *view, } static void +theme_adium_append_event_markup (EmpathyChatView *view, + const gchar *markup_text, + const gchar *fallback_text) +{ + theme_adium_append_event_escaped (view, markup_text); +} + +static void theme_adium_scroll (EmpathyChatView *view, gboolean allow_scrolling) { @@ -840,6 +848,7 @@ theme_adium_iface_init (EmpathyChatViewIface *iface) { iface->append_message = theme_adium_append_message; iface->append_event = theme_adium_append_event; + iface->append_event_markup = theme_adium_append_event_markup; iface->scroll = theme_adium_scroll; iface->scroll_down = theme_adium_scroll_down; iface->get_has_selection = theme_adium_get_has_selection; |