]> git.0d.be Git - empathy.git/commitdiff
Use dbus-error from delivery report for better errors
authorDanielle Madeley <danielle.madeley@collabora.co.uk>
Thu, 21 Apr 2011 05:03:52 +0000 (15:03 +1000)
committerDanielle Madeley <danielle.madeley@collabora.co.uk>
Thu, 5 May 2011 07:23:34 +0000 (17:23 +1000)
libempathy-gtk/empathy-chat.c
libempathy/empathy-tp-chat.c

index 5c8bbce3b4f094e850e7c066c6a05774c1c7fa71..d4e025f8d2261a07bdf6d2a3c8b38c952927f06a 100644 (file)
@@ -1282,31 +1282,41 @@ static void
 chat_send_error_cb (EmpathyTpChat          *tp_chat,
                    const gchar            *message_body,
                    TpChannelTextSendError  error_code,
+                   const gchar            *dbus_error,
                    EmpathyChat            *chat)
 {
-       const gchar *error;
+       const gchar *error = NULL;
        gchar       *str;
 
-       switch (error_code) {
-       case TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE:
-               error = _("offline");
-               break;
-       case TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT:
-               error = _("invalid contact");
-               break;
-       case TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED:
-               error = _("permission denied");
-               break;
-       case TP_CHANNEL_TEXT_SEND_ERROR_TOO_LONG:
-               error = _("too long message");
-               break;
-       case TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED:
-               error = _("not implemented");
-               break;
-       case TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN:
-       default:
-               error = _("unknown");
-               break;
+       if (!tp_strdiff (dbus_error, TP_ERROR_STR_INSUFFICIENT_BALANCE)) {
+               error = _("insufficient balance to send message");
+       } else if (!tp_strdiff (dbus_error, TP_ERROR_STR_NOT_CAPABLE)) {
+               error = _("not capable");
+       }
+
+       if (error == NULL) {
+               /* if we didn't find a dbus-error, try the old error */
+               switch (error_code) {
+               case TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE:
+                       error = _("offline");
+                       break;
+               case TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT:
+                       error = _("invalid contact");
+                       break;
+               case TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED:
+                       error = _("permission denied");
+                       break;
+               case TP_CHANNEL_TEXT_SEND_ERROR_TOO_LONG:
+                       error = _("too long message");
+                       break;
+               case TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED:
+                       error = _("not implemented");
+                       break;
+               case TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN:
+               default:
+                       error = _("unknown");
+                       break;
+               }
        }
 
        if (message_body != NULL) {
index b8e4cdf0cf004d90c0006c9709d672a8f5158931..4b3bca4dfe4afa3c5a4625dcb1edc1e41b33162f 100644 (file)
@@ -322,6 +322,7 @@ handle_delivery_report (EmpathyTpChat *self,
        gboolean valid;
        GPtrArray *echo;
        const gchar *message_body = NULL;
+       const gchar *delivery_dbus_error;
 
        header = tp_message_peek (message, 0);
        if (header == NULL)
@@ -335,6 +336,8 @@ handle_delivery_report (EmpathyTpChat *self,
        if (!valid)
                delivery_error = TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
 
+       delivery_dbus_error = tp_asv_get_string (header, "delivery-dbus-error");
+
        /* TODO: ideally we should use tp-glib API giving us the echoed message as a
         * TpMessage. (fdo #35884) */
        echo = tp_asv_get_boxed (header, "delivery-echo",
@@ -347,7 +350,8 @@ handle_delivery_report (EmpathyTpChat *self,
                        message_body = tp_asv_get_string (echo_body, "content");
        }
 
-       g_signal_emit (self, signals[SEND_ERROR], 0, message_body, delivery_error);
+       g_signal_emit (self, signals[SEND_ERROR], 0, message_body,
+                       delivery_error, delivery_dbus_error);
 
 out:
        tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (priv->channel),
@@ -449,7 +453,7 @@ message_send_cb (GObject *source,
                 * we'll have rebased EmpathyTpChat on top of TpTextChannel we'll be able
                 * to use the user_data pointer to pass the message and fix this. */
                g_signal_emit (chat, signals[SEND_ERROR], 0,
-                              NULL, error_to_text_send_error (error));
+                              NULL, error_to_text_send_error (error), NULL);
 
                g_error_free (error);
        }
@@ -1521,9 +1525,9 @@ empathy_tp_chat_class_init (EmpathyTpChatClass *klass)
                              G_SIGNAL_RUN_LAST,
                              0,
                              NULL, NULL,
-                             _empathy_marshal_VOID__STRING_UINT,
+                             _empathy_marshal_VOID__STRING_UINT_STRING,
                              G_TYPE_NONE,
-                             2, G_TYPE_STRING, G_TYPE_UINT);
+                             3, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING);
 
        signals[CHAT_STATE_CHANGED] =
                g_signal_new ("chat-state-changed",