about summary refs log tree commit homepage
path: root/lib/PublicInbox/DirIdle.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-07-19 08:59:35 +0000
committerEric Wong <e@80x24.org>2021-07-22 02:29:00 +0000
commit5b4fde37adefa37508d131dbe013353ef3345051 (patch)
treebfd68b4f1fedf94464776a5760a4dc531f1d097e /lib/PublicInbox/DirIdle.pm
parent7e1c18af5468c7708e28de759911ec5542d23c4b (diff)
downloadpublic-inbox-5b4fde37adefa37508d131dbe013353ef3345051.tar.gz
This allows lei to automatically note keyword (message flag)
changes made to a Maildir and propagate it into lei/store:

	lei add-watch --state=tag-ro /path/to/Maildir

This doesn't persist across restarts, yet.  In the future,
it will be applied automatically to "lei q" output Maildirs
by default (with an option to disable it).

State values of tag-rw, index-<ro|rw>, import-<ro|rw> will all
be supported for Maildir.

This represents a fairly major internal change that's fairly
intrusive, but the whole daemon-oriented design was to
facilitate being able to automatically monitor (and propagate)
Maildir/IMAP flag changes.
Diffstat (limited to 'lib/PublicInbox/DirIdle.pm')
-rw-r--r--lib/PublicInbox/DirIdle.pm17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/PublicInbox/DirIdle.pm b/lib/PublicInbox/DirIdle.pm
index 5142d005..7031e5fd 100644
--- a/lib/PublicInbox/DirIdle.pm
+++ b/lib/PublicInbox/DirIdle.pm
@@ -53,6 +53,23 @@ sub new {
         $self;
 }
 
+sub add_watches {
+        my ($self, $dirs, $gone) = @_;
+        my $fl = $MAIL_IN | ($gone ? $MAIL_GONE : 0);
+        for my $d (@$dirs) {
+                $self->{inot}->watch($d, $fl);
+        }
+        PublicInbox::FakeInotify::poll_once($self) if !$ino_cls;
+}
+
+sub rm_watches {
+        my ($self, $dir) = @_;
+        my $inot = $self->{inot};
+        if (my $cb = $inot->can('rm_watches')) { # TODO for fake watchers
+                $cb->($inot, $dir);
+        }
+}
+
 sub event_step {
         my ($self) = @_;
         my $cb = $self->{cb};