X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;ds=sidebyside;f=pctb%2Fdatabase-info-fetch;h=2e195c7a01b2d06471b540a3201721a39701aad2;hb=b958771fa67513ba09630953ec91b9d21b3f42f9;hp=3b8db77c4209b05f9537b34f29e744a354d1b855;hpb=a1ba082dc5187f5818466ff9767a16edcd99b74c;p=ypp-sc-tools.web-live.git diff --git a/pctb/database-info-fetch b/pctb/database-info-fetch index 3b8db77..2e195c7 100755 --- a/pctb/database-info-fetch +++ b/pctb/database-info-fetch @@ -27,14 +27,17 @@ use strict (qw(vars)); use LWP::UserAgent; use JSON; -use Data::Dumper; +#use Data::Dumper; +use IO::File; -@ARGV==1 or die "You probably don't want to run this program directly.\n"; +use Commods; + +@ARGV>=1 or die "You probably don't want to run this program directly.\n"; our ($which) = shift @ARGV; $which =~ s/\W//g; -our ($pctb) = $ENV{'YPPSC_PCTB_PCTB'}; die unless $pctb; +our ($pctb) = $ENV{'YPPSC_PCTB_PCTB'}; our ($ua)= LWP::UserAgent->new; our $jsonresp; @@ -79,8 +82,9 @@ sub json_convert_shim ($) { } } -sub get_arches_islands () { - my $ocean= $ENV{'YPPSC_OCEAN'}; die unless $ocean; +sub get_arches_islands_pctb ($) { + my ($ocean)= @_; + die unless $pctb; my $url= "$pctb/islands.php?oceanName=".uc $ocean; my $resp= $ua->get($url); die $resp->status_line unless $resp->is_success; @@ -88,30 +92,98 @@ sub get_arches_islands () { my $jobj= json_convert_shim($resp->content); my $arches= [ jparsetable($jobj, 'arches') ]; my $islands= [ jparsetable($jobj, 'islands') ]; - return ($arches,$islands); -} -sub main__island () { - my ($arches, $islands) = get_arches_islands(); -# print Dumper(\@arches, \@islands); my $islands_done=0; - foreach my $arch (sort_by_name(@$arches)) { -# print Dumper($arch); + foreach my $arch (@$arches) { +# print Dumper($arnch); my $aname= $arch->{'name'}; die "$jsonresp ?" unless defined $aname; - ptcl($aname); p(' '); ptcl($aname); p(" {\n"); - foreach my $island (sort_by_name(@$islands)) { + + foreach my $island (@$islands) { my $iname= $island->{'name'}; die "$jsonresp $aname ?" unless defined $iname; next unless $arch->{'id'} == $island->{'arch'}; - p(' '); ptcl($iname); p(' '); ptcl($iname); p("\n"); + + $oceans{$ocean}{$aname}{$iname} .= 'b'; + $islands_done++; } - p("}\n"); } die "$jsonresp $islands_done ?" unless $islands_done == @$islands; } +sub get_ocean () { + my $ocean= $ENV{'YPPSC_OCEAN'}; die unless $ocean; + return ucfirst lc $ocean; +} + +sub for_islands ($$$$) { + my ($ocean,$forarch,$forisle,$endarch) = @_; + + my $arches= $oceans{$ocean}; + foreach my $aname (sort keys %$arches) { + &$forarch($ocean,$aname); + my $islands= $arches->{$aname}; + foreach my $iname (sort keys %$islands) { + &$forisle($ocean,$aname,$iname); + } + &$endarch(); + } +} + +sub for_commods ($) { + my ($forcommod) = @_; + foreach my $commod (sort keys %commods) { &$forcommod($commod); } +} + +sub compare_sources_one ($$) { + my ($srcs,$what) = @_; + return if $srcs =~ m,^sl?(?:\%sl?)*b$,; + print "srcs=$srcs $what\n"; +} + +sub main__comparesources () { + my $ocean= get_ocean(); + + parse_masters(); + get_arches_islands_pctb($ocean); + parse_pctb_commodmap() or die; + + for_islands($ocean, + sub { }, + sub { + my ($ocean,$a,$i)= @_; + my $srcs= $oceans{$ocean}{$a}{$i}; + compare_sources_one($srcs, "island $ocean / $a / $i"); + }, + sub { }); + for_commods(sub { + my ($commod)= @_; + my $srcs= $commods{$commod}; + compare_sources_one($srcs, "commodity $commod"); + }); +} + +sub main__island () { + my $ocean= get_ocean(); + + parse_masters(); + get_arches_islands_pctb($ocean); + + for_islands($ocean, + sub { + my ($ocean,$aname)= @_; + ptcl($aname); p(' '); ptcl($aname); p(" {\n"); + }, + sub { + my ($ocean,$aname,$iname)= @_; + p(' '); ptcl($iname); p(' '); ptcl($iname); p("\n"); + }, + sub { + p("}\n"); + }); +} + sub main__sunshinewidget () { print <