diff --git a/lib/sessions/downloader.pm b/lib/sessions/downloader.pm index 0195c5e11a071bd15a8fd692e0d1bbb6918fad39..1f57e9ac9e4df55a2e941aebd7ab72f1e1ff922d 100644 --- a/lib/sessions/downloader.pm +++ b/lib/sessions/downloader.pm @@ -18,6 +18,7 @@ POE::Session->create( filename => \&sessions::downloader::ddl::filename, signal_filename => \&sessions::downloader::ddl::signal_filename, signal_ddl => \&sessions::downloader::ddl::signal_ddl, + signal_move => \&sessions::downloader::ddl::signal_move, end_task => \&sessions::downloader::ddl::end_task, }, ); diff --git a/lib/sessions/downloader/ddl.pm b/lib/sessions/downloader/ddl.pm index 05bb2685b68cf1b4208339ccc93b172de10110f6..9ae3b76c56a709d10be4c91e3fd390924241557a 100644 --- a/lib/sessions/downloader/ddl.pm +++ b/lib/sessions/downloader/ddl.pm @@ -93,7 +93,7 @@ sub signal_filename { "youtube-dl", "--restrict-filename", "-o", - $conf->{save_folder}."/".$conf->{save_format}, + "/tmp/".$conf->{save_format}, $heap->{ddl}->{pb}->{$id}->{url}, ], StdoutEvent => "devnull", @@ -120,6 +120,40 @@ sub signal_ddl { if ($status ne "0") { $log->error("error downloading $id : $status"); + $kernel->yield("end_task"); + } + + # we actually download the content + $child = POE::Wheel::Run->new( + Program => [ + "mv", + "/tmp/".$heap->{ddl}->{pb}->{$id}->{filename}, + $conf->{save_folder}."/".$heap->{ddl}->{pb}->{$id}->{filename}, + ], + StdoutEvent => "devnull", + StderrEvent => "devnull", + ); + $kernel->sig_child($child->PID, "signal_move"); + + # we link playbot id to PID and url + $heap->{ddl}->{pb}->{$id}->{child} = $child->PID; + + # we link wheel id to playbot id + $heap->{ddl}->{wid}->{$child->ID} = $id; + # we link PID to child object + $heap->{ddl}->{pid}->{$child->PID} = $child; +} + +sub signal_move { + $log->debug("DDL"); + my ($kernel, $heap, $pid, $status) = @_[KERNEL, HEAP, ARG1, ARG2]; + + my $child = delete $heap->{ddl}->{pid}->{$pid}; + my $id = delete $heap->{ddl}->{wid}->{$child->ID}; + $heap->{ddl}->{pb}->{$id}->{child} = undef; + + if ($status ne "0") { + $log->error("error moving $id from tmp : $status"); } else { eval {