]> bicyclesonthemoon.info Git - ott/bsta/blobdiff - reset.1.pl
move merge_settings to common library
[ott/bsta] / reset.1.pl
index 7c8fada0db58c7e9cb05585818c76c47b3906c53..f57cf9c3681dcbb9f9048deda43415c994a218b7 100644 (file)
@@ -4,7 +4,7 @@
 #
 # Reset BSTA state
 #
-# Copyright (C) 2016 - 2018, 2023  Balthasar Szczepański
+# Copyright (C) 2016, 2017, 2018, 2023, 2024  Balthasar Szczepański
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as
@@ -26,11 +26,16 @@ use Encode ('encode', 'decode');
 
 ###PERL_LIB: use lib /botm/lib/bsta
 use botm_common (
-       'read_data_file', 'write_data_file',
+       'write_data_file',
+       'opendir_encoded', 'readdir_decoded', 'unlink_encoded',
+       'join_path',
+       'merge_settings'
 );
 use bsta_lib (
-       'STATE', 'INTF_STATE',
-       'write_index'
+       'STATE', 'INTF_STATE', 'CHAT_STATE',
+       'write_index',
+       'get_page_file', 'get_frame_file',
+       'read_settings', 'read_default', 'read_frame_data', 'read_attachment', 'read_state'
 );
 
 binmode STDIN,  ':encoding(UTF-8)';
@@ -38,10 +43,16 @@ binmode STDOUT, ':encoding(UTF-8)';
 binmode STDERR, ':encoding(UTF-8)';
 decode_argv();
 
+###PERL_PATH_SEPARATOR:     PATH_SEPARATOR     = /
+
 ###PERL_DATA_CHAT_PATH:     DATA_CHAT_PATH     = /botm/data/bsta/chat
-###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/state
+###PERL_DATA_DEFAULT_PATH:  DATA_DEFAULT_PATH  = /botm/data/bsta/default
+###PERL_DATA_LIST_PATH:     DATA_LIST_PATH     = /botm/data/bsta/list
 ###PERL_DATA_STATE_PATH:    DATA_STATE_PATH    = /botm/data/bsta/state
 ###PERL_DATA_STORY_PATH:    DATA_STORY_PATH    = /botm/data/bsta/story
+###PERL_DATA_WORDS_PATH:    DATA_WORDS_PATH    = /botm/data/bsta/words/
+
+###PERL_WWW_PATH:           WWW_PATH           = /botm/www/
 
 ###PERL_RESET_PASSWORD:     RESET_PASSWORD     = ''
 
@@ -49,11 +60,16 @@ my %story;
 my %state;
 my %chat;
 my %settings;
+my %goto_list;
+my %default;
+my $last_frame;
+my @remove_list;
 
 delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
 ###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
 
-%settings = read_data_file(DATA_SETTINGS_PATH());
+%settings = read_settings();
+%state    = read_state();
 unless (
        ($ARGV[0] ne '') && (
                ($ARGV[0] eq $settings{'password'}) ||
@@ -64,6 +80,31 @@ unless (
        exit 1;
 }
 
+$last_frame = (int($settings{'last'}) > int($state{'last'})) ? 
+       int($settings{'last'}) : int($state{'last'});
+%default = read_default();
+
+for (my $frame=0; $frame<=$last_frame; $frame+=1) {
+       my %frame_data = read_frame_data($frame, \%default);
+       unless ($frame == 0) {
+               push @remove_list, get_page_file($frame, \%frame_data, \%settings);
+       }
+       push @remove_list, get_frame_file($frame, \%frame_data, \%settings);
+}
+push @remove_list, 'goto.htm';
+for (my $i=0; ;$i+=1) {
+       my %file_data;
+       
+       %file_data = read_attachment($i);
+       if ($file_data{'frame'} eq '') {
+               last;
+       }
+       if ($file_data{'content'} ne '') {
+               next;
+       }
+       push @remove_list, $file_data{'filename'};
+}
+
 %state = (
        'state' => STATE->{'inactive'},
        'last'  => 0,
@@ -83,13 +124,16 @@ unless (
 );
 %chat = (
        'id'      => 0,
-       'state'   => 0, # TODO chat state enum?
+       'state'   => CHAT_STATE->{'disconnected'},
        'content' => ''
 );
+%goto_list = (
+);
 
-write_data_file(DATA_STATE_PATH(), '', '', \%state);
-write_data_file(DATA_STORY_PATH(), '', '', \%story);
-write_data_file(DATA_CHAT_PATH() , '', '', \%chat);
+write_data_file(DATA_STATE_PATH(), \%state);
+write_data_file(DATA_STORY_PATH(), \%story);
+write_data_file(DATA_CHAT_PATH() , \%chat);
+write_data_file(DATA_LIST_PATH() , \%goto_list);
 
 write_index(
        \%state,
@@ -98,3 +142,19 @@ write_index(
        $story{'state'},
        0 # pause
 );
+
+if (opendir_encoded(my $dir, DATA_WORDS_PATH())) {
+       while (defined (my $file_name = readdir_decoded($dir))) {
+               if ($file_name !~ /^[0-9]+$/) {
+                       next;
+               }
+               my $full_path = join_path(PATH_SEPARATOR(), DATA_WORDS_PATH(), $file_name);
+               # print "RM $full_path\n";
+               unlink_encoded ($full_path);
+       }
+}
+foreach my $file_name (@remove_list) {
+       my $full_path = join_path(PATH_SEPARATOR(), WWW_PATH(), $file_name);
+       # print "RM $full_path\n";
+       unlink_encoded ($full_path);
+}