#!/bin/bash
# pkg2db generates package names to database
#
# Licensed under the GPL2 license which can be found here
# http://www.gnu.org/licenses/licenses.html
#
# Date 11-April-2005, by Markku (rasat) rasat@user-contributions.org
#
#
# ANSI COLORS
NORMAL="\033[0;39m"
# RED: Warning message
RED="\033[1;31m"
# GREEN: Success message
GREEN="\033[1;32m"
# YELLOW: Attention message
YELLOW="\033[1;33m"
# BLUE: System message
BLUE="\033[1;34m"
# LCYAN: Found devices and modules
LCYAN="\033[1;36m"
usage() {
# echo "$0 "
echo ""
echo -e "${LCYAN}pkg2db ${NORMAL} "
echo " -n New - Generate new database."
echo " -d Desc - Insert descriptions."
echo " -u Ver - Updating version numbers."
echo ""
}
# Downloa current packages
DATABASE() {
cd /etc/pacmenu/
echo "List of database items:" >/tmp/listing.out
echo "" >>/tmp/listing.out
REPO="current"
dialog \
--title 'Please wait' \
--infobox 'Downloading current name and category list...' \
3 50
echo "Current package names and categories." >>/tmp/listing.out
rm -f /etc/pacmenu/packages.txt*
wget -q ftp://ftp.archlinux.org/current/os/i686/setup/packages.txt
if [ -f /etc/pacmenu/packages.txt ];then
dialog \
--title 'Please wait' \
--infobox 'Processing current list...' \
3 50
mv packages.txt /etc/pacmenu/package-$REPO.list
cat /etc/pacmenu/package-$REPO.list |\
sed "s|^|INSERT INTO pkgs VALUES (\'|g" |\
sed "s|/|\', \'|g" |\
sed "s|.pkg.tar.gz||g" |\
sed "s|-\([^-]*-[^-]*\)$|\', \'\1|g" |\
sed "s|$|\', 'no', '$REPO', 'old');|" >/etc/pacmenu/package.sql
rm -f /etc/pacmenu/package-$REPO.list
else
# dialog \
# --title 'Current List' \
# --msgbox 'Download failed!!' \
# 5 50
echo "Download failed!!." >>/tmp/listing.out
exit
fi
# Download extra
REPO="extra"
dialog \
--title 'Please wait' \
--infobox 'Downloading extra name and category list...' \
3 50
echo "Extra package names and categories." >>/tmp/listing.out
rm -f /etc/pacmenu/packages.txt*
wget -q ftp://ftp.archlinux.org/extra/os/i686/packages.txt
if [ -f /etc/pacmenu/packages.txt ];then
dialog \
--title 'Please wait' \
--infobox 'Processing extra list...' \
3 50
mv packages.txt /etc/pacmenu/package-$REPO.list
cat /etc/pacmenu/package-$REPO.list |\
sed "s|^|INSERT INTO pkgs VALUES (\'|g" |\
sed "s|/|\',\'|g" |\
sed "s|.pkg.tar.gz||g" |\
sed "s|-\([^-]*-[^-]*\)$|\',\'\1|g" |\
sed "s|$|\', 'no', '$REPO', 'old');|" >>/etc/pacmenu/package.sql
rm -f /etc/pacmenu/package-$REPO.list
# rm -f /etc/pacmenu/install.new
echo ""
else
# dialog \
# --title 'Extra List' \
# --msgbox 'Download failed!!' \
# 5 50
echo "Download failed!!." >>/tmp/listing.out
exit
fi
# Generating new database
dummy=""
dialog \
--title 'Please wait' \
--infobox 'Generating new database...' \
3 50
rm -f /var/lib/pacmenu/pacmenu.db
sqlite /var/lib/pacmenu/pacmenu.db < /etc/pacmenu/base.sql
dialog \
--title 'Please wait' \
--infobox 'Inserting installed packages...' \
3 50
echo "List of installed packages." >>/tmp/listing.out
sqlite /var/lib/pacmenu/pacmenu.db < /etc/pacmenu/package.sql
pacman -Q > /etc/pacmenu/packages.yes
cat /etc/pacmenu/packages.yes | while read LINE; do
pkgname=`echo $LINE | awk '{print $1}'`
sqlite /var/lib/pacmenu/pacmenu.db "UPDATE pkgs SET yn='yes' WHERE name='$pkgname'";
done
rm -f /etc/pacmenu/packages.yes
echo "" >/tmp/pacmenu.tmp
# echo -e "${GREEN}Ready.${NORMAL}"
# echo "Press enter to continue"
# read
}
# VIEW NEW IN REPOS
NEWPKGREPO () {
if [ -f /tmp/pacmenu.tmp ]; then
dialog \
--title 'Please wait' \
--infobox 'Checking for newly made packages...' \
3 50
echo "List of new packages in repos." >>/tmp/listing.out
# else
# echo ""
# echo "Updating new in repos..."
fi
if [ -f /var/lib/pacmenu/package.new ];then
mv -f /var/lib/pacmenu/package.new /var/lib/pacmenu/package.ol
else
echo "" >/var/lib/pacmenu/package.ol
fi
if [ -f /tmp/pacmenu.tmp ]; then
awk '{print $6}' /etc/pacmenu/package.sql | sed "s|'||g" | sed "s|,||g" | sed "s|no||g" >/var/lib/pacmenu/package.new
fi
if [ -f /var/lib/pacmenu/package.new ]; then
diff /var/lib/pacmenu/package.ol /var/lib/pacmenu/package.new | grep ">" | sed "s|> ||g" >/var/lib/pacmenu/newpkg.list
else
if [ ! -f /var/lib/pacmenu/newpkg.list ]; then
echo "" >/var/lib/pacmenu/newpkg.list
fi
fi
if [ -f /tmp/pacmenu.tmp ]; then
dialog \
--title 'Please wait' \
--infobox 'Updating database...' \
3 50
fi
cat /var/lib/pacmenu/newpkg.list | while read LINE; do
pkgname=`echo $LINE | awk '{print $1}'`
sqlite /var/lib/pacmenu/pacmenu.db "UPDATE pkgs SET status='new' WHERE name='$pkgname'";
done
if [ "$pkgmenu" ]; then
dialog \
--title 'Message' \
--infobox 'New package(s) found. Recommended to refresh the database.' \
3 50
fi
rm -f /var/lib/pacmenu/package.ol
}
# DESCRIPTION
DESCRIPT() {
if [ -f /tmp/pacmenu.tmp ]; then
dummy=""
else
dialog \
--title 'Warning' \
--infobox 'Descriptions are already insterted!!' \
3 50
exit 0
fi
dialog \
--title 'Please wait' \
--infobox 'Precessing descriptions...' \
3 50
# Current
ls /var/lib/pacman/current/ >/etc/pacmenu/package.txt
cat /etc/pacmenu/package.txt | sed 's|/| |g' | sed 's|-\([^-]*-[^-]*\)$| \1|g' >/tmp/desc.tmp
rm -f /etc/pacmenu/package.txt
dialog \
--title 'Please wait' \
--infobox 'Current descriptions...' \
3 50
echo "Current package descriptions." >>/tmp/listing.out
awk '{ print $1 }' /tmp/desc.tmp | while read LINE; do
descp=`sed -n "/%DESC%/,$ { /%DESC%/ d; /^$/ Q; s/'//; p}" /var/lib/pacman/current/$LINE-*/desc | awk '{print $1, $2, $3, $4, $5, $6 $7}'`
echo "INSERT INTO desc VALUES ('$LINE', '$descp');" > /etc/pacmenu/desc.sql
done
# Extra
ls /var/lib/pacman/extra/ >/etc/pacmenu/package.txt
cat /etc/pacmenu/package.txt | sed 's|/| |g' | sed 's|-\([^-]*-[^-]*\)$| \1|g' >/tmp/desc.tmp
rm -f /etc/pacmenu/package.txt
dialog \
--title 'Please wait' \
--infobox 'Extra descriptions...(its long!!).' \
3 50
echo "Extra package descriptions." >>/tmp/listing.out
awk '{ print $1 }' /tmp/desc.tmp | while read LINE; do
descp=`sed -n "/%DESC%/,$ { /%DESC%/ d; /^$/ Q; s/'//g; p }" /var/lib/pacman/extra/$LINE-*/desc | awk '{print $1, $2, $3, $4, $5, $6, $7}'`
echo "INSERT INTO desc VALUES ('$LINE', '$descp');" >> /etc/pacmenu/desc.sql
done
sqlite /var/lib/pacmenu/pacmenu.db < /etc/pacmenu/desc.sql
echo "" >>/tmp/listing.out
echo "Database is ready." >>/tmp/listing.out
echo "Before using, refresh the packages (-Sy)." >>/tmp/listing.out
rm -f /tmp/pacmenu.tmp
}
# UPDATE VERSION
UPDATEVER() {
if [ -f /tmp/pacmenu.tmp ]; then
dialog \
--title 'Please wait' \
--infobox 'Updating version numbers...' \
3 50
fi
if [ -f /var/lib/pacmenu/version.new ];then
mv -f /var/lib/pacmenu/version.new /var/lib/pacmenu/version.ol
else
echo "" >/var/lib/pacmenu/version.ol
echo "First time updating version numbers... (hold on!!)"
fi
# Current and Extra
ls /var/lib/pacman/current/ >/var/lib/pacmenu/version.new
ls /var/lib/pacman/extra/ >>/var/lib/pacmenu/version.new
diff /var/lib/pacmenu/version.ol /var/lib/pacmenu/version.new | grep ">" | sed "s|> ||g" >/var/lib/pacmenu/newver.list
cat /var/lib/pacmenu/newver.list | sed 's|/| |g' | sed 's|-\([^-]*-[^-]*\)$| \1|g' >/tmp/ver.tmp
echo "Updating version numbers." >>/tmp/listing.out
cat /tmp/ver.tmp | while read LINE; do
pkgname=`echo $LINE | awk '{print $1}'`
version=`echo $LINE | awk '{ print $2 }'`
sqlite /var/lib/pacmenu/pacmenu.db "UPDATE pkgs SET ver='$version' WHERE name='$pkgname'";
done
cat /var/lib/pacmenu/newpkg.list | while read LINE; do
pkgname=`echo $LINE | awk '{print $1}'`
sqlite /var/lib/pacmenu/pacmenu.db "UPDATE pkgs SET status='new' WHERE name='$pkgname'";
done
echo "" >>/tmp/listing.out
rm -f /var/lib/pacmenu/version.ol
rm -f /tmp/ver.tmp
}
# descp=`sed -n "/%DESC%/,$ { /%DESC%/ d; /^$/ Q; s/'//; s/'//; s/'//; s/'//; s/'//; p }" /var/lib/pacman/extra/$LINE-*/desc | awk '{print $1, $2, $3, $4, $5, $6, $7}'`
# My notes:
# sqlite pacmenu.db "select * from pkgs";
# sqlite pacmenu.db "select * from pkgs limit 1";
# sqlite /var/lib/pacmenu/pacmenu.db "INSERT INTO desc (name,description) VALUES ('$LINE', '$desc');"
# ENDLINE=`sqlite /var/lib/pacmenu/pacmenu.db "SELECT name FROM desc WHERE name='$LINE'"`
case $1 in
-n) DATABASE ;;
-d) DESCRIPT ;;
-r) NEWPKGREPO ;;
-u) UPDATEVER ;;
*) usage
exit 0
;;
esac