- link $f_full, $t_full;
- $self->append( $t, 'recv', -s $t_full, $f->{uid}, $t_path );
+ my $size = -s $f_full;
+ my $md5;
+
+ my $ok;
+ {
+ no autodie qw(link);
+ $ok = link $f_full, $t_full
+ };
+ if ( ! $ok || $! =~ m/cross-link/ ) {
+ $ok = symlink $f_full, $t_full;
+ } else {
+ $size = -s $t_full;
+
+ if ( $f->{uid} == $self->{md5}->{uid} ) {
+ $md5 = $f_path; # we don't have local md5sum db for md5 user!
+ } else {
+ $md5 = $self->md5_get($f_full);
+ }
+
+ }
+
+ if ( $ok ) {
+ $self->append( $t, 'recv', $size, $f->{uid}, $t_path );
+ $self->append_meta('md5sum', $t, $md5 => $t_path ) if $md5; # md5sum for received files! FIXME -- cross-slice md5
+ $self->refresh_file_list( $t );
+ } else {
+ warn "ERROR: send_file $f_full -> $t_full: $!";
+ }
+
+ return $size;