void on_chat_get_info (struct tgl_state *TLS, void *extra, int success, struct tgl_chat *C) { assert (success); debug ("on_chat_joined(%d)\n", tgl_get_peer_id (C->id)); telegram_conn *conn = TLS->ev_base; PurpleConversation *conv; if (!(conv = purple_find_chat(conn->gc, tgl_get_peer_id(C->id)))) { // chat conversation is not existing, create it conv = serv_got_joined_chat(conn->gc, tgl_get_peer_id(C->id), C->title); } purple_conv_chat_clear_users(purple_conversation_get_chat_data(conv)); chat_add_all_users(conv, C); struct message_text *mt = 0; while ((mt = g_queue_pop_head (conn->new_messages))) { if (!chat_add_message(TLS, mt->M, mt->text)) { warning ("WARNING, chat %d still not existing... \n", tgl_get_peer_id (C->id)); break; } if (mt->text) { g_free (mt->text); } free (mt); } gchar *name = g_strdup_printf ("%d", tgl_get_peer_id(C->id)); g_hash_table_remove (conn->joining_chats, name); g_free (name); }
int main(void){ chat_t * chat = chat_new("First Chat"); printf("1st task(Chat name is) : %s\n", get_chat_name(chat));//1st task user_t * firstUser = user_new("Dima", "Diachenko", 18); chat_add_user(chat, firstUser); user_t * secondUser = user_new("Gleb", "Davidov", 18); chat_add_user(chat, secondUser); //6th task list_t * users_list = list_new(); users_list = chat_get_list_of_users(chat); printf("4th task (and 6th task)(Users in list) : %i\n", list_getSize(users_list));//4th task printf("2d task : List of users:\n"); // 2d task for(int i = 0; i < list_getSize(users_list); i++){ user_t * tmp = (user_t*) list_get(users_list, i); printf("%s %s %i\n", user_get_name(tmp), user_get_surname(tmp), user_get_age(tmp)); } printf("7th task : %s - this user was removed!\n", user_get_surname(chat_remove_user_by_surname(chat, "Davidov")));//7th task users_list = chat_get_list_of_users(chat); printf("2d task : List of users:\n"); // 2d task for(int i = 0; i < list_getSize(users_list); i++){ user_t * tmp = (user_t*) list_get(users_list, i); printf("%s %s %i\n", user_get_name(tmp), user_get_surname(tmp), user_get_age(tmp)); } message_t * msg1 = message_new("Hello!", firstUser); chat_add_message(chat, msg1);//8th task printf("8th task: added message to chat:\n%s:\t%s\n", user_get_surname(get_owner(msg1)), get_message_text(msg1)); list_t * msgs_list = list_new(); msgs_list = get_list_of_messages_of_one_user(chat, firstUser);//5th task printf("5th task : Messages of user %s\n", user_get_surname(firstUser)); for(int i = 0; i < list_getSize(msgs_list); i++){ message_t * tmpmsg = list_get(msgs_list, i); printf("%s\n", get_message_text(tmpmsg)); } msgs_list = get_last_messages(chat, 1); printf("3d task : List of last messages(1):\n"); for(int i = 0; i < list_getSize(msgs_list); i++){ message_t * tmpmsg = list_get(msgs_list, i); printf("%s\n", get_message_text(tmpmsg)); } return 0; }
JSValueRef js_obj_chat_func(JSContextRef cx,JSObjectRef func,JSObjectRef j_obj,size_t argc,const JSValueRef argv[],JSValueRef *exception) { char msg[max_view_chat_str_len]; d3col col; obj_type *obj; if (!script_check_param_count(cx,func,argc,1,exception)) return(script_null_to_value(cx)); obj=object_get_attach(j_obj); script_value_to_string(cx,argv[0],msg,max_view_chat_str_len); if ((net_setup.mode!=net_mode_none) && (object_networkable(obj))) net_client_send_chat(obj,msg); object_get_tint(obj,&col); chat_add_message(obj,msg,&col); return(script_null_to_value(cx)); }
void on_message_load_photo (struct tgl_state *TLS, void *extra, int success, char *filename) { gchar *data = NULL; size_t len; GError *err = NULL; g_file_get_contents (filename, &data, &len, &err); int imgStoreId = purple_imgstore_add_with_id (g_memdup(data, (guint)len), len, NULL); char *image = format_img_full(imgStoreId); struct tgl_message *M = extra; switch (tgl_get_peer_type (M->to_id)) { case TGL_PEER_CHAT: debug ("PEER_CHAT\n"); if (!our_msg(TLS, M)) { chat_add_message (TLS, M, image); } break; case TGL_PEER_USER: debug ("PEER_USER\n"); if (out_msg(TLS, M)) { p2tgl_got_im (TLS, M->to_id, image, PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_IMAGES, M->date); } else { p2tgl_got_im (TLS, M->from_id, image, PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_IMAGES, M->date); } break; case TGL_PEER_ENCR_CHAT: break; case TGL_PEER_GEO_CHAT: break; } g_free (image); telegram_conn *conn = TLS->ev_base; conn->updated = 1; }
static void update_message_received (struct tgl_state *TLS, struct tgl_message *M) { debug ("received message\n"); telegram_conn *conn = TLS->ev_base; conn->updated = 1; if (M->service) { debug ("service message, skipping...\n"); char *text = format_service_msg (TLS, M); if (text) { switch (tgl_get_peer_type (M->to_id)) { case TGL_PEER_CHAT: chat_add_message (TLS, M, text); break; case TGL_PEER_USER: p2tgl_got_im (TLS, M->from_id, text, PURPLE_MESSAGE_SYSTEM, M->date); break; } g_free (text); } conn->updated = 1; return; } if ((M->flags & (FLAG_MESSAGE_EMPTY | FLAG_DELETED)) || !(M->flags & FLAG_CREATED)) { return; } if (!tgl_get_peer_type (M->to_id)) { warning ("Bad msg\n"); return; } if (M->media.type == tgl_message_media_photo) { tgl_do_load_photo (TLS, &M->media.photo, on_message_load_photo, M); return; } if (!M->message) { return; } char *text = purple_markup_escape_text (M->message, strlen (M->message)); switch (tgl_get_peer_type (M->to_id)) { case TGL_PEER_CHAT: debug ("PEER_CHAT\n"); if (!our_msg(TLS, M)) { chat_add_message (TLS, M, text); } break; case TGL_PEER_USER: debug ("PEER_USER\n"); // p2tgl_got_im (TLS, M->to_id, text, PURPLE_MESSAGE_SEND, M->date); // :TODO: figure out how to add messages from different devices to history if (!our_msg(TLS, M)) { if (out_msg(TLS, M)) { p2tgl_got_im (TLS, M->to_id, text, PURPLE_MESSAGE_SEND, M->date); } else { p2tgl_got_im (TLS, M->from_id, text, PURPLE_MESSAGE_RECV, M->date); } } break; case TGL_PEER_ENCR_CHAT: break; case TGL_PEER_GEO_CHAT: break; } g_free (text); }
bool player_message_input(int tick,obj_type *obj) { int len; char ch,nstr[chat_str_len]; char *c,*msg; d3col col; if (!net_setup.client.joined) return(TRUE); // scores if (input_action_get_state(nc_score)) { if (!network_score_key_down) { hud.score.on=!hud.score.on; network_score_key_down=TRUE; } } else { network_score_key_down=FALSE; } // chatting if (hud.chat.type_on) { // get last raw key as character ch=input_get_last_raw_key(); input_clear_last_raw_key(); if (ch==0x0) return(FALSE); // get current message len msg=hud.chat.type_str; len=strlen(msg); // escape cancels if (ch==0x1B) { hud.chat.type_on=FALSE; return(FALSE); } // return ends entry if (ch==0xD) { hud.chat.type_on=FALSE; if (len>1) { msg[len-1]=0x0; net_client_send_chat(obj->remote.uid,msg); object_get_tint(obj,&col); chat_add_message(tick,obj->name,msg,&col); } return(FALSE); } // delete if (ch==0x8) { len-=2; if (len<0) len=0; msg[len++]='_'; msg[len]=0x0; return(FALSE); } // eliminate certain characters if (((ch<'!') || (ch>'z')) && (ch!=0x20)) return(FALSE); // force start a new line if too many characters if (len>=(chat_str_len-1)) { nstr[0]=0x0; c=strrchr(msg,' '); if (c!=NULL) { if ((int)(c-msg)>5) { strcpy(nstr,(c+1)); *c=0x0; } } msg[len-1]=0x0; net_client_send_chat(obj->remote.uid,msg); object_get_tint(obj,&col); chat_add_message(tick,obj->name,msg,&col); strcpy(msg,nstr); len=strlen(msg); } // add new character if (len>0) len--; msg[len++]=ch; msg[len++]='_'; msg[len]=0x0; return(FALSE); } if (input_action_get_state(nc_message)) { hud.chat.type_on=TRUE; input_clear_all_last_raw_key(); hud.chat.type_str[0]='_'; hud.chat.type_str[1]=0x0; return(FALSE); } return(TRUE); }