X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=gearman%2Ftransmission.pl;h=dc30efeb80b227bb8c2d0fdf6970570e18518253;hb=0076f8dffc04d81b746a888b6e0c79e49fb8ac37;hp=901070d1fa811915426a23dcaef73c5cc01ce5b4;hpb=20e91894566c0209c172121fc0837e348fee86d0;p=cloudstore.git diff --git a/gearman/transmission.pl b/gearman/transmission.pl index 901070d..dc30efe 100755 --- a/gearman/transmission.pl +++ b/gearman/transmission.pl @@ -6,6 +6,7 @@ use Transmission::Client; use JSON::XS; use Data::Dump qw(dump); use autodie; +use File::Path qw(make_path remove_tree); sub user_info { my $login = shift; @@ -54,15 +55,15 @@ $worker->register_function( $name . '_torrent_download' => sub { my $dir = (getpwnam($user))[7] || die "no user $user"; - my $to_dir = "$torrent_dir/download/$user"; - if ( ! -e $to_dir ) { - mkdir $to_dir; - # fix perm - my ($uid,$gid) = (stat($torrent_dir))[4,5]; - chown $uid, $gid, $to_dir; - } + my $torrent_file = "$dir/$path"; + + $path =~ s/\.torrent$//; + my $to_dir = "$torrent_dir/download/$user/$path"; + my ($uid,$gid) = (stat($torrent_dir))[4,5]; + make_path $to_dir, { uid => $uid, gid => $gid }; - $tc->add( filename => "$dir/$path", 'download-dir' => $to_dir ); + my $t = $tc->add( filename => $torrent_file, 'download-dir' => $to_dir ); + warn "# added $to_dir = ",dump($t); return $to_dir; } ); @@ -74,33 +75,33 @@ $worker->register_function( $name . '_torrent_download_done' => sub { my ( $id, $dir, $name, $hash ) = split(/\s+#\s+/,$work); - $tc->remove( $id ); + my $t = $tc->remove( $id ); + warn "# remove $id = ",dump($t); - if ( $dir =~ m{/(\w+)$} ) { + if ( $dir =~ m{/download/(\w+)/(.+)$} ) { my $user = $1; + my $path = $2; warn "# check $name md5sum"; my $md5sum = `md5sum "$dir/$name"`; - $md5sum =~ s/\s+.*$//; + $md5sum =~ s/\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?"; - + warn "ERROR: invalid md5sum filename ",dump( $name, $md5sum ); } + warn "# move $name to $user $path\n"; + my ( $uid, $gid, $home_dir ) = user_info $user; + link "$dir/$name", "$home_dir/$path"; + chown $uid, $gid, "$home_dir/$path"; + 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"; + remove_tree $dir; } );