1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-12 14:14:48 +02:00

Display DCC progress in realtime, added selected DCC color config option, move into DCC list is ok (scroll)

This commit is contained in:
Sebastien Helleu
2004-09-11 14:54:11 +00:00
parent b3fd00fc23
commit 4b3d25175f
22 changed files with 480 additions and 148 deletions
+24 -16
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.0.8-pre2\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2004-09-09 23:11+0200\n"
"POT-Creation-Date: 2004-09-11 15:10+0200\n"
"PO-Revision-Date: 2004-08-08 20:47+0200\n"
"Last-Translator: FlashCode <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1557,41 +1557,49 @@ msgstr ""
"%s: tous les noms d'utilisateurs déclarés sont déjà en cours d'utilisation, "
"fermeture de la connexion avec le serveur !\n"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Waiting"
msgstr "Attente"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Connecting"
msgstr "Connexion"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Active"
msgstr "Actif"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Done"
msgstr "Terminé"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Failed"
msgstr "Echoué"
#: src/irc/irc-dcc.c:44
#: src/irc/irc-dcc.c:45
msgid "Aborted"
msgstr "Interrompu"
#: src/irc/irc-dcc.c:191
#: src/irc/irc-dcc.c:219
#, c-format
msgid "%s not enough memory for new DCC\n"
msgstr "%s pas assez de mémoire pour un nouveau DCC\n"
#: src/irc/irc-dcc.c:259
#: src/irc/irc-dcc.c:244
msgid "Incoming DCC file from "
msgstr "Réception fichier DCC de "
#: src/irc/irc-dcc.c:269
msgid " bytes\n"
msgstr "octets\n"
#: src/irc/irc-dcc.c:323
#, c-format
msgid "DCC: file \"%s\" received from \"%s\": ok!\n"
msgstr "DCC: fichier \"%s\" reçu de \"%s\": ok !\n"
#: src/irc/irc-dcc.c:284
#: src/irc/irc-dcc.c:350
#, c-format
msgid "aborting active DCC: \"%s\" from %s\n"
msgstr "abandon du DCC actif: \"%s\" de %s\n"
@@ -1673,16 +1681,16 @@ msgstr "Mo"
msgid "Gb"
msgstr "Go"
#: src/gui/curses/gui-display.c:987
#: src/gui/curses/gui-display.c:992
#, c-format
msgid "%d:[not connected] "
msgstr "%d:[non connecté] "
#: src/gui/curses/gui-display.c:995
#: src/gui/curses/gui-display.c:1000
msgid "[Act: "
msgstr "[Act: "
#: src/gui/curses/gui-display.c:1030 src/gui/curses/gui-display.c:1033
#: src/gui/curses/gui-display.c:1039 src/gui/curses/gui-display.c:1042
msgid "-MORE-"
msgstr "-PLUS-"
@@ -1690,17 +1698,17 @@ msgstr "-PLUS-"
msgid "server"
msgstr "serveur"
#: src/gui/gui-common.c:304
#: src/gui/gui-common.c:306
#, c-format
msgid "%s not enough memory for infobar message\n"
msgstr "%s pas assez de mémoire pour un message de la barre d'infos\n"
#: src/gui/gui-common.c:439
#: src/gui/gui-common.c:441
#, c-format
msgid "%s not enough memory for new line!\n"
msgstr "%s pas assez de mémoire pour une nouvelle ligne !\n"
#: src/gui/gui-common.c:482
#: src/gui/gui-common.c:484
msgid "not enough memory!\n"
msgstr "pas assez de mémoire !\n"
+24 -16
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2004-09-09 23:11+0200\n"
"POT-Creation-Date: 2004-09-11 15:10+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1456,41 +1456,49 @@ msgid ""
"server!\n"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Waiting"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Connecting"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Active"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Done"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Failed"
msgstr ""
#: src/irc/irc-dcc.c:44
#: src/irc/irc-dcc.c:45
msgid "Aborted"
msgstr ""
#: src/irc/irc-dcc.c:191
#: src/irc/irc-dcc.c:219
#, c-format
msgid "%s not enough memory for new DCC\n"
msgstr ""
#: src/irc/irc-dcc.c:259
#: src/irc/irc-dcc.c:244
msgid "Incoming DCC file from "
msgstr ""
#: src/irc/irc-dcc.c:269
msgid " bytes\n"
msgstr ""
#: src/irc/irc-dcc.c:323
#, c-format
msgid "DCC: file \"%s\" received from \"%s\": ok!\n"
msgstr ""
#: src/irc/irc-dcc.c:284
#: src/irc/irc-dcc.c:350
#, c-format
msgid "aborting active DCC: \"%s\" from %s\n"
msgstr ""
@@ -1566,16 +1574,16 @@ msgstr ""
msgid "Gb"
msgstr ""
#: src/gui/curses/gui-display.c:987
#: src/gui/curses/gui-display.c:992
#, c-format
msgid "%d:[not connected] "
msgstr ""
#: src/gui/curses/gui-display.c:995
#: src/gui/curses/gui-display.c:1000
msgid "[Act: "
msgstr ""
#: src/gui/curses/gui-display.c:1030 src/gui/curses/gui-display.c:1033
#: src/gui/curses/gui-display.c:1039 src/gui/curses/gui-display.c:1042
msgid "-MORE-"
msgstr ""
@@ -1583,17 +1591,17 @@ msgstr ""
msgid "server"
msgstr ""
#: src/gui/gui-common.c:304
#: src/gui/gui-common.c:306
#, c-format
msgid "%s not enough memory for infobar message\n"
msgstr ""
#: src/gui/gui-common.c:439
#: src/gui/gui-common.c:441
#, c-format
msgid "%s not enough memory for new line!\n"
msgstr ""
#: src/gui/gui-common.c:482
#: src/gui/gui-common.c:484
msgid "not enough memory!\n"
msgstr ""
+4
View File
@@ -83,6 +83,10 @@ hotlist_add (int priority, t_gui_buffer *buffer)
if (!buffer)
return;
/* do not highlight current buffer */
if (buffer == gui_current_window->buffer)
return;
if ((pos_hotlist = hotlist_search (buffer)))
{
/* return if priority is greater or equal than the one to add */
+5
View File
@@ -193,6 +193,7 @@ int cfg_col_nick_sep;
int cfg_col_nick_self;
int cfg_col_nick_private;
int cfg_col_nick_bg;
int cfg_col_dcc_selected;
int cfg_col_dcc_waiting;
int cfg_col_dcc_connecting;
int cfg_col_dcc_active;
@@ -354,6 +355,10 @@ t_config_option weechat_options_colors[] =
"default", NULL, &cfg_col_nick_bg, NULL, &config_change_color },
/* DCC */
{ "col_chat_dcc_selected", N_("color for selected DCC"),
N_("color for selected DCC (chat window)"),
OPTION_TYPE_COLOR, 0, 0, 0,
"white", NULL, &cfg_col_dcc_selected, NULL, &config_change_color },
{ "col_dcc_waiting", N_("color for \"waiting\" dcc status"),
N_("color for \"waiting\" dcc status"),
OPTION_TYPE_COLOR, 0, 0, 0,
+1
View File
@@ -127,6 +127,7 @@ extern int cfg_col_nick_sep;
extern int cfg_col_nick_self;
extern int cfg_col_nick_private;
extern int cfg_col_nick_bg;
extern int cfg_col_dcc_selected;
extern int cfg_col_dcc_waiting;
extern int cfg_col_dcc_connecting;
extern int cfg_col_dcc_active;
+26 -8
View File
@@ -562,7 +562,7 @@ gui_draw_buffer_chat (t_gui_buffer *buffer, int erase)
{
t_gui_window *ptr_win;
t_gui_line *ptr_line;
t_dcc *ptr_dcc;
t_dcc *dcc_first, *dcc_selected, *ptr_dcc;
char format_empty[32];
int i, j, lines_used, num_bars;
char *unit_name[] = { N_("bytes"), N_("Kb"), N_("Mb"), N_("Gb") };
@@ -594,28 +594,38 @@ gui_draw_buffer_chat (t_gui_buffer *buffer, int erase)
if (buffer->dcc)
{
i = 0;
for (ptr_dcc = dcc_list; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc)
dcc_first = (ptr_win->dcc_first) ? (t_dcc *) ptr_win->dcc_first : dcc_list;
dcc_selected = (ptr_win->dcc_selected) ? (t_dcc *) ptr_win->dcc_selected : dcc_list;
for (ptr_dcc = dcc_first; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc)
{
if (i >= ptr_win->win_chat_height - 1)
break;
if ((ptr_dcc->type == DCC_FILE_RECV)
|| (ptr_dcc->type == DCC_FILE_SEND))
{
gui_window_set_color (ptr_win->win_chat, COLOR_WIN_CHAT);
mvwprintw (ptr_win->win_chat, i, 0, " %-16s %s",
gui_window_set_color (ptr_win->win_chat,
(ptr_dcc == dcc_selected) ?
COLOR_DCC_SELECTED : COLOR_WIN_CHAT);
mvwprintw (ptr_win->win_chat, i, 0, "%s %-16s %s",
(ptr_dcc == dcc_selected) ? ">>" : " ",
ptr_dcc->nick, ptr_dcc->filename);
if (ptr_dcc->filename_suffix > 0)
wprintw (ptr_win->win_chat, " (.%d)",
ptr_dcc->filename_suffix);
gui_window_set_color (ptr_win->win_chat, COLOR_WIN_CHAT);
mvwprintw (ptr_win->win_chat, i + 1, 0, " %s ",
gui_window_set_color (ptr_win->win_chat,
(ptr_dcc == dcc_selected) ?
COLOR_DCC_SELECTED : COLOR_WIN_CHAT);
mvwprintw (ptr_win->win_chat, i + 1, 0, "%s %s ",
(ptr_dcc == dcc_selected) ? ">>" : " ",
(ptr_dcc->type == DCC_FILE_RECV) ?
"--->" : "<---");
gui_window_set_color (ptr_win->win_chat,
COLOR_DCC_WAITING + ptr_dcc->status);
wprintw (ptr_win->win_chat, "%-10s",
dcc_status_string[ptr_dcc->status]);
gui_window_set_color (ptr_win->win_chat, COLOR_WIN_CHAT);
gui_window_set_color (ptr_win->win_chat,
(ptr_dcc == dcc_selected) ?
COLOR_DCC_SELECTED : COLOR_WIN_CHAT);
wprintw (ptr_win->win_chat, " [",
dcc_status_string[ptr_dcc->status]);
if (ptr_dcc->size == 0)
@@ -647,10 +657,10 @@ gui_draw_buffer_chat (t_gui_buffer *buffer, int erase)
unit_name[num_unit],
((long double) ptr_dcc->size) / ((long double)(unit_divide[num_unit])),
unit_name[num_unit]);
ptr_win->dcc_last_displayed = ptr_dcc;
i += 2;
}
}
move (ptr_win->win_y + 1, ptr_win->win_x);
}
else
{
@@ -1195,6 +1205,9 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
snprintf (format, 32, "%%-%ds", input_width);
mvwprintw (ptr_win->win_input, 0, 0, format, "");
wclrtoeol (ptr_win->win_input);
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
ptr_win->win_x);
}
else
{
@@ -1519,6 +1532,8 @@ gui_curses_resize_handler ()
/* TODO: manage when some windows are outside new term size */
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
{
ptr_win->dcc_first = NULL;
ptr_win->dcc_selected = NULL;
if (ptr_win->win_x + ptr_win->win_width == old_width)
ptr_win->win_width = new_width - ptr_win->win_x;
if (ptr_win->win_y + ptr_win->win_height == old_height)
@@ -1720,6 +1735,8 @@ gui_init_colors ()
(color & A_BOLD) ? A_BOLD : 0;
}
init_pair (COLOR_DCC_SELECTED,
cfg_col_dcc_selected & A_CHARTEXT, cfg_col_chat_bg);
init_pair (COLOR_DCC_WAITING,
cfg_col_dcc_waiting & A_CHARTEXT, cfg_col_chat_bg);
init_pair (COLOR_DCC_CONNECTING,
@@ -1763,6 +1780,7 @@ gui_init_colors ()
color_attr[COLOR_WIN_NICK_SEP - 1] = 0;
color_attr[COLOR_WIN_NICK_SELF - 1] = cfg_col_nick_self & A_BOLD;
color_attr[COLOR_WIN_NICK_PRIVATE - 1] = cfg_col_nick_private & A_BOLD;
color_attr[COLOR_DCC_SELECTED - 1] = cfg_col_dcc_selected & A_BOLD;
color_attr[COLOR_DCC_WAITING - 1] = cfg_col_dcc_waiting & A_BOLD;
color_attr[COLOR_DCC_CONNECTING - 1] = cfg_col_dcc_connecting & A_BOLD;
color_attr[COLOR_DCC_ACTIVE - 1] = cfg_col_dcc_active & A_BOLD;
+47 -2
View File
@@ -90,7 +90,24 @@ gui_read_keyb ()
break;
/* cursor up */
case KEY_UP:
if (!gui_current_window->buffer->dcc)
if (gui_current_window->buffer->dcc)
{
if (dcc_list)
{
if (gui_current_window->dcc_selected
&& ((t_dcc *)(gui_current_window->dcc_selected))->prev_dcc)
{
if (gui_current_window->dcc_selected ==
gui_current_window->dcc_first)
gui_current_window->dcc_first =
((t_dcc *)(gui_current_window->dcc_first))->prev_dcc;
gui_current_window->dcc_selected =
((t_dcc *)(gui_current_window->dcc_selected))->prev_dcc;
gui_draw_buffer_chat (gui_current_window->buffer, 1);
}
}
}
else
{
if (gui_current_window->buffer->ptr_history)
{
@@ -118,7 +135,35 @@ gui_read_keyb ()
break;
/* cursor down */
case KEY_DOWN:
if (!gui_current_window->buffer->dcc)
if (gui_current_window->buffer->dcc)
{
if (dcc_list)
{
if (!gui_current_window->dcc_selected
|| ((t_dcc *)(gui_current_window->dcc_selected))->next_dcc)
{
if (gui_current_window->dcc_last_displayed
&& (gui_current_window->dcc_selected ==
gui_current_window->dcc_last_displayed))
{
if (gui_current_window->dcc_first)
gui_current_window->dcc_first =
((t_dcc *)(gui_current_window->dcc_first))->next_dcc;
else
gui_current_window->dcc_first =
dcc_list->next_dcc;
}
if (gui_current_window->dcc_selected)
gui_current_window->dcc_selected =
((t_dcc *)(gui_current_window->dcc_selected))->next_dcc;
else
gui_current_window->dcc_selected =
dcc_list->next_dcc;
gui_draw_buffer_chat (gui_current_window->buffer, 1);
}
}
}
else
{
if (gui_current_window->buffer->ptr_history)
{
+4
View File
@@ -99,6 +99,10 @@ gui_window_new (int x, int y, int width, int height)
new_window->textview_nicklist = NULL;
new_window->textbuffer_nicklist = NULL;
new_window->dcc_first = NULL;
new_window->dcc_selected = NULL;
new_window->dcc_last_displayed = NULL;
new_window->buffer = NULL;
new_window->first_line_displayed = 0;
+15 -7
View File
@@ -26,7 +26,7 @@
#define INPUT_BUFFER_BLOCK_SIZE 256
#define NUM_COLORS 45
#define NUM_COLORS 46
#define COLOR_WIN_TITLE 1
#define COLOR_WIN_CHAT 2
#define COLOR_WIN_CHAT_TIME 3
@@ -59,12 +59,13 @@
#define COLOR_WIN_NICK_FIRST 30
#define COLOR_WIN_NICK_LAST 39
#define COLOR_WIN_NICK_NUMBER (COLOR_WIN_NICK_LAST - COLOR_WIN_NICK_FIRST + 1)
#define COLOR_DCC_WAITING 40
#define COLOR_DCC_CONNECTING 41
#define COLOR_DCC_ACTIVE 42
#define COLOR_DCC_DONE 43
#define COLOR_DCC_FAILED 44
#define COLOR_DCC_ABORTED 45
#define COLOR_DCC_SELECTED 40
#define COLOR_DCC_WAITING 41
#define COLOR_DCC_CONNECTING 42
#define COLOR_DCC_ACTIVE 43
#define COLOR_DCC_DONE 44
#define COLOR_DCC_FAILED 45
#define COLOR_DCC_ABORTED 46
#define SERVER(buffer) ((t_irc_server *)(buffer->server))
#define CHANNEL(buffer) ((t_irc_channel *)(buffer->channel))
@@ -142,6 +143,8 @@ struct t_gui_buffer
/* server/channel */
void *server; /* buffer's server */
void *channel; /* buffer's channel */
/* dcc buffer */
int dcc; /* buffer is dcc status */
/* chat content (lines, line is composed by many messages) */
@@ -210,6 +213,11 @@ struct t_gui_window
/* windows for Qt GUI */
/* TODO: declare Qt window */
/* DCC */
void *dcc_first; /* first dcc displayed */
void *dcc_selected; /* selected dcc */
void *dcc_last_displayed; /* last dcc displayed (for scroll) */
t_gui_buffer *buffer; /* buffer currently displayed in window */
int first_line_displayed; /* = 1 if first line is displayed */
+87 -23
View File
@@ -45,26 +45,41 @@ char *dcc_status_string[] = /* strings for DCC status */
N_("Aborted") };
/*
* dcc_redraw: redraw DCC buffer (and add to hotlist)
*/
void
dcc_redraw (int highlight)
{
gui_draw_buffer_chat (gui_get_dcc_buffer (), 0);
if (highlight)
{
hotlist_add (1, gui_get_dcc_buffer ());
gui_draw_buffer_status (gui_current_window->buffer, 0);
}
}
/*
* dcc_connect: connect to another host
*/
void
dcc_connect (t_dcc *dcc)
dcc_connect (t_dcc *ptr_dcc)
{
struct sockaddr_in addr;
dcc->status = DCC_CONNECTING;
ptr_dcc->status = DCC_CONNECTING;
dcc->sock = socket (AF_INET, SOCK_STREAM, 0);
if (dcc->sock == -1)
ptr_dcc->sock = socket (AF_INET, SOCK_STREAM, 0);
if (ptr_dcc->sock == -1)
return;
memset (&addr, 0, sizeof (addr));
addr.sin_port = htons (dcc->port);
addr.sin_port = htons (ptr_dcc->port);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl (dcc->addr);
fcntl (dcc->sock, F_SETFL, O_NONBLOCK);
connect (dcc->sock, (struct sockaddr *) &addr, sizeof (addr));
addr.sin_addr.s_addr = htonl (ptr_dcc->addr);
fcntl (ptr_dcc->sock, F_SETFL, O_NONBLOCK);
connect (ptr_dcc->sock, (struct sockaddr *) &addr, sizeof (addr));
}
/*
@@ -134,6 +149,7 @@ dcc_accept (t_dcc *ptr_dcc)
if (!ptr_dcc->local_filename)
{
ptr_dcc->status = DCC_FAILED;
dcc_redraw (1);
return;
}
if (cfg_dcc_download_path[0] == '~')
@@ -156,6 +172,7 @@ dcc_accept (t_dcc *ptr_dcc)
if (!cfg_dcc_auto_rename)
{
ptr_dcc->status = DCC_FAILED;
dcc_redraw (1);
return;
}
@@ -163,6 +180,7 @@ dcc_accept (t_dcc *ptr_dcc)
if (!filename2)
{
ptr_dcc->status = DCC_FAILED;
dcc_redraw (1);
return;
}
ptr_dcc->filename_suffix = 0;
@@ -183,6 +201,7 @@ dcc_accept (t_dcc *ptr_dcc)
O_CREAT | O_TRUNC | O_WRONLY,
0644);
}
dcc_redraw (1);
}
/*
@@ -194,7 +213,6 @@ dcc_add (t_irc_server *server, int type, unsigned long addr, int port, char *nic
unsigned int size)
{
t_dcc *new_dcc;
t_gui_buffer *dcc_buffer;
if ((new_dcc = (t_dcc *) malloc (sizeof (t_dcc))) == NULL)
{
@@ -214,26 +232,52 @@ dcc_add (t_irc_server *server, int type, unsigned long addr, int port, char *nic
new_dcc->filename_suffix = -1;
new_dcc->size = size;
new_dcc->pos = 0;
new_dcc->prev_dcc = NULL;
new_dcc->next_dcc = dcc_list;
if (dcc_list)
dcc_list->prev_dcc = new_dcc;
dcc_list = new_dcc;
gui_printf (NULL, "Incoming DCC file: from %s, address:%d.%d.%d.%d, "
"port=%d, name=%s, size=%lu bytes\n",
nick,
addr >> 24, (addr >> 16) & 0xff, (addr >> 8) & 0xff, addr & 0xff,
port, filename, size);
gui_current_window->dcc_first = NULL;
gui_current_window->dcc_selected = NULL;
dcc_buffer = gui_get_dcc_buffer ();
if (type == DCC_FILE_RECV)
{
irc_display_prefix (server->buffer, PREFIX_INFO);
gui_printf (server->buffer, _("Incoming DCC file from "));
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_NICK,
"%s",
nick);
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_DARK,
" (");
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_HOST,
"%d.%d.%d.%d",
addr >> 24, (addr >> 16) & 0xff, (addr >> 8) & 0xff, addr & 0xff);
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_DARK,
")");
gui_printf (server->buffer, ": ");
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_CHANNEL,
"%s",
filename);
gui_printf (server->buffer, ", ");
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_CHANNEL,
"%lu",
size);
gui_printf (server->buffer, _(" bytes\n"));
}
if ( ( (type == DCC_CHAT_RECV) && (cfg_dcc_auto_accept_chats) )
|| ( (type == DCC_FILE_RECV) && (cfg_dcc_auto_accept_files) ) )
{
dcc_accept (new_dcc);
hotlist_add (1, dcc_buffer);
}
else
hotlist_add (2, dcc_buffer);
gui_draw_buffer_status (dcc_buffer, 0);
hotlist_add (2, gui_get_dcc_buffer ());
gui_draw_buffer_status (gui_current_window->buffer, 0);
return new_dcc;
}
@@ -260,12 +304,16 @@ dcc_handle ()
if (num != -1)
{
if (num == 0)
{
dcc_close (ptr_dcc, DCC_FAILED);
dcc_redraw (1);
}
else
{
if (write (ptr_dcc->file, buffer, num) == -1)
{
dcc_close (ptr_dcc, DCC_FAILED);
dcc_redraw (1);
return;
}
ptr_dcc->pos += (unsigned long) num;
@@ -273,11 +321,27 @@ dcc_handle ()
send (ptr_dcc->sock, (char *) &pos, 4, 0);
if (ptr_dcc->pos >= ptr_dcc->size)
{
gui_printf (NULL,
_("DCC: file \"%s\" received from \"%s\": ok!\n"),
ptr_dcc->filename, ptr_dcc->nick);
irc_display_prefix (ptr_dcc->server->buffer, PREFIX_INFO);
gui_printf (ptr_dcc->server->buffer, _("DCC: file "));
gui_printf_color (ptr_dcc->server->buffer,
COLOR_WIN_CHAT_CHANNEL,
"%s",
ptr_dcc->filename);
gui_printf (ptr_dcc->server->buffer, _(" (local filename: "));
gui_printf_color (ptr_dcc->server->buffer,
COLOR_WIN_CHAT_CHANNEL,
"%s",
ptr_dcc->local_filename);
gui_printf (ptr_dcc->server->buffer, _(") from "));
gui_printf_color (ptr_dcc->server->buffer,
COLOR_WIN_CHAT_NICK,
"%s",
ptr_dcc->nick);
gui_printf (ptr_dcc->server->buffer, _(": ok!\n"));
dcc_close (ptr_dcc, DCC_DONE);
dcc_redraw (1);
}
dcc_redraw (0);
}
}
}
+3 -2
View File
@@ -186,11 +186,12 @@ struct t_dcc
char *nick; /* remote nick */
int sock; /* socket for connection */
int file; /* local file (for reading or writing) */
char *filename; /* filename */
char *local_filename; /* local filename */
char *filename; /* filename (given by sender) */
char *local_filename; /* local filename (with path) */
int filename_suffix; /* suffix (.1 for ex) if renaming file */
unsigned long size; /* file size */
unsigned long pos; /* number of bytes received/sent */
t_dcc *prev_dcc; /* link to previous dcc file/chat */
t_dcc *next_dcc; /* link to next dcc file/chat */
};
+24 -16
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.0.8-pre2\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2004-09-09 23:11+0200\n"
"POT-Creation-Date: 2004-09-11 15:10+0200\n"
"PO-Revision-Date: 2004-08-08 20:47+0200\n"
"Last-Translator: FlashCode <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1557,41 +1557,49 @@ msgstr ""
"%s: tous les noms d'utilisateurs déclarés sont déjà en cours d'utilisation, "
"fermeture de la connexion avec le serveur !\n"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Waiting"
msgstr "Attente"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Connecting"
msgstr "Connexion"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Active"
msgstr "Actif"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Done"
msgstr "Terminé"
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Failed"
msgstr "Echoué"
#: src/irc/irc-dcc.c:44
#: src/irc/irc-dcc.c:45
msgid "Aborted"
msgstr "Interrompu"
#: src/irc/irc-dcc.c:191
#: src/irc/irc-dcc.c:219
#, c-format
msgid "%s not enough memory for new DCC\n"
msgstr "%s pas assez de mémoire pour un nouveau DCC\n"
#: src/irc/irc-dcc.c:259
#: src/irc/irc-dcc.c:244
msgid "Incoming DCC file from "
msgstr "Réception fichier DCC de "
#: src/irc/irc-dcc.c:269
msgid " bytes\n"
msgstr "octets\n"
#: src/irc/irc-dcc.c:323
#, c-format
msgid "DCC: file \"%s\" received from \"%s\": ok!\n"
msgstr "DCC: fichier \"%s\" reçu de \"%s\": ok !\n"
#: src/irc/irc-dcc.c:284
#: src/irc/irc-dcc.c:350
#, c-format
msgid "aborting active DCC: \"%s\" from %s\n"
msgstr "abandon du DCC actif: \"%s\" de %s\n"
@@ -1673,16 +1681,16 @@ msgstr "Mo"
msgid "Gb"
msgstr "Go"
#: src/gui/curses/gui-display.c:987
#: src/gui/curses/gui-display.c:992
#, c-format
msgid "%d:[not connected] "
msgstr "%d:[non connecté] "
#: src/gui/curses/gui-display.c:995
#: src/gui/curses/gui-display.c:1000
msgid "[Act: "
msgstr "[Act: "
#: src/gui/curses/gui-display.c:1030 src/gui/curses/gui-display.c:1033
#: src/gui/curses/gui-display.c:1039 src/gui/curses/gui-display.c:1042
msgid "-MORE-"
msgstr "-PLUS-"
@@ -1690,17 +1698,17 @@ msgstr "-PLUS-"
msgid "server"
msgstr "serveur"
#: src/gui/gui-common.c:304
#: src/gui/gui-common.c:306
#, c-format
msgid "%s not enough memory for infobar message\n"
msgstr "%s pas assez de mémoire pour un message de la barre d'infos\n"
#: src/gui/gui-common.c:439
#: src/gui/gui-common.c:441
#, c-format
msgid "%s not enough memory for new line!\n"
msgstr "%s pas assez de mémoire pour une nouvelle ligne !\n"
#: src/gui/gui-common.c:482
#: src/gui/gui-common.c:484
msgid "not enough memory!\n"
msgstr "pas assez de mémoire !\n"
+24 -16
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2004-09-09 23:11+0200\n"
"POT-Creation-Date: 2004-09-11 15:10+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1456,41 +1456,49 @@ msgid ""
"server!\n"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Waiting"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Connecting"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Active"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Done"
msgstr ""
#: src/irc/irc-dcc.c:43
#: src/irc/irc-dcc.c:44
msgid "Failed"
msgstr ""
#: src/irc/irc-dcc.c:44
#: src/irc/irc-dcc.c:45
msgid "Aborted"
msgstr ""
#: src/irc/irc-dcc.c:191
#: src/irc/irc-dcc.c:219
#, c-format
msgid "%s not enough memory for new DCC\n"
msgstr ""
#: src/irc/irc-dcc.c:259
#: src/irc/irc-dcc.c:244
msgid "Incoming DCC file from "
msgstr ""
#: src/irc/irc-dcc.c:269
msgid " bytes\n"
msgstr ""
#: src/irc/irc-dcc.c:323
#, c-format
msgid "DCC: file \"%s\" received from \"%s\": ok!\n"
msgstr ""
#: src/irc/irc-dcc.c:284
#: src/irc/irc-dcc.c:350
#, c-format
msgid "aborting active DCC: \"%s\" from %s\n"
msgstr ""
@@ -1566,16 +1574,16 @@ msgstr ""
msgid "Gb"
msgstr ""
#: src/gui/curses/gui-display.c:987
#: src/gui/curses/gui-display.c:992
#, c-format
msgid "%d:[not connected] "
msgstr ""
#: src/gui/curses/gui-display.c:995
#: src/gui/curses/gui-display.c:1000
msgid "[Act: "
msgstr ""
#: src/gui/curses/gui-display.c:1030 src/gui/curses/gui-display.c:1033
#: src/gui/curses/gui-display.c:1039 src/gui/curses/gui-display.c:1042
msgid "-MORE-"
msgstr ""
@@ -1583,17 +1591,17 @@ msgstr ""
msgid "server"
msgstr ""
#: src/gui/gui-common.c:304
#: src/gui/gui-common.c:306
#, c-format
msgid "%s not enough memory for infobar message\n"
msgstr ""
#: src/gui/gui-common.c:439
#: src/gui/gui-common.c:441
#, c-format
msgid "%s not enough memory for new line!\n"
msgstr ""
#: src/gui/gui-common.c:482
#: src/gui/gui-common.c:484
msgid "not enough memory!\n"
msgstr ""
+4
View File
@@ -83,6 +83,10 @@ hotlist_add (int priority, t_gui_buffer *buffer)
if (!buffer)
return;
/* do not highlight current buffer */
if (buffer == gui_current_window->buffer)
return;
if ((pos_hotlist = hotlist_search (buffer)))
{
/* return if priority is greater or equal than the one to add */
+5
View File
@@ -193,6 +193,7 @@ int cfg_col_nick_sep;
int cfg_col_nick_self;
int cfg_col_nick_private;
int cfg_col_nick_bg;
int cfg_col_dcc_selected;
int cfg_col_dcc_waiting;
int cfg_col_dcc_connecting;
int cfg_col_dcc_active;
@@ -354,6 +355,10 @@ t_config_option weechat_options_colors[] =
"default", NULL, &cfg_col_nick_bg, NULL, &config_change_color },
/* DCC */
{ "col_chat_dcc_selected", N_("color for selected DCC"),
N_("color for selected DCC (chat window)"),
OPTION_TYPE_COLOR, 0, 0, 0,
"white", NULL, &cfg_col_dcc_selected, NULL, &config_change_color },
{ "col_dcc_waiting", N_("color for \"waiting\" dcc status"),
N_("color for \"waiting\" dcc status"),
OPTION_TYPE_COLOR, 0, 0, 0,
+1
View File
@@ -127,6 +127,7 @@ extern int cfg_col_nick_sep;
extern int cfg_col_nick_self;
extern int cfg_col_nick_private;
extern int cfg_col_nick_bg;
extern int cfg_col_dcc_selected;
extern int cfg_col_dcc_waiting;
extern int cfg_col_dcc_connecting;
extern int cfg_col_dcc_active;
+26 -8
View File
@@ -562,7 +562,7 @@ gui_draw_buffer_chat (t_gui_buffer *buffer, int erase)
{
t_gui_window *ptr_win;
t_gui_line *ptr_line;
t_dcc *ptr_dcc;
t_dcc *dcc_first, *dcc_selected, *ptr_dcc;
char format_empty[32];
int i, j, lines_used, num_bars;
char *unit_name[] = { N_("bytes"), N_("Kb"), N_("Mb"), N_("Gb") };
@@ -594,28 +594,38 @@ gui_draw_buffer_chat (t_gui_buffer *buffer, int erase)
if (buffer->dcc)
{
i = 0;
for (ptr_dcc = dcc_list; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc)
dcc_first = (ptr_win->dcc_first) ? (t_dcc *) ptr_win->dcc_first : dcc_list;
dcc_selected = (ptr_win->dcc_selected) ? (t_dcc *) ptr_win->dcc_selected : dcc_list;
for (ptr_dcc = dcc_first; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc)
{
if (i >= ptr_win->win_chat_height - 1)
break;
if ((ptr_dcc->type == DCC_FILE_RECV)
|| (ptr_dcc->type == DCC_FILE_SEND))
{
gui_window_set_color (ptr_win->win_chat, COLOR_WIN_CHAT);
mvwprintw (ptr_win->win_chat, i, 0, " %-16s %s",
gui_window_set_color (ptr_win->win_chat,
(ptr_dcc == dcc_selected) ?
COLOR_DCC_SELECTED : COLOR_WIN_CHAT);
mvwprintw (ptr_win->win_chat, i, 0, "%s %-16s %s",
(ptr_dcc == dcc_selected) ? ">>" : " ",
ptr_dcc->nick, ptr_dcc->filename);
if (ptr_dcc->filename_suffix > 0)
wprintw (ptr_win->win_chat, " (.%d)",
ptr_dcc->filename_suffix);
gui_window_set_color (ptr_win->win_chat, COLOR_WIN_CHAT);
mvwprintw (ptr_win->win_chat, i + 1, 0, " %s ",
gui_window_set_color (ptr_win->win_chat,
(ptr_dcc == dcc_selected) ?
COLOR_DCC_SELECTED : COLOR_WIN_CHAT);
mvwprintw (ptr_win->win_chat, i + 1, 0, "%s %s ",
(ptr_dcc == dcc_selected) ? ">>" : " ",
(ptr_dcc->type == DCC_FILE_RECV) ?
"--->" : "<---");
gui_window_set_color (ptr_win->win_chat,
COLOR_DCC_WAITING + ptr_dcc->status);
wprintw (ptr_win->win_chat, "%-10s",
dcc_status_string[ptr_dcc->status]);
gui_window_set_color (ptr_win->win_chat, COLOR_WIN_CHAT);
gui_window_set_color (ptr_win->win_chat,
(ptr_dcc == dcc_selected) ?
COLOR_DCC_SELECTED : COLOR_WIN_CHAT);
wprintw (ptr_win->win_chat, " [",
dcc_status_string[ptr_dcc->status]);
if (ptr_dcc->size == 0)
@@ -647,10 +657,10 @@ gui_draw_buffer_chat (t_gui_buffer *buffer, int erase)
unit_name[num_unit],
((long double) ptr_dcc->size) / ((long double)(unit_divide[num_unit])),
unit_name[num_unit]);
ptr_win->dcc_last_displayed = ptr_dcc;
i += 2;
}
}
move (ptr_win->win_y + 1, ptr_win->win_x);
}
else
{
@@ -1195,6 +1205,9 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
snprintf (format, 32, "%%-%ds", input_width);
mvwprintw (ptr_win->win_input, 0, 0, format, "");
wclrtoeol (ptr_win->win_input);
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
ptr_win->win_x);
}
else
{
@@ -1519,6 +1532,8 @@ gui_curses_resize_handler ()
/* TODO: manage when some windows are outside new term size */
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
{
ptr_win->dcc_first = NULL;
ptr_win->dcc_selected = NULL;
if (ptr_win->win_x + ptr_win->win_width == old_width)
ptr_win->win_width = new_width - ptr_win->win_x;
if (ptr_win->win_y + ptr_win->win_height == old_height)
@@ -1720,6 +1735,8 @@ gui_init_colors ()
(color & A_BOLD) ? A_BOLD : 0;
}
init_pair (COLOR_DCC_SELECTED,
cfg_col_dcc_selected & A_CHARTEXT, cfg_col_chat_bg);
init_pair (COLOR_DCC_WAITING,
cfg_col_dcc_waiting & A_CHARTEXT, cfg_col_chat_bg);
init_pair (COLOR_DCC_CONNECTING,
@@ -1763,6 +1780,7 @@ gui_init_colors ()
color_attr[COLOR_WIN_NICK_SEP - 1] = 0;
color_attr[COLOR_WIN_NICK_SELF - 1] = cfg_col_nick_self & A_BOLD;
color_attr[COLOR_WIN_NICK_PRIVATE - 1] = cfg_col_nick_private & A_BOLD;
color_attr[COLOR_DCC_SELECTED - 1] = cfg_col_dcc_selected & A_BOLD;
color_attr[COLOR_DCC_WAITING - 1] = cfg_col_dcc_waiting & A_BOLD;
color_attr[COLOR_DCC_CONNECTING - 1] = cfg_col_dcc_connecting & A_BOLD;
color_attr[COLOR_DCC_ACTIVE - 1] = cfg_col_dcc_active & A_BOLD;
+47 -2
View File
@@ -90,7 +90,24 @@ gui_read_keyb ()
break;
/* cursor up */
case KEY_UP:
if (!gui_current_window->buffer->dcc)
if (gui_current_window->buffer->dcc)
{
if (dcc_list)
{
if (gui_current_window->dcc_selected
&& ((t_dcc *)(gui_current_window->dcc_selected))->prev_dcc)
{
if (gui_current_window->dcc_selected ==
gui_current_window->dcc_first)
gui_current_window->dcc_first =
((t_dcc *)(gui_current_window->dcc_first))->prev_dcc;
gui_current_window->dcc_selected =
((t_dcc *)(gui_current_window->dcc_selected))->prev_dcc;
gui_draw_buffer_chat (gui_current_window->buffer, 1);
}
}
}
else
{
if (gui_current_window->buffer->ptr_history)
{
@@ -118,7 +135,35 @@ gui_read_keyb ()
break;
/* cursor down */
case KEY_DOWN:
if (!gui_current_window->buffer->dcc)
if (gui_current_window->buffer->dcc)
{
if (dcc_list)
{
if (!gui_current_window->dcc_selected
|| ((t_dcc *)(gui_current_window->dcc_selected))->next_dcc)
{
if (gui_current_window->dcc_last_displayed
&& (gui_current_window->dcc_selected ==
gui_current_window->dcc_last_displayed))
{
if (gui_current_window->dcc_first)
gui_current_window->dcc_first =
((t_dcc *)(gui_current_window->dcc_first))->next_dcc;
else
gui_current_window->dcc_first =
dcc_list->next_dcc;
}
if (gui_current_window->dcc_selected)
gui_current_window->dcc_selected =
((t_dcc *)(gui_current_window->dcc_selected))->next_dcc;
else
gui_current_window->dcc_selected =
dcc_list->next_dcc;
gui_draw_buffer_chat (gui_current_window->buffer, 1);
}
}
}
else
{
if (gui_current_window->buffer->ptr_history)
{
+4
View File
@@ -99,6 +99,10 @@ gui_window_new (int x, int y, int width, int height)
new_window->textview_nicklist = NULL;
new_window->textbuffer_nicklist = NULL;
new_window->dcc_first = NULL;
new_window->dcc_selected = NULL;
new_window->dcc_last_displayed = NULL;
new_window->buffer = NULL;
new_window->first_line_displayed = 0;
+15 -7
View File
@@ -26,7 +26,7 @@
#define INPUT_BUFFER_BLOCK_SIZE 256
#define NUM_COLORS 45
#define NUM_COLORS 46
#define COLOR_WIN_TITLE 1
#define COLOR_WIN_CHAT 2
#define COLOR_WIN_CHAT_TIME 3
@@ -59,12 +59,13 @@
#define COLOR_WIN_NICK_FIRST 30
#define COLOR_WIN_NICK_LAST 39
#define COLOR_WIN_NICK_NUMBER (COLOR_WIN_NICK_LAST - COLOR_WIN_NICK_FIRST + 1)
#define COLOR_DCC_WAITING 40
#define COLOR_DCC_CONNECTING 41
#define COLOR_DCC_ACTIVE 42
#define COLOR_DCC_DONE 43
#define COLOR_DCC_FAILED 44
#define COLOR_DCC_ABORTED 45
#define COLOR_DCC_SELECTED 40
#define COLOR_DCC_WAITING 41
#define COLOR_DCC_CONNECTING 42
#define COLOR_DCC_ACTIVE 43
#define COLOR_DCC_DONE 44
#define COLOR_DCC_FAILED 45
#define COLOR_DCC_ABORTED 46
#define SERVER(buffer) ((t_irc_server *)(buffer->server))
#define CHANNEL(buffer) ((t_irc_channel *)(buffer->channel))
@@ -142,6 +143,8 @@ struct t_gui_buffer
/* server/channel */
void *server; /* buffer's server */
void *channel; /* buffer's channel */
/* dcc buffer */
int dcc; /* buffer is dcc status */
/* chat content (lines, line is composed by many messages) */
@@ -210,6 +213,11 @@ struct t_gui_window
/* windows for Qt GUI */
/* TODO: declare Qt window */
/* DCC */
void *dcc_first; /* first dcc displayed */
void *dcc_selected; /* selected dcc */
void *dcc_last_displayed; /* last dcc displayed (for scroll) */
t_gui_buffer *buffer; /* buffer currently displayed in window */
int first_line_displayed; /* = 1 if first line is displayed */
+87 -23
View File
@@ -45,26 +45,41 @@ char *dcc_status_string[] = /* strings for DCC status */
N_("Aborted") };
/*
* dcc_redraw: redraw DCC buffer (and add to hotlist)
*/
void
dcc_redraw (int highlight)
{
gui_draw_buffer_chat (gui_get_dcc_buffer (), 0);
if (highlight)
{
hotlist_add (1, gui_get_dcc_buffer ());
gui_draw_buffer_status (gui_current_window->buffer, 0);
}
}
/*
* dcc_connect: connect to another host
*/
void
dcc_connect (t_dcc *dcc)
dcc_connect (t_dcc *ptr_dcc)
{
struct sockaddr_in addr;
dcc->status = DCC_CONNECTING;
ptr_dcc->status = DCC_CONNECTING;
dcc->sock = socket (AF_INET, SOCK_STREAM, 0);
if (dcc->sock == -1)
ptr_dcc->sock = socket (AF_INET, SOCK_STREAM, 0);
if (ptr_dcc->sock == -1)
return;
memset (&addr, 0, sizeof (addr));
addr.sin_port = htons (dcc->port);
addr.sin_port = htons (ptr_dcc->port);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl (dcc->addr);
fcntl (dcc->sock, F_SETFL, O_NONBLOCK);
connect (dcc->sock, (struct sockaddr *) &addr, sizeof (addr));
addr.sin_addr.s_addr = htonl (ptr_dcc->addr);
fcntl (ptr_dcc->sock, F_SETFL, O_NONBLOCK);
connect (ptr_dcc->sock, (struct sockaddr *) &addr, sizeof (addr));
}
/*
@@ -134,6 +149,7 @@ dcc_accept (t_dcc *ptr_dcc)
if (!ptr_dcc->local_filename)
{
ptr_dcc->status = DCC_FAILED;
dcc_redraw (1);
return;
}
if (cfg_dcc_download_path[0] == '~')
@@ -156,6 +172,7 @@ dcc_accept (t_dcc *ptr_dcc)
if (!cfg_dcc_auto_rename)
{
ptr_dcc->status = DCC_FAILED;
dcc_redraw (1);
return;
}
@@ -163,6 +180,7 @@ dcc_accept (t_dcc *ptr_dcc)
if (!filename2)
{
ptr_dcc->status = DCC_FAILED;
dcc_redraw (1);
return;
}
ptr_dcc->filename_suffix = 0;
@@ -183,6 +201,7 @@ dcc_accept (t_dcc *ptr_dcc)
O_CREAT | O_TRUNC | O_WRONLY,
0644);
}
dcc_redraw (1);
}
/*
@@ -194,7 +213,6 @@ dcc_add (t_irc_server *server, int type, unsigned long addr, int port, char *nic
unsigned int size)
{
t_dcc *new_dcc;
t_gui_buffer *dcc_buffer;
if ((new_dcc = (t_dcc *) malloc (sizeof (t_dcc))) == NULL)
{
@@ -214,26 +232,52 @@ dcc_add (t_irc_server *server, int type, unsigned long addr, int port, char *nic
new_dcc->filename_suffix = -1;
new_dcc->size = size;
new_dcc->pos = 0;
new_dcc->prev_dcc = NULL;
new_dcc->next_dcc = dcc_list;
if (dcc_list)
dcc_list->prev_dcc = new_dcc;
dcc_list = new_dcc;
gui_printf (NULL, "Incoming DCC file: from %s, address:%d.%d.%d.%d, "
"port=%d, name=%s, size=%lu bytes\n",
nick,
addr >> 24, (addr >> 16) & 0xff, (addr >> 8) & 0xff, addr & 0xff,
port, filename, size);
gui_current_window->dcc_first = NULL;
gui_current_window->dcc_selected = NULL;
dcc_buffer = gui_get_dcc_buffer ();
if (type == DCC_FILE_RECV)
{
irc_display_prefix (server->buffer, PREFIX_INFO);
gui_printf (server->buffer, _("Incoming DCC file from "));
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_NICK,
"%s",
nick);
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_DARK,
" (");
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_HOST,
"%d.%d.%d.%d",
addr >> 24, (addr >> 16) & 0xff, (addr >> 8) & 0xff, addr & 0xff);
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_DARK,
")");
gui_printf (server->buffer, ": ");
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_CHANNEL,
"%s",
filename);
gui_printf (server->buffer, ", ");
gui_printf_color (server->buffer,
COLOR_WIN_CHAT_CHANNEL,
"%lu",
size);
gui_printf (server->buffer, _(" bytes\n"));
}
if ( ( (type == DCC_CHAT_RECV) && (cfg_dcc_auto_accept_chats) )
|| ( (type == DCC_FILE_RECV) && (cfg_dcc_auto_accept_files) ) )
{
dcc_accept (new_dcc);
hotlist_add (1, dcc_buffer);
}
else
hotlist_add (2, dcc_buffer);
gui_draw_buffer_status (dcc_buffer, 0);
hotlist_add (2, gui_get_dcc_buffer ());
gui_draw_buffer_status (gui_current_window->buffer, 0);
return new_dcc;
}
@@ -260,12 +304,16 @@ dcc_handle ()
if (num != -1)
{
if (num == 0)
{
dcc_close (ptr_dcc, DCC_FAILED);
dcc_redraw (1);
}
else
{
if (write (ptr_dcc->file, buffer, num) == -1)
{
dcc_close (ptr_dcc, DCC_FAILED);
dcc_redraw (1);
return;
}
ptr_dcc->pos += (unsigned long) num;
@@ -273,11 +321,27 @@ dcc_handle ()
send (ptr_dcc->sock, (char *) &pos, 4, 0);
if (ptr_dcc->pos >= ptr_dcc->size)
{
gui_printf (NULL,
_("DCC: file \"%s\" received from \"%s\": ok!\n"),
ptr_dcc->filename, ptr_dcc->nick);
irc_display_prefix (ptr_dcc->server->buffer, PREFIX_INFO);
gui_printf (ptr_dcc->server->buffer, _("DCC: file "));
gui_printf_color (ptr_dcc->server->buffer,
COLOR_WIN_CHAT_CHANNEL,
"%s",
ptr_dcc->filename);
gui_printf (ptr_dcc->server->buffer, _(" (local filename: "));
gui_printf_color (ptr_dcc->server->buffer,
COLOR_WIN_CHAT_CHANNEL,
"%s",
ptr_dcc->local_filename);
gui_printf (ptr_dcc->server->buffer, _(") from "));
gui_printf_color (ptr_dcc->server->buffer,
COLOR_WIN_CHAT_NICK,
"%s",
ptr_dcc->nick);
gui_printf (ptr_dcc->server->buffer, _(": ok!\n"));
dcc_close (ptr_dcc, DCC_DONE);
dcc_redraw (1);
}
dcc_redraw (0);
}
}
}
+3 -2
View File
@@ -186,11 +186,12 @@ struct t_dcc
char *nick; /* remote nick */
int sock; /* socket for connection */
int file; /* local file (for reading or writing) */
char *filename; /* filename */
char *local_filename; /* local filename */
char *filename; /* filename (given by sender) */
char *local_filename; /* local filename (with path) */
int filename_suffix; /* suffix (.1 for ex) if renaming file */
unsigned long size; /* file size */
unsigned long pos; /* number of bytes received/sent */
t_dcc *prev_dcc; /* link to previous dcc file/chat */
t_dcc *next_dcc; /* link to next dcc file/chat */
};