The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Jifty::Plugin::Gravatar::View;
use warnings;
use strict;
use Cache::File;
use LWP::Simple qw();
use Gravatar::URL;
use Jifty::View::Declare -base;

template '/gravatar' => sub {
    my ( $self, $email ) = @_;
    my $gravatar_url = gravatar_url( email => $email );
    my $gravatar_id = gravatar_id($email);

    div { { class is 'gravatar-image-wrapper' };
        # check config 
        my $config = Jifty->find_plugin('Jifty::Plugin::Gravatar');
        if( $config->{LocalCache} ) {
            Jifty->log->debug("[Gravatar] LocalCache: /=/gravatar/$gravatar_id" );
            img { { id is 'g-i-' . $gravatar_id, class is 'gravatar-image', src is '/=/gravatar/' . $gravatar_id }; };
        }
        else {
            Jifty->log->debug("[Gravatar] Gravatar.com: $gravatar_url" );
            div { { class is 'gravatar-image-wrapper' };
                img { { id is 'g-i-' . $gravatar_id, class is 'gravatar-image', src is $gravatar_url }; };
            };
        }
    };

};

template '/=/gravatar/image' => sub {
    my $config = Jifty->find_plugin('Jifty::Plugin::Gravatar');
    Jifty->handler->apache->content_type("image/jpeg");
    Jifty->handler->apache->header_out(
        Expires => HTTP::Date::time2str( time() + ( $config->{CacheExpire} * 60 || 3 ))
    );
    my $id = get('id');
    my $gravatar_url = gravatar_url( id => $id );

    my $cache_root = $config->{CacheRoot} || '/tmp/gravatar';

    my $cache = Cache::File->new( cache_root => $cache_root );
    my $image = $cache->get($id);
    unless ($image) {
        Jifty->log->debug('[Gravatar] Download Icon from: ' . $gravatar_url );
        my $image = LWP::Simple::get($gravatar_url);
        my $cache_expire = $config->{CacheFileExpire} || 3;
        $cache->set( $id , $image , $cache_expire . ' minutes' );
        Jifty->log->debug( '[Gravatar] Icon Cached: ' . $id  . " ($cache_expire minutes)" );
    }
    outs_raw( $image );
};

1;