Added [offline] modifier
This commit is contained in:
parent
168c6b7a05
commit
d96450cd09
26
interface.c
26
interface.c
@ -42,6 +42,8 @@
|
|||||||
#include "structures.h"
|
#include "structures.h"
|
||||||
|
|
||||||
#include "mtproto-common.h"
|
#include "mtproto-common.h"
|
||||||
|
|
||||||
|
#define ALLOW_MULT 1
|
||||||
char *default_prompt = "> ";
|
char *default_prompt = "> ";
|
||||||
|
|
||||||
int unread_messages;
|
int unread_messages;
|
||||||
@ -493,13 +495,24 @@ char **complete_text (char *text, int start UU, int end UU) {
|
|||||||
return (char **) rl_completion_matches (text, command_generator);
|
return (char **) rl_completion_matches (text, command_generator);
|
||||||
}
|
}
|
||||||
|
|
||||||
void work_modifier (const char *s UU) {
|
int offline_mode;
|
||||||
|
int count = 1;
|
||||||
|
void work_modifier (const char *s, int l) {
|
||||||
|
if (is_same_word (s, l, "[offline]")) {
|
||||||
|
offline_mode = 1;
|
||||||
|
}
|
||||||
|
#ifdef ALLOW_MULT
|
||||||
|
if (sscanf (s, "[x%d]", &count) >= 1) {
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void interpreter (char *line UU) {
|
void interpreter (char *line UU) {
|
||||||
line_ptr = line;
|
line_ptr = line;
|
||||||
assert (!in_readline);
|
assert (!in_readline);
|
||||||
in_readline = 1;
|
in_readline = 1;
|
||||||
|
offline_mode = 0;
|
||||||
|
count = 1;
|
||||||
if (!line) {
|
if (!line) {
|
||||||
in_readline = 0;
|
in_readline = 0;
|
||||||
return;
|
return;
|
||||||
@ -514,12 +527,20 @@ void interpreter (char *line UU) {
|
|||||||
command = next_token (&l);
|
command = next_token (&l);
|
||||||
if (!command) { in_readline = 0; return; }
|
if (!command) { in_readline = 0; return; }
|
||||||
if (*command == '[' && command[l - 1] == ']') {
|
if (*command == '[' && command[l - 1] == ']') {
|
||||||
work_modifier (command);
|
work_modifier (command, l);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int _;
|
||||||
|
char *save = line_ptr;
|
||||||
|
int ll = l;
|
||||||
|
char *cs = command;
|
||||||
|
for (_ = 0; _ < count; _ ++) {
|
||||||
|
line_ptr = save;
|
||||||
|
l = ll;
|
||||||
|
command = cs;
|
||||||
#define IS_WORD(s) is_same_word (command, l, (s))
|
#define IS_WORD(s) is_same_word (command, l, (s))
|
||||||
#define RET in_readline = 0; return;
|
#define RET in_readline = 0; return;
|
||||||
|
|
||||||
@ -970,6 +991,7 @@ void interpreter (char *line UU) {
|
|||||||
} else if (IS_WORD ("quit")) {
|
} else if (IS_WORD ("quit")) {
|
||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#undef IS_WORD
|
#undef IS_WORD
|
||||||
#undef RET
|
#undef RET
|
||||||
update_prompt ();
|
update_prompt ();
|
||||||
|
38
queries.c
38
queries.c
@ -50,6 +50,7 @@
|
|||||||
|
|
||||||
char *get_downloads_directory (void);
|
char *get_downloads_directory (void);
|
||||||
int verbosity;
|
int verbosity;
|
||||||
|
extern int offline_mode;
|
||||||
|
|
||||||
long long cur_uploading_bytes;
|
long long cur_uploading_bytes;
|
||||||
long long cur_uploaded_bytes;
|
long long cur_uploaded_bytes;
|
||||||
@ -1080,7 +1081,7 @@ void do_get_local_history (peer_id_t id, int limit) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void do_get_history (peer_id_t id, int limit) {
|
void do_get_history (peer_id_t id, int limit) {
|
||||||
if (get_peer_type (id) == PEER_ENCR_CHAT) {
|
if (get_peer_type (id) == PEER_ENCR_CHAT || offline_mode) {
|
||||||
do_get_local_history (id, limit);
|
do_get_local_history (id, limit);
|
||||||
do_mark_read (id);
|
do_mark_read (id);
|
||||||
return;
|
return;
|
||||||
@ -1609,8 +1610,7 @@ void do_rename_chat (peer_id_t id, char *name) {
|
|||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ Chat info */
|
/* {{{ Chat info */
|
||||||
int chat_info_on_answer (struct query *q UU) {
|
void print_chat_info (struct chat *C) {
|
||||||
struct chat *C = fetch_alloc_chat_full ();
|
|
||||||
peer_t *U = (void *)C;
|
peer_t *U = (void *)C;
|
||||||
print_start ();
|
print_start ();
|
||||||
push_color (COLOR_YELLOW);
|
push_color (COLOR_YELLOW);
|
||||||
@ -1632,6 +1632,11 @@ int chat_info_on_answer (struct query *q UU) {
|
|||||||
}
|
}
|
||||||
pop_color ();
|
pop_color ();
|
||||||
print_end ();
|
print_end ();
|
||||||
|
}
|
||||||
|
|
||||||
|
int chat_info_on_answer (struct query *q UU) {
|
||||||
|
struct chat *C = fetch_alloc_chat_full ();
|
||||||
|
print_chat_info (C);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1640,6 +1645,15 @@ struct query_methods chat_info_methods = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void do_get_chat_info (peer_id_t id) {
|
void do_get_chat_info (peer_id_t id) {
|
||||||
|
if (offline_mode) {
|
||||||
|
peer_t *C = user_chat_get (id);
|
||||||
|
if (!C) {
|
||||||
|
rprintf ("No such chat\n");
|
||||||
|
} else {
|
||||||
|
print_chat_info (&C->chat);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
clear_packet ();
|
clear_packet ();
|
||||||
out_int (CODE_messages_get_full_chat);
|
out_int (CODE_messages_get_full_chat);
|
||||||
assert (get_peer_type (id) == PEER_CHAT);
|
assert (get_peer_type (id) == PEER_CHAT);
|
||||||
@ -1649,8 +1663,8 @@ void do_get_chat_info (peer_id_t id) {
|
|||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ User info */
|
/* {{{ User info */
|
||||||
int user_info_on_answer (struct query *q UU) {
|
|
||||||
struct user *U = fetch_alloc_user_full ();
|
void print_user_info (struct user *U) {
|
||||||
peer_t *C = (void *)U;
|
peer_t *C = (void *)U;
|
||||||
print_start ();
|
print_start ();
|
||||||
push_color (COLOR_YELLOW);
|
push_color (COLOR_YELLOW);
|
||||||
@ -1668,6 +1682,11 @@ int user_info_on_answer (struct query *q UU) {
|
|||||||
}
|
}
|
||||||
pop_color ();
|
pop_color ();
|
||||||
print_end ();
|
print_end ();
|
||||||
|
}
|
||||||
|
|
||||||
|
int user_info_on_answer (struct query *q UU) {
|
||||||
|
struct user *U = fetch_alloc_user_full ();
|
||||||
|
print_user_info (U);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1676,6 +1695,15 @@ struct query_methods user_info_methods = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void do_get_user_info (peer_id_t id) {
|
void do_get_user_info (peer_id_t id) {
|
||||||
|
if (offline_mode) {
|
||||||
|
peer_t *C = user_chat_get (id);
|
||||||
|
if (!C) {
|
||||||
|
rprintf ("No such user\n");
|
||||||
|
} else {
|
||||||
|
print_user_info (&C->user);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
clear_packet ();
|
clear_packet ();
|
||||||
out_int (CODE_users_get_full_user);
|
out_int (CODE_users_get_full_user);
|
||||||
assert (get_peer_type (id) == PEER_USER);
|
assert (get_peer_type (id) == PEER_USER);
|
||||||
|
13
structures.c
13
structures.c
@ -135,6 +135,7 @@ char *create_print_name (peer_id_t id, const char *a1, const char *a2, const cha
|
|||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
s = buf;
|
s = buf;
|
||||||
|
int fl = strlen (s);
|
||||||
int cc = 0;
|
int cc = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
@ -149,17 +150,15 @@ char *create_print_name (peer_id_t id, const char *a1, const char *a2, const cha
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cc ++;
|
cc ++;
|
||||||
assert (cc <= 99);
|
assert (cc <= 9999);
|
||||||
if (cc == 1) {
|
if (cc == 1) {
|
||||||
int l = strlen (s);
|
int l = strlen (s);
|
||||||
s[l + 2] = 0;
|
s[l + 2] = 0;
|
||||||
s[l] = '#';
|
s[l] = '#';
|
||||||
s[l + 1] = '1';
|
s[l + 1] = '1';
|
||||||
} else if (cc == 10) {
|
} else if (cc == 10 || cc == 100 || cc == 1000) {
|
||||||
int l = strlen (s);
|
// int l = strlen (s);
|
||||||
s[l + 1] = 0;
|
sprintf (s + fl, "#%d", cc);
|
||||||
s[l] = '0';
|
|
||||||
s[l - 1] = '1';
|
|
||||||
} else {
|
} else {
|
||||||
int l = strlen (s);
|
int l = strlen (s);
|
||||||
s[l - 1] ++;
|
s[l - 1] ++;
|
||||||
@ -548,7 +547,7 @@ void fetch_chat_full (struct chat *C) {
|
|||||||
users_num = fetch_int ();
|
users_num = fetch_int ();
|
||||||
users = malloc (sizeof (struct chat_user) * users_num);
|
users = malloc (sizeof (struct chat_user) * users_num);
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < C->users_num; i++) {
|
for (i = 0; i < users_num; i++) {
|
||||||
assert (fetch_int () == (int)CODE_chat_participant);
|
assert (fetch_int () == (int)CODE_chat_participant);
|
||||||
users[i].user_id = fetch_int ();
|
users[i].user_id = fetch_int ();
|
||||||
users[i].inviter_id = fetch_int ();
|
users[i].inviter_id = fetch_int ();
|
||||||
|
Loading…
Reference in New Issue
Block a user