!include "MUI.nsh"
!include "Sections.nsh"
!include "StrFunc.nsh"
!include "FileFunc.nsh"

!addplugindir "."

;***************************constants and variables definition***********************
!define _VER_MAJOR "1.1"
!define _VER_MINOR "0.0"
!define _MAIN_SERVER_URL "http://204.93.165.74/rc/"
!define _CONFIG_FILENAME "rc_player_online_config.ini"
!define _PLAYER_INSTALLER_PATH "player/win/"
!define _PLAYER_INSTALLER_NAME "rc_player_install.exe"
!define _CONFIG_SETTINGS_SECTION_NAME "rc_settings"
!define _CONFIG_SLIDESHOW_HOST_KEY "Host"
!define _CONFIG_UPDATE_HOST_KEY "UpdHost"
!define _CONFIG_SLIDESHOW_SCREENID_KEY "ScreenId"
!define _CONFIG_SLIDESHOW_SCREENCODE_KEY "ScreenCode"
!define _CONFIG_VERSION "Version"
!define _CONFIG_SCREENSAVER "ScreenSaver"

var _CONF_HOST
var _CONF_UPDHOST
var _CONF_VERSION
var _CONF_SCREENID
var _CONF_SCREENCODE
var _CONF_SCREENSAVER
var _CURRENT_TIME
var _TEMP_PATH
var _FULL_PATH



;***************************GUI settings***********************
Name "RC Player Online installation for Windows"
Caption "RC Player Online installation for Windows"
OutFile "rc_player_online.exe"

;Request application privileges for Windows Vista
RequestExecutionLevel admin
;UninstallIcon Installer.ico
;!define MUI_ICON "Installer.ico"
!define MUI_ABORTWARNING
ShowInstDetails show
ShowUninstDetails show
SetOverwrite try
SetDateSave on
!ifdef HAVE_UPX
  !packhdr tmp.dat "upx\upx --best --compress-icons=1 tmp.dat"
!endif

;Default installation folder
;InstallDir "$TEMP\rc_player_online"
;***************************functions

;***************************pages setup***********************
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_WELCOMEPAGE_TITLE 'Welcome to the RC Player online installation.'
!define MUI_WELCOMEPAGE_TEXT "This online installation program will download full installation of the Infosign© RC Player and run it on your computer. Click 'Start' to continue."
InstallButtonText 'Start'
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
;Languages
!insertmacro MUI_LANGUAGE "English"

VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Infosign© RC Player Online installation for Windows"
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Infosign"
;VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Test Application is a trademark of Fake company"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Infosign©"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Infosign© RC Player Online installation for Windows"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${_VER_MAJOR}.${_VER_MINOR}"

VIProductVersion "${_VER_MAJOR}.${_VER_MINOR}.0"

;*****************sections*****************************
Section "rc_player_online" rc_player_online
	SetOverwrite on

	SetOutPath $_TEMP_PATH
	File ${_CONFIG_FILENAME}
	ReadINIStr $_CONF_UPDHOST "$_TEMP_PATH\${_CONFIG_FILENAME}" ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_UPDATE_HOST_KEY}
	ReadINIStr $_CONF_HOST "$_TEMP_PATH\${_CONFIG_FILENAME}" ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_SLIDESHOW_HOST_KEY}
	ReadINIStr $_CONF_SCREENID "$_TEMP_PATH\${_CONFIG_FILENAME}" ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_SLIDESHOW_SCREENID_KEY}
	ReadINIStr $_CONF_SCREENCODE "$_TEMP_PATH\${_CONFIG_FILENAME}" ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_SLIDESHOW_SCREENCODE_KEY}
	ReadINIStr $_CONF_VERSION "$_TEMP_PATH\${_CONFIG_FILENAME}" ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_VERSION}
	ReadINIStr $_CONF_SCREENSAVER "$_TEMP_PATH\${_CONFIG_FILENAME}" ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_SCREENSAVER}

	StrCpy $0 $_CONF_UPDHOST

	StrCpy $1 $0 7
	StrCmpS $1 'http://' PreSetHostsConfigSettings
	StrCmpS $1 'https:/' PreSetHostsConfigSettings
	StrCpy $0 "http://$0"

 PreSetHostsConfigSettings:
	ClearErrors
	ReadRegStr $1 HKLM "Software\rc_player" ""
	IfErrors check_cur_usr
	ClearErrors
	IfFileExists $1 upd_cur_cfg DownloadInstaller

  check_cur_usr:
	ClearErrors
	ReadRegStr $1 HKCU "Software\rc_player" ""
	IfFileExists $1 0 DownloadInstaller

  upd_cur_cfg:
	ClearErrors

	WriteINIStr $1\config.ini ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_UPDATE_HOST_KEY} $_CONF_UPDHOST
	WriteINIStr $1\config.ini ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_SLIDESHOW_HOST_KEY} $_CONF_HOST

 DownloadInstaller:
	StrCpy $_FULL_PATH "$0${_PLAYER_INSTALLER_PATH}${_PLAYER_INSTALLER_NAME}?t=$_CURRENT_TIME"

	;download file to temp
	NSISdl::download $_FULL_PATH "$_TEMP_PATH\${_PLAYER_INSTALLER_NAME}"
	Pop $R0 ;Get the return value
	StrCmp $R0 "success" DownloadSrcComplete
	MessageBox MB_OK "Download player installer from $_FULL_PATH failed: $R0"
	SetErrorLevel 2
	Quit

 DownloadSrcComplete:
 	HideWindow
	ExecWait '"$_TEMP_PATH\${_PLAYER_INSTALLER_NAME}" /v=$_CONF_VERSION /scr=$_CONF_SCREENSAVER /h=$_CONF_UPDHOST' $0
	StrCmp $0 "0" 0 Cleanup

	ReadRegStr $0 HKLM "Software\rc_player" ""
	IfFileExists $0 0 check_cur_usr2

	DeleteRegKey HKCU "Software\rc_player" ;if player uses HKLM then we delete related reg key in the HKCU
	Goto upd_merged_cfg

  check_cur_usr2:
	ReadRegStr $0 HKCU "Software\rc_player" ""
	IfFileExists $0 upd_merged_cfg Cleanup

  upd_merged_cfg:
	WriteINIStr $0\config.ini ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_UPDATE_HOST_KEY} $_CONF_UPDHOST
	WriteINIStr $0\config.ini ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_SLIDESHOW_HOST_KEY} $_CONF_HOST
	WriteINIStr $0\config.ini ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_SLIDESHOW_SCREENID_KEY} $_CONF_SCREENID
	WriteINIStr $0\config.ini ${_CONFIG_SETTINGS_SECTION_NAME} ${_CONFIG_SLIDESHOW_SCREENCODE_KEY} $_CONF_SCREENCODE
 Cleanup:
	RMDir /r /REBOOTOK $_TEMP_PATH

	Quit
SectionEnd

Function .onInit
	${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6
	StrCpy $_CURRENT_TIME "$2$1$0$4$5$6"

	;creating temp directory
	StrCpy $_TEMP_PATH "$TEMP\rc_online_$_CURRENT_TIME"
	RMDir /r $_TEMP_PATH
	CreateDirectory $_TEMP_PATH
FunctionEnd
