Add users in bulk to generate better join-messages in Finch

This commit is contained in:
mjentsch 2015-09-07 00:48:02 +02:00
parent e665729ee2
commit ff2df0861b
3 changed files with 32 additions and 10 deletions

View file

@ -318,22 +318,20 @@ PurpleChat *p2tgl_chat_find (struct tgl_state *TLS, tgl_peer_id_t id) {
return c;
}
void p2tgl_conv_add_user (struct tgl_state *TLS, PurpleConversation *conv,
int user, char *message, int flags, int new_arrival) {
PurpleConvChat *cdata = purple_conversation_get_chat_data(conv);
char *name = g_strdup_printf ("%d", user);
purple_conv_chat_add_user (cdata, name, message, flags, new_arrival);
void p2tgl_conv_add_user_rename (tgl_peer_t *U, PurpleConversation *conv) {
// inject print_name into chat buddies to display a human-readable name
// for buddies not in the buddy list instead of the user id
tgl_peer_t *U = tgl_peer_get (TLS, TGL_MK_USER(user));
if (U) {
char *name = g_strdup_printf("%d", tgl_get_peer_id (U->id));
PurpleConvChatBuddy *cbuddy = purple_conv_chat_cb_find (PURPLE_CONV_CHAT(conv), name);
PurpleConversationUiOps *uiops = purple_conversation_get_ui_ops (conv);
if (cbuddy && cbuddy->alias) {
g_free (cbuddy->alias);
cbuddy->alias = g_strdup (U->print_name);
}
if (uiops && uiops->chat_rename_user) {
debug ("try rename user %s to %s\n", name, U->print_name);
uiops->chat_rename_user (conv, name, name, U->print_name);
@ -341,8 +339,19 @@ void p2tgl_conv_add_user (struct tgl_state *TLS, PurpleConversation *conv,
debug ("try update user %s\n", name);
uiops->chat_update_user (conv, name);
}
g_free (name);
}
}
void p2tgl_conv_add_user (struct tgl_state *TLS, PurpleConversation *conv,
int user, char *message, int flags, int new_arrival) {
PurpleConvChat *cdata = purple_conversation_get_chat_data(conv);
char *name = g_strdup_printf ("%d", user);
purple_conv_chat_add_user (cdata, name, message, flags, new_arrival);
p2tgl_conv_add_user_rename (tgl_peer_get (TLS, TGL_MK_USER(user)), conv);
g_free(name);
}

View file

@ -61,6 +61,7 @@ void p2tgl_prpl_got_set_status_offline (struct tgl_state *TLS, tgl_peer_id_t use
void p2tgl_connection_set_display_name(struct tgl_state *TLS, tgl_peer_t *user);
void p2tgl_conv_del_user (struct tgl_state *TLS, PurpleConversation *conv, const char *message, int userid);
void p2tgl_conv_add_user_rename (tgl_peer_t *U, PurpleConversation *conv);
void p2tgl_conv_add_users (PurpleConversation *conv, struct tgl_chat_user *list);
void p2tgl_conv_add_user (struct tgl_state *TLS, PurpleConversation *conv, int user, char *message, int flags, int new_arrival);
PurpleConversation *p2tgl_find_conversation_with_account (struct tgl_state *TLS, tgl_peer_id_t peer);

View file

@ -53,13 +53,25 @@ static void tgp_chat_on_loaded_chat_full_joining (struct tgl_state *TLS, void *_
}
}
static void tgp_chat_add_all_users (struct tgl_state *TLS, PurpleConversation *pc, struct tgl_chat *C) {
static void tgp_chat_add_all_users (struct tgl_state *TLS, PurpleConversation *conv, struct tgl_chat *C) {
GList *users = NULL,
*flags = NULL;
int i = 0;
for (; i < C->user_list_size; i++) {
struct tgl_chat_user *uid = (C->user_list + i);
int flags = (C->admin_id == uid->user_id ? PURPLE_CBFLAGS_FOUNDER : PURPLE_CBFLAGS_NONE);
p2tgl_conv_add_user (TLS, pc, uid->user_id, NULL, flags, FALSE);
users = g_list_append (users, g_strdup_printf ("%d", uid->user_id));
flags = g_list_append (flags, GINT_TO_POINTER(C->admin_id == uid->user_id ? PURPLE_CBFLAGS_FOUNDER : PURPLE_CBFLAGS_NONE));
}
purple_conv_chat_add_users (PURPLE_CONV_CHAT(conv), users, NULL, flags, FALSE);
while (users) {
p2tgl_conv_add_user_rename (tgl_peer_get (TLS, TGL_MK_USER(atoi (users->data))), conv);
users = g_list_next (users);
}
g_list_free_full (users, g_free);
g_list_free (flags);
}
void tgp_chat_users_update (struct tgl_state *TLS, struct tgl_chat *C) {