#!/bin/sh

po_domain="alterator-pkg"

sources_list="/etc/apt/sources.list /etc/apt/sources.list.d"

mountpoint="/media/cdrom"
pkggroups="$mountpoint/Metadata/pkg-groups.tar"
diskinfo="$mountpoint/.disk/info"
pkgdir="/var/lib/install3"

. alterator-sh-functions
. shell-regexp

disk_valid()
{
    [ -f "$diskinfo" ]
}

disk_list()
{
    sed -rn \
	-e 's,^rpm[[:space:]]cdrom:\[([^\]+)].*,\1,p' \
	/etc/apt/sources.list.d/*.list \
	/etc/apt/sources.list
}

disk_exists()
{
    disk_list | grep -qs "$(cat "$diskinfo")"
}

disk_add_metadata()
{
    if [ -f "$pkggroups" ];then
	mkdir -p "$pkgdir"
	tar -C "$pkgdir" -xvpf "$pkggroups" >&2
    fi
}

disk_add_cdrom()
{
    apt-cdrom --cdrom "$mountpoint" --no-mount -o dir::etc=/etc/apt/sources.list.d add >&2
}

disk_add()
{
    disk_add_metadata && disk_add_cdrom
}

disk_del()
{
    find  $sources_list -type f|
	xargs \
	    sed -i "/^rpm[[:space:]]\+cdrom:\[$(quote_sed_regexp "$1")\]\/[[:space:]]/ d"
}

do_new()
{
    mount "$mountpoint" >&2
    if ! disk_valid; then
	write_error "`_ "Please insert disk"`"
    elif disk_exists; then
	write_error "`_ "This disk is already added"`"
    elif disk_add ;then
	write_nop
    else
	write_error "`_ "Invalid disk"`"
    fi
    umount "$mountpoint" >&2
}

do_delete()
{
    [ -n "$in_name" ] && disk_del "$in_name"
    write_nop
}

on_message()
{
    local err=
    case "$in_action" in
	list)
	    echo '('
		disk_list | sed 's,.*,("&"),'
	    echo ')'
	    ;;
	new)
	    do_new
	    ;;
	delete)
	    do_delete
	    ;;
	read)
	    write_nop
	    ;;
	write)
	    if [ -n "$in_new" ];then
		do_new
	    elif [ -n "$in_delete" ];then
		do_delete
	    fi
	    ;;
	*)
	    echo '#f'
    esac
}

message_loop
