summaryrefslogtreecommitdiff
path: root/src/plugins/perl/wee-perl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/perl/wee-perl.c')
-rw-r--r--src/plugins/perl/wee-perl.c44
1 files changed, 36 insertions, 8 deletions
diff --git a/src/plugins/perl/wee-perl.c b/src/plugins/perl/wee-perl.c
index 518c9ee70..dc4aa27f7 100644
--- a/src/plugins/perl/wee-perl.c
+++ b/src/plugins/perl/wee-perl.c
@@ -385,14 +385,13 @@ static XS (XS_IRC_get_info)
arg = SvPV (ST (0), integer);
}
- if (ptr_server && arg)
+ if (arg)
{
-
if ( (strcasecmp (arg, "0") == 0) || (strcasecmp (arg, "version") == 0) )
{
info = PACKAGE_STRING;
}
- else if ( (strcasecmp (arg, "1") == 0) || (strcasecmp (arg, "nick") == 0) )
+ else if ( ptr_server && ( (strcasecmp (arg, "1") == 0) || (strcasecmp (arg, "nick") == 0) ) )
{
if (ptr_server->nick)
info = ptr_server->nick;
@@ -402,7 +401,7 @@ static XS (XS_IRC_get_info)
if (BUFFER_IS_CHANNEL (gui_current_window->buffer))
info = CHANNEL (gui_current_window->buffer)->name;
}
- else if ( (strcasecmp (arg, "3") == 0) || (strcasecmp (arg, "server") == 0) )
+ else if ( ptr_server && ( (strcasecmp (arg, "3") == 0) || (strcasecmp (arg, "server") == 0) ) )
{
if (ptr_server->name)
info = ptr_server->name;
@@ -411,7 +410,7 @@ static XS (XS_IRC_get_info)
{
info = weechat_home;
}
- else if ( (strcasecmp (arg, "5") == 0) || (strcasecmp (arg, "away") == 0) )
+ else if ( ptr_server && ( (strcasecmp (arg, "5") == 0) || (strcasecmp (arg, "away") == 0) ) )
{
XST_mIV (0, SERVER(gui_current_window->buffer)->is_away);
XSRETURN (1);
@@ -741,7 +740,7 @@ static XS (XS_weechat_get_info)
{
info = PACKAGE_STRING;
}
- else if ( (strcasecmp (arg, "1") == 0) || (strcasecmp (arg, "nick") == 0) )
+ else if ( ptr_server && ( (strcasecmp (arg, "1") == 0) || (strcasecmp (arg, "nick") == 0) ) )
{
if (ptr_server->nick)
info = ptr_server->nick;
@@ -751,7 +750,7 @@ static XS (XS_weechat_get_info)
if (BUFFER_IS_CHANNEL (gui_current_window->buffer))
info = CHANNEL (gui_current_window->buffer)->name;
}
- else if ( (strcasecmp (arg, "3") == 0) || (strcasecmp (arg, "server") == 0) )
+ else if ( ptr_server && ( (strcasecmp (arg, "3") == 0) || (strcasecmp (arg, "server") == 0) ) )
{
if (ptr_server->name)
info = ptr_server->name;
@@ -760,12 +759,41 @@ static XS (XS_weechat_get_info)
{
info = weechat_home;
}
- else if ( (strcasecmp (arg, "5") == 0) || (strcasecmp (arg, "away") == 0) )
+ else if ( ptr_server && ( (strcasecmp (arg, "5") == 0) || (strcasecmp (arg, "away") == 0) ) )
{
XST_mIV (0, SERVER(gui_current_window->buffer)->is_away);
XSRETURN (1);
return;
}
+ else if ( (strcasecmp (arg, "100") == 0) || (strcasecmp (arg, "dccs") == 0) )
+ {
+ int nItems = 0;
+ t_irc_dcc *p = dcc_list;
+
+ POPs;
+ if (items == 2)
+ POPs;
+
+ for(; p; p = p->next_dcc)
+ {
+ HV *infohash = (HV *) sv_2mortal((SV *) newHV());
+ hv_store (infohash, "address32", 9, newSViv(p->addr), 0);
+ hv_store (infohash, "cps", 3, newSViv(p->bytes_per_sec), 0);
+ hv_store (infohash, "remote_file", 11, newSVpv(p->filename, 0), 0);
+ hv_store (infohash, "local_file", 10, newSVpv(p->local_filename, 0), 0);
+ hv_store (infohash, "nick", 4, newSVpv(p->nick, 0), 0);
+ hv_store (infohash, "port", 4, newSViv(p->port), 0);
+ hv_store (infohash, "pos", 3, newSVnv(p->pos), 0);
+ hv_store (infohash, "size", 4, newSVnv(p->size), 0);
+ hv_store (infohash, "status", 6, newSViv(p->status), 0);
+ hv_store (infohash, "type", 4, newSViv(p->type), 0);
+
+ XPUSHs(newRV((SV *) infohash));
+ ++nItems;
+ }
+ XSRETURN(nItems);
+ return;
+ }
if (info)
XST_mPV (0, info);