Commit 8b0ff908 authored by V V's avatar V V

updates. something may work now

parent d15b20d4
...@@ -104,7 +104,8 @@ extern int one_string_flags; ...@@ -104,7 +104,8 @@ extern int one_string_flags;
extern int enable_json; extern int enable_json;
int disable_auto_accept; int disable_auto_accept;
int msg_num_mode; int msg_num_mode;
int permanent_id_mode; int permanent_msg_id_mode;
int permanent_peer_id_mode;
int disable_colors; int disable_colors;
int alert_sound; int alert_sound;
extern int binlog_read; extern int binlog_read;
...@@ -417,140 +418,88 @@ double cur_token_double (void) { ...@@ -417,140 +418,88 @@ double cur_token_double (void) {
} }
} }
tgl_peer_id_t cur_token_user (void) { tgl_peer_id_t cur_token_peer_any (int mask) {
if (cur_token_len <= 0) { return TGL_PEER_NOT_FOUND; } if (cur_token_len <= 0) { return TGL_PEER_NOT_FOUND; }
int l = cur_token_len; int l = cur_token_len;
char *s = cur_token; char *s = cur_token;
char c = cur_token[cur_token_len]; if (*s == '$') {
cur_token[cur_token_len] = 0; s ++;
l --;
if (l != 2 * sizeof (tgl_peer_id_t)) {
return TGL_PEER_NOT_FOUND;
}
if (l >= 8 && !memcmp (s, "user#id", 7)) { tgl_peer_id_t res;
s += 7; unsigned char *r = (void *)&res;
l -= 7; int i;
int r = atoi (s); for (i = 0; i < l; i++) {
cur_token[cur_token_len] = c; if ((s[i] < '0' || s[i] > '9') &&
if (r >= 0) { return tgl_set_peer_id (TGL_PEER_USER, r); } (s[i] < 'a' || s[i] > 'f')) {
else { return TGL_PEER_NOT_FOUND; } return TGL_PEER_NOT_FOUND;
} }
if (l >= 6 && !memcmp (s, "user#", 5)) { }
s += 5; for (i = 0; i < (int)sizeof (tgl_peer_id_t); i++) {
l -= 5; r[i] = hex2int (s[2 * i]) * 16 + hex2int (s[2 * i + 1]);
int r = atoi (s); }
cur_token[cur_token_len] = c;
if (r >= 0) { return tgl_set_peer_id (TGL_PEER_USER, r); }
else { return TGL_PEER_NOT_FOUND; }
}
tgl_peer_t *P = tgl_peer_get_by_name (TLS, s); if (mask && tgl_get_peer_type (res) != mask) {
cur_token[cur_token_len] = c; return TGL_PEER_NOT_FOUND;
}
if (P && tgl_get_peer_type (P->id) == TGL_PEER_USER) {
return P->id; return res;
} else {
return TGL_PEER_NOT_FOUND;
} }
}
tgl_peer_id_t cur_token_chat (void) { const char *ss[] = {"user#id", "user#", "chat#id", "chat#", "secret_chat#id", "secret_chat#", "channel#id", "channel#"};
if (cur_token_len <= 0) { return TGL_PEER_NOT_FOUND; } int tt[] = {TGL_PEER_USER, TGL_PEER_USER, TGL_PEER_CHAT, TGL_PEER_CHAT, TGL_PEER_ENCR_CHAT, TGL_PEER_ENCR_CHAT, TGL_PEER_CHANNEL, TGL_PEER_CHANNEL};
int l = cur_token_len;
char *s = cur_token;
char c = cur_token[cur_token_len]; int i;
cur_token[cur_token_len] = 0; for (i = 0; i < 8; i++) if (!mask || mask == tt[i]) {
int x = strlen (ss[i]);
if (l >= 8 && !memcmp (s, "chat#id", 7)) { if (l > x && !memcmp (s, ss[i], x)) {
s += 7; char c = cur_token[cur_token_len];
l -= 7; cur_token[cur_token_len] = 0;
int r = atoi (s); int r = atoi (s + x);
cur_token[cur_token_len] = c; cur_token[cur_token_len] = c;
if (r >= 0) { return tgl_set_peer_id (TGL_PEER_CHAT, r); }
else { return TGL_PEER_NOT_FOUND; } if (r < 0) { return TGL_PEER_NOT_FOUND; }
} tgl_peer_t *P = tgl_peer_get (TLS, tgl_set_peer_id (tt[i], r));
if (l >= 6 && !memcmp (s, "chat#", 5)) { if (!P) { return TGL_PEER_NOT_FOUND; }
s += 5; return P->id;
l -= 5; }
int r = atoi (s);
cur_token[cur_token_len] = c;
if (r >= 0) { return tgl_set_peer_id (TGL_PEER_CHAT, r); }
else { return TGL_PEER_NOT_FOUND; }
} }
char c = cur_token[cur_token_len];
cur_token[cur_token_len] = 0;
tgl_peer_t *P = tgl_peer_get_by_name (TLS, s); tgl_peer_t *P = tgl_peer_get_by_name (TLS, s);
cur_token[cur_token_len] = c; cur_token[cur_token_len] = c;
if (P && tgl_get_peer_type (P->id) == TGL_PEER_CHAT) { if (P && (!mask || tgl_get_peer_type (P->id) == mask)) {
return P->id; return P->id;
} else { } else {
return TGL_PEER_NOT_FOUND; return TGL_PEER_NOT_FOUND;
} }
} }
tgl_peer_id_t cur_token_user (void) {
return cur_token_peer_any (TGL_PEER_USER);
}
tgl_peer_id_t cur_token_chat (void) {
return cur_token_peer_any (TGL_PEER_CHAT);
}
tgl_peer_id_t cur_token_encr_chat (void) { tgl_peer_id_t cur_token_encr_chat (void) {
if (cur_token_len <= 0) { return TGL_PEER_NOT_FOUND; } return cur_token_peer_any (TGL_PEER_ENCR_CHAT);
char *s = cur_token; }
char c = cur_token[cur_token_len];
cur_token[cur_token_len] = 0;
tgl_peer_t *P = tgl_peer_get_by_name (TLS, s); tgl_peer_id_t cur_token_channel (void) {
cur_token[cur_token_len] = c; return cur_token_peer_any (TGL_PEER_CHANNEL);
if (P && tgl_get_peer_type (P->id) == TGL_PEER_ENCR_CHAT) {
return P->id;
} else {
return TGL_PEER_NOT_FOUND;
}
} }
tgl_peer_id_t cur_token_peer (void) { tgl_peer_id_t cur_token_peer (void) {
if (cur_token_len <= 0) { return TGL_PEER_NOT_FOUND; } return cur_token_peer_any (0);
int l = cur_token_len;
char *s = cur_token;
char c = cur_token[cur_token_len];
cur_token[cur_token_len] = 0;
if (l >= 8 && !memcmp (s, "user#id", 7)) {
s += 7;
l -= 7;
int r = atoi (s);
cur_token[cur_token_len] = c;
if (r >= 0) { return tgl_set_peer_id (TGL_PEER_USER, r); }
else { return TGL_PEER_NOT_FOUND; }
}
if (l >= 8 && !memcmp (s, "chat#id", 7)) {
s += 7;
l -= 7;
int r = atoi (s);
cur_token[cur_token_len] = c;
if (r >= 0) { return tgl_set_peer_id (TGL_PEER_CHAT, r); }
else { return TGL_PEER_NOT_FOUND; }
}
if (l >= 6 && !memcmp (s, "user#", 5)) {
s += 5;
l -= 5;
int r = atoi (s);
cur_token[cur_token_len] = c;
if (r >= 0) { return tgl_set_peer_id (TGL_PEER_USER, r); }
else { return TGL_PEER_NOT_FOUND; }
}
if (l >= 6 && !memcmp (s, "chat#", 5)) {
s += 5;
l -= 5;
int r = atoi (s);
cur_token[cur_token_len] = c;
if (r >= 0) { return tgl_set_peer_id (TGL_PEER_CHAT, r); }
else { return TGL_PEER_NOT_FOUND; }
}
tgl_peer_t *P = tgl_peer_get_by_name (TLS, s);
cur_token[cur_token_len] = c;
if (P) {
return P->id;
} else {
return TGL_PEER_NOT_FOUND;
}
} }
static tgl_peer_t *mk_peer (tgl_peer_id_t id) { static tgl_peer_t *mk_peer (tgl_peer_id_t id) {
...@@ -3656,9 +3605,23 @@ void print_media (struct in_ev *ev, struct tgl_message_media *M) { ...@@ -3656,9 +3605,23 @@ void print_media (struct in_ev *ev, struct tgl_message_media *M) {
int unknown_user_list_pos; int unknown_user_list_pos;
int unknown_user_list[1000]; int unknown_user_list[1000];
void print_peer_permanent_name (struct in_ev *ev, tgl_peer_id_t id) {
mprintf (ev, "$");
unsigned char *d = (void *)&id;
int i;
for (i = 0; i < (int)sizeof (tgl_peer_id_t); i++) {
mprintf (ev, "%02x", (unsigned)d[i]);
}
}
void print_user_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *U) { void print_user_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *U) {
assert (tgl_get_peer_type (id) == TGL_PEER_USER); assert (tgl_get_peer_type (id) == TGL_PEER_USER);
mpush_color (ev, COLOR_RED); mpush_color (ev, COLOR_RED);
if (permanent_peer_id_mode) {
print_peer_permanent_name (ev, id);
mpop_color (ev);
return;
}
if (!U) { if (!U) {
mprintf (ev, "user#%d", tgl_get_peer_id (id)); mprintf (ev, "user#%d", tgl_get_peer_id (id));
int i; int i;
...@@ -3700,6 +3663,11 @@ void print_user_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *U) { ...@@ -3700,6 +3663,11 @@ void print_user_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *U) {
void print_chat_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) { void print_chat_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) {
assert (tgl_get_peer_type (id) == TGL_PEER_CHAT); assert (tgl_get_peer_type (id) == TGL_PEER_CHAT);
mpush_color (ev, COLOR_MAGENTA); mpush_color (ev, COLOR_MAGENTA);
if (permanent_peer_id_mode) {
print_peer_permanent_name (ev, id);
mpop_color (ev);
return;
}
if (!C || use_ids) { if (!C || use_ids) {
mprintf (ev, "chat#%d", tgl_get_peer_id (id)); mprintf (ev, "chat#%d", tgl_get_peer_id (id));
} else { } else {
...@@ -3711,6 +3679,11 @@ void print_chat_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) { ...@@ -3711,6 +3679,11 @@ void print_chat_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) {
void print_channel_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) { void print_channel_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) {
assert (tgl_get_peer_type (id) == TGL_PEER_CHANNEL); assert (tgl_get_peer_type (id) == TGL_PEER_CHANNEL);
mpush_color (ev, COLOR_CYAN); mpush_color (ev, COLOR_CYAN);
if (permanent_peer_id_mode) {
print_peer_permanent_name (ev, id);
mpop_color (ev);
return;
}
if (!C || use_ids) { if (!C || use_ids) {
mprintf (ev, "channel#%d", tgl_get_peer_id (id)); mprintf (ev, "channel#%d", tgl_get_peer_id (id));
} else { } else {
...@@ -3722,6 +3695,11 @@ void print_channel_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) { ...@@ -3722,6 +3695,11 @@ void print_channel_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) {
void print_encr_chat_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) { void print_encr_chat_name (struct in_ev *ev, tgl_peer_id_t id, tgl_peer_t *C) {
assert (tgl_get_peer_type (id) == TGL_PEER_ENCR_CHAT); assert (tgl_get_peer_type (id) == TGL_PEER_ENCR_CHAT);
mpush_color (ev, COLOR_MAGENTA); mpush_color (ev, COLOR_MAGENTA);
if (permanent_peer_id_mode) {
print_peer_permanent_name (ev, id);
mpop_color (ev);
return;
}
if (!C || use_ids) { if (!C || use_ids) {
mprintf (ev, "encr_chat#%d", tgl_get_peer_id (id)); mprintf (ev, "encr_chat#%d", tgl_get_peer_id (id));
} else { } else {
...@@ -3760,7 +3738,7 @@ void print_date_full (struct in_ev *ev, long t) { ...@@ -3760,7 +3738,7 @@ void print_date_full (struct in_ev *ev, long t) {
void print_msg_id (struct in_ev *ev, struct tgl_message *M) { void print_msg_id (struct in_ev *ev, struct tgl_message *M) {
if (msg_num_mode) { if (msg_num_mode) {
if (!permanent_id_mode) { if (!permanent_msg_id_mode) {
mprintf (ev, "%d ", M->temp_id); mprintf (ev, "%d ", M->temp_id);
} else { } else {
unsigned char *s = (void *)&M->permanent_id; unsigned char *s = (void *)&M->permanent_id;
......
...@@ -760,10 +760,14 @@ void on_login (struct tgl_state *TLS) { ...@@ -760,10 +760,14 @@ void on_login (struct tgl_state *TLS) {
} }
void on_started (struct tgl_state *TLS); void on_started (struct tgl_state *TLS);
void dlist_cb (struct tgl_state *TLSR, void *callback_extra, int success, int size, tgl_peer_id_t peers[], tgl_message_id_t *last_msg_id[], int unread_count[]) { void clist_cb (struct tgl_state *TLSR, void *callback_extra, int success, int size, tgl_peer_id_t peers[], tgl_message_id_t *last_msg_id[], int unread_count[]) {
on_started (TLS); on_started (TLS);
} }
void dlist_cb (struct tgl_state *TLSR, void *callback_extra, int success, int size, tgl_peer_id_t peers[], tgl_message_id_t *last_msg_id[], int unread_count[]) {
tgl_do_get_channels_dialog_list (TLS, 100, 0, clist_cb, 0);
}
void on_started (struct tgl_state *TLS) { void on_started (struct tgl_state *TLS) {
if (wait_dialog_list) { if (wait_dialog_list) {
wait_dialog_list = 0; wait_dialog_list = 0;
......
...@@ -117,6 +117,8 @@ char *start_command; ...@@ -117,6 +117,8 @@ char *start_command;
int disable_link_preview; int disable_link_preview;
int enable_json; int enable_json;
int exit_code; int exit_code;
int permanent_msg_id_mode;
int permanent_peer_id_mode;
struct tgl_state *TLS; struct tgl_state *TLS;
...@@ -476,6 +478,8 @@ void usage (void) { ...@@ -476,6 +478,8 @@ void usage (void) {
#ifdef USE_PYTHON #ifdef USE_PYTHON
printf (" --python-script/-Z <script-name> python script file\n"); printf (" --python-script/-Z <script-name> python script file\n");
#endif #endif
printf (" --permanent-msg-ids use permanent msg ids\n");
printf (" --permanent-peer-ids use permanent peer ids\n");
exit (1); exit (1);
} }
...@@ -625,6 +629,8 @@ void args_parse (int argc, char **argv) { ...@@ -625,6 +629,8 @@ void args_parse (int argc, char **argv) {
{"disable-link-preview", no_argument, 0, 1002}, {"disable-link-preview", no_argument, 0, 1002},
{"json", no_argument, 0, 1003}, {"json", no_argument, 0, 1003},
{"python-script", required_argument, 0, 'Z'}, {"python-script", required_argument, 0, 'Z'},
{"permanent-msg-ids", no_argument, 0, 1004},
{"permanent-peer-ids", no_argument, 0, 1005},
{0, 0, 0, 0 } {0, 0, 0, 0 }
}; };
...@@ -756,6 +762,12 @@ void args_parse (int argc, char **argv) { ...@@ -756,6 +762,12 @@ void args_parse (int argc, char **argv) {
case 1003: case 1003:
enable_json = 1; enable_json = 1;
break; break;
case 1004:
permanent_msg_id_mode = 1;
break;
case 1005:
permanent_peer_id_mode = 1;
break;
case 'h': case 'h':
default: default:
usage (); usage ();
......
Subproject commit 23ff689b27ba19f8beb37467ce00c9e062d9e688 Subproject commit 119bced18153472c67a674f141960d4e75a4a76b
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment