#!/usr/bin/perl -w
#
# Skrypt sluzacy do rozpakowywania sciagnietych paczek i przesylania postow
# do inn'a. Prosze zwrocic uwage na sciezki do katalogow i programow (w
# szczegolnosc zmienna $DIR i $INNXMIT).
#
# wersja 0.99-pre5
#
# Opcje:
# -a  -  archive (przenosi paczki do katalogu 'old' zamiast kasowa je)
#
# bledy zglaszac na adres radecki@wpk.p.lodz.pl


use strict;
use File::Copy;		# powiniene to mie... jeli nie, zobacz na koniec.
use Getopt::Std;	# jeli nie masz tego moduu, wyhaszuj linie 
			# zawierajce `getopt' lub `$args{a}'.

#sprawd czy innxmit jest na swoim miejscu:
my $INNXMIT	= "/usr/bin/innxmit";
my $NNTPSERVER	= "localhost";

my $DIR		= '/var/spool/feeder';

my $TMP		= "$DIR/tmp";
my $ARTICLES	= "$TMP/articles";
my $RECEIVED	= "$DIR/received";
my $LIST	= "$TMP/list";
my $OLD		= "$DIR/old";



my $ile		= 0;
my $n		= 0;
my (@paczki, %args);

getopts('da', \%args);
die "$INNXMIT nie istnieje\n"	unless -f $INNXMIT;

foreach ($TMP, $ARTICLES, $RECEIVED, $OLD) {
  do {mkdir($_, 0755) or die "Nie moge utworzyc katalogu $_: $!"} unless -d $_;
}

opendir S,"$RECEIVED" or die "Nie moge przeczytac katalogu $RECEIVED: $!";
  for (readdir S) { push(@paczki, $_) if -f "$RECEIVED/$_"}
closedir S or warn "Nie moge zamknac katalogu $RECEIVED: $!";

open LIST, ">$LIST"      or die "Nie moge utworzyc pliku $LIST: $!";
foreach my $paczka (@paczki) {
  do {warn "Pomijam: $paczka\n"; next;} unless ($paczka =~ /\.bz2$/);
  local $/="\n.\n";			# oddziela posty w archiwum
  open (PACZKA, "bunzip2 -c $RECEIVED/$paczka |") or warn "! $paczka: $!";
  while (<PACZKA>) {
    $n++;
    chomp;
    s#\n\.(.*)\n#\n$1\n#g;		# mafia kropkowa dziaa!
    open POST, ">$ARTICLES/$n"   or die "Nie moge utworzyc $ARTICLES/$n: $!";
    print POST "$_\n";
    close POST        or warn "Nie moge zapisac do $ARTICLES/$n: $!";
    print LIST "$ARTICLES/", $n, "\n";
  }
  close PACZKA or warn "Nie moge zamknac $RECEIVED/$paczka: $!";
  if ($args{a}) {move ("$RECEIVED/$paczka", $OLD);}
  else {unlink "$RECEIVED/$paczka";}
  print "\t", $n - $ile, "\t$paczka\n";
  $ile = $n;
}
close LIST or warn "Nie moge zapisac do $LIST: $!";

print "\t", '-' x 40, "\n",
      "\t$ile\t", scalar @paczki, "\n";

print "Karmimy inn'a\n";
my $ret = system("$INNXMIT", "$NNTPSERVER", "$LIST") >> 8;
if ($ret != 0) {
	die "innxmit zwrocil: $ret w czasie pobierania newsow\n";
} else {print "Inn jest najedzony.\n";}

unlink <$ARTICLES/*>;
unlink "$LIST";


#EOF
