[Commits] [SCM] claws branch, master, updated. 3.13.2-147-gebf29bd
mones at claws-mail.org
mones at claws-mail.org
Tue Jun 7 13:01:32 CEST 2016
The branch, master has been updated
via ebf29bd896d8dc0998aa03e5b8b5e8c61e4e5dab (commit)
from 4bb9ba0e8331c149c5ac55ccd1f1cafe08342352 (commit)
Summary of changes:
tools/README | 6 +++
tools/cm-reparent.pl | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 144 insertions(+)
create mode 100755 tools/cm-reparent.pl
- Log -----------------------------------------------------------------
commit ebf29bd896d8dc0998aa03e5b8b5e8c61e4e5dab
Author: Ricardo Mones <ricardo at mones.org>
Date: Tue Jun 7 12:59:43 2016 +0200
Add new action script for fixing threads
Many thanks to H.Merijn Brand for contributing it!
diff --git a/tools/README b/tools/README
index 1d2bc57..f68ea6b 100644
--- a/tools/README
+++ b/tools/README
@@ -12,6 +12,7 @@ Action scripts:
uudec Decode and display uuencoded images
uuooffice Decode uuencoded attachments and open them with
OpenOffice
+ cm-reparent.pl Fix thread parenting for two or more messages
Addressbook conversion:
csv2addressbook.pl Import Becky, Thunderbird, Kmail, Gmail and Fox
@@ -89,6 +90,11 @@ Action scripts
COMMAND: uuooffice %f&
Decode uuencoded attachments and open them with OpenOffice
+* cm-reparent.pl
+ WORKS ON: selected messages (two or more)
+ COMMAND: cm-reparent.pl %F
+ Fix threading by setting old messages first on thread
+
* More action examples can be found at the Claws Mail FAQ
http://www.claws-mail.org/faq/index.php/Actions
diff --git a/tools/cm-reparent.pl b/tools/cm-reparent.pl
new file mode 100755
index 0000000..46e2cdb
--- /dev/null
+++ b/tools/cm-reparent.pl
@@ -0,0 +1,138 @@
+#!/usr/bin/perl
+
+use 5.14.1;
+use warnings;
+
+our $VERSION = "1.02 - 2016-06-07";
+
+sub usage {
+ my $err = shift and select STDERR;
+ say "usage: $0 file ...";
+ exit $err;
+ } # usage
+
+use Date::Parse;
+use Getopt::Long;
+GetOptions (
+ "help|?" => sub { usage (0); },
+ "V|version" => sub { say $0 =~ s{.*/}{}r, " [$VERSION]"; exit 0; },
+ ) or usage (1);
+
+my $p;
+my %f;
+foreach my $fn (@ARGV) {
+
+ open my $fh, "<", $fn or die "$fn: $!\n";
+ my ($hdr, $body) = split m/(?<=\n)(?=\r?\n)/ => do { local $/; <$fh> }, 2;
+ close $fh;
+
+ $hdr or next;
+
+ my ($mid) = $hdr =~ m{^Message-Id: (.*)}mi;
+ my ($dte) = $hdr =~ m{^Date: (.*)}mi;
+ my ($irt) = $hdr =~ m{^In-Reply-To: (.*)}mi;
+ my ($ref) = $hdr =~ m{^References: (.*)}mi;
+
+ my $stamp = str2time ($dte) or next;
+
+ $f{$fn} = {
+ msg_id => $mid,
+ refs => $ref,
+ irt => $irt,
+ date => $dte,
+ stamp => $stamp,
+
+ hdr => $hdr,
+ body => $body,
+ };
+
+ $p //= $fn;
+
+ $stamp < $f{$p}{stamp} and $p = $fn;
+ }
+
+# All but the oldest will refer to the oldest as parent
+
+$p or exit 0;
+my $pid = $f{$p}{msg_id};
+
+foreach my $fn (sort keys %f) {
+
+ $fn eq $p and next;
+
+ my $c = 0;
+
+ my $f = $f{$fn};
+ if ($f->{refs}) {
+ unless ($f->{refs} eq $pid) {
+ $c++;
+ $f->{hdr} =~ s{^(?=References:)}{References: $pid\nX-}mi;
+ }
+ }
+ else {
+ $c++;
+ $f->{hdr} =~ s{^(?=Message-Id:)}{References: $pid\n}mi;
+ }
+ if ($f->{irt}) {
+ unless ($f->{irt} eq $pid) {
+ $c++;
+ $f->{hdr} =~ s{^(?=In-Reply-To:)}{In-Reply-To: $pid\nX-}mi;
+ }
+ }
+ else {
+ $c++;
+ $f->{hdr} =~ s{^(?=Message-Id:)}{In-Reply-To: $pid\n}mi;
+ }
+
+ $c or next; # No changes required
+
+ say "$f->{msg_id} => $pid";
+
+ open my $fh, ">", $fn or die "$fn: $!\n";
+ print $fh $f->{hdr}, $f->{body};
+ close $fh or die "$fn: $!\n";
+ }
+
+__END__
+
+=head1 NAME
+
+cm-reparent.pl - fix mail threading
+
+=head1 SYNOPSIS
+
+ cm-reparent.pl ~/Mail/inbox/23 ~/Mail/inbox/45 ...
+
+=head1 DESCRIPTION
+
+This script should be called from withing Claws-Mail as an action
+
+Define an action as
+
+ Menu name: Reparent (fix threading)
+ Command: cm-reparent.pl %F
+
+Then select from the list-view all files that should be re-parented
+
+Then invoke the action
+
+All but the oldest of those mails will be modified (if needed) to
+reflect that the oldest mail is the parent of all other mails
+
+=head1 SEE ALSO
+
+L<Date::Parse>, L<Claws Mail|http://www.claws-mail.org>
+
+=head1 AUTHOR
+
+H.Merijn Brand <h.m.brand at xs4all.nl>
+
+=head1 COPYRIGHT AND LICENSE
+
+ Copyright (C) 2016-2016 H.Merijn Brand. All rights reserved.
+
+This library is free software; you can redistribute and/or modify it under
+the same terms as Perl itself.
+See the L<Artistic license|http://dev.perl.org/licenses/artistic.html>.
+
+=cut
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list