use Data::Dump qw(dump);
use autodie;
-sub home_dir {
+sub user_info {
my $login = shift;
my ( undef, undef, $uid, $gid, undef, undef, $email, $dir, $shell ) = getpwnam $login;
- return $dir;
+ return ( $uid, $gid, $dir );
}
use Gearman::Worker;
return $to_dir;
} );
+$worker->register_function( $name . '_torrent_download_done' => sub {
+ my $work = $_[0]->arg;
+ chomp $work;
+ warn "# torrent_download_done [$work]\n";
+
+ my ( $id, $dir, $name, $hash ) = split(/\s+#\s+/,$work);
+
+ $tc->remove( $id );
+
+ if ( $dir =~ m{/(\w+)$} ) {
+ my $user = $1;
+
+ warn "# check $name md5sum";
+ my $md5sum = `md5sum "$dir/$name"`;
+ $md5sum =~ s/\s+.*$//;
+ if ( $name ne $md5sum ) {
+ warn "ERROR: invalid md5sum for $name -> $md5sum\n";
+ } else {
+
+ warn "# move $name to $user\n";
+ my ( $uid, $gid, $home_dir ) = user_info $user;
+ link "$dir/$name", "$home_dir/$name";
+ chown $uid, $gid, "$home_dir/$name";
+ warn "FIXME: add to md5 pool?";
+
+ }
+
+ } else {
+ warn "ERROR: can't find user in $dir for $name\n";
+ }
+
+ warn "# $id removed $dir $name $hash\n";
+
+ unlink "$dir/$name";
+
+} );
+
$worker->register_function( $name . '_torrent_share' => sub {
my $work = $_[0]->arg;
chomp $work;