]> bicyclesonthemoon.info Git - ott/bsta/blobdiff - update.1.pl
Generate static viewer pages
[ott/bsta] / update.1.pl
index 09ee4e4081590f252aead717711f8c2f44bdea58..fb6766cb5985047f79f8dab4b8235ad257d60594 100644 (file)
@@ -26,17 +26,22 @@ use Encode ('encode', 'decode');
 
 ###PERL_LIB: use lib /botm/lib/bsta
 use botm_common (
-       'read_data_file'
+       'read_data_file',
+       'join_path'
 );
 use bsta_lib (
        'STATE',
        'ong',
-       'write_index'
+       'write_index', 'write_static_viewer_page'
 );
 
+###PERL_PATH_SEPARATOR:     PATH_SEPARATOR     = /
+
+###PERL_DATA_PATH:          DATA_PATH          = /botm/data/bsta/
 ###PERL_DATA_DEFAULT_PATH:  DATA_DEFAULT_PATH  = /botm/data/bsta/default
 ###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
 ###PERL_DATA_STATE_PATH:    DATA_STATE_PATH    = /botm/data/bsta/state
+###PERL_DATA_WORDS_PATH:    DATA_WORDS_PATH    = /botm/data/bsta/words/
 
 binmode STDIN,  ':encoding(UTF-8)';
 binmode STDOUT, ':encoding(UTF-8)';
@@ -49,6 +54,8 @@ srand ($time-$$);
 my %settings  = read_data_file(DATA_SETTINGS_PATH());
 my %default   = read_data_file(DATA_DEFAULT_PATH());
 my %state     = read_data_file(DATA_STATE_PATH());
+my %all_frame_data = ();
+my %all_words_data = ();
 
 my $ong_state  = int($state{'state'});
 my $last_frame = ($ong_state > STATE->{'inactive'}) ? 
@@ -98,21 +105,119 @@ foreach my $id (@list) {
                1,     # print
                \%settings,
                \%default,
-               '',    # %frame_data
+               get_frame_data($id),
                ''    # %goto_list
        );
        unless ($r) {
                $fail += 1;
                print "ONG FAIL!\n";
        }
-       if (($id == 0) && ($ong_state > STATE->{'inactive'})) {
-               write_index(
+       make_static_pages($id);
+}
+print "\n";
+
+
+sub get_frame_data {
+       (my $id) = @_;
+       
+       unless ($id =~ /^[0-9]+$/) {
+               return '';
+       }
+       my $f = int($id);
+       
+       unless (($f >= 0) && ($f <= $last_frame)) {
+               return '';
+       }
+       
+       my $r = $all_frame_data{$f};
+       if (ref ($r)) {
+               return $r;
+       }
+       
+       my %frame_data = read_data_file(
+               join_path(PATH_SEPARATOR(), DATA_PATH(), $f)
+       );
+       $all_frame_data{$f} = \%frame_data;
+       return \%frame_data;
+}
+
+sub get_words_data {
+       (my $id) = @_;
+       
+       unless ($id =~ /^[0-9]+$/) {
+               return '';
+       }
+       my $f = int($id);
+       
+       unless (($f >= 0) && ($f <= $last_frame)) {
+               return '';
+       }
+       
+       my $r = $all_words_data{$f};
+       if (ref ($r)) {
+               return $r;
+       }
+       
+       my %frame_data = read_data_file(
+               join_path(PATH_SEPARATOR(), DATA_WORDS_PATH(), $f),
+               '', # encoding,
+               0,  # no header
+               1,  # header only
+               1,  # as list; not relevant
+       );
+       $all_words_data{$f} = \%frame_data;
+       return \%frame_data;
+}
+
+sub make_static_page {
+       (my $id) = @_;
+       unless ($id =~ /^[0-9]+$/) {
+               return;
+       }
+       my $f = int($id);
+       unless (($f >= 0) && ($f <= $last_frame)) {
+               return;
+       }
+       my $r;
+       
+       if (($f == 0) && ($ong_state > STATE->{'inactive'})) {
+               print 'index';
+               $r = write_index(
+                       \%state,
+                       \%settings,
+               );
+               print (($r) ? " OK\n" : " FAIL\n");
+       }
+       elsif ($f > 0) {
+               print 'static page '.$f;
+               $r = write_static_viewer_page (
+                       $f,
                        \%state,
                        \%settings,
+                       \%default,
+                       get_frame_data($f),
+                       get_frame_data($f-1),
+                       get_frame_data($f+1),
+                       get_words_data($f)
                );
+               print (($r) ? " OK\n" : " FAIL\n");
        }
-               
 }
-print "\n";
+
+sub make_static_pages {
+       (my $id) = @_;
+       unless ($id =~ /^[0-9]+$/) {
+               return;
+       }
+       my $f = int($id);
+       unless (($f >= 0) && ($f <= $last_frame)) {
+               return '';
+       }
+       
+       make_static_page($f);
+       make_static_page($f-1);
+       make_static_page($f+1);
+       make_static_page($f);
+}
 
 exit $fail;