#!/bin/bash

# 1 对压缩文件进行解压
	# 压缩类型采用当前脚本中所涉及的类型进行处理
	# 对于zip包进行分类判断  分卷压缩如何处理
	# 其他压缩格式不变
# 2 处理文件名编码问题
	# 文件名探测采用之前的处理方式
	# 判定文件名的编码格式
	# 进行文件名转码操作
# 3



export LANG="zh_CN.UTF-8"
IFS=$'\n'

home_path=`echo $HOME`
log_file="${home_path}/.log/engrampa_long_reb.log"
echo "===============engrampa_long_reb invoke begin==============="  >> ${log_file}
g_from_encoding=

function handle_encoding {

	# 首先对目录下文件进行扫描
	# 如果存在检测不出编码或需要进行转码的情况
	# 则对当前目录下文件统一进行转码操作
	# 如果不存在则不需要进行转码

	g_from_encoding=
	file_list=`ls .`
	iconv_encoding=
	for file in $file_list
	do
		echo "file = $file" >> ${log_file}
		dirname=`dirname "$file"`
		filename=`basename "$file"`
		filename_encoding=`engrampa --detection-encoding "$filename"`
		echo "filename_encoding = $filename_encoding" >> ${log_file}

		if [ "x${filename_encoding}y" = "xy" ] || [ "$filename_encoding" == "TIS-620" ] || [ "$filename_encoding" == "GB18030" ] || [ "$filename_encoding" == "GBK" ] || [ "$filename_encoding" == "GB2312" ] || [ "$filename_encoding" == "WINDOWS-1252" ] || [ "$filename_encoding" == "KOI8-R" ]; then
			echo "filename_encoding = $filename_encoding" >> ${log_file}
			iconv_encoding="GB18030"
			is_need_conv_filename_encode=true
		fi

		if [$is_need_conv_filename_encode]; then
			break
		fi
	done

	if [ "$is_need_conv_filename_encode" = "true" ]; then
		echo "handle_encoding invoke begin" >> ${log_file}
		file_list=`ls .`
		for file in $file_list
		do
			echo "file = $file" >> ${log_file}
			dirname=`dirname "$file"`
			filename=`basename "$file"`
			new_filename=
			new_filename=`ls "$filename" | iconv -f "$iconv_encoding" -t "UTF-8" `
			echo "new_filename = $new_filename  filename_encoding = $iconv_encoding" >> ${log_file}
			mv "$dirname/$filename" "$dirname/$new_filename"
		done
		echo "handle_encoding invoke end" >> ${log_file}
	fi
}

# 确定tmp目录
time=$(date +%H%M%S)
zip_name=`echo "$1" | sed 's/.*\///'`
zip_true_path=`dirname "$1"`
zip_path="/tmp"
mkdir "$zip_path/.$time/"
mkdir "$zip_true_path/.$time/"
cd "$zip_path/.$time"

# 判定压缩文件类型
is_tar=0
is_zip=0
case $1 in
*.7z | *.zip)
	is_zip=1;;
*.tar)
	is_tar=1;;
*.tar.gz | *.tgz)
	compress_parameter="z"
	t_parameter="gzip";;
*.tar.bz2 | *.tbz2)
	compress_parameter="j"
	t_parameter="bzip2";;
*.tar.xz | *.txz)
	compress_parameter="J"
	t_parameter="xz";;
esac

# 解压压缩文件
# 根据不同的压缩文件类型将文件进行解压
# 存储到tmp路径下
# 主要处理以下类型 ：7z zip tar tar.*
if [ $is_zip -eq 1 ];then
	if [ $# -eq 2 ];then
		# 7za 解压
		7za x -p$2 -bd -y -o$zip_path/.$time/ -- $1 #> /dev/null 2>&1
	else
		# unzip 解压
		unzip -d $zip_path/.$time/ -o -- $1 #> /dev/null 2>&1
	fi
else
	# tar 解压
	tar $compress_parameter -xf $1 -C$zip_path/.$time/ #> /dev/null 2>&1
fi


# 处理文件名编码
handle_encoding

if [ $is_tar -ne 1 ];then
	if [ $is_zip -eq 1 ];then
		if [ $# -eq 2 ];then
			# 7za 压缩
			7za a -r  "$zip_true_path/.$time/$zip_name" .
		else
			# unzip 压缩
			zip -r "$zip_true_path/.$time/$zip_name" .
		fi
	else
		tar $compress_parameter -cf "$zip_true_path/.$time/$zip_name" *
	fi
else
	tar -cf "$zip_true_path/.$time/$zip_name" *
fi

	#echo "100"
#) | zenity --pulsate --auto-close --progress --title "重建压缩包" --no-cancel --text="请稍等..."

#if [ "$?" = 1 ] ; then
    #notify-send '重建'$zip_name'压缩包取消'
#else
    #notify-send '重建'$zip_name'压缩包完成'
	cd "$zip_true_path/.$time"
	mv -f "$zip_name" "$zip_true_path/"
#fi

rm -rf "$zip_path/.$time" "$zip_true_path/.$time"

echo "===============engrampa_long_reb invoke end==============="  >> ${log_file}
