Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/EionRobb/skype4pidgin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEion Robb <eion@robbmob.com>2016-12-14 05:41:06 +0300
committerEion Robb <eion@robbmob.com>2016-12-14 05:41:06 +0300
commit00f102c06b95226840b0c26553d926549a1b1a65 (patch)
treee6bcaeac86eaae9f4d6de1b5dcb0045a183b50be /skypeweb
parent92c376f57934b7af4564332e0a1f7a75e0473b4e (diff)
Display server-side errors (if any) when sending messages
Diffstat (limited to 'skypeweb')
-rw-r--r--skypeweb/skypeweb_messages.c25
-rw-r--r--skypeweb/skypeweb_util.c12
-rw-r--r--skypeweb/skypeweb_util.h1
3 files changed, 37 insertions, 1 deletions
diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c
index c8e8a9f..e1763f2 100644
--- a/skypeweb/skypeweb_messages.c
+++ b/skypeweb/skypeweb_messages.c
@@ -1206,6 +1206,29 @@ skypeweb_set_idle(PurpleConnection *pc, int time)
static void
+skypeweb_sent_message_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
+{
+ gchar *convname = user_data;
+ JsonObject *obj = NULL;
+
+ if (node != NULL && json_node_get_node_type(node) == JSON_NODE_OBJECT)
+ obj = json_node_get_object(node);
+
+ if (obj != NULL) {
+ if (json_object_has_member(obj, "errorCode")) {
+ PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, convname, sa->account);
+ if (conv == NULL) {
+ purple_conv_present_error(skypeweb_strip_user_prefix(convname), sa->account, json_object_get_string_member(obj, "message"));
+ } else {
+ purple_conversation_write(conv, NULL, json_object_get_string_member(obj, "message"), PURPLE_MESSAGE_ERROR, time(NULL));
+ }
+ }
+ }
+
+ g_free(convname);
+}
+
+static void
skypeweb_send_message(SkypeWebAccount *sa, const gchar *convname, const gchar *message)
{
gchar *post, *url;
@@ -1238,7 +1261,7 @@ skypeweb_send_message(SkypeWebAccount *sa, const gchar *convname, const gchar *m
post = skypeweb_jsonobj_to_string(obj);
- skypeweb_post_or_get(sa, SKYPEWEB_METHOD_POST | SKYPEWEB_METHOD_SSL, sa->messages_host, url, post, NULL, NULL, TRUE);
+ skypeweb_post_or_get(sa, SKYPEWEB_METHOD_POST | SKYPEWEB_METHOD_SSL, sa->messages_host, url, post, skypeweb_sent_message_cb, g_strdup(convname), TRUE);
g_free(post);
json_object_unref(obj);
diff --git a/skypeweb/skypeweb_util.c b/skypeweb/skypeweb_util.c
index eb94208..2e7c7f9 100644
--- a/skypeweb/skypeweb_util.c
+++ b/skypeweb/skypeweb_util.c
@@ -404,3 +404,15 @@ skypeweb_user_url_prefix(const gchar *who)
return "8:";
}
}
+
+const gchar *
+skypeweb_strip_user_prefix(const gchar *who)
+{
+ if (who[1] == ':') {
+ if (who[0] != '2') {
+ return who + 2;
+ }
+ }
+
+ return who;
+} \ No newline at end of file
diff --git a/skypeweb/skypeweb_util.h b/skypeweb/skypeweb_util.h
index 7ff0b4b..dc46a5a 100644
--- a/skypeweb/skypeweb_util.h
+++ b/skypeweb/skypeweb_util.h
@@ -40,3 +40,4 @@ skypeweb_fetch_url_request(SkypeWebAccount *sa,
void skypeweb_url_prevent_follow_redirects(PurpleUtilFetchUrlData *requestdata);
const gchar *skypeweb_user_url_prefix(const gchar *who);
+const gchar *skypeweb_strip_user_prefix(const gchar *who); \ No newline at end of file