#! /bin/sh
##
## cnews like batcher for INN

. /usr/lib/batcher/send-lib || exit 1

# minimum number of news-articles for pre-batching
MINART=50

##  Start logging.
touch ${LOG}
chmod 0660 ${LOG}
exec >>${LOG} 2>&1
cd ${BATCH} || exit 1

##  Who are we sending to?
if [ -n "$1" ] ; then
	LIST="$*"
else
	ctlinnd -s -t30 flush ""
	# replace "sort -u" with "sort | uniq" if you don't have GNU sort
	LIST=`find . -type f \\( \! -name '*.*' -o -name '*.uucp' -o -name '*.uucp.work' \\) -print | sed -e s+^./++ -e 's+\\..*$++' | sort -u`
fi

echo "${PROGNAME}: [$$]" `date +%m/%d-%H:%M:%S` SCAN `echo ${LIST} | wc -w` "sites"

terminate() {
	echo "${PROGNAME}: [$$]" `date +%m/%d-%H:%M:%S` \
		"SCAN ${BATCHED} batched, ${HELD} held, ${STALLED} stalled"
	exit 0
}

BATCHED=0
STALLED=0
HELD=0

test -z "${LIST}" && terminate

batchdefault
for SITE in ${LIST} ; do

	batchpar ${SITE}

	trap 'rm -f ${LOCKPREFIX}.${SITE} ; exit 1' 1 2 3 15
	shlock -p $$ -f ${LOCKPREFIX}.${SITE} || continue

	BATCHFILE=${SITE}.uucp
	test -f ${SITE}.uucp.work && {
		cat ${SITE}.uucp.work >>${BATCHFILE}
		rm -f ${SITE}.uucp.work
	}
	test -f ${SITE} && {
		mv ${SITE} ${SITE}.uucp.work
		ctlinnd -s -t30 flush ${SITE} || {
			rm -f ${LOCKPREFIX}.${SITE}
			continue
		}
		cat ${SITE}.uucp.work >>${BATCHFILE}
		rm -f ${SITE}.uucp.work
	}
	test ! -s ${BATCHFILE} && {
		rm -f ${BATCHFILE} ${LOCKPREFIX}.${SITE}
		continue
	}
	ARTS=`wc -l <${BATCHFILE}`
	test "$SITEcomp" = nntp && {
		BATCHED=`expr ${BATCHED} + 1`
		innxmit ${SITEtran} ${BATCHFILE}
		if test -s ${BATCHFILE}; then
			echo "${PROGNAME}: [$$]" `date +%m/%d-%H:%M:%S` \
				${SITE} ${ARTS} "articles," \
				`wc -l <${BATCHFILE}` "remain"
		else
			echo "${PROGNAME}: [$$]" `date +%m/%d-%H:%M:%S` \
				${SITE} ${ARTS} "articles innxmitted"
		fi
		rm -f ${LOCKPREFIX}.${SITE}
		continue
	}
	# standard UUCP xmit
	test "${MINART}" -gt "${ARTS}" && {
		HELD=`expr ${HELD} + 1`
		rm -f ${LOCKPREFIX}.${SITE}
		continue
	}
	JOBS=`uustat -s${SITE} -c rnews 2>/dev/null | wc -l`
	test "${JOBS}" -ge "${SITEjobs}" && {
		STALLED=`expr ${STALLED} + 1`
		rm -f ${LOCKPREFIX}.${SITE}
		continue
	}
	BATCHED=`expr ${BATCHED} + 1`
	QUEUEJOBS=`expr ${SITEjobs} - ${JOBS}`
	batcher -b ${SITEsize} -N ${QUEUEJOBS} \
		-p"${SITEcomp} | ${SITEtran} %s" ${SITE} ${BATCHFILE}
	if test -s ${BATCHFILE}; then
		echo "${PROGNAME}: [$$]" `date +%m/%d-%H:%M:%S` ${SITE} \
			${ARTS} "articles," `wc -l <${BATCHFILE}` "remain"
	else
		echo "${PROGNAME}: [$$]" `date +%m/%d-%H:%M:%S` ${SITE} \
			${ARTS} "articles"
	fi
	rm -f ${LOCKPREFIX}.${SITE}
done
terminate
