diff options
| author | Alex Checca | 2016-01-17 01:46:08 -0500 |
|---|---|---|
| committer | Alex Checca | 2016-01-17 01:46:08 -0500 |
| commit | e8a25b476f79fd96abc59c619041b737ac739da9 (patch) | |
| tree | 479b1ea58995008da9c271793082291e39126108 /scripts | |
| parent | e4ccf2e6b0c697b03a7fd34cba746262c602fa56 (diff) | |
| download | scripts.irssi.org-e8a25b476f79fd96abc59c619041b737ac739da9.tar.bz2 | |
more goodness while we're at it
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/xdcc_autoget.pl | 69 |
1 files changed, 62 insertions, 7 deletions
diff --git a/scripts/xdcc_autoget.pl b/scripts/xdcc_autoget.pl index 7538774..15d0ffb 100644 --- a/scripts/xdcc_autoget.pl +++ b/scripts/xdcc_autoget.pl @@ -116,6 +116,7 @@ sub ag_init #init system Irssi::print "AG | Autoget V$VERSION initiated"; Irssi::print "AG | /ag_help for help"; &ag_list; + &ag_getfinished; if ($episodicflag) {Irssi::print "AG | Episodic: Yes";} else {Irssi::print "AG | Episodic: No";} Irssi::print "AG | Data folder: $folder"; @@ -202,6 +203,59 @@ sub ag_getfinished #reads in finished packs list chomp(@finished); @finished = ag_uniq(@finished); close(FINISHED); + &ag_clearcache; + @finished = &ag_uniq(@finished); + @finished = nsort(@finished); #sort normally + open(FINISHED, ">", $cachefilename); + foreach my $finish (@finished) + { + print FINISHED $finish . "\n"; #print name to file + } + close(FINISHED); +} + +sub nsort { #shamelessly ripped from Sort::Naturally + my($cmp, $lc); + return @_ if @_ < 2; # Just to be CLEVER. + + my($x, $i); # scratch vars + + map + $_->[0], + + sort { + # Uses $i as the index variable, $x as the result. + $x = 0; + $i = 1; + + while($i < @$a and $i < @$b) { + last if ($x = ($a->[$i] cmp $b->[$i])); # lexicographic + ++$i; + + last if ($x = ($a->[$i] <=> $b->[$i])); # numeric + ++$i; + } + + $x || (@$a <=> @$b) || ($a->[0] cmp $b->[0]); + } + + map { + my @bit = ($x = defined($_) ? $_ : ''); + + if($x =~ m/^[+-]?(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee](?:[+-]?\d+))?\z/s) { + # It's entirely purely numeric, so treat it specially: + push @bit, '', $x; + } else { + # Consume the string. + while(length $x) { + push @bit, ($x =~ s/^(\D+)//s) ? lc($1) : ''; + push @bit, ($x =~ s/^(\d+)//s) ? $1 : 0; + } + } + + \@bit; + } + @_; } sub ag_clearcache #clears cache of saved packs @@ -269,7 +323,6 @@ sub ag_getpacks #if ($m =~ m{#(\d+):}) my($message, $botcounter) = @_; my @temp = split(/[#,]/, $message); #split up the message into 'words' my $timeoutscleared = 0; - &ag_getfinished; my $newpackflag = 1; foreach my $m (@temp) #find packs (#[NUMBER]: format) @@ -284,7 +337,9 @@ sub ag_getpacks #if ($m =~ m{#(\d+):}) } foreach my $n (@finished) #don't redownload finished packs { - if ($n eq "$bots[$botcounter] $1" or $n eq $2) {$newpackflag = 0;} + my $filename = $2; + $filename =~ tr/[ ']/[__]/; + if ($n eq "$bots[$botcounter] $1" or $n eq $filename) {$newpackflag = 0;} last if ($n eq "$bots[$botcounter] $1"); } if($newpackflag){push(@{$packs[$botcounter]}, $1);} #push all new pack numbers to list of packs @@ -313,6 +368,7 @@ sub ag_opendcc #runs on DCC recieve init my $filename = $gdcc->{'arg'}; my $filedownloadflag = 0; + $filename =~ tr/[ ']/[__]/; $botname =~ tr/[A-Z]/[a-z]/; foreach my $file (@filenames){ if ($file eq $filename){ $filedownloadflag = 1; }} @@ -325,10 +381,7 @@ sub ag_opendcc #runs on DCC recieve init { &ag_remtimeouts($botcounter); #stop any other skips $getmsgflag[$botcounter] = 0; - - my $size = $gdcc->{'size'}; - my $skipped = $gdcc->{'skipped'}; - + $downloadflag[$botcounter] = 1; foreach my $n (@finished) #don't redownload finished packs { @@ -441,12 +494,13 @@ sub ag_closedcc if ($dcc->{'skipped'} == $dcc->{'size'}) { $delayoverride = 2; #doubles the delay for next message to make up for prematurely sending xdcc cancel - ag_message("msg $bots[$botcounter] $cancelprefix"); #workaround because IRSSI doesn't get and then cancel packs on its own if they're already downloaded, causing stalls if left unattended. + if (!$skipunfinishedflag[$botcounter]) {ag_message("msg $bots[$botcounter] $cancelprefix");} #workaround to cancel packs avoiding stalls if left unattended. } if ($dcc->{'transfd'} == $dcc->{'size'} or $skipunfinishedflag[$botcounter]) { if (!$skipunfinishedflag[$botcounter]) { + $filename =~ tr/[ ']/[__]/; @filenames = grep { $_ ne $filename } @filenames; #remove the file from the list of files being transferred ag_addfinished($dcc->{'arg'}, $botcounter); } @@ -524,6 +578,7 @@ sub ag_addfinished #save finished downloads my ($filename, $botcounter) = @_; open(FINISHED, ">>", $cachefilename); print FINISHED $bots[$botcounter] . " " . $packs[$botcounter][$packcounter[$botcounter]] . "\n"; #print pack to file + $filename =~ tr/[ ']/[__]/; print FINISHED $filename . "\n"; #print name to file close(FINISHED); } |
