#!/bin/bash
# this shell now only  for mips 

#gcad 安装目录
cad_install_dir="/opt/apps/gstarcad2023/v2023"

hasDesktopMenu=true
hasAuthInfo=true

file="/tmp/cancleFileAssociation"
common_cad_mimes=('image/vnd.dwg' 'application/dwg' 'application/dxf' 'application/dwt' 'application/dws' 'application/dwf' 'model/vnd.dwf')


#读取mimeapps.list文件,并把mimetype的关联的defaulttype放到最前边
#参数1 mimetype
#参数2 defaulttype
function write_mimeapp_config()
{
	mimetype=$1
	defaulttype=$2
	python3 - <<END
import configparser
section = 'Default Applications'
inifilepath = '/usr/share/applications/mimeapps.list'
config = configparser.ConfigParser(strict=False)
config.read(inifilepath)
if config.has_section(section):
	if config.has_option(section,'$mimetype'):
		appstr = config[section]['$mimetype']
		apps = appstr.split(';')
		if '$defaulttype' in apps:
			apps.remove('$defaulttype')
		apps.insert(0, '$defaulttype')
		appstr = ';'.join(apps)
		config[section]['$mimetype'] = appstr
	else:
		config[section]['$mimetype'] = '$defaulttype'
else:
	config.add_section(section)
	config[section]['$mimetype'] = '$defaulttype'
with open(inifilepath, 'w') as configfile:
	config.write(configfile, space_around_delimiters=False)
END
}

function config_default_mime_open()
{
	local desktop=$1
	shift

	for item in $@
	do
		if [ "" = "${item}" ] ; then
			continue
		fi
		write_mimeapp_config ${item} ${desktop}
	done
}


if [ -f "$file" ]; then
	rm -rf $file
	rm -rf /usr/share/mime/packages/custom-gcad-file.xml
	sed -i '/^MimeType/d' /usr/share/applications/gstarcad2023.desktop
fi

function kmin()
{
	if [ $# -eq 0 ]; then
		echo ""
	elif [ $# -eq 1 ]; then
		echo $1
	elif [ $1 -le $2 ]; then
		echo $1
	else
		echo $2
	fi
}

function kmax()
{
	if [ $# -eq 0 ]; then
		echo ""
	elif [ $# -eq 1 ]; then
		echo $1
	elif [ $1 -ge $2 ]; then
		echo $1
	else
		echo $2
	fi
}

function vercomp ()
{
	if [[ $1 == $2 ]]
	then
		echo 2
	return
	fi
	local IFS=.
	local i ver1=($1) ver2=($2)
	for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
	do
		ver1[i]=0
	done
	for ((i=0; i<${#ver1[@]}; i++))
	do
		if [[ -z ${ver2[i]} ]]
		then
			ver2[i]=0
		fi
		if ((10#${ver1[i]} > 10#${ver2[i]}))
		then
			echo 3
		return
		fi
		if ((10#${ver1[i]} < 10#${ver2[i]}))
		then
			echo 1
		return
		fi
	done
	echo 2
}

function ks_check_library_version()
{
	cd ${cad_install_dir}/files
	gcad_lib_name=$1
	if [ ! -h $gcad_lib_name ]; then
		return
	fi
	gcad_lib_arch=`hexdump $gcad_lib_name -n 2 -s 18 -e '1/2 "%u" '`
	gcad_lib_bit=`hexdump  $gcad_lib_name -n 1 -s 4 -e '1/1 "%u"'`
	gcad_lib_abs_path=$(readlink -f $gcad_lib_name)
	gcad_lib_version=$(echo $gcad_lib_abs_path | awk -F '.so.' '{print $NF}')
	sys_libs_path=$(ldconfig -p 2>/dev/null | grep $gcad_lib_name | awk -F '> ' '{print $2}')

	if [ ! -z "$sys_libs_path" ]; then
		for item in $sys_libs_path ; do
			item_abs_path=$(readlink -f $item)
			item_arch=`hexdump $item_abs_path -n 2 -s 18 -e '1/2 "%u" '`
			item_bit=`hexdump  $item_abs_path -n 1 -s 4 -e '1/1 "%u"'`
			if [ "$gcad_lib_arch" = "$item_arch" ] && [ "$gcad_lib_bit" = "$item_bit" ]; then
				item_version=$(echo $item_abs_path | awk -F '.so.' '{print $NF}')
				rst=$(vercomp $item_version $gcad_lib_version)
				if [ $rst -eq 3 ]; then
					ln -sf $item_abs_path $gcad_lib_name
					break
				fi
			fi
		done
	fi
}


function ks_update_init()
{
	updatePath="${cad_install_dir}/linux/update"
	if [ -d ${updatePath} ] ; then
		chmod 777 ${updatePath} -R
		${updatePath}/gcadupdate /sendinstallinfo:true || true
	fi
	updateTaskPath="/etc/cron.d/gcadupdatetask"
	if [ -e ${updateTaskPath} ] ; then
		chmod 644 ${updateTaskPath}
		chown root ${updateTaskPath}
		chgrp root ${updateTaskPath}
	fi
	updateLogPath="/var/log/gcadlog"
	if [ -d ${updateLogPath} ] ; then
		chmod 777 ${updateLogPath}
	else
		mkdir -m 777 -p ${updateLogPath}
	fi
}

function sense_installrclocal
{
    rclocalname="/etc/rc.local"
    if [ -e $rclocalname ] ; then
      strExistSenseInfo=$(cat $rclocalname | grep "sudo iptables -I INPUT -p tcp --dport 10334 -j ACCEPT")

      # 不存在, 添加
      if [[ "$strExistSenseInfo" = "" ]] ; then
        sed -i '/exit 0/i sudo iptables -I INPUT -p tcp --dport 10334 -j ACCEPT' $rclocalname
      fi
    else
      touch $rclocalname
	  echo "#!/bin/sh -e">>"$rclocalname"
	  echo "#">>"$rclocalname"
	  echo "# rc.local">>"$rclocalname"
	  echo "sudo iptables -I INPUT -p tcp --dport 10334 -j ACCEPT">>"$rclocalname"
	  echo "exit 0">>"$rclocalname"
	  chmod 777 ${rclocalname}
    fi
}

function sense_postinst
{
	install_dir=${cad_install_dir}/files/com.virbox.senseshield/files

	cd $install_dir

	# 安装服务，拷贝文件
	echo "step1: mkdir dir"
	mkdir -p /lib/systemd/system

	version=`cat version`
	echo "ss version $version"

	echo "step2: copy files"
	if [ -f "/bin/systemctl" ] ; then
		cp config/senseshield.service  /lib/systemd/system/senseshield.service 
	else
		cp config/senseshieldd  /etc/init.d/senseshieldd 
	fi

	# 4. 添加权限
	echo "step3: chmod config files"
	chmod 755 version
	chmod 755 etc/ss_service/ss_config.xml
	chmod 755 etc/ss/authconfig.xml
	chmod 755 etc/common/ss_cloud.xml

	echo "step4: chmod application files"
	chmod 755 senseshield
	chmod 755 ssclt
	chmod 755 sscfg

	echo "ln client cmd tools."
	ln -s $install_dir/ssclt /usr/bin/ssclt
	ln -s $install_dir/sscfg /usr/bin/sscfg
	chmod 755 /usr/bin/ssclt
	chmod 755 /usr/bin/sscfg

	# 5. 添加服务
	echo "step5: add service to systemctl"
	if [ -f "/bin/systemctl" ] ; then
		echo "daemon-reload "
		rm -f /etc/init.d/senseshieldd
		chmod 755 /lib/systemd/system/senseshield.service
		cd /lib/systemd/system
		systemctl daemon-reload
		echo `systemctl enable senseshield.service 2>&1`
		systemctl start senseshield.service
		
		# 6 设置客户服务器模式，重启服务
        sscfg -e cs
		systemctl restart senseshield.service
	else
		rm -f /lib/systemd/system/senseshield.service
		chmod 755 /etc/init.d/senseshieldd
		cd /etc/rc2.d;  ln -sf ../init.d/senseshieldd ./S99senseshieldd;
		cd /etc/rc3.d;  ln -sf ../init.d/senseshieldd ./S99senseshieldd;
		cd /etc/rc4.d;  ln -sf ../init.d/senseshieldd ./S99senseshieldd;
		cd /etc/rc5.d;  ln -sf ../init.d/senseshieldd ./S99senseshieldd;
		/etc/init.d/senseshieldd start
		
		# 6 设置客户服务器模式，重启服务
        sscfg -e cs
		/etc/init.d/senseshieldd restart
	fi
  
    # 7 开启10334端口
    iptables -I INPUT -p tcp --dport 10334 -j ACCEPT
	iptables-save
		
	ret=`ps -ef | grep "${SENSEPATH}" | grep -v "grep"`
	if [ x"$ret" != x ] ; then
		echo "install success."
	else 
		echo "install failed. senseshield service is not running." 
	fi
	
	# 8 将10334端口、sense服务器开启写到/etc/rc.local文件，保证系统重启后，端口和服务开启
	sense_installrclocal
}


datadir=$1
#touch --no-create ${datadir}/icons/hicolor &>/dev/null || :

gTemplatesName="模板"
if [ -d "/root/模板" ]; then
	gTemplatesName="模板"
elif [ -d "/root/Templates" ]; then
	gTemplatesName="Templates"
fi

if [ ! -d "/root/${gTemplatesName}" ]; then
	gTemplatesName="模板"
	mkdir -p "/root/${gTemplatesName}" >/dev/null 2>&1 || true
fi

gDesktopName="桌面"
if [ -d "/root/桌面" ]; then
	gDesktopName="桌面"
elif [ -d "/root/Desktop" ]; then
	gDesktopName="Desktop"
fi

#desktop icons
if [ -d "/root/${gDesktopName}" ] && $hasDesktopMenu; then
	cp -f /usr/share/applications/gstarcad2023.desktop /root/${gDesktopName}/gstarcad2023.desktop
	chmod 777 /root/${gDesktopName}/gstarcad2023.desktop
	gio set "/root/${gDesktopName}/gstarcad2023.desktop" metadata::trusted yes 2>>/dev/null
fi

gio set "${cad_install_dir}/linux/gstarcad2023.desktop" metadata::trusted yes 2>>/dev/null
gio set "${cad_install_dir}/linux/gstarcad2023-uninstall.desktop" metadata::trusted yes 2>>/dev/null

#dwg templates
if [ -d "/root/模板" ]; then
	cp -f "${cad_install_dir}/linux/templates/"* "/root/${gTemplatesName}"
fi

#新用户配置
if [ ! -d "/etc/skel/${gTemplatesName}" ]; then
	mkdir /etc/skel/${gTemplatesName}
	chmod 755 /etc/skel/${gTemplatesName}
fi

cp -f "${cad_install_dir}/linux/templates/"* "/etc/skel/${gTemplatesName}"

#if [ -f "/root/.kingsoft/office6/templates/wps/zh_CN/Normal.dotm" ]; then
#	rm -rf "/root/.kingsoft/office6/templates/wps/zh_CN/Normal.dotm"
#fi

#对每个用户安装快捷方式
for FILENAME in /home/*; do

	if id -u `echo ${FILENAME} | awk '{print substr($FILENAME, 7, 32)}'` >/dev/null 2>&1; then
		:
	else
		continue
	fi

	if [ -d "${FILENAME}/桌面" ]; then
		gDesktopName="桌面"
	elif [ -d "${FILENAME}/Desktop" ]; then
		gDesktopName="Desktop"
	fi

	if [ -d "${FILENAME}/模板" ]; then
		gTemplatesName="模板"
	elif [ -d "${FILENAME}/Templates" ]; then
		gTemplatesName="Templates"
	fi

	if [ ! -d "${FILENAME}/${gTemplatesName}" ]; then
		gTemplatesName="模板"
		mkdir -p "${FILENAME}/${gTemplatesName}" >/dev/null 2>&1 || true
	fi

	if [ -d "${FILENAME}/${gDesktopName}" ]; then

		if $hasDesktopMenu; then
			if [ -e "/usr/share/applications/gstarcad2023.desktop" ]; then
				cp -f /usr/share/applications/gstarcad2023.desktop "${FILENAME}/${gDesktopName}/gstarcad2023.desktop"
				if test $? -eq 0; then
					gio set "${FILENAME}/${gDesktopName}/gstarcad2023.desktop" metadata::trusted yes 2>>/dev/null
					chmod +x "${FILENAME}/${gDesktopName}/gstarcad2023.desktop"
					chown `echo ${FILENAME} | awk '{print substr($FILENAME, 7, 32)}'` "${FILENAME}/${gDesktopName}/gstarcad2023.desktop"
				fi
			fi

		fi


	fi

	#gstarcad templates
	if [ -d "${FILENAME}/${gTemplatesName}" ]; then
		cp -f "${cad_install_dir}/linux/templates/"* "${FILENAME}/${gTemplatesName}"
	fi
done

#ks_config_wpsdaemon

#if [ -f "/opt/kingsoft/wps-office/office6/libbrowsergrapher.so" ] && [ -d "/usr/lib64/mozilla/plugins" ]; then
#	ln -sf "/opt/kingsoft/wps-office/office6/libbrowsergrapher.so" "/usr/lib64/mozilla/plugins/libbrowsergrapher.so"
#fi

#ks_transfer_auth_info
#ks_check_library_version libfreetype.so.6
ks_update_init
touch /usr/share/applications/mimeapps.list || true
config_default_mime_open "gstarcad2023.desktop" "${common_cad_mimes[*]}"
#if [ -f '/usr/share/mime/packages/custom-wps-office.xml' ]; then
#	ln -sf /usr/share/mime/packages/custom-wps-office.xml /usr/share/mime/packages/business-office.xml 
#fi
#update-mime-database ${datadir}/mime &> /dev/null || :
#update-desktop-database &> /dev/null || :

#执行sense的postinst
sense_postinst

#获取硬件码
#bash ${cad_install_dir}/files/gcad.sh -r  &> /dev/null || : 
chmod 777 /var/tmp/ &> /dev/null || : 
chmod -R 777 /var/tmp/gstarcad2023/  &> /dev/null || : 
mkdir -p /tmp/GstarCAD/
chmod -R 777 /tmp/GstarCAD/  &> /dev/null || : 

#增加权限
chmod -R 777 ${cad_install_dir}/files/ExtendCmd/

#修改不同Linux发行版对应信息
distributor_id=`cat /etc/os-release | grep -w 'NAME=' | cut -d "=" -f 2`
gcad_pgp_name="${cad_install_dir}/files/UserDataCache/Support/gcad.pgp"
if [[ ${distributor_id} =~ 'Kylin' ]]; then
	sed -i 's/START EXPLORER/caja/g' ${gcad_pgp_name}
	sed -i 's/START NOTEPAD/pluma/g' ${gcad_pgp_name}
	sed -i 's/START PBRUSH/gnome-paint/g' ${gcad_pgp_name}
fi
if [[ ${distributor_id} =~ 'Deepin' ]] || [[ ${distributor_id} =~ 'Uos' ]]; then
	sed -i 's/START EXPLORER/gio open/g' ${gcad_pgp_name}
	sed -i 's/START NOTEPAD/pluma/g' ${gcad_pgp_name}
	sed -i 's/START PBRUSH/deepin-draw/g' ${gcad_pgp_name}
fi
if [[ ${distributor_id} =~ 'Ubuntu' ]] || [[ ${distributor_id} =~ 'CentOS Linux' ]] || [[ ${distributor_id} =~ 'SuperRedOS' ]]; then
	sed -i 's/START EXPLORER/nautilus/g' ${gcad_pgp_name}
	sed -i 's/START NOTEPAD/gedit/g' ${gcad_pgp_name}
	sed -i 's/START PBRUSH/gnome-paint/g' ${gcad_pgp_name}
fi
if [[ ${distributor_id} =~ '方德桌面' ]]; then
	sed -i 's/START EXPLORER/nemo/g' ${gcad_pgp_name}
	sed -i 's/START NOTEPAD/gedit/g' ${gcad_pgp_name}
	sed -i 's/START PBRUSH/mypaint/g' ${gcad_pgp_name}
fi
