Added queries to add/delete user to group

This commit is contained in:
vysheng 2013-11-07 04:08:16 +04:00
parent 8d4dcf313c
commit 18bc09b201
5 changed files with 97 additions and 20 deletions

View File

@ -256,6 +256,8 @@ char *commands[] = {
"create_secret_chat", "create_secret_chat",
"suggested_contacts", "suggested_contacts",
"global_search", "global_search",
"chat_add_user",
"chat_del_user",
0 }; 0 };
int commands_flags[] = { int commands_flags[] = {
@ -287,6 +289,8 @@ int commands_flags[] = {
071, 071,
07, 07,
07, 07,
0724,
0724,
}; };
int get_complete_mode (void) { int get_complete_mode (void) {
@ -658,6 +662,16 @@ void interpreter (char *line UU) {
GET_PEER; GET_PEER;
int limit = next_token_int (); int limit = next_token_int ();
do_get_history (id, limit > 0 ? limit : 40); do_get_history (id, limit > 0 ? limit : 40);
} else if (IS_WORD ("chat_add_user")) {
GET_PEER_CHAT;
peer_id_t chat_id = id;
GET_PEER_USER;
do_add_user_to_chat (chat_id, id, 100);
} else if (IS_WORD ("chat_del_user")) {
GET_PEER_CHAT;
peer_id_t chat_id = id;
GET_PEER_USER;
do_del_user_from_chat (chat_id, id);
} else if (IS_WORD ("add_contact")) { } else if (IS_WORD ("add_contact")) {
int phone_len, first_name_len, last_name_len; int phone_len, first_name_len, last_name_len;
char *phone, *first_name, *last_name; char *phone, *first_name, *last_name;

View File

@ -56,6 +56,7 @@ void push_color (const char *color);
void print_start (void); void print_start (void);
void print_end (void); void print_end (void);
void print_date_full (long t); void print_date_full (long t);
void print_date (long t);
void update_prompt (void); void update_prompt (void);
#endif #endif

View File

@ -728,7 +728,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
fetch_pts (); fetch_pts ();
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("%d messages marked as read\n", n); print_date (time (0));
printf (" %d messages marked as read\n", n);
pop_color (); pop_color ();
print_end (); print_end ();
} }
@ -739,7 +740,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
peer_t *U = user_chat_get (id); peer_t *U = user_chat_get (id);
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("User "); print_date (time (0));
printf (" User ");
print_user_name (id, U); print_user_name (id, U);
printf (" is typing....\n"); printf (" is typing....\n");
pop_color (); pop_color ();
@ -754,7 +756,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
peer_t *U = user_chat_get (id); peer_t *U = user_chat_get (id);
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("User "); print_date (time (0));
printf (" User ");
print_user_name (id, U); print_user_name (id, U);
printf (" is typing in chat "); printf (" is typing in chat ");
print_chat_name (chat_id, C); print_chat_name (chat_id, C);
@ -771,7 +774,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
fetch_user_status (&U->user.status); fetch_user_status (&U->user.status);
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("User "); print_date (time (0));
printf (" User ");
print_user_name (user_id, U); print_user_name (user_id, U);
printf (" is now "); printf (" is now ");
printf ("%s\n", (U->user.status.online > 0) ? "online" : "offline"); printf ("%s\n", (U->user.status.online > 0) ? "online" : "offline");
@ -791,7 +795,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
struct user *U = &UC->user; struct user *U = &UC->user;
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("User "); print_date (time (0));
printf (" User ");
print_user_name (user_id, UC); print_user_name (user_id, UC);
if (U->first_name) { free (U->first_name); } if (U->first_name) { free (U->first_name); }
if (U->last_name) { free (U->last_name); } if (U->last_name) { free (U->last_name); }
@ -835,7 +840,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("User "); print_date (time (0));
printf (" User ");
print_user_name (user_id, UC); print_user_name (user_id, UC);
printf (" updated profile photo\n"); printf (" updated profile photo\n");
pop_color (); pop_color ();
@ -867,7 +873,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
int n = fetch_int (); int n = fetch_int ();
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("Restored %d messages\n", n); print_date (time (0));
printf (" Restored %d messages\n", n);
pop_color (); pop_color ();
print_end (); print_end ();
fetch_skip (n); fetch_skip (n);
@ -880,7 +887,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
int n = fetch_int (); int n = fetch_int ();
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("Deleted %d messages\n", n); print_date (time (0));
printf (" Deleted %d messages\n", n);
pop_color (); pop_color ();
print_end (); print_end ();
fetch_skip (n); fetch_skip (n);
@ -899,7 +907,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
peer_t *C = user_chat_get (chat_id); peer_t *C = user_chat_get (chat_id);
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("Chat "); print_date (time (0));
printf (" Chat ");
print_chat_name (chat_id, C); print_chat_name (chat_id, C);
printf (" changed list: now %d members\n", n); printf (" changed list: now %d members\n", n);
pop_color (); pop_color ();
@ -913,7 +922,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
fetch_int (); // date fetch_int (); // date
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("User "); print_date (time (0));
printf (" User ");
print_user_name (user_id, U); print_user_name (user_id, U);
printf (" registered\n"); printf (" registered\n");
pop_color (); pop_color ();
@ -926,7 +936,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
peer_t *U = user_chat_get (user_id); peer_t *U = user_chat_get (user_id);
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("Updated link with user "); print_date (time (0));
printf (" Updated link with user ");
print_user_name (user_id, U); print_user_name (user_id, U);
printf ("\n"); printf ("\n");
pop_color (); pop_color ();
@ -949,7 +960,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
peer_t *U = user_chat_get (user_id); peer_t *U = user_chat_get (user_id);
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("User "); print_date (time (0));
printf (" User ");
print_user_name (user_id, U); print_user_name (user_id, U);
printf (" activated\n"); printf (" activated\n");
pop_color (); pop_color ();
@ -964,7 +976,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
char *location = fetch_str_dup (); char *location = fetch_str_dup ();
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("New autorization: device='%s' location='%s'\n", print_date (time (0));
printf (" New autorization: device='%s' location='%s'\n",
s, location); s, location);
pop_color (); pop_color ();
print_end (); print_end ();
@ -994,27 +1007,28 @@ void work_update (struct connection *c UU, long long msg_id UU) {
struct secret_chat *E = fetch_alloc_encrypted_chat (); struct secret_chat *E = fetch_alloc_encrypted_chat ();
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
print_date (time (0));
switch (E->state) { switch (E->state) {
case sc_none: case sc_none:
assert (0); assert (0);
break; break;
case sc_waiting: case sc_waiting:
printf ("Encrypted chat "); printf (" Encrypted chat ");
print_encr_chat_name (E->id, (void *)E); print_encr_chat_name (E->id, (void *)E);
printf (" is now in wait state\n"); printf (" is now in wait state\n");
break; break;
case sc_request: case sc_request:
printf ("Encrypted chat "); printf (" Encrypted chat ");
print_encr_chat_name (E->id, (void *)E); print_encr_chat_name (E->id, (void *)E);
printf (" is now in request state. Sending request ok\n"); printf (" is now in request state. Sending request ok\n");
break; break;
case sc_ok: case sc_ok:
printf ("Encrypted chat "); printf (" Encrypted chat ");
print_encr_chat_name (E->id, (void *)E); print_encr_chat_name (E->id, (void *)E);
printf (" is now in ok state\n"); printf (" is now in ok state\n");
break; break;
case sc_deleted: case sc_deleted:
printf ("Encrypted chat "); printf (" Encrypted chat ");
print_encr_chat_name (E->id, (void *)E); print_encr_chat_name (E->id, (void *)E);
printf (" is now in deleted state\n"); printf (" is now in deleted state\n");
break; break;
@ -1033,15 +1047,16 @@ void work_update (struct connection *c UU, long long msg_id UU) {
peer_t *P = user_chat_get (id); peer_t *P = user_chat_get (id);
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
print_date (time (0));
if (P) { if (P) {
printf ("User "); printf (" User ");
peer_id_t user_id = MK_USER (P->encr_chat.user_id); peer_id_t user_id = MK_USER (P->encr_chat.user_id);
print_user_name (user_id, user_chat_get (user_id)); print_user_name (user_id, user_chat_get (user_id));
printf (" typing in secret chat "); printf (" typing in secret chat ");
print_encr_chat_name (id, P); print_encr_chat_name (id, P);
printf ("\n"); printf ("\n");
} else { } else {
printf ("Some user is typing in unknown secret chat\n"); printf (" Some user is typing in unknown secret chat\n");
} }
pop_color (); pop_color ();
print_end (); print_end ();
@ -1067,7 +1082,8 @@ void work_update (struct connection *c UU, long long msg_id UU) {
} }
print_start (); print_start ();
push_color (COLOR_YELLOW); push_color (COLOR_YELLOW);
printf ("Encrypted chat "); print_date (time (0));
printf (" Encrypted chat ");
print_encr_chat_name_full (id, user_chat_get (id)); print_encr_chat_name_full (id, user_chat_get (id));
printf (": %d messages marked read \n", x); printf (": %d messages marked read \n", x);
pop_color (); pop_color ();

View File

@ -2438,6 +2438,50 @@ void do_get_suggested (void) {
} }
/* }}} */ /* }}} */
/* {{{ Add user to chat */
struct query_methods add_user_to_chat_methods = {
.on_answer = fwd_msg_on_answer
};
void do_add_user_to_chat (peer_id_t chat_id, peer_id_t id, int limit) {
clear_packet ();
out_int (CODE_messages_add_chat_user);
out_int (get_peer_id (chat_id));
assert (get_peer_type (id) == PEER_USER);
peer_t *U = user_chat_get (id);
if (U && U->user.access_hash) {
out_int (CODE_input_user_foreign);
out_int (get_peer_id (id));
out_long (U->user.access_hash);
} else {
out_int (CODE_input_user_contact);
out_int (get_peer_id (id));
}
out_int (limit);
send_query (DC_working, packet_ptr - packet_buffer, packet_buffer, &add_user_to_chat_methods, 0);
}
void do_del_user_from_chat (peer_id_t chat_id, peer_id_t id) {
clear_packet ();
out_int (CODE_messages_delete_chat_user);
out_int (get_peer_id (chat_id));
assert (get_peer_type (id) == PEER_USER);
peer_t *U = user_chat_get (id);
if (U && U->user.access_hash) {
out_int (CODE_input_user_foreign);
out_int (get_peer_id (id));
out_long (U->user.access_hash);
} else {
out_int (CODE_input_user_contact);
out_int (get_peer_id (id));
}
send_query (DC_working, packet_ptr - packet_buffer, packet_buffer, &add_user_to_chat_methods, 0);
}
/* }}} */
/* {{{ Create secret chat */ /* {{{ Create secret chat */
char *create_print_name (peer_id_t id, const char *a1, const char *a2, const char *a3, const char *a4); char *create_print_name (peer_id_t id, const char *a1, const char *a2, const char *a3, const char *a4);

View File

@ -103,5 +103,7 @@ void do_get_difference (void);
void do_mark_read (peer_id_t id); void do_mark_read (peer_id_t id);
void do_visualize_key (peer_id_t id); void do_visualize_key (peer_id_t id);
void do_create_keys_end (struct secret_chat *U); void do_create_keys_end (struct secret_chat *U);
void do_add_user_to_chat (peer_id_t chat_id, peer_id_t id, int limit);
void do_del_user_from_chat (peer_id_t chat_id, peer_id_t id);
#endif #endif