about summary refs log tree commit homepage
path: root/lib/PublicInbox/Inbox.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/Inbox.pm')
-rw-r--r--lib/PublicInbox/Inbox.pm76
1 files changed, 76 insertions, 0 deletions
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 <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+#
+# 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;