diff -urN imapsync-1.96/imapsync imapsync-1.96.tn/imapsync --- imapsync-1.96/imapsync Fri Jul 9 11:08:43 2004 +++ imapsync-1.96.tn/imapsync Wed Sep 8 21:08:32 2004 @@ -586,14 +586,14 @@ sub separator_invert { # The separator we hope we'll never encounter - my $o_sep="\000"; + my $o_sep="-"; my($f_fold, $f_sep, $t_sep) = @_; my $t_fold = $f_fold; $t_fold =~ s@\Q$t_sep@$o_sep@g; $t_fold =~ s@\Q$f_sep@$t_sep@g; - $t_fold =~ s@\Q$o_sep@$f_sep@g; + # $t_fold =~ s@\Q$o_sep@$f_sep@g; return($t_fold); } @@ -605,12 +605,16 @@ # Transforming the folder name by the --regextrans2 option if ($regextrans2) { + $debug and print "before: $t_fold\n"; $debug and print "eval \$t_fold =~ $regextrans2\n"; eval("\$t_fold =~ $regextrans2"); + $debug and print "after: $t_fold\n"; } # Adding the prefix supplied by the --prefix2 option - $t_fold = $prefix2 . $t_fold if ($prefix2); + if ($prefix2 && ($t_fold ne "INBOX")) { + $t_fold = $prefix2 . $t_fold; + } print "To Folder [$t_fold]\n"; unless ($from->select($f_fold)) { @@ -655,10 +659,20 @@ unless($dry) { $to->subscribe($t_fold) }; } + print "Getting from messages\n"; + while (! $from->IsConnected()) { + print "NOT CONNECTED on from retrieval\n"; + $from->connect(); + } my @f_msgs = $maxage ? $from->since(time - 86400 * $maxage) : $from->search("ALL"); $debug and print "LIST FROM : @f_msgs\n"; # internal dates on "TO" are after the ones on "FROM" # normally... + print "Getting to messages\n"; + while (! $to->IsConnected()) { + print "NOT CONNECTED on to retrieval\n"; + $to->connect(); + } my @t_msgs = $maxage ? $to->since(time - 86400 * $maxage) : $to->search("ALL"); $debug and print "LIST TO : @t_msgs\n"; @@ -666,18 +680,30 @@ my %t_hash = (); $debug and print "++++ From Parse ++++\n"; + print "Parsing from messages\n"; foreach my $m (@f_msgs) { + print "."; parse_header_msg($m, $from, "F", \%f_hash); } + print "\n"; $debug and print "++++ To Parse ++++\n"; + print "Parsing to messages\n"; foreach my $m (@t_msgs) { + print ","; parse_header_msg($m, $to, "T", \%t_hash); } + print "\n"; $debug and print "++++ Verifying ++++\n"; # messages in "from" that are not good in "to" + print "Inserting messages\n"; + my $count = 0; + my $f_total = scalar(@f_msgs); + my $t_total = scalar(@t_msgs); MESS: foreach my $m_id (keys(%f_hash)) { + $count += 1; + print "Importing message $count / $f_total ($t_total)\n"; my $f_size = $f_hash{$m_id}{'s'}; my $f_msg = $f_hash{$m_id}{'m'}; if (defined $maxsize and $f_size > $maxsize) { @@ -699,12 +725,25 @@ $d = "\"$d\""; $debug and print "internal date from 1: [$d]\n"; $syncinternaldates or $d = ""; - my $flags_f = join(" ", @{$from->flags($f_msg)}); + my $flags_f_tmp = undef; + my $flags_error_count = 0; + while (($flags_error_count < 10) && ! defined($flags_f_tmp)) { + $flags_f_tmp = $from->flags($f_msg); + $flags_error_count += 1; + } + if (! defined($flags_f_tmp)) { + die "Could not import $f_msg\n"; + } + my $flags_f = join(" ", @{$flags_f_tmp}); # RFC 2060 : This flag can not be altered by the client $flags_f =~ s@\\Recent@@g; my $new_id; print "flags from : [$flags_f][$d]\n"; + while (! $to->IsConnected()) { + print "NOT CONNECTED -> reconnecting\n"; + $to->connect(); + } unless($new_id = $to->append_string($t_fold,$string, $flags_f, $d)){ warn "Couldn't append msg #$f_msg (Subject:[".$from->subject($f_msg)."]) to folder $t_fold: ", $to->LastError, "\n"; @@ -726,6 +765,7 @@ $debug and print "Message id [$m_id] found in t:$t_fold\n"; $mess_size_total_skipped += $f_size; $mess_skipped += 1; + print "#"; } #$debug and print "MESSAGE $m_id\n";