mirror of
https://github.com/Tha14/toxic.git
synced 2025-06-27 02:26:46 +02:00
Compare commits
35 Commits
efbfa2c95c
...
ngc
Author | SHA1 | Date | |
---|---|---|---|
f07283848f | |||
d113b92baa | |||
59d1aed84c | |||
7c799b0b60 | |||
df77dbfeae | |||
a7bee7e031 | |||
a9ccaeab8d | |||
a04da99aff | |||
13c38406e1 | |||
73cfe94eb2 | |||
229d334b75 | |||
375f511f70 | |||
0907087439 | |||
e1576e23b7 | |||
7f29705966 | |||
493dfeff22 | |||
e9f8293a0a | |||
1d8aafba3b | |||
f16aa35ebc | |||
a5b44dffd2 | |||
408c8f7c10 | |||
85f9c1241c | |||
6c88be7255 | |||
707fb7f107 | |||
9a885ed2ba | |||
d52604f43c | |||
c136d18fc4 | |||
2444b1f79a | |||
ad238fc2fd | |||
2625094d34 | |||
9848ca902e | |||
4c903bab64 | |||
0a0756ec6a | |||
18ef7ff693 | |||
e6136d45d2 |
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@ -28,7 +28,7 @@ jobs:
|
|||||||
libx11-dev
|
libx11-dev
|
||||||
python3-dev
|
python3-dev
|
||||||
pkg-config &&
|
pkg-config &&
|
||||||
git clone --depth=1 --recursive https://github.com/TokTok/c-toxcore &&
|
git clone --depth=1 https://github.com/TokTok/c-toxcore &&
|
||||||
cd c-toxcore &&
|
cd c-toxcore &&
|
||||||
cmake . -B_build -DBOOTSTRAP_DAEMON=OFF &&
|
cmake . -B_build -DBOOTSTRAP_DAEMON=OFF &&
|
||||||
cd _build &&
|
cd _build &&
|
||||||
@ -85,7 +85,7 @@ jobs:
|
|||||||
make
|
make
|
||||||
python3-dev
|
python3-dev
|
||||||
pkg-config &&
|
pkg-config &&
|
||||||
git clone --depth=1 --recursive https://github.com/TokTok/c-toxcore &&
|
git clone --depth=1 https://github.com/TokTok/c-toxcore &&
|
||||||
cd c-toxcore &&
|
cd c-toxcore &&
|
||||||
cmake . -B_build -DBOOTSTRAP_DAEMON=OFF &&
|
cmake . -B_build -DBOOTSTRAP_DAEMON=OFF &&
|
||||||
cd _build &&
|
cd _build &&
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
.\" Title: toxic.conf
|
.\" Title: toxic.conf
|
||||||
.\" Author: [see the "AUTHORS" section]
|
.\" Author: [see the "AUTHORS" section]
|
||||||
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
|
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
|
||||||
.\" Date: 2020-11-12
|
.\" Date: 2021-05-24
|
||||||
.\" Manual: Toxic Manual
|
.\" Manual: Toxic Manual
|
||||||
.\" Source: toxic __VERSION__
|
.\" Source: toxic __VERSION__
|
||||||
.\" Language: English
|
.\" Language: English
|
||||||
.\"
|
.\"
|
||||||
.TH "TOXIC\&.CONF" "5" "2020\-11\-12" "toxic __VERSION__" "Toxic Manual"
|
.TH "TOXIC\&.CONF" "5" "2021\-05\-24" "toxic __VERSION__" "Toxic Manual"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * Define some portability stuff
|
.\" * Define some portability stuff
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
@ -138,11 +138,6 @@ Show welcome message on startup\&. true or false
|
|||||||
Enable friend connection change notifications\&. true or false
|
Enable friend connection change notifications\&. true or false
|
||||||
.RE
|
.RE
|
||||||
.PP
|
.PP
|
||||||
\fBshow_group_connection_msg\fR
|
|
||||||
.RS 4
|
|
||||||
Enable group connection change notifications (does not include quit messages)\&. true or false
|
|
||||||
.RE
|
|
||||||
.PP
|
|
||||||
\fBnodelist_update_freq\fR
|
\fBnodelist_update_freq\fR
|
||||||
.RS 4
|
.RS 4
|
||||||
How often in days to update the DHT nodes list\&. (integer; 0 to disable)
|
How often in days to update the DHT nodes list\&. (integer; 0 to disable)
|
||||||
|
@ -87,9 +87,6 @@ OPTIONS
|
|||||||
*show_connection_msg*;;
|
*show_connection_msg*;;
|
||||||
Enable friend connection change notifications. true or false
|
Enable friend connection change notifications. true or false
|
||||||
|
|
||||||
*show_group_connection_msg*;;
|
|
||||||
Enable group connection change notifications (does not include quit messages). true or false
|
|
||||||
|
|
||||||
*nodelist_update_freq*;;
|
*nodelist_update_freq*;;
|
||||||
How often in days to update the DHT nodes list. (integer; 0 to disable)
|
How often in days to update the DHT nodes list. (integer; 0 to disable)
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
toxme.io 1A39E7A5D5FA9CF155C751570A32E625698A60A55F6D88028F949F66144F4F25
|
||||||
|
@ -56,9 +56,6 @@ ui = {
|
|||||||
// true to show friend connection change messages on the home screen
|
// true to show friend connection change messages on the home screen
|
||||||
show_connection_msg=true;
|
show_connection_msg=true;
|
||||||
|
|
||||||
// true to show peer connection change messages in groups (setting to false does not include user quit messages)
|
|
||||||
show_group_connection_msg=true;
|
|
||||||
|
|
||||||
// How often in days to update the DHT nodes list. (0 to disable updates)
|
// How often in days to update the DHT nodes list. (0 to disable updates)
|
||||||
nodeslist_update_freq=7;
|
nodeslist_update_freq=7;
|
||||||
|
|
||||||
|
@ -114,6 +114,7 @@ apk add \
|
|||||||
libsodium-dev \
|
libsodium-dev \
|
||||||
libsodium-static \
|
libsodium-static \
|
||||||
linux-headers \
|
linux-headers \
|
||||||
|
msgpack-c-dev \
|
||||||
ncurses-dev \
|
ncurses-dev \
|
||||||
ncurses-static \
|
ncurses-static \
|
||||||
ncurses-terminfo \
|
ncurses-terminfo \
|
||||||
@ -136,32 +137,20 @@ mkdir -p "$BUILD_DIR"
|
|||||||
cd "$BUILD_DIR"
|
cd "$BUILD_DIR"
|
||||||
|
|
||||||
# The git hash of the c-toxcore version we're using
|
# The git hash of the c-toxcore version we're using
|
||||||
TOXCORE_VERSION="0a277b52ea22fe297a8487ac05a0c507a74c6480"
|
TOXCORE_VERSION="v0.2.16"
|
||||||
|
|
||||||
# The sha256sum of the c-toxcore tarball for TOXCORE_VERSION
|
# The sha256sum of the c-toxcore tarball for TOXCORE_VERSION
|
||||||
TOXCORE_HASH="a63f3d8c9ee8bf51dd40fd0035914a73b4214e8d314c06f38a366c79c20278fb"
|
TOXCORE_HASH="653aa42654b607f0940cecfac873e9ce55605119a90d1dc454d1090ff6ca29c0"
|
||||||
|
|
||||||
TOXCORE_FILENAME="c-toxcore-$TOXCORE_VERSION.tar.gz"
|
TOXCORE_FILENAME="c-toxcore-$TOXCORE_VERSION.tar.gz"
|
||||||
|
|
||||||
wget --timeout=10 -O "$TOXCORE_FILENAME" "https://github.com/TokTok/c-toxcore/archive/$TOXCORE_VERSION.tar.gz"
|
wget --timeout=10 -O "$TOXCORE_FILENAME" "https://github.com/TokTok/c-toxcore/archive/$TOXCORE_VERSION.tar.gz"
|
||||||
check_sha256 "$TOXCORE_HASH" "$TOXCORE_FILENAME"
|
check_sha256 "$TOXCORE_HASH" "$TOXCORE_FILENAME"
|
||||||
|
|
||||||
tar -o -xf "$TOXCORE_FILENAME"
|
tar -o -xf "$TOXCORE_FILENAME"
|
||||||
rm "$TOXCORE_FILENAME"
|
rm "$TOXCORE_FILENAME"
|
||||||
|
|
||||||
cd c-toxcore*
|
cd c-toxcore*
|
||||||
mkdir -p "third_party" && cd "third_party"
|
|
||||||
|
|
||||||
CMP_VERSION="074e0df43e8a61ea938c4f77f65d1fbccc0c3bf9"
|
|
||||||
CMP_FILENAME="cmp-$CMP_VERSION.tar.gz"
|
|
||||||
wget --timeout=10 -O "$CMP_FILENAME" "https://github.com/TokTok/cmp/archive/$CMP_VERSION.tar.gz"
|
|
||||||
tar -o -xf "$CMP_FILENAME"
|
|
||||||
|
|
||||||
mv cmp\-*/* "cmp/"
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
cmake -B_build -H. \
|
cmake -B_build -H. \
|
||||||
-DUSE_TEST_NETWORK=OFF \
|
|
||||||
-DENABLE_STATIC=ON \
|
-DENABLE_STATIC=ON \
|
||||||
-DENABLE_SHARED=OFF \
|
-DENABLE_SHARED=OFF \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
extern struct user_settings *user_settings;
|
extern struct user_settings *user_settings;
|
||||||
|
|
||||||
/* URL that we get the JSON encoded nodes list from. */
|
/* URL that we get the JSON encoded nodes list from. */
|
||||||
#define NODES_LIST_URL "https://nodes.tox.chat/json"
|
#define NODES_LIST_URL 0 // This should be empty until NGC merges with mainnet
|
||||||
|
|
||||||
#define DEFAULT_NODES_FILENAME "DHTnodes.json"
|
#define DEFAULT_NODES_FILENAME "DHTnodes.json"
|
||||||
|
|
||||||
@ -79,6 +79,29 @@ extern struct user_settings *user_settings;
|
|||||||
/* Maximum allowable size of the nodes list */
|
/* Maximum allowable size of the nodes list */
|
||||||
#define MAX_NODELIST_SIZE (MAX_RECV_CURL_DATA_SIZE)
|
#define MAX_NODELIST_SIZE (MAX_RECV_CURL_DATA_SIZE)
|
||||||
|
|
||||||
|
// TODO(Jfreegman): Remove this before production
|
||||||
|
static uint8_t const TESTNET_KEY[] = {
|
||||||
|
0x79, 0xCA, 0xDA, 0x49, 0x74, 0xB0, 0x92, 0x6F,
|
||||||
|
0x28, 0x6F, 0x02, 0x5C, 0xD5, 0xFF, 0xDF, 0x3E,
|
||||||
|
0x65, 0x4A, 0x37, 0x58, 0xC5, 0x3E, 0x02, 0x73,
|
||||||
|
0xEC, 0xFC, 0x4D, 0x12, 0xC2, 0x1D, 0xCA, 0x48,
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO(Jfreegman): Remove this before production
|
||||||
|
#define TESTNET_PORT 33445
|
||||||
|
|
||||||
|
#define TESTNET_IP "172.93.52.70"
|
||||||
|
|
||||||
|
static uint8_t const TESTNET_KEY2[] = {
|
||||||
|
0x5E, 0x47, 0xBA, 0x1D, 0xC3, 0x91, 0x3E, 0xB2,
|
||||||
|
0xCB, 0xF2, 0xD6, 0x4C, 0xE4, 0xF2, 0x3D, 0x8B,
|
||||||
|
0xFE, 0x53, 0x91, 0xBF, 0xAB, 0xE5, 0xC4, 0x3C,
|
||||||
|
0x5B, 0xAD, 0x13, 0xF0, 0xA4, 0x14, 0xCD, 0x77,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TESTNET_PORT2 38445
|
||||||
|
#define TESTNET_IP2 "tox.plastiras.org"
|
||||||
|
|
||||||
static struct Thread_Data {
|
static struct Thread_Data {
|
||||||
pthread_t tid;
|
pthread_t tid;
|
||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
@ -275,6 +298,11 @@ on_exit:
|
|||||||
*/
|
*/
|
||||||
static int update_DHT_nodeslist(const char *nodes_path)
|
static int update_DHT_nodeslist(const char *nodes_path)
|
||||||
{
|
{
|
||||||
|
if (NODES_LIST_URL == 0) { // TODO: Remove this when NGC merges with mainnet
|
||||||
|
fprintf(stderr, "Skipping DHT Nodes list fetching (remove before production)\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!nodeslist_needs_update(nodes_path)) {
|
if (!nodeslist_needs_update(nodes_path)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -555,6 +583,24 @@ on_exit:
|
|||||||
*/
|
*/
|
||||||
int load_DHT_nodeslist(void)
|
int load_DHT_nodeslist(void)
|
||||||
{
|
{
|
||||||
|
// TODO(Jfreegman): Remove this before production
|
||||||
|
fprintf(stderr, "Adding NGC testnet node - remove this before production\n");
|
||||||
|
|
||||||
|
struct Node *node = &Nodes.list[0];
|
||||||
|
node->have_ip4 = true;
|
||||||
|
node->port = TESTNET_PORT;
|
||||||
|
memcpy(node->key, TESTNET_KEY, sizeof(TESTNET_KEY));
|
||||||
|
memcpy(node->ip4, TESTNET_IP, sizeof(TESTNET_IP));
|
||||||
|
|
||||||
|
struct Node *node2 = &Nodes.list[1];
|
||||||
|
node2->have_ip6 = true;
|
||||||
|
node2->port = TESTNET_PORT2;
|
||||||
|
memcpy(node2->key, TESTNET_KEY2, sizeof(TESTNET_KEY2));
|
||||||
|
memcpy(node2->ip6, TESTNET_IP2, sizeof(TESTNET_IP2));
|
||||||
|
|
||||||
|
Nodes.count = 2;
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (thread_data.active) {
|
if (thread_data.active) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -577,6 +623,7 @@ int load_DHT_nodeslist(void)
|
|||||||
thread_data.active = false;
|
thread_data.active = false;
|
||||||
return -5;
|
return -5;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ static void set_self_typingstatus(ToxWindow *self, Tox *m, bool is_typing)
|
|||||||
|
|
||||||
ChatContext *ctx = self->chatwin;
|
ChatContext *ctx = self->chatwin;
|
||||||
|
|
||||||
Tox_Err_Set_Typing err;
|
TOX_ERR_SET_TYPING err;
|
||||||
tox_self_set_typing(m, self->num, is_typing, &err);
|
tox_self_set_typing(m, self->num, is_typing, &err);
|
||||||
|
|
||||||
if (err != TOX_ERR_SET_TYPING_OK) {
|
if (err != TOX_ERR_SET_TYPING_OK) {
|
||||||
|
@ -1129,7 +1129,7 @@ int game_packet_send(const GameData *game, const uint8_t *data, size_t length, G
|
|||||||
memcpy(packet + 1 + GAME_PACKET_HEADER_SIZE, data, length);
|
memcpy(packet + 1 + GAME_PACKET_HEADER_SIZE, data, length);
|
||||||
packet_length += length;
|
packet_length += length;
|
||||||
|
|
||||||
Tox_Err_Friend_Custom_Packet err;
|
TOX_ERR_FRIEND_CUSTOM_PACKET err;
|
||||||
|
|
||||||
if (!tox_friend_send_lossless_packet(game->tox, game->friend_number, packet, packet_length, &err)) {
|
if (!tox_friend_send_lossless_packet(game->tox, game->friend_number, packet, packet_length, &err)) {
|
||||||
fprintf(stderr, "failed to send game packet: error %d\n", err);
|
fprintf(stderr, "failed to send game packet: error %d\n", err);
|
||||||
|
@ -90,20 +90,20 @@ void cmd_ignore(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tox_Err_Group_Set_Ignore err;
|
Tox_Err_Group_Toggle_Ignore err;
|
||||||
tox_group_set_ignore(m, self->num, peer_id, true, &err);
|
tox_group_toggle_ignore(m, self->num, peer_id, true, &err);
|
||||||
|
|
||||||
switch (err) {
|
switch (err) {
|
||||||
case TOX_ERR_GROUP_SET_IGNORE_OK: {
|
case TOX_ERR_GROUP_TOGGLE_IGNORE_OK: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TOX_ERR_GROUP_SET_IGNORE_SELF: {
|
case TOX_ERR_GROUP_TOGGLE_IGNORE_SELF: {
|
||||||
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "You cannot ignore yourself.");
|
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "You cannot ignore yourself.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TOX_ERR_GROUP_SET_IGNORE_PEER_NOT_FOUND: {
|
case TOX_ERR_GROUP_TOGGLE_IGNORE_PEER_NOT_FOUND: {
|
||||||
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "The specified nick or public key is invalid.");
|
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "The specified nick or public key is invalid.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -791,20 +791,20 @@ void cmd_unignore(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tox_Err_Group_Set_Ignore err;
|
Tox_Err_Group_Toggle_Ignore err;
|
||||||
tox_group_set_ignore(m, self->num, peer_id, false, &err);
|
tox_group_toggle_ignore(m, self->num, peer_id, false, &err);
|
||||||
|
|
||||||
switch (err) {
|
switch (err) {
|
||||||
case TOX_ERR_GROUP_SET_IGNORE_OK: {
|
case TOX_ERR_GROUP_TOGGLE_IGNORE_OK: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TOX_ERR_GROUP_SET_IGNORE_SELF: {
|
case TOX_ERR_GROUP_TOGGLE_IGNORE_SELF: {
|
||||||
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "You cannot unignore yourself.");
|
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "You cannot unignore yourself.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TOX_ERR_GROUP_SET_IGNORE_PEER_NOT_FOUND: {
|
case TOX_ERR_GROUP_TOGGLE_IGNORE_PEER_NOT_FOUND: {
|
||||||
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "The specified nick or public key is invalid.");
|
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "The specified nick or public key is invalid.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ static int max_groupchat_index = 0;
|
|||||||
extern struct user_settings *user_settings;
|
extern struct user_settings *user_settings;
|
||||||
extern struct Winthread Winthread;
|
extern struct Winthread Winthread;
|
||||||
|
|
||||||
#define GROUP_SIDEBAR_OFFSET 3 /* Offset for the peer number box at the top of the statusbar */
|
#define GROUP_SIDEBAR_OFFSET 2 /* Offset for the peer number box at the top of the statusbar */
|
||||||
|
|
||||||
/* groupchat command names used for tab completion. */
|
/* groupchat command names used for tab completion. */
|
||||||
static const char *group_cmd_list[] = {
|
static const char *group_cmd_list[] = {
|
||||||
@ -385,6 +385,11 @@ void set_nick_all_groups(Tox *m, const char *new_nick, size_t length)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case TOX_ERR_GROUP_SELF_NAME_SET_TAKEN: {
|
||||||
|
line_info_add(self, false, NULL, 0, SYS_MSG, 0, RED, "-!- That nick is already in use.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
if (groupchats[i].time_connected > 0) {
|
if (groupchats[i].time_connected > 0) {
|
||||||
line_info_add(self, false, NULL, 0, SYS_MSG, 0, RED, "-!- Failed to set nick (error %d).", err);
|
line_info_add(self, false, NULL, 0, SYS_MSG, 0, RED, "-!- Failed to set nick (error %d).", err);
|
||||||
@ -475,10 +480,6 @@ static int group_get_nick_peer_id(uint32_t groupnumber, const char *nick, uint32
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nick == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < chat->max_idx; ++i) {
|
for (uint32_t i = 0; i < chat->max_idx; ++i) {
|
||||||
@ -497,7 +498,7 @@ static int group_get_nick_peer_id(uint32_t groupnumber, const char *nick, uint32
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return count > 0 ? 0 : -1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Gets the peer_id associated with `public_key`.
|
/* Gets the peer_id associated with `public_key`.
|
||||||
@ -513,17 +514,9 @@ int group_get_public_key_peer_id(uint32_t groupnumber, const char *public_key, u
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (public_key == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen(public_key) < TOX_GROUP_PEER_PUBLIC_KEY_SIZE * 2) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char key_bin[TOX_GROUP_PEER_PUBLIC_KEY_SIZE];
|
char key_bin[TOX_GROUP_PEER_PUBLIC_KEY_SIZE];
|
||||||
|
|
||||||
if (tox_pk_string_to_bytes(public_key, TOX_GROUP_PEER_PUBLIC_KEY_SIZE * 2, key_bin, sizeof(key_bin)) == -1) {
|
if (tox_pk_string_to_bytes(public_key, strlen(public_key), key_bin, sizeof(key_bin)) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -998,9 +991,7 @@ static void groupchat_onGroupPeerJoin(ToxWindow *self, Tox *m, uint32_t groupnum
|
|||||||
++chat->max_idx;
|
++chat->max_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timed_out(chat->time_connected, 60)
|
if (timed_out(chat->time_connected, 7)) { /* ignore join messages when we first connect to the group */
|
||||||
&& user_settings->show_group_connection_msg ==
|
|
||||||
SHOW_GROUP_CONNECTION_MSG_ON) { /* ignore join messages when we first connect to the group */
|
|
||||||
line_info_add(self, true, peer->name, NULL, CONNECTION, 0, GREEN, "has joined the room");
|
line_info_add(self, true, peer->name, NULL, CONNECTION, 0, GREEN, "has joined the room");
|
||||||
|
|
||||||
write_to_log("has joined the room", peer->name, self->chatwin->log, true);
|
write_to_log("has joined the room", peer->name, self->chatwin->log, true);
|
||||||
@ -1036,16 +1027,14 @@ void groupchat_onGroupPeerExit(ToxWindow *self, Tox *m, uint32_t groupnumber, ui
|
|||||||
if (length > 0) {
|
if (length > 0) {
|
||||||
line_info_add(self, true, name, NULL, DISCONNECTION, 0, RED, "[Quit]: %s", part_message);
|
line_info_add(self, true, name, NULL, DISCONNECTION, 0, RED, "[Quit]: %s", part_message);
|
||||||
snprintf(log_str, sizeof(log_str), "has left the room (%s)", part_message);
|
snprintf(log_str, sizeof(log_str), "has left the room (%s)", part_message);
|
||||||
write_to_log(log_str, name, self->chatwin->log, true);
|
} else {
|
||||||
sound_notify(self, silent, NT_WNDALERT_2, NULL);
|
|
||||||
} else if (user_settings->show_group_connection_msg == SHOW_GROUP_CONNECTION_MSG_ON) {
|
|
||||||
const char *exit_string = get_group_exit_string(exit_type);
|
const char *exit_string = get_group_exit_string(exit_type);
|
||||||
line_info_add(self, true, name, NULL, DISCONNECTION, 0, RED, "[%s]", exit_string);
|
line_info_add(self, true, name, NULL, DISCONNECTION, 0, RED, "[%s]", exit_string);
|
||||||
snprintf(log_str, sizeof(log_str), "[%s]", exit_string);
|
snprintf(log_str, sizeof(log_str), "[%s]", exit_string);
|
||||||
write_to_log(log_str, name, self->chatwin->log, true);
|
|
||||||
sound_notify(self, silent, NT_WNDALERT_2, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write_to_log(log_str, name, self->chatwin->log, true);
|
||||||
|
sound_notify(self, silent, NT_WNDALERT_2, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int peer_index = get_peer_index(groupnumber, peer_id);
|
int peer_index = get_peer_index(groupnumber, peer_id);
|
||||||
@ -1383,7 +1372,7 @@ static void send_group_message(ToxWindow *self, Tox *m, uint32_t groupnumber, co
|
|||||||
|
|
||||||
Tox_Err_Group_Send_Message err;
|
Tox_Err_Group_Send_Message err;
|
||||||
|
|
||||||
if (!tox_group_send_message(m, groupnumber, type, (uint8_t *) msg, strlen(msg), NULL, &err)) {
|
if (!tox_group_send_message(m, groupnumber, type, (uint8_t *) msg, strlen(msg), &err)) {
|
||||||
if (err == TOX_ERR_GROUP_SEND_MESSAGE_PERMISSIONS) {
|
if (err == TOX_ERR_GROUP_SEND_MESSAGE_PERMISSIONS) {
|
||||||
const Tox_Group_Role role = tox_group_self_get_role(m, groupnumber, NULL);
|
const Tox_Group_Role role = tox_group_self_get_role(m, groupnumber, NULL);
|
||||||
|
|
||||||
@ -1427,6 +1416,7 @@ static void send_group_prvt_message(ToxWindow *self, Tox *m, uint32_t groupnumbe
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t peer_id = 0;
|
||||||
uint32_t name_length = 0;
|
uint32_t name_length = 0;
|
||||||
const char *nick = NULL;
|
const char *nick = NULL;
|
||||||
|
|
||||||
@ -1444,23 +1434,13 @@ static void send_group_prvt_message(ToxWindow *self, Tox *m, uint32_t groupnumbe
|
|||||||
if (chat->peer_list[i].name_length > name_length) {
|
if (chat->peer_list[i].name_length > name_length) {
|
||||||
name_length = chat->peer_list[i].name_length;
|
name_length = chat->peer_list[i].name_length;
|
||||||
nick = chat->peer_list[i].name;
|
nick = chat->peer_list[i].name;
|
||||||
|
peer_id = chat->peer_list[i].peer_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nick == NULL) {
|
if (nick == NULL) {
|
||||||
if (data_len < TOX_GROUP_PEER_PUBLIC_KEY_SIZE * 2) {
|
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name.");
|
||||||
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Invalid nick.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nick = data;
|
|
||||||
name_length = TOX_GROUP_PEER_PUBLIC_KEY_SIZE * 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t peer_id;
|
|
||||||
|
|
||||||
if (group_get_peer_id_of_identifier(self, nick, &peer_id) != 0) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1679,15 +1659,7 @@ static void groupchat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
wattron(ctx->sidebar, A_BOLD);
|
wattron(ctx->sidebar, A_BOLD);
|
||||||
|
|
||||||
pthread_mutex_lock(&Winthread.lock);
|
pthread_mutex_lock(&Winthread.lock);
|
||||||
|
wprintw(ctx->sidebar, "Peers: %d\n", chat->num_peers);
|
||||||
if (chat->num_peers > 1) {
|
|
||||||
wprintw(ctx->sidebar, "Peers: %d\n", chat->num_peers);
|
|
||||||
} else if (tox_group_is_connected(m, self->num, NULL)) {
|
|
||||||
wprintw(ctx->sidebar, "Connecting...\n");
|
|
||||||
} else {
|
|
||||||
wprintw(ctx->sidebar, "Disconnected\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_mutex_unlock(&Winthread.lock);
|
pthread_mutex_unlock(&Winthread.lock);
|
||||||
|
|
||||||
wattroff(ctx->sidebar, A_BOLD);
|
wattroff(ctx->sidebar, A_BOLD);
|
||||||
@ -1697,15 +1669,14 @@ static void groupchat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
mvwhline(ctx->sidebar, 1, 1, ACS_HLINE, SIDEBAR_WIDTH - 1);
|
mvwhline(ctx->sidebar, 1, 1, ACS_HLINE, SIDEBAR_WIDTH - 1);
|
||||||
wattroff(ctx->sidebar, COLOR_PAIR(BLUE));
|
wattroff(ctx->sidebar, COLOR_PAIR(BLUE));
|
||||||
|
|
||||||
const int maxlines = y2 - GROUP_SIDEBAR_OFFSET - CHATBOX_HEIGHT;
|
int maxlines = y2 - GROUP_SIDEBAR_OFFSET - CHATBOX_HEIGHT;
|
||||||
uint32_t offset = 0;
|
uint32_t i, offset = 0;
|
||||||
|
|
||||||
pthread_mutex_lock(&Winthread.lock);
|
pthread_mutex_lock(&Winthread.lock);
|
||||||
const uint32_t max_idx = chat->max_idx;
|
uint32_t max_idx = chat->max_idx;
|
||||||
const uint32_t start = chat->side_pos;
|
|
||||||
pthread_mutex_unlock(&Winthread.lock);
|
pthread_mutex_unlock(&Winthread.lock);
|
||||||
|
|
||||||
for (uint32_t i = start; i < max_idx && offset < maxlines; ++i) {
|
for (i = 0; i < max_idx && i < maxlines; ++i) {
|
||||||
pthread_mutex_lock(&Winthread.lock);
|
pthread_mutex_lock(&Winthread.lock);
|
||||||
|
|
||||||
if (!chat->peer_list[i].active) {
|
if (!chat->peer_list[i].active) {
|
||||||
@ -1715,21 +1686,22 @@ static void groupchat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
|
|
||||||
wmove(ctx->sidebar, offset + 2, 1);
|
wmove(ctx->sidebar, offset + 2, 1);
|
||||||
|
|
||||||
const int maxlen_offset = chat->peer_list[i].role == TOX_GROUP_ROLE_USER ? 2 : 3;
|
int p = i + chat->side_pos;
|
||||||
|
int maxlen_offset = chat->peer_list[p].role == TOX_GROUP_ROLE_USER ? 2 : 3;
|
||||||
|
|
||||||
/* truncate nick to fit in side panel without modifying list */
|
/* truncate nick to fit in side panel without modifying list */
|
||||||
char tmpnck[TOX_MAX_NAME_LENGTH];
|
char tmpnck[TOX_MAX_NAME_LENGTH];
|
||||||
const int maxlen = SIDEBAR_WIDTH - maxlen_offset;
|
int maxlen = SIDEBAR_WIDTH - maxlen_offset;
|
||||||
|
|
||||||
memcpy(tmpnck, chat->peer_list[i].name, maxlen);
|
memcpy(tmpnck, chat->peer_list[p].name, maxlen);
|
||||||
|
|
||||||
tmpnck[maxlen] = '\0';
|
tmpnck[maxlen] = '\0';
|
||||||
|
|
||||||
int namecolour = WHITE;
|
int namecolour = WHITE;
|
||||||
|
|
||||||
if (chat->peer_list[i].status == TOX_USER_STATUS_AWAY) {
|
if (chat->peer_list[p].status == TOX_USER_STATUS_AWAY) {
|
||||||
namecolour = YELLOW;
|
namecolour = YELLOW;
|
||||||
} else if (chat->peer_list[i].status == TOX_USER_STATUS_BUSY) {
|
} else if (chat->peer_list[p].status == TOX_USER_STATUS_BUSY) {
|
||||||
namecolour = RED;
|
namecolour = RED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1737,13 +1709,13 @@ static void groupchat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
const char *rolesig = "";
|
const char *rolesig = "";
|
||||||
int rolecolour = WHITE;
|
int rolecolour = WHITE;
|
||||||
|
|
||||||
if (chat->peer_list[i].role == TOX_GROUP_ROLE_FOUNDER) {
|
if (chat->peer_list[p].role == TOX_GROUP_ROLE_FOUNDER) {
|
||||||
rolesig = "&";
|
rolesig = "&";
|
||||||
rolecolour = BLUE;
|
rolecolour = BLUE;
|
||||||
} else if (chat->peer_list[i].role == TOX_GROUP_ROLE_MODERATOR) {
|
} else if (chat->peer_list[p].role == TOX_GROUP_ROLE_MODERATOR) {
|
||||||
rolesig = "+";
|
rolesig = "+";
|
||||||
rolecolour = GREEN;
|
rolecolour = GREEN;
|
||||||
} else if (chat->peer_list[i].role == TOX_GROUP_ROLE_OBSERVER) {
|
} else if (chat->peer_list[p].role == TOX_GROUP_ROLE_OBSERVER) {
|
||||||
rolesig = "-";
|
rolesig = "-";
|
||||||
rolecolour = MAGENTA;
|
rolecolour = MAGENTA;
|
||||||
}
|
}
|
||||||
|
12
src/help.c
12
src/help.c
@ -186,9 +186,9 @@ static void help_draw_global(ToxWindow *self)
|
|||||||
wprintw(win, " /nick <nick> : Set your nickname\n");
|
wprintw(win, " /nick <nick> : Set your nickname\n");
|
||||||
wprintw(win, " /nospam <value> : Change part of your Tox ID to stop spam\n");
|
wprintw(win, " /nospam <value> : Change part of your Tox ID to stop spam\n");
|
||||||
wprintw(win, " /log <on> or <off> : Enable/disable logging\n");
|
wprintw(win, " /log <on> or <off> : Enable/disable logging\n");
|
||||||
|
wprintw(win, " /conference <type> : Create a conference where type: text | audio\n");
|
||||||
wprintw(win, " /myid : Print your Tox ID\n");
|
wprintw(win, " /myid : Print your Tox ID\n");
|
||||||
wprintw(win, " /group <name> : Create a new group chat\n");
|
wprintw(win, " /group <name> : Create a new group chat\n");
|
||||||
wprintw(win, " /join <chatid> : Join a groupchat using a Chat ID\n");
|
|
||||||
#ifdef GAMES
|
#ifdef GAMES
|
||||||
wprintw(win, " /game : Play a game\n");
|
wprintw(win, " /game : Play a game\n");
|
||||||
#endif /* GAMES */
|
#endif /* GAMES */
|
||||||
@ -246,10 +246,8 @@ static void help_draw_chat(ToxWindow *self)
|
|||||||
wprintw(win, "Chat Commands:\n");
|
wprintw(win, "Chat Commands:\n");
|
||||||
wattroff(win, A_BOLD | COLOR_PAIR(RED));
|
wattroff(win, A_BOLD | COLOR_PAIR(RED));
|
||||||
|
|
||||||
wprintw(win, " /cinvite <n> : Invite contact to a conference \n");
|
wprintw(win, " /invite <n> : Invite contact to a conference \n");
|
||||||
wprintw(win, " /cjoin : Join a pending conference\n");
|
wprintw(win, " /join : Join a pending conference\n");
|
||||||
wprintw(win, " /invite <n> : Invite contact to a groupchat \n");
|
|
||||||
wprintw(win, " /gaccept <password> : Accept a pending groupchat invite\n");
|
|
||||||
wprintw(win, " /sendfile <path> : Send a file\n");
|
wprintw(win, " /sendfile <path> : Send a file\n");
|
||||||
wprintw(win, " /savefile <id> : Receive a file\n");
|
wprintw(win, " /savefile <id> : Receive a file\n");
|
||||||
wprintw(win, " /cancel <type> <id> : Cancel file transfer where type: in|out\n");
|
wprintw(win, " /cancel <type> <id> : Cancel file transfer where type: in|out\n");
|
||||||
@ -438,13 +436,13 @@ void help_onKey(ToxWindow *self, wint_t key)
|
|||||||
#elif AUDIO
|
#elif AUDIO
|
||||||
help_init_window(self, 21, 80);
|
help_init_window(self, 21, 80);
|
||||||
#else
|
#else
|
||||||
help_init_window(self, 13, 80);
|
help_init_window(self, 11, 80);
|
||||||
#endif
|
#endif
|
||||||
self->help->type = HELP_CHAT;
|
self->help->type = HELP_CHAT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case L'g':
|
case L'g':
|
||||||
height = 23;
|
height = 22;
|
||||||
#ifdef VIDEO
|
#ifdef VIDEO
|
||||||
height += 8;
|
height += 8;
|
||||||
#elif AUDIO
|
#elif AUDIO
|
||||||
|
@ -144,14 +144,11 @@ static struct line_info *line_info_ret_queue(struct history *hst)
|
|||||||
*/
|
*/
|
||||||
static int print_n_chars(WINDOW *win, const wchar_t *s, size_t n, int max_y)
|
static int print_n_chars(WINDOW *win, const wchar_t *s, size_t n, int max_y)
|
||||||
{
|
{
|
||||||
// we use an array to represent a single wchar in order to get around an ncurses
|
|
||||||
// bug with waddnwstr() that overreads the memory address by one byte when
|
|
||||||
// supplied with a single wchar.
|
|
||||||
wchar_t ch[2] = {0};
|
|
||||||
bool newline = false;
|
bool newline = false;
|
||||||
|
wchar_t ch;
|
||||||
|
|
||||||
for (size_t i = 0; i < n && (ch[0] = s[i]); ++i) {
|
for (size_t i = 0; i < n && (ch = s[i]); ++i) {
|
||||||
if (ch[0] == L'\n') {
|
if (ch == L'\n') {
|
||||||
newline = true;
|
newline = true;
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
@ -168,11 +165,11 @@ static int print_n_chars(WINDOW *win, const wchar_t *s, size_t n, int max_y)
|
|||||||
|
|
||||||
if (win) {
|
if (win) {
|
||||||
#ifdef HAVE_WIDECHAR
|
#ifdef HAVE_WIDECHAR
|
||||||
waddnwstr(win, ch, 1);
|
waddnwstr(win, &ch, 1);
|
||||||
#else
|
#else
|
||||||
char b;
|
char b;
|
||||||
|
|
||||||
if (wcstombs(&b, ch, sizeof(char)) != 1) {
|
if (wcstombs(&b, &ch, sizeof(char)) != 1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ void cqueue_add(struct chat_queue *q, const char *msg, size_t len, uint8_t type,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cqueue_msg *new_m = calloc(1, sizeof(struct cqueue_msg));
|
struct cqueue_msg *new_m = malloc(sizeof(struct cqueue_msg));
|
||||||
|
|
||||||
if (new_m == NULL) {
|
if (new_m == NULL) {
|
||||||
exit_toxic_err("failed in cqueue_message", FATALERR_MEMORY);
|
exit_toxic_err("failed in cqueue_message", FATALERR_MEMORY);
|
||||||
@ -62,7 +62,6 @@ void cqueue_add(struct chat_queue *q, const char *msg, size_t len, uint8_t type,
|
|||||||
new_m->time_added = get_unix_time();
|
new_m->time_added = get_unix_time();
|
||||||
new_m->receipt = -1;
|
new_m->receipt = -1;
|
||||||
new_m->next = NULL;
|
new_m->next = NULL;
|
||||||
new_m->noread_flag = false;
|
|
||||||
|
|
||||||
if (q->root == NULL) {
|
if (q->root == NULL) {
|
||||||
new_m->prev = NULL;
|
new_m->prev = NULL;
|
||||||
@ -204,7 +203,7 @@ void cqueue_try_send(ToxWindow *self, Tox *m)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tox_Err_Friend_Send_Message err;
|
TOX_ERR_FRIEND_SEND_MESSAGE err;
|
||||||
Tox_Message_Type type = msg->type == OUT_MSG ? TOX_MESSAGE_TYPE_NORMAL : TOX_MESSAGE_TYPE_ACTION;
|
Tox_Message_Type type = msg->type == OUT_MSG ? TOX_MESSAGE_TYPE_NORMAL : TOX_MESSAGE_TYPE_ACTION;
|
||||||
uint32_t receipt = tox_friend_send_message(m, self->num, type, (uint8_t *) msg->message, msg->len, &err);
|
uint32_t receipt = tox_friend_send_message(m, self->num, type, (uint8_t *) msg->message, msg->len, &err);
|
||||||
|
|
||||||
|
@ -365,7 +365,7 @@ on_exit:
|
|||||||
void name_lookup(ToxWindow *self, Tox *m, const char *id_bin, const char *addr, const char *message)
|
void name_lookup(ToxWindow *self, Tox *m, const char *id_bin, const char *addr, const char *message)
|
||||||
{
|
{
|
||||||
if (t_data.disabled) {
|
if (t_data.disabled) {
|
||||||
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "nameservers list is empty or does not exist.");
|
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "name lookups are disabled.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,10 +20,9 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "api.h"
|
|
||||||
|
|
||||||
#ifdef PYTHON
|
#ifdef PYTHON
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
|
#include "api.h"
|
||||||
|
|
||||||
#include "execute.h"
|
#include "execute.h"
|
||||||
|
|
||||||
|
@ -63,7 +63,6 @@ static struct ui_strings {
|
|||||||
const char *show_typing_other;
|
const char *show_typing_other;
|
||||||
const char *show_welcome_msg;
|
const char *show_welcome_msg;
|
||||||
const char *show_connection_msg;
|
const char *show_connection_msg;
|
||||||
const char *show_group_connection_msg;
|
|
||||||
const char *nodeslist_update_freq;
|
const char *nodeslist_update_freq;
|
||||||
const char *autosave_freq;
|
const char *autosave_freq;
|
||||||
|
|
||||||
@ -100,7 +99,6 @@ static struct ui_strings {
|
|||||||
"show_typing_other",
|
"show_typing_other",
|
||||||
"show_welcome_msg",
|
"show_welcome_msg",
|
||||||
"show_connection_msg",
|
"show_connection_msg",
|
||||||
"show_group_connection_msg",
|
|
||||||
"nodeslist_update_freq",
|
"nodeslist_update_freq",
|
||||||
"autosave_freq",
|
"autosave_freq",
|
||||||
"line_join",
|
"line_join",
|
||||||
@ -138,7 +136,6 @@ static void ui_defaults(struct user_settings *settings)
|
|||||||
settings->show_typing_other = SHOW_TYPING_ON;
|
settings->show_typing_other = SHOW_TYPING_ON;
|
||||||
settings->show_welcome_msg = SHOW_WELCOME_MSG_ON;
|
settings->show_welcome_msg = SHOW_WELCOME_MSG_ON;
|
||||||
settings->show_connection_msg = SHOW_CONNECTION_MSG_ON;
|
settings->show_connection_msg = SHOW_CONNECTION_MSG_ON;
|
||||||
settings->show_group_connection_msg = SHOW_GROUP_CONNECTION_MSG_ON;
|
|
||||||
settings->nodeslist_update_freq = 1;
|
settings->nodeslist_update_freq = 1;
|
||||||
settings->autosave_freq = 600;
|
settings->autosave_freq = 600;
|
||||||
|
|
||||||
@ -408,7 +405,6 @@ int settings_load(struct user_settings *s, const char *patharg)
|
|||||||
config_setting_lookup_bool(setting, ui_strings.show_typing_other, &s->show_typing_other);
|
config_setting_lookup_bool(setting, ui_strings.show_typing_other, &s->show_typing_other);
|
||||||
config_setting_lookup_bool(setting, ui_strings.show_welcome_msg, &s->show_welcome_msg);
|
config_setting_lookup_bool(setting, ui_strings.show_welcome_msg, &s->show_welcome_msg);
|
||||||
config_setting_lookup_bool(setting, ui_strings.show_connection_msg, &s->show_connection_msg);
|
config_setting_lookup_bool(setting, ui_strings.show_connection_msg, &s->show_connection_msg);
|
||||||
config_setting_lookup_bool(setting, ui_strings.show_group_connection_msg, &s->show_group_connection_msg);
|
|
||||||
|
|
||||||
config_setting_lookup_int(setting, ui_strings.history_size, &s->history_size);
|
config_setting_lookup_int(setting, ui_strings.history_size, &s->history_size);
|
||||||
config_setting_lookup_int(setting, ui_strings.notification_timeout, &s->notification_timeout);
|
config_setting_lookup_int(setting, ui_strings.notification_timeout, &s->notification_timeout);
|
||||||
|
@ -54,7 +54,6 @@ struct user_settings {
|
|||||||
int show_typing_other; /* boolean */
|
int show_typing_other; /* boolean */
|
||||||
int show_welcome_msg; /* boolean */
|
int show_welcome_msg; /* boolean */
|
||||||
int show_connection_msg; /* boolean */
|
int show_connection_msg; /* boolean */
|
||||||
int show_group_connection_msg; /* boolean */
|
|
||||||
int nodeslist_update_freq; /* int (<= 0 to disable updates) */
|
int nodeslist_update_freq; /* int (<= 0 to disable updates) */
|
||||||
int autosave_freq; /* int (<= 0 to disable autosave) */
|
int autosave_freq; /* int (<= 0 to disable autosave) */
|
||||||
|
|
||||||
@ -123,9 +122,6 @@ enum settings_values {
|
|||||||
SHOW_CONNECTION_MSG_OFF = 0,
|
SHOW_CONNECTION_MSG_OFF = 0,
|
||||||
SHOW_CONNECTION_MSG_ON = 1,
|
SHOW_CONNECTION_MSG_ON = 1,
|
||||||
|
|
||||||
SHOW_GROUP_CONNECTION_MSG_OFF = 0,
|
|
||||||
SHOW_GROUP_CONNECTION_MSG_ON = 1,
|
|
||||||
|
|
||||||
DFLT_HST_SIZE = 700,
|
DFLT_HST_SIZE = 700,
|
||||||
|
|
||||||
MPLEX_OFF = 0,
|
MPLEX_OFF = 0,
|
||||||
|
22
src/toxic.c
22
src/toxic.c
@ -37,7 +37,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -258,27 +257,22 @@ void cb_toxcore_logger(Tox *m, TOX_LOG_LEVEL level, const char *file, uint32_t l
|
|||||||
{
|
{
|
||||||
UNUSED_VAR(m);
|
UNUSED_VAR(m);
|
||||||
|
|
||||||
|
if (level == TOX_LOG_LEVEL_TRACE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
FILE *fp = (FILE *)user_data;
|
FILE *fp = (FILE *)user_data;
|
||||||
|
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
fp = stderr;
|
fp = stderr;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct timeval tv;
|
const time_t t = time(NULL);
|
||||||
|
struct tm *tmp = gmtime(&t);
|
||||||
gettimeofday(&tv, NULL);
|
|
||||||
|
|
||||||
struct tm tmp;
|
|
||||||
|
|
||||||
gmtime_r(&tv.tv_sec, &tmp);
|
|
||||||
|
|
||||||
char timestamp[200];
|
char timestamp[200];
|
||||||
|
strftime(timestamp, sizeof(timestamp), "%F %T", tmp);
|
||||||
|
|
||||||
strftime(timestamp, sizeof(timestamp), "%F %T", &tmp);
|
fprintf(fp, "[%c] %s %s:%u(%s) - %s\n", tox_log_level_show(level)[0], timestamp, file, line, func, message);
|
||||||
|
|
||||||
fprintf(fp, "%c %s.%06ld %s:%u(%s) - %s\n", tox_log_level_show(level)[0], timestamp, tv.tv_usec, file, line, func,
|
|
||||||
message);
|
|
||||||
|
|
||||||
fflush(fp);
|
fflush(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ void on_group_invite(Tox *m, uint32_t friendnumber, const uint8_t *invite_data,
|
|||||||
const uint8_t *group_name,
|
const uint8_t *group_name,
|
||||||
size_t group_name_length, void *userdata);
|
size_t group_name_length, void *userdata);
|
||||||
void on_group_message(Tox *m, uint32_t groupnumber, uint32_t peernumber, TOX_MESSAGE_TYPE type,
|
void on_group_message(Tox *m, uint32_t groupnumber, uint32_t peernumber, TOX_MESSAGE_TYPE type,
|
||||||
const uint8_t *message, size_t length, uint32_t message_id, void *userdata);
|
const uint8_t *message, size_t length, void *userdata);
|
||||||
void on_group_private_message(Tox *m, uint32_t groupnumber, uint32_t peernumber, TOX_MESSAGE_TYPE type,
|
void on_group_private_message(Tox *m, uint32_t groupnumber, uint32_t peernumber, TOX_MESSAGE_TYPE type,
|
||||||
const uint8_t *message, size_t length,
|
const uint8_t *message, size_t length,
|
||||||
void *userdata);
|
void *userdata);
|
||||||
|
@ -395,10 +395,8 @@ void on_group_invite(Tox *m, uint32_t friendnumber, const uint8_t *invite_data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void on_group_message(Tox *m, uint32_t groupnumber, uint32_t peer_id, TOX_MESSAGE_TYPE type,
|
void on_group_message(Tox *m, uint32_t groupnumber, uint32_t peer_id, TOX_MESSAGE_TYPE type,
|
||||||
const uint8_t *message, size_t length, uint32_t message_id, void *userdata)
|
const uint8_t *message, size_t length, void *userdata)
|
||||||
{
|
{
|
||||||
UNUSED_VAR(message_id);
|
|
||||||
|
|
||||||
char msg[MAX_STR_SIZE + 1];
|
char msg[MAX_STR_SIZE + 1];
|
||||||
length = copy_tox_str(msg, sizeof(msg), (const char *) message, length);
|
length = copy_tox_str(msg, sizeof(msg), (const char *) message, length);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user