combine matches played by multiple members
[sc2-widget] / getsc2clan
index 86cb3b870a2fb588906044d2baecfc27286bd5e7..8c9fe9fd337a89793b7e65ac5631fb840d02bc26 100755 (executable)
@@ -67,12 +67,13 @@ my (@members, %memberidx);
 $memberidx{ $_->{id} } //= push(@members, $_) && $#members
        for map { $_->{characters}->@* } @ladders;
 
-my @games;
+my %game;
 for my $member (map { $_->{id} } @members) {
        my $usergames = blizget(legacy => @realmget => $member => 'matches');
        for ($usergames->{matches}->@*) {
-               $_->{player} = $memberidx{$member};
-               push @games, $_;
+               my $match = join ':', sort values %{$_};
+               $game{$match} //= $_;
+               push $game{$match}->{players}->@*, $memberidx{$member};
        }
 }
 
@@ -100,5 +101,5 @@ say JSON->new->canonical->pretty->encode({
                blizget(metadata => @realmget => $_->{id})
                # lacks mmr, fav race (available in new api)
        } @members],
-       matches  => [nsort_by { -$_->{date} } @games],
+       matches  => [nsort_by { -$_->{date} } values %game],
 }) =~ s/(?: \G \d,? | \[ ) \K \s+ (?=\d|\])/ /grx; # concat arrays of single digits