1 ###RUN_PERL: #!/usr/bin/perl
3 # ong.pl is generated from ong.1.pl.
7 # Copyright (C) 2016, 2017, 2023 Balthasar SzczepaĆski
9 # This program is free software: you can redistribute it and/or modify
10 # it under the terms of the GNU Affero General Public License as
11 # published by the Free Software Foundation, either version 3 of the
12 # License, or (at your option) any later version.
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU Affero General Public License for more details.
19 # You should have received a copy of the GNU Affero General Public License
20 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 ###PERL_LIB: use lib /botm/lib/bsta
25 use bsta_lib qw(entityencode readdatafile writedatafile urlencode);
28 ###PERL_DATA_PATH: DATA_PATH = /botm/data/bsta
29 ###PERL_DATA_DEFAULT_PATH: DATA_DEFAULT_PATH = /botm/data/bsta/default
30 ###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
31 ###PERL_DATA_STATE_PATH: DATA_STATE_PATH = /botm/data/bsta/state
32 ###PERL_WWW_PATH: WWW_PATH = /botm/www/1190/bsta/
33 ###PERL_DATA_LIST_PATH: DATA_LIST_PATH = /botm/data/bsta/list
55 $ongtime = int($time / 3600) * 3600;
57 print $time.' - '.$ongtime."\n";
59 delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
60 ###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;
63 if (open ($statefile,"+<",DATA_STATE_PATH)){
64 if (flock($statefile,2)) {
65 %state=readdatafile($statefile);
66 $ongstate=int($state{'state'});
67 print 'state: '.$ongstate."\n";
69 $nextong = int($state{'nextong'});
70 print 'ongtime: '.$nextong."\n";
72 if($ongtime >= $nextong) {
73 %settings=readdatafile(DATA_SETTINGS_PATH);
74 $static=int($settings{'ongtime'});
75 $dynamic=int($settings{'dynamicongtime'});
76 $last=int($settings{'last'});
77 $frame=int($state{'last'})+1;
79 if($dynamic > 0 && $frame < $last) {
80 $dynamic = int($dynamic/($last-$frame));
89 $nextong=$ongtime+($dynamic*3600);
90 $state{'nextong'}=$nextong;
91 print 'next ongtime: '.$nextong.' (+'.$dynamic.")\n";
92 $state{'ongtime'}=$dynamic;
95 print 'next frame: '.$frame."\n";
96 %framedata=readdatafile(DATA_PATH.$frame);
97 %default=readdatafile(DATA_DEFAULT_PATH);
98 %gotolist=readdatafile(DATA_LIST_PATH);
100 $framedata{'ongtime'}=$time;
101 $framedata{'timer'}=$dynamic;
102 $gotolist{'title-'.$frame}=$framedata{'title'};
103 $gotolist{'ongtime-'.$frame}=$framedata{'ongtime'};
104 writedatafile(DATA_PATH.$frame,%framedata);
105 writedatafile(DATA_LIST_PATH,%gotolist);
107 foreach my $ind (keys %default) {
108 unless(defined($framedata{$ind})){
109 $framedata{$ind}=$default{$ind};
111 unless(defined($nextframedata{$ind})){
112 $nextframedata{$ind}=$default{$ind};
116 $inpath = DATA_PATH.sprintf($settings{'frame'},$frame,$framedata{'ext'});
117 $outpath = WWW_PATH.sprintf($settings{'frame'},$frame,$framedata{'ext'});
119 print $inpath.' -> '.$outpath."\n";
121 # ALSO-ATTACHMENTS!!! (here)
123 if(copy ($inpath, $outpath)) {
124 $state{'last'}=$frame;
129 $state{'ongtime'}=$dynamic;
136 writedatafile($statefile,%state);
147 print "NO STATELOCK\n";
152 print "NO STATEFILE\n";