###
#
# AROMA Installer
#   (C) 2011-2012 by Ahmad Amarullah
#	   amarullz - xda-developers
#
###
#
# AROMA Installer Script for Sense of Eclipse
#   (C) 2011-2014 by Miroslav Kallo
#	   Daekin - xda-developers
#
###

ui_print("=========================================");
ui_print("Sense of Eclipse 3.90 by Daekin");
ui_print("=========================================");

ui_print(">>> Formatting partitions");
	assert(unmount("/boot") || ui_print("(boot is unmounted already)"));
	format("MTD","boot");
	assert(unmount("/system") || ui_print("(system is unmounted already)"));
	format("MTD","system");
	assert(unmount("/cache") || ui_print("(cache is unmounted already)"));
	format("MTD","cache");
	package_extract_dir("tools","/tmp");
	set_progress(0.01);

	if file_getprop("/tmp/aroma/install.prop","selected") == "2" then
	ui_print(">>> Wiping user data");
		assert(unmount("/data") || ui_print("(data is unmounted already)"));
		format("MTD","userdata");
		set_perm_recursive(0,0,0755,0755,"/tmp/alignment/");
		run_program("/tmp/alignment/alignment.sh");
		mount("vfat","/dev/block/mmcblk0p1","/sdcard");
	endif;

ui_print(">>> Mounting partitions");
	set_progress(0.02);
	assert(mount("MTD","boot","/boot") || ui_print("(boot is mounted already)"));
	assert(mount("MTD","system","/system") || ui_print("(system is mounted already)"));

	if file_getprop("/tmp/aroma/options.prop","selected.3") == "3" then
		assert(mount("ext4","/dev/block/mmcblk0p2","/data") || ui_print("(data is mounted already)"));
	else
		assert(mount("MTD","userdata","/data") || ui_print("(data is mounted already)"));
	endif;

ui_print(">>> Cleaning process");
	delete_recursive("/data/dalvik-cache");
	delete_recursive("/data/resource-cache");
	set_progress(0.03);

ui_print(">>> Writing System");
	show_progress(0.12,606);
	package_extract_dir("system","/system");

	if file_getprop("/tmp/aroma/device.prop","model") == "US" then
		package_extract_dir("customize/us/system","/system");
	endif;

	if file_getprop("/tmp/aroma/options.prop","selected.3") == "1" then
		package_extract_dir("customize/mount_ext","/system/etc");
	endif;

	if file_getprop("/tmp/aroma/options.prop","selected.3") == "2" then
		package_extract_dir("customize/mount_apps","/system/etc");
	endif;

	if file_getprop("/tmp/aroma/options.prop","selected.3") == "3" || file_getprop("/tmp/aroma/options.prop","selected.3") == "4" then
		package_extract_dir("customize/mount_data","/system/etc");
	endif;

	run_program("/sbin/sync");

	if file_getprop("/tmp/aroma/options.prop","selected.1") == "1" then
	ui_print(">>> Enabling ZRAM");
		package_extract_dir("customize/zram","/system/etc");
	endif;

	if file_getprop("/tmp/aroma/options.prop","selected.2") == "1" then
	ui_print(">>> Extracting classic EGL libraries");
		package_extract_dir("customize/egl_classic","/system/lib");
	endif;

	if file_getprop("/tmp/aroma/options.prop","selected.2") == "2" then
	ui_print(">>> Extracting experimental EGL libraries");
		package_extract_dir("customize/egl_experimental","/system/lib");
	endif;

ui_print(">>> Writing Data");
	if file_getprop("/tmp/aroma/options.prop","selected.3") == "1" || file_getprop("/tmp/aroma/options.prop","selected.3") == "2" then
		assert(mount("ext4","/dev/block/mmcblk0p2","/sd-ext") || ui_print("(sd-ext is mounted already)"));
		show_progress(0.82,605);
		package_extract_dir("data/app","/sd-ext/app");
		package_extract_dir("sysparts","/sd-ext");

		if file_getprop("/tmp/aroma/options.prop","selected.3") == "1" then
		ui_print(">>> Enabling AD2SDX");
			package_extract_dir("customize/data_ad2sdx","/system/etc/init.d");
		endif;

		if file_getprop("/tmp/aroma/device.prop","model") == "US" then
			package_extract_dir("customize/us/sysparts","/sd-ext");
		endif;

		set_perm_recursive(1000,1000,0771,0644,"/sd-ext");
		symlink("/sd-ext/etc/WPDB.zip","/system/etc/WPDB.zip");
		symlink("/sd-ext/lib/libcapsjava_ar.so","/system/lib/libcapsjava_ar.so");
		symlink("/sd-ext/lib/libflashlite.so","/system/lib/libflashlite.so");
		symlink("/sd-ext/lib/libLaputaEngine.so","/system/lib/libLaputaEngine.so");
		symlink("/sd-ext/lib/libLaputaLbJni.so","/system/lib/libLaputaLbJni.so");
		symlink("/sd-ext/lib/libLaputaLbProviderJni.so","/system/lib/libLaputaLbProviderJni.so");
		symlink("/sd-ext/lib/libLaputaLogJni.so","/system/lib/libLaputaLogJni.so");
		symlink("/sd-ext/lib/libnativedocviewer.so","/system/lib/libnativedocviewer.so");
		symlink("/sd-ext/lib/libOlaEngine.so","/system/lib/libOlaEngine.so");
		symlink("/sd-ext/lib/libpolarisoffice.so","/system/lib/libpolarisoffice.so");
		symlink("/sd-ext/lib/libpphwr.so","/system/lib/libpphwr.so");
		symlink("/sd-ext/lib/libpphwrprovider.so","/system/lib/libpphwrprovider.so");
		symlink("/sd-ext/lib/librmsdk.so","/system/lib/librmsdk.so");
		symlink("/sd-ext/lib/libtalk_jni.so","/system/lib/libtalk_jni.so");
		symlink("/sd-ext/lib/lib__bcore.so","/system/lib/lib__bcore.so");
		assert(unmount("/sd-ext") || ui_print("(sd-ext is unmounted already)"));
	endif;

	if file_getprop("/tmp/aroma/options.prop","selected.3") == "3" || file_getprop("/tmp/aroma/options.prop","selected.3") == "4" then
		show_progress(0.82,605);
		package_extract_dir("data/app","/data/app");
		package_extract_dir("sysparts","/data");

		if file_getprop("/tmp/aroma/device.prop","model") == "US" then
			package_extract_dir("customize/us/sysparts","/data");
		endif;

		symlink("/data/etc/WPDB.zip","/system/etc/WPDB.zip");
		symlink("/data/lib/libcapsjava_ar.so","/system/lib/libcapsjava_ar.so");
		symlink("/data/lib/libflashlite.so","/system/lib/libflashlite.so");
		symlink("/data/lib/libLaputaEngine.so","/system/lib/libLaputaEngine.so");
		symlink("/data/lib/libLaputaLbJni.so","/system/lib/libLaputaLbJni.so");
		symlink("/data/lib/libLaputaLbProviderJni.so","/system/lib/libLaputaLbProviderJni.so");
		symlink("/data/lib/libLaputaLogJni.so","/system/lib/libLaputaLogJni.so");
		symlink("/data/lib/libnativedocviewer.so","/system/lib/libnativedocviewer.so");
		symlink("/data/lib/libOlaEngine.so","/system/lib/libOlaEngine.so");
		symlink("/data/lib/libpolarisoffice.so","/system/lib/libpolarisoffice.so");
		symlink("/data/lib/libpphwr.so","/system/lib/libpphwr.so");
		symlink("/data/lib/libpphwrprovider.so","/system/lib/libpphwrprovider.so");
		symlink("/data/lib/librmsdk.so","/system/lib/librmsdk.so");
		symlink("/data/lib/libtalk_jni.so","/system/lib/libtalk_jni.so");
		symlink("/data/lib/lib__bcore.so","/system/lib/lib__bcore.so");
	endif;

ui_print(">>> Flashing boot.img");

	if file_getprop("/tmp/aroma/options.prop","selected.3") == "3" then
		package_extract_dir("customize/boot_ext","/boot");
	else
		package_extract_dir("customize/boot_shared","/boot");
	endif;

	package_extract_dir("boot","/boot");

	if file_getprop("/tmp/aroma/device.prop","bootloader") == "cLK" then
		set_perm(0,0,0755,"/tmp/mkbootimg");
		set_perm(0,0,0755,"/tmp/mkbootimg.sh");
		run_program("/tmp/mkbootimg.sh");
		assert(unmount("/boot") || ui_print("(boot is unmounted already)"));
		write_raw_image("/tmp/boot.img","boot");
		package_extract_dir("customize/clk_shared","/system");

		if file_getprop("/tmp/aroma/device.prop","model") == "US" then
			package_extract_dir("customize/clk_us","/system");
		else
			package_extract_dir("customize/clk_eu","/system");
		endif;

	else
		assert(unmount("/boot") || ui_print("(boot is unmounted already)"));
	endif;

ui_print(">>> Creating toolbox symlinks");
	set_progress(0.98);
	symlink("toolbox","/system/bin/cat");
	symlink("toolbox","/system/bin/chmod");
	symlink("toolbox","/system/bin/chown");
	symlink("toolbox","/system/bin/cmp");
	symlink("toolbox","/system/bin/cp");
	symlink("toolbox","/system/bin/date");
	symlink("toolbox","/system/bin/dd");
	symlink("toolbox","/system/bin/df");
	symlink("toolbox","/system/bin/dmesg");
	symlink("toolbox","/system/bin/du");
	symlink("toolbox","/system/bin/getevent");
	symlink("toolbox","/system/bin/getprop");
	symlink("toolbox","/system/bin/grep");
	symlink("toolbox","/system/bin/hd");
	symlink("toolbox","/system/bin/id");
	symlink("toolbox","/system/bin/ifconfig");
	symlink("toolbox","/system/bin/iftop");
	symlink("toolbox","/system/bin/insmod");
	symlink("toolbox","/system/bin/ioctl");
	symlink("toolbox","/system/bin/ionice");
	symlink("toolbox","/system/bin/kill");
	symlink("toolbox","/system/bin/ln");
	symlink("toolbox","/system/bin/log");
	symlink("toolbox","/system/bin/ls");
	symlink("toolbox","/system/bin/lsmod");
	symlink("toolbox","/system/bin/lsof");
	symlink("toolbox","/system/bin/md5");
	symlink("toolbox","/system/bin/mkdir");
	symlink("toolbox","/system/bin/mount");
	symlink("toolbox","/system/bin/mv");
	symlink("toolbox","/system/bin/nandread");
	symlink("toolbox","/system/bin/netstat");
	symlink("toolbox","/system/bin/newfs_msdos");
	symlink("toolbox","/system/bin/notify");
	symlink("toolbox","/system/bin/printenv");
	symlink("toolbox","/system/bin/ps");
	symlink("toolbox","/system/bin/renice");
	symlink("toolbox","/system/bin/rm");
	symlink("toolbox","/system/bin/rmdir");
	symlink("toolbox","/system/bin/rmmod");
	symlink("toolbox","/system/bin/route");
	symlink("toolbox","/system/bin/schedtop");
	symlink("toolbox","/system/bin/sendevent");
	symlink("toolbox","/system/bin/setconsole");
	symlink("toolbox","/system/bin/setprop");
	symlink("toolbox","/system/bin/sleep");
	symlink("toolbox","/system/bin/smd");
	symlink("toolbox","/system/bin/start");
	symlink("toolbox","/system/bin/stop");
	symlink("toolbox","/system/bin/sync");
	symlink("toolbox","/system/bin/top");
	symlink("toolbox","/system/bin/touch");
	symlink("toolbox","/system/bin/umount");
	symlink("toolbox","/system/bin/uptime");
	symlink("toolbox","/system/bin/vmstat");
	symlink("toolbox","/system/bin/watchprops");
	symlink("toolbox","/system/bin/wipe");

ui_print(">>> Creating additional symlinks");
	symlink("debuggerd","/system/bin/csview");
	symlink("dumpstate","/system/bin/bugreport");
	symlink("dumpstate","/system/bin/dumpcrash");
	symlink("iwmulticall","/system/xbin/iwconfig");
	symlink("iwmulticall","/system/xbin/iwgetid");
	symlink("iwmulticall","/system/xbin/iwlist");
	symlink("iwmulticall","/system/xbin/iwpriv");
	symlink("iwmulticall","/system/xbin/iwspy");
	symlink("/system/bin/bash","/system/bin/sh");
	symlink("/system/xbin/ifconfig","/system/xbin/bb/ifconfig");
	symlink("/system/xbin/route","/system/xbin/bb/route");
	symlink("/system/xbin/su","/system/bin/su");

ui_print(">>> Installing busybox");
	set_perm(0,0,04755,"/system/xbin/busybox");
	run_program("/system/xbin/busybox","--install","-s","/system/xbin");
	set_progress(0.99);

ui_print(">>> Setting permissions");
	set_perm_recursive(0,0,0755,0644,"/system");
	set_perm_recursive(0,2000,0755,0755,"/system/bin");
	set_perm_recursive(1002,1002,0755,0440,"/system/etc/bluz");
		set_perm(0,3003,06755,"/system/bin/ip");
		set_perm(0,3003,0755,"/system/bin/ipd");
		set_perm(0,1000,04750,"/system/bin/iptables");
		set_perm(0,3003,02755,"/system/bin/netcfg");
		set_perm(0,3003,06755,"/system/bin/netd");
		set_perm(0,3004,02755,"/system/bin/ping");
		set_perm(0,2000,06755,"/system/bin/reboot");
		set_perm(0,2000,06755,"/system/bin/run-as");
		set_perm(0,0,0755,"/system/bin/sysrw");
		set_perm(0,0,0755,"/system/bin/sysro");
		set_perm(0,0,04755,"/system/bin/bash");
		set_perm(0,2000,04755,"/system/bin/pppd");
	set_perm_recursive(1002,1002,0755,0440,"/system/etc/bluetooth");
		set_perm(0,0,04755,"/system/etc/ppp/ip-up-vpn");
		set_perm(0,0,0755,"/system/etc/bluetooth");
		set_perm(1000,1000,0640,"/system/etc/bluetooth/auto_pairing.conf");
		set_perm(1002,1002,0440,"/system/etc/bluetooth/input.conf");
		set_perm(1002,1002,0440,"/system/etc/bluetooth/main.conf");
		set_perm(3002,3002,0444,"/system/etc/bluetooth/blacklist.conf");
		set_perm(0,0,0644,"/system/etc/bluetooth/a2dp_avrcp.conf");
		set_perm(1002,1002,0440,"/system/etc/bluetooth/audio.conf");
		set_perm(1002,1002,0440,"/system/etc/dbus.conf");
		set_perm(1014,2000,0550,"/system/etc/dhcpcd/dhcpcd-run-hooks");
	set_perm_recursive(0,0,0777,0777,"/system/etc/ppp");
	set_perm_recursive(0,2000,0755,0755,"/system/xbin");
		set_perm(0,0,06755,"/system/xbin/su");
		set_perm(0,0,04755,"/system/xbin/busybox");
		set_perm(0,0,04755,"/system/xbin/openvpn");
		set_perm(0,2000,0550,"/system/etc/init.goldfish.sh");
	set_perm_recursive(0,2000,0755,0755,"/system/etc/init.d");
		set_perm(1000,1000,0771,"/data");
	set_perm_recursive(1000,1000,0771,0644,"/data/app");

ui_print(">>> Unmounting partitions");
	assert(unmount("/data") || ui_print("(data is unmounted already)"));
	assert(unmount("/system") || ui_print("(system is unmounted already)"));
	set_progress(1.0);

ui_print("=========================================");
ui_print("New ROM flashed successfully!");
ui_print("Please share your experience on XDA.");
ui_print("=========================================");

run_program("/sbin/busybox","cp","/tmp/recovery.log","/sdcard/recovery.log");
