#!/usr/bin/perl -l -w

=head2 SYNOPSIS

  sfnet --list-member ossmole

=cut

use strict;
use warnings;
use WWW::SourceForge::Project;
use WWW::SourceForge;
use Getopt::Auto;

*VERSION = *WWW::SourceForge::VERSION;

=head2 list_active - List top active projects

This will list top active projects.

=cut

sub list_active {
    my $sfn = WWW::SourceForge->new;
    my @top = $sfn->active_list(shift);
    for(@top) {
        my $sfp = WWW::SourceForge::Project->new($_->{unixname});
	sleep(1);
	my $members = $sfp->Member;
	my $nmembers = 0;
	for(values %$members) {$nmembers += scalar(@$_);}
	print "$_->{unixname} ($nmembers)";
    }
}

=head2 list_top - retrieve list of top projects

This will list current top projects listed on sf.net homepage,
alone with their number of members. It'll sleep(1)
for each projects to prevent to be banned by SF.net.

=cut

sub list_top {
    my $sfn = WWW::SourceForge->new;
    my @top10 = $sfn->most_active;
    for(@top10) {
        my $sfp = WWW::SourceForge::Project->new($_->{unixname});
	sleep(1);
	my $members = $sfp->Member;
	my $nmembers = 0;
	for(values %$members) {$nmembers += scalar(@$_);}
	print "$_->{unixname} ($nmembers)";
    }
}

=head2 list_member - retrieve member of a given project

Give a SF.net project unixname, this option gives you a list of it's
members. For example:

  sfnet --list-member ossmole

=cut

sub list_member {
    my $prjname = shift;
    my $sfp = WWW::SourceForge::Project->new($prjname);
    my $members = $sfp->Member;
    for(values %$members) {
        print "$_->{loginName}" for(@$_) ;
    }
}

=head2 list_mailinglists - retrieve info about the project's mailing lists

Given a SF.net project unixname, this option prints a listing of that
project's mailing lists.  For example:

  sfnet --list-mailinglists inkscape

=cut

sub list_mailinglists {
    my $prjname = shift or die "No project name specified\n";

    my $sfp = WWW::SourceForge::Project->new($prjname)
        or die "Could not create WWW::SourceForge::Project instance\n";

    my $lists = $sfp->MailingLists
        or die "Could not retrieve mailing lists\n";

    printf("%-24s  %8s %8s\n", "List", "Members", "Posts");
    foreach my $list (sort keys %$lists) {
        my $members = $lists->{$list}->{members} || '';
        my $posts = $lists->{$list}->{posts} || '';
        printf "%-24s  %8s %8s\n", $list, $members, $posts;
    }
}
