mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-23 02:13:01 +01:00
Merge upsteam/master
This commit is contained in:
parent
eb2d6afa00
commit
e775c51a06
@ -41,3 +41,12 @@ toxic_LDADD = $(LIBTOXCORE_LDFLAGS) \
|
|||||||
$(LIBSODIUM_LIBS) \
|
$(LIBSODIUM_LIBS) \
|
||||||
$(WINSOCK2_LIBS)
|
$(WINSOCK2_LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
# For audio support
|
||||||
|
if BUILD_AV
|
||||||
|
toxic_SOURCES += $(top_srcdir)/src/audio_call.c \
|
||||||
|
$(top_srcdir)/src/audio_call.h
|
||||||
|
|
||||||
|
toxic_CFLAGS += $(LIBTOXAV_CFLAGS)
|
||||||
|
toxic_LDADD += $(LIBTOXAV_LIBS)
|
||||||
|
endif
|
65
configure.ac
65
configure.ac
@ -2,7 +2,7 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ([2.65])
|
AC_PREREQ([2.65])
|
||||||
AC_INIT([toxic], [0.2.4], [http://tox.im/])
|
AC_INIT([toxic], [0.2.5], [https://tox.im/])
|
||||||
AC_CONFIG_AUX_DIR(configure_aux)
|
AC_CONFIG_AUX_DIR(configure_aux)
|
||||||
AC_CONFIG_SRCDIR([src/main.c])
|
AC_CONFIG_SRCDIR([src/main.c])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
@ -381,6 +381,69 @@ if test "x$LIBTOXCORE_FOUND" = "xno"; then
|
|||||||
AC_SUBST(LIBTOXCORE_LDFLAGS)
|
AC_SUBST(LIBTOXCORE_LDFLAGS)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
#### A/V Stuff
|
||||||
|
|
||||||
|
AV_SEARCH_DIR=
|
||||||
|
BUILD_AV="yes"
|
||||||
|
|
||||||
|
AC_ARG_WITH(libtoxav-prefix,
|
||||||
|
AC_HELP_STRING([--with-libtoxav-prefix=DIR],
|
||||||
|
[search for libtoxav in DIR, i.e. look for libraries in
|
||||||
|
DIR/lib and for headers in DIR/include]),
|
||||||
|
[
|
||||||
|
AV_SEARCH_DIR="$withval"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
if test -n "$AV_SEARCH_DIR"; then
|
||||||
|
CFLAGS="$CFLAGS -I$AV_SEARCH_DIR/include"
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$AV_SEARCH_DIR/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$AV_SEARCH_DIR/lib"
|
||||||
|
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$AV_SEARCH_DIR/lib/pkgconfig
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if specified enable
|
||||||
|
AC_ARG_ENABLE([av],
|
||||||
|
[AC_HELP_STRING([--disable-av], [build AV support libraries (default: auto)]) ],
|
||||||
|
[
|
||||||
|
if test "x$enableval" = "xno"; then
|
||||||
|
BUILD_AV="no"
|
||||||
|
elif test "x$enableval" = "xyes"; then
|
||||||
|
BUILD_AV="yes"
|
||||||
|
fi
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check for A/V library
|
||||||
|
|
||||||
|
if test "x$BUILD_AV" = "xyes"; then
|
||||||
|
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
|
||||||
|
|
||||||
|
PKG_CHECK_EXISTS([libtoxav],
|
||||||
|
[
|
||||||
|
AC_CHECK_HEADER([tox/toxav.h],
|
||||||
|
[
|
||||||
|
# Place define for audio support
|
||||||
|
AC_DEFINE([_SUPPORT_AUDIO], [], [If audio supported])
|
||||||
|
AC_MSG_NOTICE([Building with audio support])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AC_MSG_NOTICE([No A/V headers; disabling A/V support])
|
||||||
|
BUILD_AV="no"
|
||||||
|
],)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AC_MSG_NOTICE([No A/V library; disabling A/V support])
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(BUILD_AV, test "x$BUILD_AV" = "xyes")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TOXIC_VERSION="$PACKAGE_VERSION"
|
TOXIC_VERSION="$PACKAGE_VERSION"
|
||||||
AC_PATH_PROG([GIT], [git], [no])
|
AC_PATH_PROG([GIT], [git], [no])
|
||||||
if test "x$GIT" != "xno"; then
|
if test "x$GIT" != "xno"; then
|
||||||
|
13
src/chat.c
13
src/chat.c
@ -547,7 +547,7 @@ static void chat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
self->x = x2;
|
self->x = x2;
|
||||||
|
|
||||||
/* Truncate note if it doesn't fit in statusbar */
|
/* Truncate note if it doesn't fit in statusbar */
|
||||||
uint16_t maxlen = x2 - getcurx(statusbar->topline) - 4;
|
uint16_t maxlen = x2 - getcurx(statusbar->topline) - (KEY_IDENT_DIGITS * 2) - 7;
|
||||||
if (statusbar->statusmsg_len > maxlen) {
|
if (statusbar->statusmsg_len > maxlen) {
|
||||||
statusbar->statusmsg[maxlen] = '\0';
|
statusbar->statusmsg[maxlen] = '\0';
|
||||||
statusbar->statusmsg_len = maxlen;
|
statusbar->statusmsg_len = maxlen;
|
||||||
@ -559,7 +559,16 @@ static void chat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
wattroff(statusbar->topline, A_BOLD);
|
wattroff(statusbar->topline, A_BOLD);
|
||||||
}
|
}
|
||||||
|
|
||||||
wprintw(statusbar->topline, "\n");
|
wclrtoeol(statusbar->topline);
|
||||||
|
wmove(statusbar->topline, 0, x2 - (KEY_IDENT_DIGITS * 2) - 3);
|
||||||
|
wprintw(statusbar->topline, "{");
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < KEY_IDENT_DIGITS; ++i)
|
||||||
|
wprintw(statusbar->topline, "%02X", friends[self->num].pub_key[i] & 0xff);
|
||||||
|
|
||||||
|
wprintw(statusbar->topline, "}\n");
|
||||||
mvwhline(ctx->linewin, 0, 0, ACS_HLINE, x2);
|
mvwhline(ctx->linewin, 0, 0, ACS_HLINE, x2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,6 +130,7 @@ static void friendlist_onFriendAdded(ToxWindow *self, Tox *m, int num, bool sort
|
|||||||
friends[i].online = false;
|
friends[i].online = false;
|
||||||
friends[i].status = TOX_USERSTATUS_NONE;
|
friends[i].status = TOX_USERSTATUS_NONE;
|
||||||
friends[i].namelength = tox_get_name(m, num, friends[i].name);
|
friends[i].namelength = tox_get_name(m, num, friends[i].name);
|
||||||
|
tox_get_client_id(m, num, friends[i].pub_key);
|
||||||
|
|
||||||
if (friends[i].namelength == -1 || friends[i].name[0] == '\0') {
|
if (friends[i].namelength == -1 || friends[i].name[0] == '\0') {
|
||||||
strcpy(friends[i].name, (uint8_t *) UNKNOWN_NAME);
|
strcpy(friends[i].name, (uint8_t *) UNKNOWN_NAME);
|
||||||
@ -363,7 +364,11 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m)
|
|||||||
|
|
||||||
wprintw(self->window, " (%s)\n", friends[f].statusmsg);
|
wprintw(self->window, " (%s)\n", friends[f].statusmsg);
|
||||||
} else {
|
} else {
|
||||||
wprintw(self->window, "[O]");
|
wprintw(self->window, "[");
|
||||||
|
wattron(self->window, A_BOLD);
|
||||||
|
wprintw(self->window, "O");
|
||||||
|
wattroff(self->window, A_BOLD);
|
||||||
|
wprintw(self->window, "]");
|
||||||
|
|
||||||
if (f_selected)
|
if (f_selected)
|
||||||
wattron(self->window, A_BOLD);
|
wattron(self->window, A_BOLD);
|
||||||
|
@ -9,6 +9,7 @@ typedef struct {
|
|||||||
uint8_t statusmsg[TOX_MAX_STATUSMESSAGE_LENGTH];
|
uint8_t statusmsg[TOX_MAX_STATUSMESSAGE_LENGTH];
|
||||||
uint16_t statusmsg_len;
|
uint16_t statusmsg_len;
|
||||||
uint8_t pending_groupchat[TOX_CLIENT_ID_SIZE];
|
uint8_t pending_groupchat[TOX_CLIENT_ID_SIZE];
|
||||||
|
uint8_t pub_key[TOX_CLIENT_ID_SIZE];
|
||||||
int num;
|
int num;
|
||||||
int chatwin;
|
int chatwin;
|
||||||
bool active;
|
bool active;
|
||||||
|
47
src/main.c
47
src/main.c
@ -232,34 +232,34 @@ int init_connection(Tox *m)
|
|||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_tox(Tox *m, ToxWindow *prompt)
|
static void do_connection(Tox *m, ToxWindow *prompt)
|
||||||
{
|
{
|
||||||
static int conn_try = 0;
|
static int conn_try = 0;
|
||||||
static int conn_err = 0;
|
static int conn_err = 0;
|
||||||
static bool dht_on = false;
|
static bool dht_on = false;
|
||||||
|
|
||||||
if (!dht_on && !tox_isconnected(m) && !(conn_try++ % 100)) {
|
bool is_connected = tox_isconnected(m);
|
||||||
|
|
||||||
|
if (!dht_on && !is_connected && !(conn_try++ % 100)) {
|
||||||
prep_prompt_win();
|
prep_prompt_win();
|
||||||
if (!conn_err) {
|
if (!conn_err) {
|
||||||
wprintw(prompt->window, "Establishing connection...\n");
|
wprintw(prompt->window, "Establishing connection...\n");
|
||||||
if ((conn_err = init_connection(m)))
|
if ((conn_err = init_connection(m)))
|
||||||
wprintw(prompt->window, "\nAuto-connect failed with error code %d\n", conn_err);
|
wprintw(prompt->window, "\nAuto-connect failed with error code %d\n", conn_err);
|
||||||
}
|
}
|
||||||
} else if (!dht_on && tox_isconnected(m)) {
|
} else if (!dht_on && is_connected) {
|
||||||
dht_on = true;
|
dht_on = true;
|
||||||
prompt_update_connectionstatus(prompt, dht_on);
|
prompt_update_connectionstatus(prompt, dht_on);
|
||||||
|
|
||||||
prep_prompt_win();
|
prep_prompt_win();
|
||||||
wprintw(prompt->window, "\nDHT connected.\n");
|
wprintw(prompt->window, "\nDHT connected.\n");
|
||||||
} else if (dht_on && !tox_isconnected(m)) {
|
} else if (dht_on && !is_connected) {
|
||||||
dht_on = false;
|
dht_on = false;
|
||||||
prompt_update_connectionstatus(prompt, dht_on);
|
prompt_update_connectionstatus(prompt, dht_on);
|
||||||
|
|
||||||
prep_prompt_win();
|
prep_prompt_win();
|
||||||
wprintw(prompt->window, "\nDHT disconnected. Attempting to reconnect.\n");
|
wprintw(prompt->window, "\nDHT disconnected. Attempting to reconnect.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
tox_do(m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int f_loadfromfile;
|
int f_loadfromfile;
|
||||||
@ -405,9 +405,7 @@ static void do_file_senders(Tox *m)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pieces = 0;
|
while (true) {
|
||||||
|
|
||||||
while (pieces++ < MAX_PIECES_SEND) {
|
|
||||||
if (tox_file_send_data(m, friendnum, filenum, file_senders[i].nextpiece,
|
if (tox_file_send_data(m, friendnum, filenum, file_senders[i].nextpiece,
|
||||||
file_senders[i].piecelen) == -1)
|
file_senders[i].piecelen) == -1)
|
||||||
break;
|
break;
|
||||||
@ -432,21 +430,17 @@ static void do_file_senders(Tox *m)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This should only be called on exit */
|
void exit_toxic(Tox *m)
|
||||||
static void close_file_transfers(Tox *m)
|
|
||||||
{
|
{
|
||||||
|
store_data(m, DATA_FILE);
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < max_file_senders_index; ++i) {
|
for (i = 0; i < max_file_senders_index; ++i) {
|
||||||
if (file_senders[i].active)
|
if (file_senders[i].active)
|
||||||
fclose(file_senders[i].file);
|
fclose(file_senders[i].file);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void exit_toxic(Tox *m)
|
|
||||||
{
|
|
||||||
store_data(m, DATA_FILE);
|
|
||||||
close_file_transfers(m);
|
|
||||||
free(DATA_FILE);
|
free(DATA_FILE);
|
||||||
free(SRVLIST_FILE);
|
free(SRVLIST_FILE);
|
||||||
free(prompt->stb);
|
free(prompt->stb);
|
||||||
@ -456,6 +450,16 @@ void exit_toxic(Tox *m)
|
|||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void do_toxic(Tox *m, ToxWindow *prompt)
|
||||||
|
{
|
||||||
|
do_connection(m, prompt);
|
||||||
|
draw_active_window(m);
|
||||||
|
do_file_senders(m);
|
||||||
|
|
||||||
|
/* main tox-core loop */
|
||||||
|
tox_do(m);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *user_config_dir = get_user_config_dir();
|
char *user_config_dir = get_user_config_dir();
|
||||||
@ -466,6 +470,9 @@ int main(int argc, char *argv[])
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
int f_use_ipv4 = 0;
|
int f_use_ipv4 = 0;
|
||||||
|
|
||||||
|
// Make sure all written files are read/writeable only by the current user.
|
||||||
|
umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
|
||||||
|
|
||||||
for (i = 0; i < argc; ++i) {
|
for (i = 0; i < argc; ++i) {
|
||||||
if (argv[i] == NULL)
|
if (argv[i] == NULL)
|
||||||
break;
|
break;
|
||||||
@ -549,12 +556,8 @@ int main(int argc, char *argv[])
|
|||||||
prompt_init_statusbar(prompt, m);
|
prompt_init_statusbar(prompt, m);
|
||||||
sort_friendlist_index(m);
|
sort_friendlist_index(m);
|
||||||
|
|
||||||
while (true) {
|
while (true)
|
||||||
do_tox(m, prompt);
|
do_toxic(m, prompt);
|
||||||
do_file_senders(m);
|
|
||||||
draw_active_window(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit_toxic(m);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
11
src/prompt.c
11
src/prompt.c
@ -418,7 +418,16 @@ void prompt_init_statusbar(ToxWindow *self, Tox *m)
|
|||||||
snprintf(statusbar->nick, sizeof(statusbar->nick), "%s", nick);
|
snprintf(statusbar->nick, sizeof(statusbar->nick), "%s", nick);
|
||||||
|
|
||||||
/* temporary until statusmessage saving works */
|
/* temporary until statusmessage saving works */
|
||||||
uint8_t *statusmsg = "Toxing on Toxic v.0.2.4";
|
uint8_t ver[strlen(TOXICVER) + 1];
|
||||||
|
uint8_t statusmsg[MAX_STR_SIZE];
|
||||||
|
strcpy(ver, TOXICVER);
|
||||||
|
uint8_t *toxic_ver = strtok(ver, "_");
|
||||||
|
|
||||||
|
if (toxic_ver != NULL)
|
||||||
|
snprintf(statusmsg, MAX_STR_SIZE, "Toxing on Toxic v.%s", toxic_ver);
|
||||||
|
else
|
||||||
|
snprintf(statusmsg, MAX_STR_SIZE, "Toxing on Toxic hacker edition");
|
||||||
|
|
||||||
m_set_statusmessage(m, statusmsg, strlen(statusmsg) + 1);
|
m_set_statusmessage(m, statusmsg, strlen(statusmsg) + 1);
|
||||||
snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg);
|
snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg);
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#define N_DEFAULT_WINS 2 /* number of permanent default windows */
|
#define N_DEFAULT_WINS 2 /* number of permanent default windows */
|
||||||
#define CURS_Y_OFFSET 3 /* y-axis cursor offset for chat contexts */
|
#define CURS_Y_OFFSET 3 /* y-axis cursor offset for chat contexts */
|
||||||
#define CHATBOX_HEIGHT 4
|
#define CHATBOX_HEIGHT 4
|
||||||
|
#define KEY_IDENT_DIGITS 2 /* number of hex digits to display for the pub-key based identifier */
|
||||||
|
|
||||||
#define EXIT_SUCCESS 0
|
#define EXIT_SUCCESS 0
|
||||||
#define EXIT_FAILURE 1
|
#define EXIT_FAILURE 1
|
||||||
@ -149,7 +150,6 @@ struct PromptBuf {
|
|||||||
#define MAX_FILES 256
|
#define MAX_FILES 256
|
||||||
#define FILE_PIECE_SIZE 1024
|
#define FILE_PIECE_SIZE 1024
|
||||||
#define TIMEOUT_FILESENDER 300
|
#define TIMEOUT_FILESENDER 300
|
||||||
#define MAX_PIECES_SEND 100 /* Max number of pieces to send per file per call to do_file_senders() */
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
FILE *file;
|
FILE *file;
|
||||||
|
Loading…
Reference in New Issue
Block a user