user/dev discussion of public-inbox itself
 help / Atom feed
* [PATCH 0/2] -watch: support configurable subject filters
@ 2017-01-26  3:40 Eric Wong
  2017-01-26  3:40 ` [PATCH 1/2] watchmaildir: allow arguments for " Eric Wong
  2017-01-26  3:40 ` [PATCH 2/2] add filter for Subject: tags Eric Wong
  0 siblings, 2 replies; 3+ messages in thread
From: Eric Wong @ 2017-01-26  3:40 UTC (permalink / raw)
  To: meta

Unfortunately, some mailing list administrators insist on tagging
Subject: lines with the list name instead of teaching users to
look for list-specific headers and build better user interfaces
for managing their own mail.

So, public-inbox now provide an interface to strip those tags
from Subject lines to reduce clutter when mirroring those
archives.

Eric Wong (2):
      watchmaildir: allow arguments for filters
      add filter for Subject: tags

 MANIFEST                             |  2 ++
 lib/PublicInbox/Filter/SubjectTag.pm | 33 +++++++++++++++++++++++++++++++++
 lib/PublicInbox/WatchMaildir.pm      |  8 +++++++-
 t/filter_subjecttag.t                | 27 +++++++++++++++++++++++++++
 4 files changed, 69 insertions(+), 1 deletion(-)


^ permalink raw reply	[flat|threaded] 3+ messages in thread

* [PATCH 1/2] watchmaildir: allow arguments for filters
  2017-01-26  3:40 [PATCH 0/2] -watch: support configurable subject filters Eric Wong
@ 2017-01-26  3:40 ` " Eric Wong
  2017-01-26  3:40 ` [PATCH 2/2] add filter for Subject: tags Eric Wong
  1 sibling, 0 replies; 3+ messages in thread
From: Eric Wong @ 2017-01-26  3:40 UTC (permalink / raw)
  To: meta

We'll want to allow some degree of configuration for
various mailing lists.
---
 lib/PublicInbox/WatchMaildir.pm | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/PublicInbox/WatchMaildir.pm b/lib/PublicInbox/WatchMaildir.pm
index 0b284bd..1823c24 100644
--- a/lib/PublicInbox/WatchMaildir.pm
+++ b/lib/PublicInbox/WatchMaildir.pm
@@ -238,11 +238,17 @@ sub _scrubber_for {
 	my ($inbox) = @_;
 	my $f = $inbox->{filter};
 	if ($f && $f =~ /::/) {
+		my @args;
+		# basic line splitting, only
+		# Perhaps we can have proper quote splitting one day...
+		($f, @args) = split(/\s+/, $f) if $f =~ /\s+/;
+
 		eval "require $f";
 		if ($@) {
 			warn $@;
 		} else {
-			return $f->new;
+			# e.g: PublicInbox::Filter::Vger->new(@args)
+			return $f->new(@args);
 		}
 	}
 	undef;
-- 
EW


^ permalink raw reply	[flat|threaded] 3+ messages in thread

* [PATCH 2/2] add filter for Subject: tags
  2017-01-26  3:40 [PATCH 0/2] -watch: support configurable subject filters Eric Wong
  2017-01-26  3:40 ` [PATCH 1/2] watchmaildir: allow arguments for " Eric Wong
@ 2017-01-26  3:40 ` Eric Wong
  1 sibling, 0 replies; 3+ messages in thread
From: Eric Wong @ 2017-01-26  3:40 UTC (permalink / raw)
  To: meta

Some mailing lists add annoying tags into the Subject line which
discourages readers from doing proper mail organization on the
client side.  They also waste precious screen space and
attention span.

Remove them from our archives to reduce clutter.
---
 MANIFEST                             |  2 ++
 lib/PublicInbox/Filter/SubjectTag.pm | 33 +++++++++++++++++++++++++++++++++
 t/filter_subjecttag.t                | 27 +++++++++++++++++++++++++++
 3 files changed, 62 insertions(+)
 create mode 100644 lib/PublicInbox/Filter/SubjectTag.pm
 create mode 100644 t/filter_subjecttag.t

diff --git a/MANIFEST b/MANIFEST
index 76fd1da..f16843a 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -51,6 +51,7 @@ lib/PublicInbox/ExtMsg.pm
 lib/PublicInbox/Feed.pm
 lib/PublicInbox/Filter/Base.pm
 lib/PublicInbox/Filter/Mirror.pm
+lib/PublicInbox/Filter/SubjectTag.pm
 lib/PublicInbox/Filter/Vger.pm
 lib/PublicInbox/GetlineBody.pm
 lib/PublicInbox/Git.pm
@@ -127,6 +128,7 @@ t/fail-bin/spamc
 t/feed.t
 t/filter_base.t
 t/filter_mirror.t
+t/filter_subjecttag.t
 t/filter_vger.t
 t/git-http-backend.psgi
 t/git-http-backend.t
diff --git a/lib/PublicInbox/Filter/SubjectTag.pm b/lib/PublicInbox/Filter/SubjectTag.pm
new file mode 100644
index 0000000..1d28142
--- /dev/null
+++ b/lib/PublicInbox/Filter/SubjectTag.pm
@@ -0,0 +1,33 @@
+# Copyright (C) 2017 all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+
+# Filter for various [tags] in subjects
+package PublicInbox::Filter::SubjectTag;
+use strict;
+use warnings;
+use base qw(PublicInbox::Filter::Base);
+
+sub new {
+	my ($class, %opts) = @_;
+	my $tag = delete $opts{-tag};
+	die "tag not defined!\n" unless defined $tag && $tag ne '';
+	my $self = $class->SUPER::new(%opts);
+	$self->{tag_re} = qr/\A\s*(re:\s+|)\Q$tag\E\s*/i;
+	$self;
+}
+
+sub scrub {
+	my ($self, $mime) = @_;
+	my $subj = $mime->header('Subject');
+	$subj =~ s/$self->{tag_re}/$1/; # $1 is "Re: "
+	$mime->header_str_set('Subject', $subj);
+	$self->ACCEPT($mime);
+}
+
+# no suffix/article rejection for mirrors
+sub delivery {
+	my ($self, $mime) = @_;
+	$self->scrub($mime);
+}
+
+1;
diff --git a/t/filter_subjecttag.t b/t/filter_subjecttag.t
new file mode 100644
index 0000000..54a219e
--- /dev/null
+++ b/t/filter_subjecttag.t
@@ -0,0 +1,27 @@
+# Copyright (C) 2017 all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+use strict;
+use warnings;
+use Test::More;
+use Email::MIME;
+use_ok 'PublicInbox::Filter::SubjectTag';
+
+my $f = eval { PublicInbox::Filter::SubjectTag->new };
+like($@, qr/tag not defined/, 'error without args');
+$f = PublicInbox::Filter::SubjectTag->new('-tag', '[foo]');
+is(ref $f, 'PublicInbox::Filter::SubjectTag', 'new object created');
+
+my $mime = Email::MIME->new(<<EOF);
+To: you <you\@example.com>
+Subject: =?UTF-8?B?UmU6IFtmb29dIEVsw4PCqWFub3I=?=
+
+EOF
+
+$mime = $f->delivery($mime);
+is($mime->header('Subject'), "Re: El\xc3\xa9anor", 'filtered with Re:');
+
+$mime->header_str_set('Subject', '[FOO] bar');
+$mime = $f->delivery($mime);
+is($mime->header('Subject'), 'bar', 'filtered non-reply');
+
+done_testing();
-- 
EW


^ permalink raw reply	[flat|threaded] 3+ messages in thread

end of thread, back to index

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-26  3:40 [PATCH 0/2] -watch: support configurable subject filters Eric Wong
2017-01-26  3:40 ` [PATCH 1/2] watchmaildir: allow arguments for " Eric Wong
2017-01-26  3:40 ` [PATCH 2/2] add filter for Subject: tags Eric Wong

user/dev discussion of public-inbox itself

Archives are clonable:
	git clone --mirror https://public-inbox.org/meta
	git clone --mirror http://czquwvybam4bgbro.onion/meta
	git clone --mirror http://hjrcffqmbrq6wope.onion/meta
	git clone --mirror http://ou63pmih66umazou.onion/meta

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.mail.public-inbox.meta
	nntp://ou63pmih66umazou.onion/inbox.comp.mail.public-inbox.meta
	nntp://czquwvybam4bgbro.onion/inbox.comp.mail.public-inbox.meta
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.mail.public-inbox.meta
	nntp://news.gmane.org/gmane.mail.public-inbox.general

 note: .onion URLs require Tor: https://www.torproject.org/
       or Tor2web: https://www.tor2web.org/

AGPL code for this site: git clone https://public-inbox.org/ public-inbox