Skip to content

Commit

Permalink
Allow joining of chats in BitlBee
Browse files Browse the repository at this point in the history
Required

* adding chat_info_defaults function,
* making sure name field is set to remoteJid in defaults.

Also commented out a purple_roomlist_room_add_field call when getting
the room list: the current implementation only has two fields, but three
were being added.
  • Loading branch information
yourealwaysbe committed Feb 7, 2022
1 parent 4c1021b commit bc2f2ed
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 8 deletions.
2 changes: 2 additions & 0 deletions src/c/gowhatsapp.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ PurpleRoomlist *gowhatsapp_roomlist_get_list(PurpleConnection *pc);
void gowhatsapp_set_chat_topic(PurpleConnection *pc, int id, const char *topic);
gchar *gowhatsapp_roomlist_serialize(PurpleRoomlistRoom *room);
GList * gowhatsapp_chat_info(PurpleConnection *pc);
GHashTable * gowhatsapp_chat_info_defaults(PurpleConnection *pc, const char *remoteJid);


// blist
void gowhatsapp_ensure_buddy_in_blist(PurpleAccount *account, char *remoteJid, char *display_name);
Expand Down
41 changes: 36 additions & 5 deletions src/c/groups.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ gowhatsapp_roomlist_get_list(PurpleConnection *pc) {
PurpleAccount *account = purple_connection_get_account(pc);
PurpleRoomlist *roomlist = purple_roomlist_new(account);
purple_roomlist_set_in_progress(roomlist, TRUE);

GList *fields = NULL;
// order is important (see description)
fields = g_list_append(fields, purple_roomlist_field_new(
Expand All @@ -82,12 +82,12 @@ gowhatsapp_roomlist_get_list(PurpleConnection *pc) {
* It gets overwritten in purple_roomlist_room_join, see libpurple/roomlist.c.
* Also, some services like spectrum expect the human readable group name to be "topic",
* see RoomlistProgress in https://github.com/SpectrumIM/spectrum2/blob/518ba5a/backends/libpurple/main.cpp#L1997
*/
*/
fields = g_list_append(fields, purple_roomlist_field_new(
PURPLE_ROOMLIST_FIELD_STRING, "Group Name", "topic", FALSE
));
purple_roomlist_set_fields(roomlist, fields);

gowhatsapp_group_info_t *group_infos = gowhatsapp_go_get_joined_groups(account);
for (gowhatsapp_group_info_t *group_info = group_infos; group_info->remoteJid != NULL; group_info++) {
//purple_debug_info(GOWHATSAPP_NAME, "group_info: remoteJid: %s, name: %s, topic: %s", group_info->remoteJid, group_info->name, group_info->topic);
Expand All @@ -96,10 +96,10 @@ gowhatsapp_roomlist_get_list(PurpleConnection *pc) {
// order is important (see description)
purple_roomlist_room_add_field(roomlist, room, group_info->remoteJid);
purple_roomlist_room_add_field(roomlist, room, group_info->name);
purple_roomlist_room_add_field(roomlist, room, group_info->topic);
//purple_roomlist_room_add_field(roomlist, room, group_info->topic);

purple_roomlist_room_add(roomlist, room);

// purple_roomlist_room_add_field does a strdup, free strings here
g_free(group_info->remoteJid);
g_free(group_info->name);
Expand Down Expand Up @@ -148,6 +148,37 @@ GList * gowhatsapp_chat_info(PurpleConnection *pc)
return infos;
}

GHashTable * gowhatsapp_chat_info_defaults(
PurpleConnection *pc, const char *remoteJid
) {
GHashTable *defaults = g_hash_table_new_full(
g_str_hash, g_str_equal, NULL, g_free
);

if (remoteJid != NULL) {
// don't really understand this chat name, assume it's just
// the remoteJid
g_hash_table_insert(defaults, "name", g_strdup(remoteJid));
g_hash_table_insert(defaults, "remoteJid", g_strdup(remoteJid));

g_hash_table_insert(defaults, "topic", g_strdup(""));

PurpleAccount *account = purple_connection_get_account(pc);
PurpleChat *chat = purple_blist_find_chat(account, remoteJid);
if (chat != NULL) {
GHashTable *components = purple_chat_get_components(chat);
const gchar *topic = g_hash_table_lookup(
components, "topic"
);
if (topic != NULL) {
g_hash_table_insert(defaults, "topic", g_strdup(topic));
}
}
}

return defaults;
}

/*
* Borrowed from
* https://github.com/hoehermann/libpurple-signald/blob/master/groups.c
Expand Down
1 change: 1 addition & 0 deletions src/c/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ plugin_init(PurplePlugin *plugin)
prpl_info->send_im = gowhatsapp_send_im;
// group-chat related functions
prpl_info->chat_info = gowhatsapp_chat_info;
prpl_info->chat_info_defaults = gowhatsapp_chat_info_defaults;
prpl_info->join_chat = gowhatsapp_join_chat;
prpl_info->get_chat_name = gowhatsapp_get_chat_name;
prpl_info->find_blist_chat = gowhatsapp_find_blist_chat;
Expand Down
6 changes: 3 additions & 3 deletions src/c/login.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ void
gowhatsapp_login(PurpleAccount *account)
{
PurpleConnection *pc = purple_account_get_connection(account);

// this protocol does not support anything special right now
PurpleConnectionFlags pc_flags;
pc_flags = purple_connection_get_flags(pc);
Expand All @@ -22,7 +22,7 @@ gowhatsapp_login(PurpleAccount *account)
char *username = (char *)purple_account_get_username(account); // cgo does not suport const
char *user_dir = (char *)purple_user_dir(); // cgo does not suport const
gowhatsapp_go_login(account, user_dir, username, (char *)credentials); // cgo does not suport const

gowhatsapp_receipts_init(pc);
}

Expand All @@ -39,7 +39,7 @@ purple_account_set_credentials(PurpleAccount *account, char *credentials)
// Pidgin stores the credentials in the account settings
// in bitlbee, this has no effect
purple_account_set_string(account, GOWHATSAPP_CREDENTIALS_KEY, credentials);

// bitlbee stores credentials in password field
// in Pidgin, these lines have no effect
purple_account_set_password(account, credentials);
Expand Down

0 comments on commit bc2f2ed

Please sign in to comment.