The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package # hide from PAUSE
    MyBlog::Controller::Html;

use strict;
use warnings;
use base 'Catalyst::Controller';

use Atompub::DateTime qw(datetime);
use Atompub::MediaType qw(media_type);
use Atompub::Util qw(is_acceptable_media_type);
use String::CamelCase qw(camelize);

my $ENTRIES_PER_PAGE = 10;
my $ENTRY_TABLE_NAME = 'entries';
my $MEDIA_TABLE_NAME = 'medias';

my $ENTRY_MODEL = join '::', 'DBIC', camelize($ENTRY_TABLE_NAME);
my $MEDIA_MODEL = join '::', 'DBIC', camelize($MEDIA_TABLE_NAME);

sub index : Private {
    my($self, $c) = @_;

    my @colls;

    my $page = $c->req->param('page') || 1;

    my $attr = {
	offset   => ($page - 1) * $ENTRIES_PER_PAGE,
	rows     => $ENTRIES_PER_PAGE,
	order_by => 'edited desc',
    };

    my $rs = $c->model($ENTRY_MODEL)->search({}, $attr);

    my @entries;
    while (my $resource = $rs->next) {
	my $entry = XML::Atom::Entry->new(\$resource->body);

	my $uri     = $entry->edit_link;
	my $title   = qq{<a href="$uri">}.$entry->title.'</a>';
	my $content = $entry->content ? $entry->content->body : '';

	push @entries, {
            updated => datetime($entry->updated)->str,
            title   => $title,
            content => $content,
        };
    }

    push @colls, { title => 'Diary', entries => \@entries };

    $rs = $c->model($MEDIA_MODEL)->search({}, $attr);

    my @media_link_entries;
    while (my $resource = $rs->next) {
	my $entry = XML::Atom::Entry->new(\$resource->entry_body);

	my $uri     = $entry->content ? $entry->content->src : next;
	my $title   = qq{<a href="$uri">}.$entry->title.'</a>';
	my $content = qq{<a href="$uri"><img src="$uri"/></a>};

	push @media_link_entries, {
            updated => datetime($entry->updated)->str,
            title   => $title,
            content => $content,
        };
    }

    push @colls, { title => 'Photo', entries => \@media_link_entries };

    $c->stash->{collections} = \@colls;
}

1;