summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@derf.homelinux.org>2010-05-20 19:55:22 +0200
committerDaniel Friesel <derf@derf.homelinux.org>2010-05-20 19:55:22 +0200
commit3bcc67a36f854a15079f1f120ab496e57f744dcd (patch)
treecc862ee6107539a56ffdc5108de770aba923eba4
parent2423115b919f4c11c8eddc96667e987e33cef13a (diff)
Add support for download continuation
-rwxr-xr-xbin/comirror40
1 files changed, 35 insertions, 5 deletions
diff --git a/bin/comirror b/bin/comirror
index a099212..7f65745 100755
--- a/bin/comirror
+++ b/bin/comirror
@@ -9,10 +9,6 @@ my $mech = WWW::Mechanize->new(
stack_depth => 0,
);
-sub usage {
- die("Usage: comirror <start url>\n");
-}
-
sub find_next_link {
foreach my $re (
qr{ ^ next $ }ix,
@@ -27,7 +23,40 @@ sub find_next_link {
die("Cannot find next link\n");
}
-my $uri = shift or usage();
+sub read_file {
+ my ($filename) = @_;
+ my ($line, $fh);
+
+ if (not open($fh, '<', $filename)) {
+ warn("Cannot open $filename: $!\n");
+ return;
+ }
+
+ $line = <$fh>;
+ close($fh) or warn("Cannot close $filename: $!\n");
+
+ chomp $line;
+ return $line;
+}
+
+sub save_lasturi {
+ open(my $fh, '>', 'last_uri') or die("Cannot open last_uri: $!\n");
+ print {$fh} $mech->uri->as_string;
+ close($fh) or die("Cannot close last_uri: $!\n");
+ return;
+}
+
+my $uri = shift || read_file('last_uri');
+my $image_re = read_file('image_re');
+
+if (not defined $uri or not defined $image_re) {
+ die("last_uri or image_re not found / specified\n");
+}
+
+$SIG{INT} = sub {
+ save_lasturi();
+ exit(0);
+};
while (
$mech->get($uri)
@@ -41,6 +70,7 @@ while (
$uri = find_next_link->URI->abs->as_string;
if ($uri eq $mech->uri->as_string) {
+ save_lasturi();
die("Looks like we're in a loop, bailing out\n");
}