X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite%2FAsyncWgetFileGetter.pm;fp=videosite%2FAsyncWgetFileGetter.pm;h=ce68046896aff60288020140f355a763f3f542fa;hb=43a855287b9c17a6691a685d3232cb5f19194ed7;hp=0000000000000000000000000000000000000000;hpb=d8933ed04195911738700ee2046d709da4d16925;p=videosite.git diff --git a/videosite/AsyncWgetFileGetter.pm b/videosite/AsyncWgetFileGetter.pm new file mode 100644 index 0000000..ce68046 --- /dev/null +++ b/videosite/AsyncWgetFileGetter.pm @@ -0,0 +1,62 @@ +# (c) 2007 by Ralf Ertzinger +# 2008-2009 by Christian Garbs +# 2010 by Maximilian Rehkopf +# licensed under GNU GPL v2 +# +# A getter which will download the media to a local file storage +# in the background using wget +# + +package videosite::AsyncWgetFileGetter; + +use videosite::FileGetter; +@ISA = qw(videosite::FileGetter); + +use strict; +use File::Basename; +use File::Temp qw(tempfile); +use MIME::Base64; + +sub new { + my $class = shift; + my $self = $class->SUPER::new(); + + $self->{'NAME'} = 'asyncwgetfilegetter'; + + bless($self, $class); + $self->_prepare_parameters(); + + return $self; +} + +sub get { + my $self = shift; + my $video = shift; + my $dlfile; + my $dirname; + my $cookie = ""; + + $dlfile = sprintf($self->_getval('FILEPATTERN'), + $self->_encode($video->{'SOURCE'}), + $self->_encode($video->{'ID'}), + $self->_encode($video->{'TITLE'}), + $self->_encode($video->{'DLURL'}), + $self->_encode($video)->{'URL'}); + + $dirname = dirname($dlfile); + if ($self->_diskfree($dirname) < $self->_getval('MINFREE')) { + $self->error("Not enough free space to download"); + return 0; + } + + $self->debug('Going to download %s to %s', $video->{'DLURL'}, $dlfile); + + my (undef, $tmpfile) = tempfile('videosite.tmp.XXXXXXXXXXXX', DIR => $dirname); + + $cookie = "--header=\"Cookie: $video->{'COOKIE'}\"" if (defined $video->{'COOKIE'}); + my $cmdline = "( wget -q -O\"$tmpfile\" $cookie \"$video->{'DLURL'}\" && mv \"$tmpfile\" \"$dlfile\" && chmod =rw \"$dlfile\" || rm -f \"$tmpfile\" ) &"; + $self->debug(encode_base64($cmdline)); + system($cmdline); + + return 1; +}