Code cleaning bin/gruta-snapshot.
[gruta.git] / bin / gruta-snapshot
blobb632f797b83a6ae94ec9712f85d66364522f6a23
1 #!/usr/bin/perl
3 use strict;
4 use warnings;
6 my $VERSION = '0.2';
8 use locale;
9 use POSIX qw (locale_h);
10 setlocale(LC_ALL, 'es_ES.UTF-8');
12 use Gruta;
14 use Gruta::CGI;
15 use Gruta::Source::FS;
16 use Gruta::Renderer::Grutatxt;
17 use Gruta::Renderer::HTML;
18 use Gruta::Renderer::Text;
19 use Gruta::Template::Art5;
21 sub usage() {
22 print "Usage: $0 {src} {folder} {base url}\n";
23 exit 1;
26 sub out {
27 my $g = shift;
28 my $template = shift;
29 my $file = shift;
30 my $args = shift || {};
32 $args->{t} = $template;
33 $g->template->_art5->{xh} = $args;
35 $g->template->_art5->{abort} = 0;
36 $g->template->{search_count} = 0;
38 my $o = $g->template->process($template);
40 if ($g->template->_art5->{abort}) {
41 print ("NOT Creating $file\n");
43 else {
44 printf("Creating $file\n");
45 open F, '>' . $g->{_folder} . '/' . $file or die;
46 print F $o;
47 close F;
51 ############################################################
53 my $step = 35;
55 my $base = shift(@ARGV) or usage();
56 my $folder = shift(@ARGV) or usage();
57 my $url = shift(@ARGV) or usage();
59 $Gruta::VERSION_CODENAME .= " (+ gruta-snapshot $VERSION)";
61 my $g = Gruta->new(
62 id => '',
63 source => Gruta::Source::FS->new( path => "${base}/var"),
64 renderers => [
65 Gruta::Renderer::Grutatxt->new(),
66 Gruta::Renderer::HTML->new(),
67 Gruta::Renderer::HTML->new( valid_tags => undef ),
68 Gruta::Renderer::Text->new(),
70 template => Gruta::Template::Art5->new(lang => 'en'),
71 cgi => Gruta::CGI->new(
72 upload_dirs => [
73 "${base}/img",
74 "${base}/download"
77 args => {
78 base_url => $url,
79 static_urls => 2,
81 _folder => $folder
84 mkdir $folder, 0755;
85 mkdir $folder . '/tag/', 0755;
86 mkdir $folder . '/top/', 0755;
88 out($g, 'INDEX', 'index.html');
89 out($g, 'CSS', 'style.css');
90 out($g, 'RSS', 'rss.xml');
91 out($g, 'SITEMAP', 'sitemap.xml');
93 foreach my $t (sort $g->source->topics()) {
94 mkdir $folder . '/' . $t, 0755;
96 my @stories = $g->source->stories($t);
98 foreach my $s (sort @stories) {
99 out($g, 'STORY', "$t/$s.html", {
100 topic => $t,
101 id => $s
105 my $story = $g->source->story($t, $s);
107 my $d = $story->date('%y%m%d');
109 mkdir $folder . '/' . $d;
111 out($g, 'SEARCH_BY_DATE', "${d}/index.html", {
112 from => "${d}000000",
113 to => "${d}235959"
118 out($g, 'TOPIC', "$t/index.html", { 'topic' => $t, 'num' => $step });
120 my $max = scalar(@stories) - $step;
121 my $offset = $step;
123 while ($max > 0) {
124 out($g, 'TOPIC', "$t/~${offset}.html", {
125 topic => $t,
126 num => $step,
127 offset => $offset
130 $max -= $step;
131 $offset += $step;
135 out($g, 'TAGS', 'tag/index.html');
137 foreach my $t ($g->source->tags()) {
138 out($g, 'SEARCH_BY_TAG', "tag/$t->[0].html", { tag => $t->[0] });
141 out($g, 'TOP_TEN', 'top/index.html');