#! /bin/bash

#  此脚本用于添加LBP capt系列打印机(root 部分:ccpd 配置,lpadmin 由客户端直接执行),脚本自带参数为3个
#  参数1[打印机名称];参数2[打印机驱动文件路径](接口兼容保留,客户端 lpadmin 使用);参数3[usb:打印机serial | net:ipaddr]

if [[ $# -eq 0 ]]; then
    echo "Usage add printer: $0 printer_name ppdfile usb:serialnumber [net:ipaddr]"
    echo "example:"
    echo "    $0 LBP2900 CNCUPSLBP2900CAPTK.ppd [usb:0000XXXX | net:192.168.0.1]"
    exit 0
fi

ccpdadmin | grep "invalid Spool Name" | awk '{print $3}' | while read -r name; do ccpdadmin -x $name; done

# 如果已经添加不再添加
devinfo=${3:4}
ccpdadmin | grep -q "$devinfo" && exit 2

check_printers() {
    for i in {0..9}; do
        device="/dev/usb/lp$i"
        if [[ -e $device ]]; then
            SERIAL_TMP=$(udevadm info -a $device | grep serial)
            DEVSERIAL=$(echo $SERIAL_TMP | cut -d '"' -f 2)
            if [ "$devinfo" == "$DEVSERIAL" ]; then
                if [ ! -d "/dev/capt" ]; then
                    mkdir /dev/capt
                fi
                ln -s $device /dev/capt/$DEVSERIAL -f
            fi
            break
        fi
    done
}

if [[ $3 == "usb"* ]] && [ ! -e /dev/capt/$devinfo ]; then
    check_printers
fi

ccpdadmin | grep "invalid Spool Name" | awk '{print $3}' | while read -r name; do ccpdadmin -x $name; done

if [[ $3 == "usb"* ]]; then
    ccpdadmin -p "$1" -o /dev/capt/$devinfo | grep -q "$1" || exit 1
else
    ccpdadmin -p "$1" -o "$3" | grep -q "$1" || exit 1
fi

systemctl restart ccpd.service
systemctl enable ccpd.service

exit 0
