From 48b21cb662c1e17b7219612bff6ea14b98c85221 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 14 May 2016 06:10:36 +0000 Subject: declare Inbox object for reusability From the beginning, we've avoided objects here in favor of faster startup time; but it may not be worth it since a persistent httpd/nntpd is faster and -mda isn't hit as often. --- lib/PublicInbox/Inbox.pm | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 lib/PublicInbox/Inbox.pm (limited to 'lib/PublicInbox/Inbox.pm') diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm new file mode 100644 index 00000000..5d9fdb36 --- /dev/null +++ b/lib/PublicInbox/Inbox.pm @@ -0,0 +1,76 @@ +# Copyright (C) 2016 all contributors +# License: AGPL-3.0+ +# +# Represents a public-inbox (which may have multiple mailing addresses) +package PublicInbox::Inbox; +use strict; +use warnings; +use Scalar::Util qw(weaken); +use PublicInbox::Git; + +sub new { + my ($class, $opts) = @_; + bless $opts, $class; +} + +sub weaken_all { + my ($self) = @_; + weaken($self->{$_}) foreach qw(git mm search); +} + +sub git { + my ($self) = @_; + $self->{git} ||= eval { PublicInbox::Git->new($self->{mainrepo}) }; +} + +sub mm { + my ($self) = @_; + $self->{mm} ||= eval { PublicInbox::Msgmap->new($self->{mainrepo}) }; +} + +sub search { + my ($self) = @_; + $self->{search} ||= eval { PublicInbox::Search->new($self->{mainrepo}) }; +} + +sub try_cat { + my ($path) = @_; + my $rv = ''; + if (open(my $fh, '<', $path)) { + local $/; + $rv = <$fh>; + } + $rv; +} + +sub description { + my ($self) = @_; + my $desc = $self->{description}; + return $desc if defined $desc; + $desc = try_cat("$self->{mainrepo}/description"); + chomp $desc; + $desc =~ s/\s+/ /smg; + $desc = '($GIT_DIR/description missing)' if $desc eq ''; + $self->{description} = $desc; +} + +sub cloneurl { + my ($self) = @_; + my $url = $self->{cloneurl}; + return $url if $url; + $url = try_cat("$self->{mainrepo}/cloneurl"); + my @url = split(/\s+/s, $url); + chomp @url; + $self->{cloneurl} = \@url; +} + +sub footer_html { + my ($self) = @_; + my $footer = $self->{footer}; + return $footer if defined $footer; + $footer = try_cat("$self->{mainrepo}/public-inbox/footer.html"); + chomp $footer; + $self->{footer} = $footer; +} + +1; -- cgit v1.2.3-24-ge0c7