* [PATCH 1/3] view: split out reply logic into its own module
2017-06-14 0:10 7% [PATCH 0/3] support per-inbox "replyto" parameter Eric Wong
@ 2017-06-14 0:10 6% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2017-06-14 0:10 UTC (permalink / raw)
To: meta
We'll be adding more reply options for centralized mailing
lists. So split out the logic so it's easy-to-find.
Organizing code is hard :<
---
MANIFEST | 1 +
lib/PublicInbox/Reply.pm | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
lib/PublicInbox/View.pm | 47 ++---------------------------------------
t/view.t | 2 +-
4 files changed, 58 insertions(+), 46 deletions(-)
create mode 100644 lib/PublicInbox/Reply.pm
diff --git a/MANIFEST b/MANIFEST
index 3bfd9a4..0475cdd 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -76,6 +76,7 @@ lib/PublicInbox/NewsWWW.pm
lib/PublicInbox/ParentPipe.pm
lib/PublicInbox/ProcessPipe.pm
lib/PublicInbox/Qspawn.pm
+lib/PublicInbox/Reply.pm
lib/PublicInbox/SaPlugin/ListMirror.pm
lib/PublicInbox/Search.pm
lib/PublicInbox/SearchIdx.pm
diff --git a/lib/PublicInbox/Reply.pm b/lib/PublicInbox/Reply.pm
new file mode 100644
index 0000000..73a4df1
--- /dev/null
+++ b/lib/PublicInbox/Reply.pm
@@ -0,0 +1,54 @@
+# Copyright (C) 2014-2017 all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+package PublicInbox::Reply;
+use strict;
+use warnings;
+use URI::Escape qw/uri_escape_utf8/;
+use PublicInbox::Hval qw/ascii_html/;
+use PublicInbox::Address;
+use PublicInbox::MID qw/mid_clean mid_escape/;
+
+sub squote_maybe ($) {
+ my ($val) = @_;
+ if ($val =~ m{([^\w@\./,\%\+\-])}) {
+ $val =~ s/(['!])/'\\$1'/g; # '!' for csh
+ return "'$val'";
+ }
+ $val;
+}
+
+sub mailto_arg_link {
+ my ($hdr) = @_;
+ my %cc; # everyone else
+ my $to; # this is the From address
+
+ foreach my $h (qw(From To Cc)) {
+ my $v = $hdr->header($h);
+ defined($v) && ($v ne '') or next;
+ my @addrs = PublicInbox::Address::emails($v);
+ foreach my $address (@addrs) {
+ my $dst = lc($address);
+ $cc{$dst} ||= $address;
+ $to ||= $dst;
+ }
+ }
+ my @arg;
+
+ my $subj = $hdr->header('Subject') || '';
+ $subj = "Re: $subj" unless $subj =~ /\bRe:/i;
+ my $mid = $hdr->header_raw('Message-ID');
+ push @arg, '--in-reply-to='.squote_maybe(mid_clean($mid));
+ my $irt = mid_escape($mid);
+ delete $cc{$to};
+ push @arg, "--to=$to";
+ $to = uri_escape_utf8($to);
+ $subj = uri_escape_utf8($subj);
+ my @cc = sort values %cc;
+ push(@arg, map { "--cc=$_" } @cc);
+ my $cc = uri_escape_utf8(join(',', @cc));
+ my $href = "mailto:$to?In-Reply-To=$irt&Cc=${cc}&Subject=$subj";
+
+ (\@arg, ascii_html($href));
+}
+
+1;
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 9ef4712..0d85581 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -6,7 +6,6 @@
package PublicInbox::View;
use strict;
use warnings;
-use URI::Escape qw/uri_escape_utf8/;
use Date::Parse qw/str2time/;
use PublicInbox::Hval qw/ascii_html/;
use PublicInbox::Linkify;
@@ -14,6 +13,7 @@ use PublicInbox::MID qw/mid_clean id_compress mid_mime mid_escape/;
use PublicInbox::MsgIter;
use PublicInbox::Address;
use PublicInbox::WwwStream;
+use PublicInbox::Reply;
require POSIX;
use constant INDENT => ' ';
@@ -57,7 +57,7 @@ sub msg_reply {
$info = qq(\n List information: <a\nhref="$url">$url</a>\n);
}
- my ($arg, $link) = mailto_arg_link($hdr);
+ my ($arg, $link) = PublicInbox::Reply::mailto_arg_link($hdr);
push @$arg, '/path/to/YOUR_REPLY';
$arg = ascii_html(join(" \\\n ", '', @$arg));
<<EOF
@@ -618,49 +618,6 @@ sub _parent_headers {
$rv;
}
-sub squote_maybe ($) {
- my ($val) = @_;
- if ($val =~ m{([^\w@\./,\%\+\-])}) {
- $val =~ s/(['!])/'\\$1'/g; # '!' for csh
- return "'$val'";
- }
- $val;
-}
-
-sub mailto_arg_link {
- my ($hdr) = @_;
- my %cc; # everyone else
- my $to; # this is the From address
-
- foreach my $h (qw(From To Cc)) {
- my $v = $hdr->header($h);
- defined($v) && ($v ne '') or next;
- my @addrs = PublicInbox::Address::emails($v);
- foreach my $address (@addrs) {
- my $dst = lc($address);
- $cc{$dst} ||= $address;
- $to ||= $dst;
- }
- }
- my @arg;
-
- my $subj = $hdr->header('Subject') || '';
- $subj = "Re: $subj" unless $subj =~ /\bRe:/i;
- my $mid = $hdr->header_raw('Message-ID');
- push @arg, '--in-reply-to='.squote_maybe(mid_clean($mid));
- my $irt = mid_escape($mid);
- delete $cc{$to};
- push @arg, "--to=$to";
- $to = uri_escape_utf8($to);
- $subj = uri_escape_utf8($subj);
- my @cc = sort values %cc;
- push(@arg, map { "--cc=$_" } @cc);
- my $cc = uri_escape_utf8(join(',', @cc));
- my $href = "mailto:$to?In-Reply-To=$irt&Cc=${cc}&Subject=$subj";
-
- (\@arg, ascii_html($href));
-}
-
sub html_footer {
my ($hdr, $standalone, $ctx, $rhref) = @_;
diff --git a/t/view.t b/t/view.t
index 2181b5e..abd0001 100644
--- a/t/view.t
+++ b/t/view.t
@@ -15,7 +15,7 @@ my @q = (
while (@q) {
my $input = shift @q;
my $expect = shift @q;
- my $res = PublicInbox::View::squote_maybe($input);
+ my $res = PublicInbox::Reply::squote_maybe($input);
is($res, $expect, "quote $input => $res");
}
--
EW
^ permalink raw reply related [relevance 6%]
* [PATCH 0/3] support per-inbox "replyto" parameter
@ 2017-06-14 0:10 7% Eric Wong
2017-06-14 0:10 6% ` [PATCH 1/3] view: split out reply logic into its own module Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2017-06-14 0:10 UTC (permalink / raw)
To: meta
These changes should facilitate hosting mirrors of (unfortunately)
centralized mailing lists. More changes, such as email address
obfuscation may be necessary to support misguided people who believe
in address obfuscation.
Eric Wong (3):
view: split out reply logic into its own module
replyto parameter support
reply: support Reply-To
MANIFEST | 2 ++
lib/PublicInbox/Config.pm | 2 +-
lib/PublicInbox/Reply.pm | 84 +++++++++++++++++++++++++++++++++++++++++++++++
lib/PublicInbox/View.pm | 50 +++-------------------------
t/reply.t | 67 +++++++++++++++++++++++++++++++++++++
t/view.t | 12 -------
6 files changed, 158 insertions(+), 59 deletions(-)
^ permalink raw reply [relevance 7%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2017-06-14 0:10 7% [PATCH 0/3] support per-inbox "replyto" parameter Eric Wong
2017-06-14 0:10 6% ` [PATCH 1/3] view: split out reply logic into its own module Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).