diff options
| author | Julie Lala <jules@okfoc.us> | 2015-01-18 02:56:40 -0500 |
|---|---|---|
| committer | Julie Lala <jules@okfoc.us> | 2015-01-18 02:56:40 -0500 |
| commit | 7276caf853e1f3d57893eca6f31e49a7a79d4eb7 (patch) | |
| tree | faeedfa435367de2d0b149dc3381a81a44b48029 | |
| parent | 749edd19307bfc62718b94dc12f666df94985c90 (diff) | |
userland remove from queue
| -rwxr-xr-x | xdcc.pl | 45 |
1 files changed, 37 insertions, 8 deletions
@@ -19,8 +19,8 @@ $VERSION = "1.01"; my @files; my @queue; -my $queue_max = 10; -my $bother_delay = 10000; +my $queue_max = 99; +my $bother_delay = 9999; my $irssidir = Irssi::get_irssi_dir(); my $dcc_upload_path = Irssi::settings_get_str('dcc_upload_path'); @@ -110,7 +110,9 @@ my $messages = { 'file_help_send' => '[%_XDCC%_] Type %_/dcc %nick get%_ to accept the file', 'xdcc_final_warning' => '[%_XDCC%_] This is your last warning!', - 'xdcc_cancelled' => '[%_XDCC%_] Your download has been cancelled for inactivity.', + 'xdcc_inactive' => '[%_XDCC%_] The DCC transfer has been cancelled for inactivity.', + 'xdcc_removed' => '[%_XDCC%_] Your request has been removed.', + 'xdcc_file_removed' => '[%_XDCC%_] The file you requested [%d] has been removed.', 'xdcc_autoget_tip' => '[%_XDCC%_] Tip: in irssi, type %_/set dcc_autoget ON%_', 'xdcc_help' => $help_remote, @@ -118,6 +120,7 @@ my $messages = { 'xdcc_version' => "[%_XDCC%_] plugin $VERSION", }; +# Public XDCC request API sub ctcp_reply { my ($server, $data, $nick, $address, $target) = @_; @@ -126,6 +129,8 @@ sub ctcp_reply { if ($disabled || $ctcp ne "xdcc") { return; } if ($cmd eq "get") { xdcc_enqueue($server, $nick, $index) } elsif ($cmd eq "send") { xdcc_enqueue($server, $nick, $index) } + elsif ($cmd eq "info") { xdcc_info($server, $nick, $index) } + elsif ($cmd eq "remove") { xdcc_remove($server, $nick, $index) } elsif ($cmd eq "queue") { xdcc_queue($server, $nick) } elsif ($cmd eq "list") { xdcc_list($server, $nick) } elsif ($cmd eq "version") { xdcc_message($server, $nick, 'xdcc_version') } @@ -172,6 +177,28 @@ sub xdcc_enqueue { push(@queue, $request); xdcc_queue($server, $nick); } +sub xdcc_remove { + my ($server, $nick, $index) = @_; + my $id = int $index; + $id -= 1; + + my $removed; + for (my $n = @queue; $n >= 0; --$n) { + if ($queue[$n]->{nick} eq $nick && ($id == -1 || queue[$n]->{id} == $id)) { + $removed = splice(@queue, $n, 1); + } + } + if ($removed) { + xdcc_message( $server, $nick, 'xdcc_removed' ); + } +} +sub xdcc_info { + my ($server, $nick, $index) = @_; + my $id = int $index; + if (! $id) return; + $id -= 1; + # get stat data +} sub xdcc_list { my ($server, $nick) = @_; if (scalar @files == 0) { @@ -193,7 +220,7 @@ sub xdcc_queue { } my $msg; for (my $n = 0; $n < @queue; ++$n) { - if ($queue[$n]->{nick} == $nick) { + if ($queue[$n]->{nick} eq $nick) { xdcc_message( $server, $nick, 'in_queue', $n+1, $queue[$n]->{id}+1, $files[$queue[$n]->{id}]->{fn} ) # break } @@ -218,7 +245,7 @@ sub xdcc_send { $stats->{files}->{$file->{fn}}++; } -# client stuff +# XDCC command control sub xdcc_report { if (scalar @files == 0) { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'xdcc_no_files'); @@ -292,13 +319,14 @@ sub xdcc_del { my ($id) = @_; $id = (int $id) - 1; my $file = $files[$id]; + my $req; splice(@files, $id, 1); for (my $n = @queue; $n >= 0; --$n) { if ($queue[$n]->{id} == $id) { - # send a message to the user that the file is no longer being offered - splice(@queue, $n, 1); + $req = splice(@queue, $n, 1); + xdcc_message( $req->{server}, $req->{nick}, 'xdcc_file_removed', $n ); } elsif ($queue[$n]->{id} > $id) { --$queue[$n]->{id}; @@ -336,6 +364,7 @@ sub xdcc { else { xdcc_report() } } +# DCC management sub dcc_created { my ($dcc) = @_; # Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'xdcc_log', 'dcc created'); @@ -356,7 +385,7 @@ sub xdcc_bother { } else { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'xdcc_log', 'Send to ' . $dcc->{nick} . ' timed out.'); - xdcc_message($dcc->{server}, $dcc->{nick}, 'xdcc_cancelled'); + xdcc_message($dcc->{server}, $dcc->{nick}, 'xdcc_inactive'); xdcc_message($dcc->{server}, $dcc->{nick}, 'xdcc_autoget_tip'); $dcc->destroy(); undef $timeout; |
