user/dev discussion of public-inbox itself
 help / color / mirror / code / 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 filters 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|nested] 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 related	[flat|nested] 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 filters 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 related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-01-26  3:40 UTC | newest]

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 filters Eric Wong
2017-01-26  3:40 ` [PATCH 2/2] add filter for Subject: tags 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).