From e872b34aae903f2f9193d7a8f0867e852dc9ddf6 Mon Sep 17 00:00:00 2001 From: vitalyster Date: Thu, 31 Dec 2015 00:56:12 +0000 Subject: [PATCH] libpurple: forward roomlist to frontend --- backends/libpurple/main.cpp | 36 ++++++++++++++++++++++++++++-- backends/libpurple/purple_defs.cpp | 10 +++++++++ backends/libpurple/purple_defs.h | 8 +++++++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 05c74b0b..6d5823c8 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -1567,6 +1567,35 @@ static PurpleXferUiOps xferUiOps = NULL }; +static void RoomlistProgress(PurpleRoomlist *list, gboolean in_progress) +{ + if (!in_progress) + { + GList *rooms; + std::list m_rooms; + for (rooms = list->rooms; rooms != NULL; rooms = rooms->next) + { + PurpleRoomlistRoom *room = (PurpleRoomlistRoom *)rooms->data; + m_rooms.push_back(room->name); + } + np->handleRoomList("", m_rooms, m_rooms); + } +} + +static PurpleRoomlistUiOps roomlist_ui_ops = +{ + NULL, + NULL, + NULL, + NULL, + RoomlistProgress, + NULL, + NULL, + NULL, + NULL, + NULL +}; + static void transport_core_ui_init(void) { purple_blist_set_ui_ops_wrapped(&blistUiOps); @@ -1576,6 +1605,8 @@ static void transport_core_ui_init(void) purple_xfers_set_ui_ops_wrapped(&xferUiOps); purple_connections_set_ui_ops_wrapped(&conn_ui_ops); purple_conversations_set_ui_ops_wrapped(&conversation_ui_ops); + purple_roomlist_set_ui_ops_wrapped(&roomlist_ui_ops); + // #ifndef WIN32 // purple_dnsquery_set_ui_ops_wrapped(getDNSUiOps()); // #endif @@ -1672,7 +1703,8 @@ static void signed_on(PurpleConnection *gc, gpointer unused) { malloc_trim(0); #endif #endif - + purple_roomlist_get_list_wrapped(gc); + // For prpl-gg execute_purple_plugin_action(gc, "Download buddylist from Server"); } @@ -1848,7 +1880,7 @@ static void transportDataReceived(gpointer data, gint source, PurpleInputConditi if (firstPing) { firstPing = false; - NetworkPlugin::PluginConfig cfg; + NetworkPlugin::PluginConfig cfg; cfg.setSupportMUC(true); if (CONFIG_STRING(config, "service.protocol") == "prpl-telegram") { cfg.setNeedPassword(false); diff --git a/backends/libpurple/purple_defs.cpp b/backends/libpurple/purple_defs.cpp index 9afee6c7..12503822 100644 --- a/backends/libpurple/purple_defs.cpp +++ b/backends/libpurple/purple_defs.cpp @@ -100,6 +100,8 @@ purple_xfer_unref_wrapped_fnc purple_xfer_unref_wrapped = NULL; purple_xfer_ref_wrapped_fnc purple_xfer_ref_wrapped = NULL; purple_xfers_set_ui_ops_wrapped_fnc purple_xfers_set_ui_ops_wrapped = NULL; purple_xfers_get_handle_wrapped_fnc purple_xfers_get_handle_wrapped = NULL; +purple_roomlist_set_ui_ops_wrapped_fnc purple_roomlist_set_ui_ops_wrapped = NULL; +purple_roomlist_get_list_wrapped_fnc purple_roomlist_get_list_wrapped = NULL; purple_imgstore_get_data_wrapped_fnc purple_imgstore_get_data_wrapped = NULL; purple_imgstore_get_size_wrapped_fnc purple_imgstore_get_size_wrapped = NULL; purple_imgstore_unref_wrapped_fnc purple_imgstore_unref_wrapped = NULL; @@ -542,6 +544,14 @@ bool resolvePurpleFunctions() { if (!purple_xfers_get_handle_wrapped) return false; + purple_roomlist_set_ui_ops_wrapped = (purple_roomlist_set_ui_ops_wrapped_fnc)GetProcAddress(f_hPurple, "purple_roomlist_set_ui_ops"); + if (!purple_roomlist_set_ui_ops_wrapped) + return false; + + purple_roomlist_get_list_wrapped = (purple_roomlist_get_list_wrapped_fnc)GetProcAddress(f_hPurple, "purple_roomlist_get_list"); + if (!purple_roomlist_get_list_wrapped) + return false; + purple_imgstore_get_data_wrapped = (purple_imgstore_get_data_wrapped_fnc)GetProcAddress(f_hPurple, "purple_imgstore_get_data"); if (!purple_imgstore_get_data_wrapped) return false; diff --git a/backends/libpurple/purple_defs.h b/backends/libpurple/purple_defs.h index 56607ea0..43c25e6c 100644 --- a/backends/libpurple/purple_defs.h +++ b/backends/libpurple/purple_defs.h @@ -314,6 +314,12 @@ extern purple_xfers_set_ui_ops_wrapped_fnc purple_xfers_set_ui_ops_wrapped; typedef void * (_cdecl * purple_xfers_get_handle_wrapped_fnc)(void); extern purple_xfers_get_handle_wrapped_fnc purple_xfers_get_handle_wrapped; +typedef void (_cdecl * purple_roomlist_set_ui_ops_wrapped_fnc)(PurpleRoomlistUiOps *ops); +extern purple_roomlist_set_ui_ops_wrapped_fnc purple_roomlist_set_ui_ops_wrapped; + +typedef PurpleRoomlist * (_cdecl * purple_roomlist_get_list_wrapped_fnc)(PurpleConnection *con); +extern purple_roomlist_get_list_wrapped_fnc purple_roomlist_get_list_wrapped; + typedef gconstpointer (_cdecl * purple_imgstore_get_data_wrapped_fnc)(PurpleStoredImage *img); extern purple_imgstore_get_data_wrapped_fnc purple_imgstore_get_data_wrapped; @@ -560,6 +566,8 @@ extern wpurple_g_io_channel_win32_new_socket_wrapped_fnc wpurple_g_io_channel_wi #define purple_xfer_ref_wrapped purple_xfer_ref #define purple_xfers_set_ui_ops_wrapped purple_xfers_set_ui_ops #define purple_xfers_get_handle_wrapped purple_xfers_get_handle +#define purple_roomlist_set_ui_ops_wrapped purple_roomlist_set_ui_ops +#define purple_roomlist_get_list_wrapped purple_roomlist_get_list #define purple_imgstore_get_data_wrapped purple_imgstore_get_data #define purple_imgstore_get_size_wrapped purple_imgstore_get_size #define purple_imgstore_unref_wrapped purple_imgstore_unref