/aux/bin/daily-digest
#!/usr/bin/perl
use Blerg::Database;
use Mail::Message;
use POSIX qw/strftime/;
use strict;
use v5.10;

my $t1 = time;
my $t0 = $t1 - 86400;

sub send_email {
    my ($username) = @_;

    if (!Blerg::Database::exists($username)) {
        return;
    }

    my $email_conf_path = Blerg::Database::configuration->{data_path} . "/$username/email";
    if (!-f $email_conf_path) {
        return;
    }

    open CONF, $email_conf_path;
    my $email = <CONF>;
    close CONF;

    my $blerg = Blerg::Database->open_existing($username);
    my @items = $blerg->subscription_list;
    $blerg->close;

    if (!@items) {
        return;
    }

    my $feeditems;
    for my $i (@items) {
        use Data::Dumper;
        $blerg = Blerg::Database->open_existing($i->{author})
            or next;

        my $ts = $blerg->timestamp($i->{record});
        if ($ts >= $t0 && $ts < $t1) {
            my $data = $blerg->fetch($i->{record});
            next if !defined $data;
            my $date = strftime('%T %b %-d %Y (%Z)', localtime($ts));
            $feeditems .= "== $i->{author} at $date\n\n$data\n\n\n";
        }

        $blerg->close;
    }

    if (!defined $feeditems) {
        return;
    }

    Mail::Message->build(
        From => Mail::Address->new('BlergBot', 'noreply@blerg.cc'),
        To => Mail::Address->new($username, $email),
        Subject => 'Blërg Daily Digest',
        Mail::Message::Field->new('Content-Type', 'text/plain', 'charset="utf8"'),
        data => <<EMAIL
Hello, $username!  Here is your daily digest:

$feeditems
- Blërg
EMAIL
    )->send;
}

# TODO: Be smarter about this.  Maybe maintain a list of users with email addresses?
opendir USERS, Blerg::Database::configuration->{data_path};
while (my $user = readdir USERS) {
    next if $user =~ /^\./;
    send_email($user);
}