]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Inbox.pm
inboxidle: new class to detect inbox changes
[public-inbox.git] / lib / PublicInbox / Inbox.pm
index 38abdfe584752c0a5123816fcd899bfa2890b45e..b250bef33d3de8e890ed61223f2919dcda03cfe8 100644 (file)
@@ -326,18 +326,12 @@ sub msg_by_smsg ($$) {
        git($self)->cat_file($blob);
 }
 
-sub smsg_mime {
-       my ($self, $smsg) = @_;
-       if (my $s = msg_by_smsg($self, $smsg)) {
-               $smsg->{mime} = PublicInbox::Eml->new($s);
-               return $smsg;
-       }
-}
-
 sub smsg_eml {
        my ($self, $smsg) = @_;
        my $bref = msg_by_smsg($self, $smsg) or return;
-       PublicInbox::Eml->new($bref);
+       my $eml = PublicInbox::Eml->new($bref);
+       $smsg->populate($eml) unless exists($smsg->{num}); # v1 w/o SQLite
+       $eml;
 }
 
 sub mid2num($$) {
@@ -397,4 +391,24 @@ sub altid_map ($) {
        } // {};
 }
 
+# $obj must respond to ->on_inbox_unlock, which takes Inbox ($self) as an arg
+sub subscribe_unlock {
+       my ($self, $ident, $obj) = @_;
+       $self->{unlock_subs}->{$ident} = $obj;
+}
+
+sub unsubscribe_unlock {
+       my ($self, $ident) = @_;
+       delete $self->{unlock_subs}->{$ident};
+}
+
+# called by inotify
+sub on_unlock {
+       my ($self) = @_;
+       my $subs = $self->{unlock_subs} or return;
+       for (values %$subs) {
+               eval { $_->on_inbox_unlock($self) };
+       }
+}
+
 1;