aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2011-05-20 22:21:46 +0800
committerEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2011-05-20 22:21:46 +0800
commit03c369462e1ad4926c66d0a9cef218021b0a14ba (patch)
tree1392d2191071302b06e9de49e674ac65f7bd9d2a
parent4e5b9ef6ef5bd395d603e065cd2ac576bcd10df2 (diff)
parent3f0f8282298f6a13b7866548ccd64d3285e05a9b (diff)
downloadgsoc2013-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.c16
-rw-r--r--libempathy-gtk/empathy-chat-view.h6
-rw-r--r--libempathy-gtk/empathy-chat.c60
-rw-r--r--libempathy-gtk/empathy-theme-adium.c9
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;