From 14f1b69b6292bbdc98cca484b050ec8359394c4e Mon Sep 17 00:00:00 2001 From: Eion Robb Date: Thu, 7 Mar 2019 09:41:25 +1300 Subject: Purple3 compat --- skypeweb/libskypeweb.c | 19 +++++++++---------- skypeweb/purplecompat.h | 17 +++++++++++++++++ skypeweb/skypeweb_contacts.c | 41 +++++++++++++++++++++++++++++++++-------- skypeweb/skypeweb_contacts.h | 20 +++++++++++++++++--- skypeweb/skypeweb_messages.c | 6 +++--- 5 files changed, 79 insertions(+), 24 deletions(-) diff --git a/skypeweb/libskypeweb.c b/skypeweb/libskypeweb.c index bb43b96..43a3cbc 100644 --- a/skypeweb/libskypeweb.c +++ b/skypeweb/libskypeweb.c @@ -35,9 +35,9 @@ skypeweb_do_all_the_things(SkypeWebAccount *sa) skypeweb_get_self_details(sa); if (sa->authcheck_timeout) - purple_timeout_remove(sa->authcheck_timeout); + g_source_remove(sa->authcheck_timeout); skypeweb_check_authrequests(sa); - sa->authcheck_timeout = purple_timeout_add_seconds(120, (GSourceFunc)skypeweb_check_authrequests, sa); + sa->authcheck_timeout = g_timeout_add_seconds(120, (GSourceFunc)skypeweb_check_authrequests, sa); purple_connection_set_state(sa->pc, PURPLE_CONNECTION_CONNECTED); skypeweb_get_friend_list(sa); @@ -382,9 +382,9 @@ skypeweb_close(PurpleConnection *pc) sa = purple_connection_get_protocol_data(pc); g_return_if_fail(sa != NULL); - purple_timeout_remove(sa->authcheck_timeout); - purple_timeout_remove(sa->poll_timeout); - purple_timeout_remove(sa->watchdog_timeout); + g_source_remove(sa->authcheck_timeout); + g_source_remove(sa->poll_timeout); + g_source_remove(sa->watchdog_timeout); skypeweb_logout(sa); @@ -891,17 +891,16 @@ skypeweb_protocol_privacy_iface_init(PurpleProtocolPrivacyIface *prpl_info) } static void -skypeweb_protocol_xfer_iface_init(PurpleProtocolXferIface *prpl_info) +skypeweb_protocol_xfer_iface_init(PurpleProtocolXferInterface *prpl_info) { #endif - //PurpleProtocolXferIface + //PurpleProtocolXferInterface prpl_info->new_xfer = skypeweb_new_xfer; -#if !PURPLE_VERSION_CHECK(3, 0, 0) prpl_info->send_file = skypeweb_send_file; +#if !PURPLE_VERSION_CHECK(3, 0, 0) prpl_info->can_receive_file = skypeweb_can_receive_file; #else - prpl_info->send = skypeweb_send_file; prpl_info->can_receive = skypeweb_can_receive_file; #endif @@ -973,7 +972,7 @@ PURPLE_DEFINE_TYPE_EXTENDED( PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST_IFACE, skypeweb_protocol_roomlist_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER_IFACE, + PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER, skypeweb_protocol_xfer_iface_init) ); diff --git a/skypeweb/purplecompat.h b/skypeweb/purplecompat.h index d545685..c6afb9b 100644 --- a/skypeweb/purplecompat.h +++ b/skypeweb/purplecompat.h @@ -122,6 +122,18 @@ purple_message_new_outgoing(const gchar *who, const gchar *contents, PurpleMessa return message; } static inline PurpleMessage * +purple_message_new_incoming(const gchar *who, const gchar *contents, PurpleMessageFlags flags, guint64 timestamp) +{ + PurpleMessage *message = g_new0(PurpleMessage, 1); + + message->who = g_strdup(who); + message->what = g_strdup(contents); + message->flags = flags | PURPLE_MESSAGE_RECV; + message->when = timestamp; + + return message; +} +static inline PurpleMessage * purple_message_new_system(const gchar *contents, PurpleMessageFlags flags) { PurpleMessage *message = g_new0(PurpleMessage, 1); @@ -255,6 +267,11 @@ purple_xfer_read_file(PurpleXfer *xfer, guchar *buffer, gsize size) { #define PURPLE_XFER_TYPE_RECEIVE PURPLE_XFER_RECEIVE #define PURPLE_XFER_TYPE_SEND PURPLE_XFER_SEND +// Kinda gross, since we can technically use the glib mainloop from purple2 +#define g_timeout_add_seconds purple_timeout_add_seconds +#define g_timeout_add purple_timeout_add +#define g_source_remove purple_timeout_remove + #endif #endif /*_PURPLECOMPAT_H_*/ diff --git a/skypeweb/skypeweb_contacts.c b/skypeweb/skypeweb_contacts.c index e6623e8..14cfdcb 100644 --- a/skypeweb/skypeweb_contacts.c +++ b/skypeweb/skypeweb_contacts.c @@ -36,7 +36,16 @@ static void purple_conversation_write_system_message_ts( static void purple_conversation_write_img_message( PurpleConversation *conv, const char* who, const gchar *msg, PurpleMessageFlags flags, time_t ts) { - purple_conversation_write(conv, who, msg, flags, ts); + PurpleMessage *pmsg; + + if (flags & PURPLE_MESSAGE_SEND) { + pmsg = purple_message_new_outgoing(who, msg, flags); + purple_message_set_time(pmsg, ts); + } else { + pmsg = purple_message_new_incoming(who, msg, flags, ts); + } + + purple_conversation_write_message(conv, pmsg); } // Check that the conversation hasn't been closed @@ -126,7 +135,7 @@ skypeweb_get_icon(PurpleBuddy *buddy) { if (!buddy) return; - purple_timeout_add(100, skypeweb_get_icon_queuepop, (gpointer)buddy); + g_timeout_add(100, skypeweb_get_icon_queuepop, (gpointer)buddy); } typedef struct SkypeImgMsgContext_ { @@ -640,7 +649,7 @@ skypeweb_xfer_send_contents_reader(PurpleHttpConnection *con, gchar *buf, size_t PurpleXfer *xfer = swft->xfer; gsize read; - purple_debug_info("skypeweb", "Asked %" PRI_SIZET " bytes from offset %" PRI_SIZET "\n", len, offset); + purple_debug_info("skypeweb", "Asked %" G_GSIZE_FORMAT " bytes from offset %" G_GSIZE_FORMAT "\n", len, offset); purple_xfer_set_bytes_sent(xfer, offset); read = purple_xfer_read_file(xfer, (guchar *)buf, len); purple_debug_info("skypeweb", "Read %" G_GSIZE_FORMAT " bytes\n", read); @@ -657,7 +666,7 @@ skypeweb_xfer_send_done(PurpleHttpConnection *conn, PurpleHttpResponse *resp, gp int code = purple_http_response_get_code(resp); purple_debug_info("skypeweb", "Finished [%d]: %s\n", code, error); purple_debug_info("skypeweb", "Server message: %s\n", data); - purple_timeout_add_seconds(1, poll_file_send_progress, user_data); + g_timeout_add_seconds(1, poll_file_send_progress, user_data); } static void @@ -788,7 +797,11 @@ skypeweb_xfer_send_init(PurpleXfer *xfer) } PurpleXfer * -skypeweb_new_xfer(PurpleConnection *pc, const char *who) +skypeweb_new_xfer( +#if PURPLE_VERSION_CHECK(3, 0, 0) +PurpleProtocolXfer *prplxfer, +#endif +PurpleConnection *pc, const char *who) { SkypeWebAccount *sa = purple_connection_get_protocol_data(pc); PurpleXfer *xfer; @@ -812,9 +825,17 @@ skypeweb_new_xfer(PurpleConnection *pc, const char *who) } void -skypeweb_send_file(PurpleConnection *pc, const gchar *who, const gchar *filename) +skypeweb_send_file( +#if PURPLE_VERSION_CHECK(3, 0, 0) +PurpleProtocolXfer *prplxfer, +#endif +PurpleConnection *pc, const gchar *who, const gchar *filename) { - PurpleXfer *xfer = skypeweb_new_xfer(pc, who); + PurpleXfer *xfer = skypeweb_new_xfer( +#if PURPLE_VERSION_CHECK(3, 0, 0) + prplxfer, +#endif + pc, who); if (filename && *filename) purple_xfer_request_accepted(xfer, filename); @@ -823,7 +844,11 @@ skypeweb_send_file(PurpleConnection *pc, const gchar *who, const gchar *filename } gboolean -skypeweb_can_receive_file(PurpleConnection *pc, const gchar *who) +skypeweb_can_receive_file( +#if PURPLE_VERSION_CHECK(3, 0, 0) +PurpleProtocolXfer *prplxfer, +#endif +PurpleConnection *pc, const gchar *who) { if (!who || g_str_equal(who, purple_account_get_username(purple_connection_get_account(pc)))) return FALSE; diff --git a/skypeweb/skypeweb_contacts.h b/skypeweb/skypeweb_contacts.h index 6d837a1..885f865 100644 --- a/skypeweb/skypeweb_contacts.h +++ b/skypeweb/skypeweb_contacts.h @@ -27,9 +27,23 @@ void skypeweb_download_video_message(SkypeWebAccount *sa, const gchar *sid, Purp void skypeweb_download_moji_to_conv(SkypeWebAccount *sa, const gchar *text, const gchar *url_thumbnail, PurpleConversation *conv, time_t ts, const gchar* from); void skypeweb_present_uri_as_filetransfer(SkypeWebAccount *sa, const gchar *uri, const gchar *from); -PurpleXfer *skypeweb_new_xfer(PurpleConnection *pc, const char *who); -void skypeweb_send_file(PurpleConnection *pc, const gchar *who, const gchar *filename); -gboolean skypeweb_can_receive_file(PurpleConnection *pc, const gchar *who); +PurpleXfer *skypeweb_new_xfer( +#if PURPLE_VERSION_CHECK(3, 0, 0) +PurpleProtocolXfer *prplxfer, +#endif +PurpleConnection *pc, const char *who); + +void skypeweb_send_file( +#if PURPLE_VERSION_CHECK(3, 0, 0) +PurpleProtocolXfer *prplxfer, +#endif +PurpleConnection *pc, const gchar *who, const gchar *filename); + +gboolean skypeweb_can_receive_file( +#if PURPLE_VERSION_CHECK(3, 0, 0) +PurpleProtocolXfer *prplxfer, +#endif +PurpleConnection *pc, const gchar *who); void skypeweb_search_users(PurpleProtocolAction *action); diff --git a/skypeweb/skypeweb_messages.c b/skypeweb/skypeweb_messages.c index aa29c58..233a998 100644 --- a/skypeweb/skypeweb_messages.c +++ b/skypeweb/skypeweb_messages.c @@ -684,8 +684,8 @@ skypeweb_timeout(gpointer userdata) skypeweb_poll(sa); // If no response within 3 minutes, assume connection lost and try again - purple_timeout_remove(sa->watchdog_timeout); - sa->watchdog_timeout = purple_timeout_add_seconds(3 * 60, skypeweb_timeout, sa); + g_source_remove(sa->watchdog_timeout); + sa->watchdog_timeout = g_timeout_add_seconds(3 * 60, skypeweb_timeout, sa); return FALSE; } @@ -758,7 +758,7 @@ skypeweb_poll_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_data) } if (!purple_connection_is_disconnecting(sa->pc)) { - sa->poll_timeout = purple_timeout_add_seconds(1, skypeweb_timeout, sa); + sa->poll_timeout = g_timeout_add_seconds(1, skypeweb_timeout, sa); } } -- cgit v1.2.3