diff options
| author | Jules Laplace <jules@okfoc.us> | 2015-01-16 09:52:20 -0500 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2015-01-16 09:52:20 -0500 |
| commit | b3731d552fa91705459ae6358311d346ed5d3d02 (patch) | |
| tree | b617b2fbf690bfe597f712d736ce92f87fcb718d | |
| parent | c1e9a2441a8437f4ff2e7ca84fd3151e59f1a5d2 (diff) | |
implement queue
| -rwxr-xr-x | xdcc.pl | 24 |
1 files changed, 16 insertions, 8 deletions
@@ -115,19 +115,21 @@ sub xdcc_enqueue { my ($server, $nick, $index) = @_; my $id = int $index; $id -= 1; + + my $request = { + server => $server, + nick => $nick, + id => $id + }; + if (@queue == 0) { - return xdcc_send($server, $nick, $id); + return xdcc_send($request); } elsif (@queue > $queue_max) { xdcc_message( $server, $nick, 'queue_is_full' ); return; } - my $user = { - server => $server, - nick => $nick, - id => $id - }; - push(@queue, $user); + push(@queue, $request); xdcc_queue(); } sub xdcc_list { @@ -158,7 +160,10 @@ sub xdcc_queue { xdcc_message( $server, $nick, 'queue_length', scalar @queue, scalar @queue == 1 ? "" : "s" ) } sub xdcc_send { - my ($server, $nick, $id) = @_; + my ($request) = @_; + my $server = $request->{server}; + my $nick = $request->{nick}; + my $id = $request->{id}; my $file = $files[$id]; my $path = $file->{path}; Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'xdcc_sending_file', $id, $nick, $file->{fn}); @@ -258,6 +263,9 @@ sub dcc_created { } sub dcc_destroyed { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'xdcc_log', 'dcc destroyed'); + if (@queue == 0) { return; } + my $request = shift @queue; + xdcc_send($request); } sub dcc_connected { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'xdcc_log', 'dcc connected'); |
