App-Fotagger

 view release on metacpan or  search on metacpan

lib/App/Fotagger/Stats.pm  view on Meta::CPAN

package App::Fotagger::Stats;

use strict;
use warnings;
use 5.010;

use Moose;
use Data::Dumper;

extends 'App::Fotagger';

has 'verbose' => ( isa => 'Bool', is => 'ro', default=>0);

no Moose;
__PACKAGE__->meta->make_immutable;


sub get_stats {
    my $self = shift;
    $self->get_images;
    my %tags;
    my %stars;

    foreach my $file (@{$self->images}) {
        my $image = App::Fotagger::Image->new({file=>$file});
        $image->read;
        my @tags = split(/, /,$image->tags); 
        if (@tags) {
            foreach my $tag (@tags) {
                push(@{$tags{$tag}},$image->file);
            }
        }
        else {
            push(@{$tags{'NO_TAG'}},$image->file);
        }
        
        push(@{$stars{$image->stars}},$image->file); 

    }
    
    return {
        tags=>\%tags,
        stars=>\%stars,
        count=>scalar @{$self->images},
    };
}

sub dump {
    my ($self, $stats) = @_;
    local $Data::Dumper::Sortkeys=1;
    say Dumper $stats;
}

sub report {
    my ($self, $stats) = @_;

    say "Processed ".$stats->{count}." images";
    
    my $format="  %".length($stats->{count})."d  ";
    for my $s (0..5) {
        next unless $stats->{stars}{$s};
        my $line = ("*" x $s ) .  (" " x (5-$s)). sprintf($format,scalar @{$stats->{stars}{$s}}) ;
        say $line;
    }

    foreach my $tag (sort { scalar @{$stats->{tags}{$b}} <=> scalar @{$stats->{tags}{$a}} } keys %{$stats->{tags}}) {
        say sprintf($format,scalar @{$stats->{tags}{$tag}}).$tag;
    }
}

q{ listening to:
    Dan le Sac vs Scroobius Pip - Angels
};



( run in 0.797 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )