#!/usr/bin/perl
## no critic (InputOutput::RequireBriefOpen)
#fetch Gravatars

use strict;
use warnings;

use LWP::Simple;
use Digest::MD5 qw(md5_hex);

my $size       = 90;
my $output_dir = './avatars';

die("no .git repository found in current path\n") unless -r './.git';

mkdir($output_dir) unless -d $output_dir;

open( my $GITLOG, '-|', q/git log --pretty=format:"%ae|%an" --reverse/ )
  or die("failed to read git-log: $!\n");

my %processed_authors;

while (<$GITLOG>) {
	chomp;
	my ( $email, $author ) = split( /\|/, $_ );

	next if $processed_authors{$author}++;

	my $author_image_file = $output_dir . '/' . $author . '.png';

	#skip images we have
	next if -e $author_image_file;

	#try and fetch image

	my $grav_url =
	    "https://www.gravatar.com/avatar/"
	  . md5_hex( lc $email )
	  . "?d=404&size="
	  . $size;

	warn "fetching image for '$author' $email ($grav_url)...\n";

	my $rc = getstore( $grav_url, $author_image_file );

	sleep(1);

	if ( $rc != 200 ) {
		unlink($author_image_file);
		next;
	}
}

close $GITLOG;
