diff --git a/src/audio_call.c b/src/audio_call.c index 738313b..c9496d8 100644 --- a/src/audio_call.c +++ b/src/audio_call.c @@ -447,7 +447,18 @@ void cmd_hangup(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[ goto on_error; } - ToxAvError error = toxav_hangup(ASettins.av, self->call_idx); + ToxAvError error; + + if (toxav_get_call_state(ASettins.av, self->call_idx) == av_CallInviting) { + error = toxav_cancel(ASettins.av, self->call_idx, self->num, + "Only those who appreciate small things know the beauty that is life"); +#ifdef _SOUND_NOTIFY + stop_sound(self->ringing_sound); +#endif + line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Call canceled!"); + } else { + error = toxav_hangup(ASettins.av, self->call_idx); + } if ( error != ErrorNone ) { if ( error == ErrorInvalidState ) error_str = "Cannot hangup in invalid state!"; @@ -462,42 +473,6 @@ on_error: print_err (self, error_str); } -void cmd_cancel(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]) -{ - const char *error_str; - - if (argc != 0) { - error_str = "Invalid syntax!"; - goto on_error; - } - - if ( !ASettins.av ) { - error_str = "Audio not supported!"; - goto on_error; - } - - ToxAvError error = toxav_cancel(ASettins.av, self->call_idx, self->num, - "Only those who appreciate small things know the beauty that is life"); - - if ( error != ErrorNone ) { - if ( error == ErrorNoCall ) error_str = "No call!"; - else if ( error == ErrorInvalidState ) error_str = "Cannot cancel in invalid state!"; - else error_str = "Internal error!"; - - goto on_error; - } - -#ifdef _SOUND_NOTIFY - stop_sound(self->ringing_sound); -#endif /* _SOUND_NOTIFY */ - /* Callback will print status... */ - - return; -on_error: - print_err (self, error_str); -} - - void cmd_list_devices(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]) { const char *error_str; diff --git a/src/chat.c b/src/chat.c index 2518241..08aea17 100644 --- a/src/chat.c +++ b/src/chat.c @@ -63,7 +63,7 @@ static void kill_infobox(ToxWindow *self); #endif /* _AUDIO */ #ifdef _AUDIO -#define AC_NUM_CHAT_COMMANDS 26 +#define AC_NUM_CHAT_COMMANDS 25 #else #define AC_NUM_CHAT_COMMANDS 18 #endif /* _AUDIO */ @@ -92,7 +92,6 @@ static const char chat_cmd_list[AC_NUM_CHAT_COMMANDS][MAX_CMDNAME_SIZE] = { #ifdef _AUDIO { "/call" }, - { "/cancel" }, { "/answer" }, { "/reject" }, { "/hangup" }, @@ -450,8 +449,8 @@ static void chat_onFileData(ToxWindow *self, Tox *m, int32_t num, uint8_t filenu if (!remain || timed_out(friends[num].file_receiver.last_progress[filenum], curtime, 1)) { friends[num].file_receiver.last_progress[filenum] = curtime; uint64_t size = friends[num].file_receiver.size[filenum]; - double pct_remain = remain > 0 ? (1 - (remain / size)) * 100 : 100; - print_progress_bar(self, filenum, num, pct_remain); + double pct_done = remain > 0 ? (1 - (remain / size)) * 100 : 100; + print_progress_bar(self, filenum, num, pct_done); friends[num].file_receiver.bps[filenum] = 0; } } @@ -505,7 +504,7 @@ void chat_onRinging (ToxWindow *self, ToxAv *av, int call_index) if ( !self || self->call_idx != call_index || self->num != toxav_get_peer_id(av, call_index, 0)) return; - line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Ringing...\"cancel\" ?"); + line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Ringing...type \"/hangup\" to cancel it."); #ifdef _SOUND_NOTIFY if (self->ringing_sound == -1) diff --git a/src/execute.c b/src/execute.c index 1580e42..2e9880b 100644 --- a/src/execute.c +++ b/src/execute.c @@ -68,7 +68,6 @@ static struct cmd_func chat_commands[] = { #ifdef _AUDIO { "/call", cmd_call }, - { "/cancel", cmd_cancel }, { "/answer", cmd_answer }, { "/reject", cmd_reject }, { "/hangup", cmd_hangup }, diff --git a/src/execute.h b/src/execute.h index 9b704bc..157aef5 100644 --- a/src/execute.h +++ b/src/execute.h @@ -30,7 +30,7 @@ #ifdef _AUDIO #define GLOBAL_NUM_COMMANDS 16 -#define CHAT_NUM_COMMANDS 12 +#define CHAT_NUM_COMMANDS 11 #else #define GLOBAL_NUM_COMMANDS 14 #define CHAT_NUM_COMMANDS 4 diff --git a/src/file_senders.c b/src/file_senders.c index 3a73b30..a8c6f59 100644 --- a/src/file_senders.c +++ b/src/file_senders.c @@ -57,7 +57,7 @@ void prep_prog_line(char *progline) /* prints a progress bar for file transfers. if friendnum is -1 we're sending the file, otherwise we're receiving. */ -void print_progress_bar(ToxWindow *self, int idx, int friendnum, double pct_remain) +void print_progress_bar(ToxWindow *self, int idx, int friendnum, double pct_done) { double bps; uint32_t line_id; @@ -87,7 +87,7 @@ void print_progress_bar(ToxWindow *self, int idx, int friendnum, double pct_rema char msg[MAX_STR_SIZE]; snprintf(msg, sizeof(msg), "%.1f %s [", bps, unit); - int n = pct_remain / (100 / NUM_PROG_MARKS); + int n = pct_done / (100 / NUM_PROG_MARKS); int i; for (i = 0; i < n; ++i) @@ -101,7 +101,8 @@ void print_progress_bar(ToxWindow *self, int idx, int friendnum, double pct_rema strcat(msg, "] "); char pctstr[16]; - snprintf(pctstr, sizeof(pctstr), "%.2f%%", pct_remain); + const char *frmt = pct_done == 100 ? "%.f%%" : "%.1f%%"; + snprintf(pctstr, sizeof(pctstr), frmt, pct_done); strcat(msg, pctstr); line_info_set(self, line_id, msg); @@ -168,8 +169,8 @@ static void send_file_data(ToxWindow *self, Tox *m, int i, int32_t friendnum, in /* refresh line with percentage complete and transfer speed (must be called once per second) */ if ((self->chatwin != NULL && timed_out(file_senders[i].last_progress, curtime, 1)) || !remain) { file_senders[i].last_progress = curtime; - double pct_remain = remain > 0 ? (1 - (remain / file_senders[i].size)) * 100 : 100; - print_progress_bar(self, i, -1, pct_remain); + double pct_done = remain > 0 ? (1 - (remain / file_senders[i].size)) * 100 : 100; + print_progress_bar(self, i, -1, pct_done); file_senders[i].bps = 0; } diff --git a/src/help.c b/src/help.c index e9b3f33..7e55ebd 100644 --- a/src/help.c +++ b/src/help.c @@ -185,7 +185,6 @@ static void help_draw_chat(ToxWindow *self) wattroff(win, A_BOLD); wprintw(win, " /call : Audio call\n"); - wprintw(win, " /cancel : Cancel call\n"); wprintw(win, " /answer : Answer incoming call\n"); wprintw(win, " /reject : Reject incoming call\n"); wprintw(win, " /hangup : Hangup active call\n");