Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
tg
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
tg
Commits
8b0ff908
Commit
8b0ff908
authored
Sep 30, 2015
by
V V
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updates. something may work now
parent
d15b20d4
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
107 additions
and
113 deletions
+107
-113
interface.c
interface.c
+89
-111
loop.c
loop.c
+5
-1
main.c
main.c
+12
-0
tgl
tgl
+1
-1
No files found.
interface.c
View file @
8b0ff908
...
...
@@ -104,7 +104,8 @@ extern int one_string_flags;
extern
int
enable_json
;
int
disable_auto_accept
;
int
msg_num_mode
;
int
permanent_id_mode
;
int
permanent_msg_id_mode
;
int
permanent_peer_id_mode
;
int
disable_colors
;
int
alert_sound
;
extern
int
binlog_read
;
...
...
@@ -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
;
}
int
l
=
cur_token_len
;
char
*
s
=
cur_token
;
char
c
=
cur_token
[
cur_token_len
];
cur_token
[
cur_token_len
]
=
0
;
if
(
*
s
==
'$'
)
{
s
++
;
l
--
;
if
(
l
!=
2
*
sizeof
(
tgl_peer_id_t
))
{
return
TGL_PEER_NOT_FOUND
;
}
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
>=
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
;
}
}
tgl_peer_id_t
res
;
unsigned
char
*
r
=
(
void
*
)
&
res
;
int
i
;
for
(
i
=
0
;
i
<
l
;
i
++
)
{
if
((
s
[
i
]
<
'0'
||
s
[
i
]
>
'9'
)
&&
(
s
[
i
]
<
'a'
||
s
[
i
]
>
'f'
))
{
return
TGL_PEER_NOT_FOUND
;
}
}
for
(
i
=
0
;
i
<
(
int
)
sizeof
(
tgl_peer_id_t
);
i
++
)
{
r
[
i
]
=
hex2int
(
s
[
2
*
i
])
*
16
+
hex2int
(
s
[
2
*
i
+
1
]);
}
tgl_peer_t
*
P
=
tgl_peer_get_by_name
(
TLS
,
s
);
cur_token
[
cur_token_len
]
=
c
;
if
(
P
&&
tgl_get_peer_type
(
P
->
id
)
==
TGL_PEER_USER
)
{
return
P
->
id
;
}
else
{
return
TGL_PEER_NOT_FOUND
;
if
(
mask
&&
tgl_get_peer_type
(
res
)
!=
mask
)
{
return
TGL_PEER_NOT_FOUND
;
}
return
res
;
}
}
tgl_peer_id_t
cur_token_chat
(
void
)
{
if
(
cur_token_len
<=
0
)
{
return
TGL_PEER_NOT_FOUND
;
}
int
l
=
cur_token_len
;
char
*
s
=
cur_token
;
const
char
*
ss
[]
=
{
"user#id"
,
"user#"
,
"chat#id"
,
"chat#"
,
"secret_chat#id"
,
"secret_chat#"
,
"channel#id"
,
"channel#"
};
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
};
char
c
=
cur_token
[
cur_token_len
];
cur_token
[
cur_token_len
]
=
0
;
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
,
"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
;
}
int
i
;
for
(
i
=
0
;
i
<
8
;
i
++
)
if
(
!
mask
||
mask
==
tt
[
i
])
{
int
x
=
strlen
(
ss
[
i
]);
if
(
l
>
x
&&
!
memcmp
(
s
,
ss
[
i
],
x
))
{
char
c
=
cur_token
[
cur_token_len
];
cur_token
[
cur_token_len
]
=
0
;
int
r
=
atoi
(
s
+
x
);
cur_token
[
cur_token_len
]
=
c
;
if
(
r
<
0
)
{
return
TGL_PEER_NOT_FOUND
;
}
tgl_peer_t
*
P
=
tgl_peer_get
(
TLS
,
tgl_set_peer_id
(
tt
[
i
],
r
));
if
(
!
P
)
{
return
TGL_PEER_NOT_FOUND
;
}
return
P
->
id
;
}
}
char
c
=
cur_token
[
cur_token_len
];
cur_token
[
cur_token_len
]
=
0
;
tgl_peer_t
*
P
=
tgl_peer_get_by_name
(
TLS
,
s
);
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
;
}
else
{
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
)
{
if
(
cur_token_len
<=
0
)
{
return
TGL_PEER_NOT_FOUND
;
}
char
*
s
=
cur_token
;
char
c
=
cur_token
[
cur_token_len
];
cur_token
[
cur_token_len
]
=
0
;
return
cur_token_peer_any
(
TGL_PEER_ENCR_CHAT
);
}
tgl_peer_t
*
P
=
tgl_peer_get_by_name
(
TLS
,
s
);
cur_token
[
cur_token_len
]
=
c
;
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_channel
(
void
)
{
return
cur_token_peer_any
(
TGL_PEER_CHANNEL
);
}
tgl_peer_id_t
cur_token_peer
(
void
)
{
if
(
cur_token_len
<=
0
)
{
return
TGL_PEER_NOT_FOUND
;
}
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
;
}
return
cur_token_peer_any
(
0
);
}
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) {
int
unknown_user_list_pos
;
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
)
{
assert
(
tgl_get_peer_type
(
id
)
==
TGL_PEER_USER
);
mpush_color
(
ev
,
COLOR_RED
);
if
(
permanent_peer_id_mode
)
{
print_peer_permanent_name
(
ev
,
id
);
mpop_color
(
ev
);
return
;
}
if
(
!
U
)
{
mprintf
(
ev
,
"user#%d"
,
tgl_get_peer_id
(
id
));
int
i
;
...
...
@@ -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
)
{
assert
(
tgl_get_peer_type
(
id
)
==
TGL_PEER_CHAT
);
mpush_color
(
ev
,
COLOR_MAGENTA
);
if
(
permanent_peer_id_mode
)
{
print_peer_permanent_name
(
ev
,
id
);
mpop_color
(
ev
);
return
;
}
if
(
!
C
||
use_ids
)
{
mprintf
(
ev
,
"chat#%d"
,
tgl_get_peer_id
(
id
));
}
else
{
...
...
@@ -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
)
{
assert
(
tgl_get_peer_type
(
id
)
==
TGL_PEER_CHANNEL
);
mpush_color
(
ev
,
COLOR_CYAN
);
if
(
permanent_peer_id_mode
)
{
print_peer_permanent_name
(
ev
,
id
);
mpop_color
(
ev
);
return
;
}
if
(
!
C
||
use_ids
)
{
mprintf
(
ev
,
"channel#%d"
,
tgl_get_peer_id
(
id
));
}
else
{
...
...
@@ -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
)
{
assert
(
tgl_get_peer_type
(
id
)
==
TGL_PEER_ENCR_CHAT
);
mpush_color
(
ev
,
COLOR_MAGENTA
);
if
(
permanent_peer_id_mode
)
{
print_peer_permanent_name
(
ev
,
id
);
mpop_color
(
ev
);
return
;
}
if
(
!
C
||
use_ids
)
{
mprintf
(
ev
,
"encr_chat#%d"
,
tgl_get_peer_id
(
id
));
}
else
{
...
...
@@ -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
)
{
if
(
msg_num_mode
)
{
if
(
!
permanent_id_mode
)
{
if
(
!
permanent_
msg_
id_mode
)
{
mprintf
(
ev
,
"%d "
,
M
->
temp_id
);
}
else
{
unsigned
char
*
s
=
(
void
*
)
&
M
->
permanent_id
;
...
...
loop.c
View file @
8b0ff908
...
...
@@ -760,10 +760,14 @@ void on_login (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
);
}
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
)
{
if
(
wait_dialog_list
)
{
wait_dialog_list
=
0
;
...
...
main.c
View file @
8b0ff908
...
...
@@ -117,6 +117,8 @@ char *start_command;
int
disable_link_preview
;
int
enable_json
;
int
exit_code
;
int
permanent_msg_id_mode
;
int
permanent_peer_id_mode
;
struct
tgl_state
*
TLS
;
...
...
@@ -476,6 +478,8 @@ void usage (void) {
#ifdef USE_PYTHON
printf
(
" --python-script/-Z <script-name> python script file
\n
"
);
#endif
printf
(
" --permanent-msg-ids use permanent msg ids
\n
"
);
printf
(
" --permanent-peer-ids use permanent peer ids
\n
"
);
exit
(
1
);
}
...
...
@@ -625,6 +629,8 @@ void args_parse (int argc, char **argv) {
{
"disable-link-preview"
,
no_argument
,
0
,
1002
},
{
"json"
,
no_argument
,
0
,
1003
},
{
"python-script"
,
required_argument
,
0
,
'Z'
},
{
"permanent-msg-ids"
,
no_argument
,
0
,
1004
},
{
"permanent-peer-ids"
,
no_argument
,
0
,
1005
},
{
0
,
0
,
0
,
0
}
};
...
...
@@ -756,6 +762,12 @@ void args_parse (int argc, char **argv) {
case
1003
:
enable_json
=
1
;
break
;
case
1004
:
permanent_msg_id_mode
=
1
;
break
;
case
1005
:
permanent_peer_id_mode
=
1
;
break
;
case
'h'
:
default:
usage
();
...
...
tgl
@
119bced1
Subproject commit
23ff689b27ba19f8beb37467ce00c9e062d9e688
Subproject commit
119bced18153472c67a674f141960d4e75a4a76b
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment