void p2tgl_blist_alias_buddy (PurpleBuddy *buddy, struct tgl_user *user) { char *name = p2tgl_strdup_alias ((tgl_peer_t *) user); purple_blist_alias_buddy (buddy, name); g_free(name); }
PurpleConversation *p2tgl_got_joined_chat (struct tgl_state *TLS, struct tgl_chat *chat) { telegram_conn *conn = TLS->ev_base; gchar *alias = p2tgl_strdup_alias((tgl_peer_t *)chat); PurpleConversation *conv = serv_got_joined_chat(conn->gc, tgl_get_peer_id(chat->id), alias); g_free(alias); return conv; }
PurpleBuddy *p2tgl_buddy_new (struct tgl_state *TLS, tgl_peer_t *user) { char *alias = p2tgl_strdup_alias (user); char *name = peer_strdup_id (user->id); PurpleBuddy *b = purple_buddy_new(tg_get_acc(TLS), name, alias); g_free (alias); g_free (name); return b; }
PurpleBuddy *p2tgl_buddy_update (struct tgl_state *TLS, tgl_peer_t *user, unsigned flags) { PurpleBuddy *b = p2tgl_buddy_find (TLS, user->id); if (!b) { b = p2tgl_buddy_new (TLS, user); } if (flags & TGL_UPDATE_NAME) { debug ("Update username for id%d (name %s %s)\n", tgl_get_peer_id (user->id), user->user.first_name, user->user.last_name); char *alias = p2tgl_strdup_alias (user); purple_blist_alias_buddy(b, alias); g_free (alias); } return b; }
static char *format_service_msg (struct tgl_state *TLS, struct tgl_message *M) { assert (M && M->service); char *txt_user = NULL; char *txt_action = NULL; char *txt = NULL; tgl_peer_t *peer = tgl_peer_get (TLS, M->from_id); if (! peer) { return NULL; } txt_user = p2tgl_strdup_alias (peer); switch (M->action.type) { case tgl_message_action_chat_create: txt_action = g_strdup_printf ("created chat %s", M->action.title); break; case tgl_message_action_chat_edit_title: txt_action = g_strdup_printf ("changed title to %s", M->action.new_title); break; case tgl_message_action_chat_edit_photo: txt_action = g_strdup ("changed photo"); break; case tgl_message_action_chat_delete_photo: txt_action = g_strdup ("deleted photo"); break; case tgl_message_action_chat_add_user: { tgl_peer_t *peer = tgl_peer_get (TLS, TGL_MK_USER (M->action.user)); if (peer) { char *alias = p2tgl_strdup_alias (peer); txt_action = g_strdup_printf ("added user %s", alias); g_free (alias); } break; } case tgl_message_action_chat_delete_user: { tgl_peer_t *peer = tgl_peer_get (TLS, TGL_MK_USER (M->action.user)); if (peer) { char *alias = p2tgl_strdup_alias (peer); txt_action = g_strdup_printf ("deleted user %s", alias); g_free (alias); } break; } case tgl_message_action_set_message_ttl: txt_action = g_strdup_printf ("set ttl to %d seconds", M->action.ttl); break; case tgl_message_action_read_messages: txt_action = g_strdup_printf ("%d messages marked read", M->action.read_cnt); break; case tgl_message_action_delete_messages: txt_action = g_strdup_printf ("%d messages deleted", M->action.delete_cnt); break; case tgl_message_action_screenshot_messages: txt_action = g_strdup_printf ("%d messages screenshoted", M->action.screenshot_cnt); break; case tgl_message_action_notify_layer: txt_action = g_strdup_printf ("updated layer to %d", M->action.layer); break; /* case tgl_message_action_request_key: txt_action = g_strdup_printf ("Request rekey #%016llx\n", M->action.exchange_id); break; case tgl_message_action_accept_key: txt_action = g_strdup_printf ("Accept rekey #%016llx\n", M->action.exchange_id); break; case tgl_message_action_commit_key: txt_action = g_strdup_printf ("Commit rekey #%016llx\n", M->action.exchange_id); break; case tgl_message_action_abort_key: txt_action = g_strdup_printf ("Abort rekey #%016llx\n", M->action.exchange_id); break; */ default: txt_action = NULL; break; } if (txt_action) { debug ("SERVICE MESSAGE: %s", txt_action); txt = g_strdup_printf ("%s %s.", txt_user, txt_action); g_free (txt_action); } g_free (txt_user); return txt; }
static void on_update_user_name (struct tgl_state *TLS, tgl_peer_t *user) { p2tgl_got_alias(TLS, user->id, p2tgl_strdup_alias(user)); }
static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) { connection_data *conn = TLS->ev_base; struct tgl_message *M = C->msg; char *text = NULL; int flags = 0; // only display new messages, ignore updates or deletions if ((M->flags & (TGLMF_EMPTY | TGLMF_DELETED)) || !(M->flags & TGLMF_CREATED) || !M->message || tgp_outgoing_msg (TLS, M) || !tgl_get_peer_type (M->to_id)) { return; } if (M->flags & TGLMF_SERVICE) { text = format_service_msg (TLS, M); flags |= PURPLE_MESSAGE_SYSTEM; } else if (M->media.type == tgl_message_media_document && M->media.document->flags & TGLDF_STICKER) { #ifdef HAVE_LIBWEBP char *filename = C->data; int img = p2tgl_imgstore_add_with_id_webp (filename); if (img <= 0) { failure ("Cannot display sticker, adding to imgstore failed"); return; } used_images_add (conn, img); text = format_img_full (img); flags |= PURPLE_MESSAGE_IMAGES; g_free (filename); #else char *txt_user = p2tgl_strdup_alias (tgl_peer_get (TLS, M->from_id)); text = g_strdup_printf ("%s sent a sticker", txt_user); flags |= PURPLE_MESSAGE_SYSTEM; g_free (txt_user); #endif } else if (M->media.type == tgl_message_media_photo || (M->media.type == tgl_message_media_document_encr && M->media.encr_document->flags & TGLDF_IMAGE)) { char *filename = C->data; int img = p2tgl_imgstore_add_with_id (filename); if (img <= 0) { failure ("Cannot display picture message, adding to imgstore failed."); return; } used_images_add (conn, img); text = format_img_full (img); flags |= PURPLE_MESSAGE_IMAGES; g_free (filename); } else if (M->media.type == tgl_message_media_document) { char *who = p2tgl_strdup_id (M->from_id); if (! tgp_our_msg(TLS, M)) { tgprpl_recv_file (conn->gc, who, M->media.document); } g_free (who); return; } else if (M->media.type == tgl_message_media_document_encr) { char *who = p2tgl_strdup_id (M->to_id); if (! tgp_our_msg(TLS, M)) { tgprpl_recv_encr_file (conn->gc, who, M->media.encr_document); } g_free (who); return; } else { text = format_message (M); flags |= PURPLE_MESSAGE_RECV; } if (! text || ! *text) { warning ("No text to display"); return; } switch (tgl_get_peer_type (M->to_id)) { case TGL_PEER_CHAT: { if (chat_show (conn->gc, tgl_get_peer_id (M->to_id))) { p2tgl_got_chat_in (TLS, M->to_id, M->from_id, text, flags, M->date); } pending_reads_add (conn->pending_reads, M->to_id); break; } case TGL_PEER_ENCR_CHAT: { p2tgl_got_im (TLS, M->to_id, text, flags, M->date); pending_reads_add (conn->pending_reads, M->to_id); break; } case TGL_PEER_USER: { if (tgp_our_msg (TLS, M)) { flags |= PURPLE_MESSAGE_SEND; flags &= ~PURPLE_MESSAGE_RECV; p2tgl_got_im_combo (TLS, M->to_id, text, flags, M->date); } else { p2tgl_got_im (TLS, M->from_id, text, flags, M->date); pending_reads_add (conn->pending_reads, M->from_id); } break; } } if (p2tgl_status_is_present (purple_account_get_active_status (conn->pa)) && p2tgl_send_notifications(conn->pa)) { pending_reads_send_all (conn->pending_reads, conn->TLS); } g_free (text); }
void p2tgl_connection_set_display_name(struct tgl_state *TLS, tgl_peer_t *user) { char *name = p2tgl_strdup_alias(user); purple_connection_set_display_name(tg_get_conn(TLS), name); g_free(name); }