#!/bin/sh
#----------------------------------------------------------------------------------
# create-testteam-eislist for home
#
# Creation   :  2005-12-18  tg
# Last Update:  $Id$
#
# Copyright (c) 2001-2007 the eisfair team, c/o Frank Meyer, <frank(at)eisfair(dot)org>
#
# usage      : create-home-eislist
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#----------------------------------------------------------------------------------

exec 2> home-eislist-trace$$.log
set -x

pdate=`date +%Y-%m-%d`
ptime=`date +%H:%M`
pyear=`date +%Y`

index_header=0


#----------------------------------------------------------------------------------
# sub: write eislist header
#----------------------------------------------------------------------------------
write_eislist_header ()
{

# write header
cat  > ${pack_dir}/eis-list.txt  <<EOF
#<comment> Packagelist of eisfair testteam
#<comment> Copyright (c) 2001-${pyear} the eisfair team, c/o Frank Meyer, <frank(at)eisfair(dot)org>
#<welcome> Welcome to the eisfair test-team package server
#<index> index.txt
#<empty>
#<message> Available packages:
EOF

}
#----------------------------------------------------------------------------------
# sub: write eislist footer
# now 4 empty lines added but remove it is update 1.4.0 given
#----------------------------------------------------------------------------------
write_eislist_footer ()
{
    # write footer
    {
        echo "#<empty>"
        echo "#<message> Last database update:" ${pdate} ${ptime}
    } >> ${pack_dir}/eis-list.txt
    chmod 0664 ${pack_dir}/eis-list.txt
}
#----------------------------------------------------------------------------------
# sub: write eislist entry
#----------------------------------------------------------------------------------
write_eislist_entry ()
{

    section_info="${1}"
    section_entry="${2}"

    printf "%-15s %s \n"  "${section_info}"  "${section_entry}" >> ${pack_dir}/eis-list.txt
}

#----------------------------------------------------------------------------------
# create eis-list file
#
# input:  $1 - package directory
# return:  0 - ok
#          1 - error accured
#----------------------------------------------------------------------------------
create_eislist ()
{

PREFIX_SEPARATOR="+"

pack_dir="${1}"

# remove all old stuff
if [ -f ${pack_dir}/eis-list.txt ]
then
    rm -f ${pack_dir}/eis-list.txt
    rm -f ${pack_dir}/index.txt
fi

# change dir
cd ${pack_dir}

# list package folder
pack_folder="${package_dir_two}/*.info
             *.info "

# for file.info in $pack_folder do
for p_folder in ${pack_folder}
do
    # check if .info-files exist
    ls ${p_folder} >/dev/null 2> /dev/null

    if [ ${?} -eq 0 ]
    then

        # first extract the 'short' statement to sort the outprint
        for FNAME in ${p_folder}
        do

            # grep short for sort entry
            entry_short=`grep '<short' ${FNAME} | sed 's/^.*<short>//; s/<\/short>$//'`

            # check for prefix separator is given
            case ${FNAME} in
                *${PREFIX_SEPARATOR}*)

                    # strip prefix
                    fname_strip=${FNAME#*${PREFIX_SEPARATOR}}

                    # move prefix $packages in folder $package_dir_two
                    mv ${FNAME} ${package_dir_two}/${fname_strip}
                    mv ${FNAME%.info} ${package_dir_two}/${fname_strip%.info}

                    # print list infos with ":" as separator
                    printf "%-15s:%-60s:  %s \n" "#<info 1.1.0>" "${package_dir_two}/${fname_strip}" "'${entry_short}'" >> ${pack_dir}/XZ23-eis.list

                    # print index
                    create_index "${package_dir_two}/${fname_strip}"
                ;;

                *)
                    # print list infos with ":" as separator
                    printf "%-15s:%-60s:  %s \n" "#<info 1.1.0>" "${FNAME}" "'${entry_short}'" >> ${pack_dir}/XZ23-eis.list

                    # print index
                    create_index "${FNAME}"
                ;;
            esac

        # end first extract the 'short' statement to sort the outprint
        done

    # end if [ ${?} -eq 0 ]
    fi

# for file.info in $pack_folder do
done

    # sort list infos
    sort -k 1.80 ${pack_dir}/XZ23-eis.list >> ${pack_dir}/XZ23-eis$$.list
    max_nbr=`cat ${pack_dir}/XZ23-eis.list | wc -l`

    # set 'base' on top from list
  #  echo "`grep "base" ${pack_dir}/XZ23-eis$$.list`" >${pack_dir}/XZ23-eis$$-2.list
  #  grep -v "base" ${pack_dir}/XZ23-eis$$.list >> ${pack_dir}/XZ23-eis$$-2.list

    nbr_idx=0

    # set IFS to ":" as separator
    old_ifs=${IFS}
    IFS=:

    # print eis-list.txt
    while read info line short
    do

        nbr_idx=`expr $nbr_idx + 1`

        #write header
        if [ ${nbr_idx} -eq 1 ]
        then
            write_eislist_header
        fi

        # write entry
        write_eislist_entry  ${info} ${line}

        #write footer
        if [ ${nbr_idx} -eq ${max_nbr} ]
        then
            # restor IFS
            IFS=${old_ifs}
            write_eislist_footer
        fi
    done < ${pack_dir}/XZ23-eis$$.list

    # remove tmp files
    rm -f ${pack_dir}/XZ23-*


    # get index from pack-eis
    wget http://pack-eis.de/index.txt -O $pack_dir/index.pack-eis.txt

# set separator lines in index.txt
cat  >> $pack_dir/index.txt <<EOF

#------------------------------------------------------------------
# official index.txt from pack-eis follows
#------------------------------------------------------------------

EOF

    cat $pack_dir/index.pack-eis.txt  >> $pack_dir/index.txt
    rm -f $pack_dir/index.pack-eis.txt
    chmod 0664 $pack_dir/index.txt

}
#----------------------------------------------------------------------------------
# create index.txt file
#----------------------------------------------------------------------------------
create_index ()
{

FNAME=${1}

# check for index header
if [ ${index_header} -eq 0 ]
then

# write index header
cat  > ${pack_dir}/index.txt <<EOF
#------------------------------------------------------------------
# ${pack_prefix}/index.txt
# Creation date: ${pdate} ${ptime}
#------------------------------------------------------------------
EOF

index_header=1
fi
    # get $package name
    pack_name=`grep "<name>" ${FNAME} | sed 's#</*name>##g'`

    # get $package version
    pack_version=`grep "<version>" ${FNAME} |  sed -e 's#<version>\([0-9\.]*\).*</version>#\1#'`

    # get $package status
    pack_status=`grep "<status>" ${FNAME} | sed 's#</*status>##g'`

    # output a little bit formatted, like index.txt from pack-eis
    printf "%-17s %-9s %-11s %s \n" ${pack_name} ${pack_version} ${pack_status} ${FNAME} >> ${pack_dir}/index.txt

}

#==================================================================================
# main
#==================================================================================


index_file="https://eisler.eisfair.net/home/$USER/packages/index.txt"
pack_prefix="https://eisler.eisfair.net/home/$USER/packages"

package_dir="/home/$USER/public_html/packages"
package_dir_two="eisfair2"


if [ -d ${package_dir} ]
then
    echo "Creating eis-list in ${package_dir}"
else
    mkdir -p ${package_dir}
    chmod 0755 ${package_dir}
    chgrp src ${package_dir}


    echo "directory '${package_dir}' not found, aborted." >&2
    exit 1
fi

# check for subfolder '$package_dir_two' and create when missing
if [ ! -d ${package_dir}/${package_dir_two} ]
then
    mkdir -p ${package_dir}/${package_dir_two}
    chmod 0755 ${package_dir}/${package_dir_two}
    chgrp src ${package_dir}/${package_dir_two}
fi

# do work
create_eislist "${package_dir}"

#==================================================================================
# end
#==================================================================================