new getter for asynchronous download
[videosite.git] / videosite / AsyncFileGetter.pm
1 # (c) 2007 by Ralf Ertzinger <ralf@camperquake.de>
2 #     2008 by Christian Garbs <mitch@cgarbs.de>
3 #
4 # licensed under GNU GPL v2
5 #
6 # A getter which will download the media to a local file storage
7 # in the background
8 #
9
10 package AsyncFileGetter;
11
12 use FileGetter;
13 @ISA = qw(FileGetter);
14
15 use strict;
16 use LWP::Simple qw(!get);
17 use File::Basename;
18
19 sub new {
20     my $class = shift;
21     my $self = $class->SUPER::new();
22
23     $self->{'NAME'} = 'asyncfilegetter';
24
25     bless($self, $class);
26     $self->_prepare_parameters();
27
28     return $self;
29 }
30
31 sub get {
32     my $self = shift;
33     my $video = shift;
34     my $dlfile;
35     my $dirname;
36
37     $dlfile = sprintf($self->_getval('FILEPATTERN'),
38         $self->_encode($video->{'SOURCE'}),
39         $self->_encode($video->{'ID'}),
40         $self->_encode($video->{'TITLE'}),
41         $self->_encode($video->{'DLURL'}),
42         $self->_encode($video)->{'URL'});
43
44     $dirname = dirname($dlfile);
45     if ($self->_diskfree($dirname) < $self->_getval('MINFREE')) {
46         $self->error("Not enough free space to download");
47         return 0;
48     }
49
50     $self->debug('Going to download %s to %s', $video->{'DLURL'}, $dlfile);
51
52     my $cmdline = "GET \"$video->{'DLURL'}\" > \"$dlfile\" &";
53     system($cmdline);
54
55     return 1;
56 }