mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-22 20:23:01 +01:00
update file transfers for core changes
This commit is contained in:
parent
28633be2dd
commit
64db9f73a2
49
src/chat.c
49
src/chat.c
@ -345,15 +345,20 @@ static void chat_onFileSendRequest(ToxWindow *self, Tox *m, int32_t num, uint8_t
|
|||||||
"Incoming file: %s", filename );
|
"Incoming file: %s", filename );
|
||||||
}
|
}
|
||||||
|
|
||||||
void chat_close_file_receiver(int num, int filenum)
|
/* set CTRL to -1 if we don't want to send a control signal.
|
||||||
|
set msg to NULL if we don't want to display a message */
|
||||||
|
void chat_close_file_receiver(Tox *m, int filenum, int friendnum, int CTRL)
|
||||||
{
|
{
|
||||||
friends[num].file_receiver.active[filenum] = false;
|
if (CTRL > 0)
|
||||||
friends[num].file_receiver.pending[filenum] = false;
|
tox_file_send_control(m, friendnum, 1, filenum, CTRL, 0, 0);
|
||||||
FILE *file = friends[num].file_receiver.files[filenum];
|
|
||||||
|
friends[friendnum].file_receiver.active[filenum] = false;
|
||||||
|
friends[friendnum].file_receiver.pending[filenum] = false;
|
||||||
|
FILE *file = friends[friendnum].file_receiver.files[filenum];
|
||||||
|
|
||||||
if (file != NULL) {
|
if (file != NULL) {
|
||||||
fclose(file);
|
fclose(file);
|
||||||
friends[num].file_receiver.files[filenum] = NULL;
|
friends[friendnum].file_receiver.files[filenum] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,31 +401,38 @@ static void chat_onFileControl(ToxWindow *self, Tox *m, int32_t num, uint8_t rec
|
|||||||
case TOX_FILECONTROL_KILL:
|
case TOX_FILECONTROL_KILL:
|
||||||
snprintf(msg, sizeof(msg), "File transfer for '%s' failed.", filename);
|
snprintf(msg, sizeof(msg), "File transfer for '%s' failed.", filename);
|
||||||
|
|
||||||
if (receive_send == 0)
|
|
||||||
chat_close_file_receiver(num, filenum);
|
|
||||||
|
|
||||||
if (self->active_box != -1)
|
if (self->active_box != -1)
|
||||||
box_notify2(self, error, NT_NOFOCUS | NT_WNDALERT_2,
|
box_notify2(self, error, NT_NOFOCUS | NT_WNDALERT_2,
|
||||||
self->active_box, "File transfer for '%s' failed!", filename );
|
self->active_box, "File transfer for '%s' failed!", filename );
|
||||||
else
|
else
|
||||||
box_notify(self, error, NT_NOFOCUS | NT_WNDALERT_2, &self->active_box,
|
box_notify(self, error, NT_NOFOCUS | NT_WNDALERT_2, &self->active_box,
|
||||||
self->name, "File transfer for '%s' failed!", filename );
|
self->name, "File transfer for '%s' failed!", filename );
|
||||||
|
|
||||||
|
if (receive_send == 0)
|
||||||
|
chat_close_file_receiver(m, filenum, num, -1);
|
||||||
|
else
|
||||||
|
close_file_sender(self, m, i, NULL, -1, filenum, num);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOX_FILECONTROL_FINISHED:
|
case TOX_FILECONTROL_FINISHED:
|
||||||
if (receive_send == 0) {
|
if (receive_send == 0) {
|
||||||
snprintf(msg, sizeof(msg), "File transfer for '%s' complete.", filename);
|
snprintf(msg, sizeof(msg), "File transfer for '%s' complete.", filename);
|
||||||
chat_close_file_receiver(num, filenum);
|
chat_close_file_receiver(m, filenum, num, TOX_FILECONTROL_FINISHED);
|
||||||
|
} else {
|
||||||
if (self->active_box != -1)
|
char msg[MAX_STR_SIZE];
|
||||||
box_notify2(self, transfer_completed, NT_NOFOCUS | NT_WNDALERT_2,
|
snprintf(msg, sizeof(msg), "File '%s' successfuly sent.", filename);
|
||||||
self->active_box, "File '%s' successfuly sent!", filename );
|
close_file_sender(self, m, i, msg, TOX_FILECONTROL_FINISHED, filenum, num);
|
||||||
else
|
return;
|
||||||
box_notify(self, transfer_completed, NT_NOFOCUS | NT_WNDALERT_2, &self->active_box,
|
|
||||||
self->name, "File '%s' successfuly sent!", filename );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (self->active_box != -1)
|
||||||
|
box_notify2(self, transfer_completed, NT_NOFOCUS | NT_WNDALERT_2,
|
||||||
|
self->active_box, "%s", msg);
|
||||||
|
else
|
||||||
|
box_notify(self, transfer_completed, NT_NOFOCUS | NT_WNDALERT_2, &self->active_box,
|
||||||
|
self->name, "%s", msg);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -439,8 +451,7 @@ static void chat_onFileData(ToxWindow *self, Tox *m, int32_t num, uint8_t filenu
|
|||||||
if (fp) {
|
if (fp) {
|
||||||
if (fwrite(data, length, 1, fp) != 1) {
|
if (fwrite(data, length, 1, fp) != 1) {
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, RED, " * Error writing to file.");
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, RED, " * Error writing to file.");
|
||||||
tox_file_send_control(m, num, 1, filenum, TOX_FILECONTROL_KILL, 0, 0);
|
chat_close_file_receiver(m, filenum, num, TOX_FILECONTROL_KILL);
|
||||||
chat_close_file_receiver(num, filenum);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,9 @@
|
|||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "toxic.h"
|
#include "toxic.h"
|
||||||
|
|
||||||
void chat_close_file_receiver(int num, int filenum);
|
/* set CTRL to -1 if we don't want to send a control signal.
|
||||||
|
set msg to NULL if we don't want to display a message */
|
||||||
|
void chat_close_file_receiver(Tox *m, int filenum, int friendnum, int CTRL);
|
||||||
void kill_chat_window(ToxWindow *self);
|
void kill_chat_window(ToxWindow *self);
|
||||||
ToxWindow new_chat(Tox *m, int32_t friendnum);
|
ToxWindow new_chat(Tox *m, int32_t friendnum);
|
||||||
|
|
||||||
|
@ -66,8 +66,7 @@ void cmd_cancelfile(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*ar
|
|||||||
char name[MAX_STR_SIZE];
|
char name[MAX_STR_SIZE];
|
||||||
get_file_name(name, sizeof(name), filepath);
|
get_file_name(name, sizeof(name), filepath);
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "File transfer for '%s' canceled.", name);
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "File transfer for '%s' canceled.", name);
|
||||||
tox_file_send_control(m, self->num, 1, filenum, TOX_FILECONTROL_KILL, 0, 0);
|
chat_close_file_receiver(m, filenum, self->num, TOX_FILECONTROL_KILL);
|
||||||
chat_close_file_receiver(self->num, filenum);
|
|
||||||
return;
|
return;
|
||||||
} else if (strcasecmp(inoutstr, "out") == 0) { /* cancel an outgoing file transfer */
|
} else if (strcasecmp(inoutstr, "out") == 0) { /* cancel an outgoing file transfer */
|
||||||
int i;
|
int i;
|
||||||
|
@ -120,13 +120,16 @@ static void set_max_file_senders_index(void)
|
|||||||
max_file_senders_index = j;
|
max_file_senders_index = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* set CTRL to -1 if we don't want to send a control signal.
|
||||||
|
set msg to NULL if we don't want to display a message */
|
||||||
void close_file_sender(ToxWindow *self, Tox *m, int i, const char *msg, int CTRL, int filenum, int32_t friendnum)
|
void close_file_sender(ToxWindow *self, Tox *m, int i, const char *msg, int CTRL, int filenum, int32_t friendnum)
|
||||||
{
|
{
|
||||||
if (self->chatwin != NULL)
|
if (msg != NULL)
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "%s", msg);
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "%s", msg);
|
||||||
|
|
||||||
|
if (CTRL > 0)
|
||||||
|
tox_file_send_control(m, friendnum, 0, filenum, CTRL, 0, 0);
|
||||||
|
|
||||||
tox_file_send_control(m, friendnum, 0, filenum, CTRL, 0, 0);
|
|
||||||
fclose(file_senders[i].file);
|
fclose(file_senders[i].file);
|
||||||
memset(&file_senders[i], 0, sizeof(FileSender));
|
memset(&file_senders[i], 0, sizeof(FileSender));
|
||||||
set_max_file_senders_index();
|
set_max_file_senders_index();
|
||||||
@ -174,18 +177,10 @@ static void send_file_data(ToxWindow *self, Tox *m, int i, int32_t friendnum, in
|
|||||||
file_senders[i].bps = 0;
|
file_senders[i].bps = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_senders[i].piecelen == 0) {
|
/* file sender is closed in chat_onFileControl callback after receiving reply */
|
||||||
char msg[MAX_STR_SIZE];
|
if (file_senders[i].piecelen == 0 && !file_senders[i].finished) {
|
||||||
snprintf(msg, sizeof(msg), "File '%s' successfuly sent.", filename);
|
tox_file_send_control(m, friendnum, 0, filenum, TOX_FILECONTROL_FINISHED, 0, 0);
|
||||||
close_file_sender(self, m, i, msg, TOX_FILECONTROL_FINISHED, filenum, friendnum);
|
file_senders[i].finished = true;
|
||||||
|
|
||||||
if (self->active_box != -1)
|
|
||||||
box_notify2(self, transfer_completed, NT_NOFOCUS | NT_WNDALERT_2,
|
|
||||||
self->active_box, "File '%s' successfuly sent!", filename );
|
|
||||||
else
|
|
||||||
box_notify(self, transfer_completed, NT_NOFOCUS | NT_WNDALERT_2, &self->active_box,
|
|
||||||
self->name, "File '%s' successfuly sent!", filename );
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -208,6 +203,12 @@ void do_file_senders(Tox *m)
|
|||||||
int filenum = file_senders[i].filenum;
|
int filenum = file_senders[i].filenum;
|
||||||
int32_t friendnum = file_senders[i].friendnum;
|
int32_t friendnum = file_senders[i].friendnum;
|
||||||
|
|
||||||
|
/* kill file transfer if chatwindow is closed */
|
||||||
|
if (self->chatwin == NULL) {
|
||||||
|
close_file_sender(self, m, i, NULL, TOX_FILECONTROL_KILL, filenum, friendnum);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* If file transfer has timed out kill transfer and send kill control */
|
/* If file transfer has timed out kill transfer and send kill control */
|
||||||
if (timed_out(file_senders[i].timestamp, get_unix_time(), TIMEOUT_FILESENDER)) {
|
if (timed_out(file_senders[i].timestamp, get_unix_time(), TIMEOUT_FILESENDER)) {
|
||||||
char msg[MAX_STR_SIZE];
|
char msg[MAX_STR_SIZE];
|
||||||
@ -217,10 +218,10 @@ void do_file_senders(Tox *m)
|
|||||||
|
|
||||||
if (self->active_box != -1)
|
if (self->active_box != -1)
|
||||||
box_notify2(self, error, NT_NOFOCUS | NT_WNDALERT_2,
|
box_notify2(self, error, NT_NOFOCUS | NT_WNDALERT_2,
|
||||||
self->active_box, "File transfer for '%s' failed!", filename );
|
self->active_box, "File transfer for '%s' timed out.", filename );
|
||||||
else
|
else
|
||||||
box_notify(self, error, NT_NOFOCUS | NT_WNDALERT_2, &self->active_box,
|
box_notify(self, error, NT_NOFOCUS | NT_WNDALERT_2, &self->active_box,
|
||||||
self->name, "File transfer for '%s' failed!", filename );
|
self->name, "File transfer for '%s' timed out.", filename );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ typedef struct {
|
|||||||
ToxWindow *toxwin;
|
ToxWindow *toxwin;
|
||||||
int32_t friendnum;
|
int32_t friendnum;
|
||||||
bool active;
|
bool active;
|
||||||
|
bool finished;
|
||||||
int filenum;
|
int filenum;
|
||||||
char nextpiece[FILE_PIECE_SIZE];
|
char nextpiece[FILE_PIECE_SIZE];
|
||||||
uint16_t piecelen;
|
uint16_t piecelen;
|
||||||
@ -56,7 +57,10 @@ void prep_prog_line(char *progline);
|
|||||||
if friendnum is -1 we're sending the file, otherwise we're receiving. */
|
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_remain);
|
||||||
|
|
||||||
|
/* set CTRL to -1 if we don't want to send a control signal.
|
||||||
|
set msg to NULL if we don't want to display a message */
|
||||||
void close_file_sender(ToxWindow *self, Tox *m, int i, const char *msg, int CTRL, int filenum, int32_t friendnum);
|
void close_file_sender(ToxWindow *self, Tox *m, int i, const char *msg, int CTRL, int filenum, int32_t friendnum);
|
||||||
|
|
||||||
void close_all_file_senders(Tox *m);
|
void close_all_file_senders(Tox *m);
|
||||||
void do_file_senders(Tox *m);
|
void do_file_senders(Tox *m);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user