user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [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).