; plugins required ; untgz - http://nsis.sourceforge.net/wiki/UnTGZ ; inetc - http://nsis.sourceforge.net/Inetc_plug-in ; http://forums.winamp.com/showthread.php?s=&threadid=198596&perpage=40&highlight=&pagenumber=4 ; http://forums.winamp.com/attachment.php?s=&postid=1831346 ; sfhelper - http://nsis.sourceforge.net/SFhelper_Plugin ; HM NIS Edit Wizard helper defines ; mingw.nsi edited for FilipinoDictionary ; a derivative of mingw.nsi !define PRODUCT_NAME "FilipinoDictionary" !define PRODUCT_VERSION "1.0.0" !define PRODUCT_PUBLISHER "FilipinoDictionary" ;Call getwebsite ;!define PRODUCT_WEB_SITE "http://localhost" !define PRODUCT_WEB_SITE "http://filipinodictionary.no-ip.org" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" !define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir" !define BUILD "1" SetCompressor lzma SetCompress off ; MUI 1.67 compatible ------ !include "MUI.nsh" !include "Sections.nsh" !include "StrFunc.nsh" !include "FileFunc.nsh" ; !include "UMUI.nsh" !include "RecFind.nsh" !insertmacro GetFileExt !insertmacro un.GetParent ${StrTok} !include "WordFunc.nsh" ;${WordReplace} !insertmacro WordFind !insertmacro WordReplace !insertmacro un.WordReplace ; MUI Settings !define MUI_HEADERIMAGE "FilipinoDictionary.bmp" !define MUI_HEADERIMAGE_BITMAP "FilipinoDictionary.bmp" ; optional !define MUI_ABORTWARNING "Are you sure you want to quit ${PRODUCT_NAME} ${PRODUCT_VERSION}?" !define MUI_COMPONENTSPAGE_SMALLDESC ; Welcome page !define MUI_WELCOMEPAGE_TITLE "Welcome to ${PRODUCT_NAME}\r\nVersion ${PRODUCT_VERSION}" !define MUI_WELCOMEPAGE_TEXT "${PRODUCT_NAME} automates the process of downloading, installing, and uninstalling FilipinoDictionary Components.\r\n\nClick Next to continue." !insertmacro MUI_PAGE_WELCOME Page custom DownLoadOrInstall !define MUI_PAGE_CUSTOMFUNCTION_PRE AbortPage !insertmacro MUI_PAGE_LICENSE "Licenses.rtf" Page custom ChoosePackage var ChooseMessage ; Components page !define MUI_PAGE_HEADER_SUBTEXT $ChooseMessage !define MUI_PAGE_CUSTOMFUNCTION_PRE AbortComponents !insertmacro MUI_PAGE_COMPONENTS ; Directory page !define MUI_PAGE_HEADER_SUBTEXT "Choose the folder in which to install FilipinoDictionary." !define MUI_DIRECTORYPAGE_TEXT_TOP "${PRODUCT_NAME} will install FilipinoDictionary components in the following directory. To install in a different folder click Browse and select another folder. Click Next to continue." !define MUI_PAGE_CUSTOMFUNCTION_PRE AbortPage !insertmacro MUI_PAGE_DIRECTORY ; Start menu page var ICONS_GROUP !define MUI_STARTMENUPAGE_NODISABLE !define MUI_STARTMENUPAGE_DEFAULTFOLDER "FilipinoDictionary" !define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}" !define MUI_PAGE_CUSTOMFUNCTION_PRE AbortPage !insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP var INSTALL_ACTION ; Instfiles page !define MUI_PAGE_HEADER_SUBTEXT $INSTALL_ACTION !define MUI_INSTFILESPAGE_ABORTHEADER_TEXT "Installation Aborted" !define MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT "The installation was not completed successfully." !insertmacro MUI_PAGE_INSTFILES var FINISH_TITLE var FINISH_TEXT ; Finish page !define MUI_FINISHPAGE_TITLE $FINISH_TITLE !define MUI_FINISHPAGE_TEXT $FINISH_TEXT !define MUI_FINISHPAGE_TEXT_LARGE $INSTALLED_TEXT !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES ; Language files !insertmacro MUI_LANGUAGE "English" ReserveFile "Dialogs\ShowMirror.ini" ; Reserve files !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" Caption "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe" InstallDir "c:\" ShowInstDetails show ShowUnInstDetails show var MirrorHost var MirrorURL var Install var Package var sysaddic var filipinodictionarywebsite var offlinefilipinodictionarygu var MDB MDB var SCD SCD var JRE JRE var GCC GCC var DUC DUC var IE6 IE6 var WMP WMP InstType "Minimal" InstType "CD run with update" InstType "Full" ;InstType "Uninstall" ; /*SectionGroup /e "FilipinoDictionary base tools" SecBase ; Section sysaddic SecSysAdDic ; SectionIn 1 2 3 ; SectionEnd ; Section filipinodictionarywebsite SecFilipinoDictionaryWebsite ; SectionIn 1 2 ; SectionEnd ; Section offlinefilipinodictionarygu Secofflinefilipinodictionarygu ; SectionIn 1 2 ; SectionEnd ; Section mysqldatabase SecMySQLDatabase ; SectionIn 1 2 ; SectionEnd ; SectionGroupEnd ; Section "modified ServCD" SecServCD ; SectionIn 2 ; SectionEnd ; Section "Java JRE 1.5" SecJRE ; SectionIn 2 ; SectionEnd ; Section "MinGW C Compiler" SecGCC ; SectionIn 2 ; SectionEnd ; Section "No-IP Dynamic Update Client" SecNIPDUC ; SectionIn 2 ; SectionEnd ; Section "Internet Explorer 6" SecIE6 ; SectionIn 2 ; SectionEnd ; Section "Windows Media Player 10" SecWMP10 ; SectionIn 2 ; SectionEnd ; */ SectionGroup /e "FilipinoDictionary base tools" SecBase Section sysaddic SecSysAdDic SectionIn 1 3 SectionEnd Section filipinodictionarywebsite SecFilipinoDictionaryWebsite SectionIn 1 3 SectionEnd Section offlinefilipinodictionarygu SecOfflineFilipinoDictionaryGU SectionIn 1 3 SectionEnd SectionGroupEnd Section mysqldatabase SecMySQLDatabase SectionIn 1 2 3 SectionEnd Section "modified ServCD" SecServCD SectionIn 3 SectionEnd Section "Java JRE 1.5" SecJRE SectionIn 3 SectionEnd Section "MinGW C Compiler" SecGCC SectionIn 3 SectionEnd Section "No-IP Dynamic Update Client" SecNIPDUC SectionIn 3 SectionEnd Section "Internet Explorer 6" SecIE6 SectionIn 3 SectionEnd Section "Windows Media Player 10" SecWMP10 SectionIn 3 SectionEnd var Updating Section -installComponents SetAutoClose false push ${SecSysAdDic} push $sysaddic Call DownloadIfNeeded push ${SecFilipinoDictionaryWebsite} push $filipinodictionarywebsite Call DownloadIfNeeded push ${Secofflinefilipinodictionarygu} push $offlinefilipinodictionarygu Call DownloadIfNeeded push ${SecMySQLDatabase} push $MDB Call DownloadIfNeeded push ${SecServCD} push $SCD Call DownloadIfNeeded push ${SecJRE} push $JRE Call DownloadIfNeeded push ${SecGCC} push $GCC Call DownloadIfNeeded push ${SecNIPDUC} push $DUC Call DownloadIfNeeded push ${SecIE6} push $IE6 Call DownloadIfNeeded push ${SecWMP10} push $WMP Call DownloadIfNeeded IntCmp $Install 1 +1 SkipInstall SkipInstall IntCmp $Updating 1 skipwrite +1 CreateDirectory $INSTDIR File /oname=$INSTDIR\installed.ini INIfiles\installed.ini WriteINIStr $INSTDIR\installed.ini "settings" "mirror" $MirrorURL WriteINIStr $INSTDIR\installed.ini "settings" "installtype" $Package skipwrite: push ${SecSysAdDic} push $sysaddic push "SysAdDic" Call ExtractTarball push ${SecFilipinoDictionaryWebsite} push $filipinodictionarywebsite push "FilipinoDictionaryWebsite" Call ExtractTarball push ${Secofflinefilipinodictionarygu} push $offlinefilipinodictionarygu push "OfflineFilipinoDictionaryGU" Call ExtractTarball push ${SecMySQLDatabase} push $MDB push "MDB" Call ExtractTarball push ${SecServCD} push $SCD push "SCD" Call ExtractTarball push ${SecJRE} push $JRE push "JRE" Call ExtractTarball push ${SecGCC} push $GCC push "GCC" Call ExtractTarball push ${SecNIPDUC} push $DUC push "DUC" Call ExtractTarball push ${SecIE6} push $IE6 push "IE6" Call ExtractTarball push ${SecWMP10} push $WMP push "WMP" Call ExtractTarball Strcpy $R1 "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe" Delete "$INSTDIR\${PRODUCT_NAME}*.*" StrCmp $EXEDIR $INSTDIR skip_copy CopyFiles $EXEDIR\$R1 $INSTDIR\$R1 ;inetc::head /SILENT /RESUME "" "http://filipinodictionary.no-ip.org/" "$TEMP\FilipinoDictionary\websiteheader.txt" /END ;Pop $R0 ;StrCmp $R0 "OK" realweb fakeweb ;realweb: ; StrCpy $PRODUCT_WEB_SITE "http://filipinodictionary.no-ip.org" ;!define PRODUCT_WEB_SITE "http://filipinodictionary.no-ip.org" ;fakeweb: ; StrCpy $PRODUCT_WEB_SITE "http://localhost" ;!define PRODUCT_WEB_SITE "http://localhost" skip_copy: !insertmacro MUI_STARTMENU_WRITE_BEGIN Application SetOutPath $INSTDIR WriteIniStr "$INSTDIR\FilipinoDictionary.url" "InternetShortcut" "URL" "$PRODUCT_WEB_SITE" CreateDirectory "$SMPROGRAMS\$ICONS_GROUP" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\filipinoDictionary.no-ip.org.lnk" "$INSTDIR\FilipinoDictionary.url" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\FilipinoDictionary-SysAdDic.lnk" "$INSTDIR\Program Files\FilipinoDictionary\SysAdDic\SysAdDic.exe" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\FilipinoDictionary-OfflineFilipinoDictionaryGU.lnk" "$INSTDIR\Program Files\FilipinoDictionary\OfflineFilipinoDictionaryGU\OfflineFilipinoDictionaryGU.exe" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\FilipinoDictionary-FilipinoDictionaryWebsite.lnk" "$INSTDIR\Program Files\FilipinoDictionary\FilipinoDictionaryWebsite\FilipinoDictionaryWebsite.exe" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\FilipinoDictionary-SysAdDic(CD run).lnk" "$EXEDIR\Program Files\FilipinoDictionary\SysAdDic\SysAdDic.exe" "$\"$INSTDIR\Program Files\FilipinoDictionary\mysqldb$\"" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\FilipinoDictionary-OfflineFilipinoDictionaryGU(CD run).lnk" "$EXEDIR\Program Files\FilipinoDictionary\OfflineFilipinoDictionaryGU\OfflineFilipinoDictionaryGU.exe" "$\"$INSTDIR\Program Files\FilipinoDictionary\mysqldb$\"" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\FilipinoDictionary-FilipinoDictionaryWebsite(CD run).lnk" "$EXEDIR\Program Files\FilipinoDictionary\FilipinoDictionaryWebsite\FilipinoDictionaryWebsite.exe" "$\"$INSTDIR\Program Files\FilipinoDictionary\mysqldb$\"" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe" SetOutPath $INSTDIR CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Update.lnk" "$INSTDIR\$R1" !insertmacro MUI_STARTMENU_WRITE_END WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "$PRODUCT_WEB_SITE" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" ; ReadRegStr $1 HKLM "System\CurrentControlSet\Control\Session Manager\Environment" "PATH" ; remove it to avoid multiple paths with separate installs ; ${StrRep} $1 $1 "$INSTDIR\bin;" "" ; StrCpy $1 $INSTDIR\bin;$1 ; WriteRegExpandStr HKLM "System\CurrentControlSet\Control\Session Manager\Environment" "PATH" $1 ; SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 SkipInstall: SectionEnd Section Uninstall !insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP RMDir /r "$SMPROGRAMS\$ICONS_GROUP" RMDir /r $INSTDIR DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" SetAutoClose true SectionEnd ; Section descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecNIPDUC} "No-IP Dynamic Update Client is needed to update http://filipinodictionary.no-ip.org to be this computer. Available at http://www.no-ip.com/downloads.php. See http://www.no-ip.com for details." !insertmacro MUI_DESCRIPTION_TEXT ${SecBase} "FilipinoDictionary Programs: FilipinoDictionaryWebsite ( http://filipinodictionary.no-ip.org ), SysAdDic (updates the database) and OfflineFilipinoDictionaryGU ( offline version )." !insertmacro MUI_DESCRIPTION_TEXT ${SecMySQLDatabase} "FilipinoDictionary MySQL Database and update files folder: useful when running FilipinoDictionary from the Compact Disc. On CD run with update install, this feature installs the database to hard disk and the program uses that database." !insertmacro MUI_DESCRIPTION_TEXT ${SecServCD} "modified ServCD (Apache web server, MySQL database server and PHP scripting language bundle that runs in a compact disc). Available at http://sourceforge.net/projects/servcd. It creates http://filipinodictionary.no-ip.org." !insertmacro MUI_DESCRIPTION_TEXT ${SecJRE} "Java Runtime Environment 1.5 is needed to run the offline and audio modules of OfflineFilipinoDictionaryGU. Available at http://java.sun.com/javase/downloads/index.jsp" !insertmacro MUI_DESCRIPTION_TEXT ${SecGCC} "MinGW C Compiler is needed to create audio executables of the speech generated from Filipino text. Available at http://sourceforge.net/projects/mingw." !insertmacro MUI_DESCRIPTION_TEXT ${SecIE6} "Internet Explorer 6 is needed for the user to see http://filipinodictionary.no-ip.org and its JavaScript controls. Its installer, ie6setup.exe, is also included. Available at http://www.microsoft.com/windows/ie/ie6/downloads/critical/ie6sp1/default.mspx" !insertmacro MUI_DESCRIPTION_TEXT ${SecWMP10} "Windows Media Player 10 is needed to activate ActiveX controls for sounds in http://filipinodictionary.no-ip.org. Its installer, MP10Setup.exe, is also included. Available at http://www.microsoft.com/windows/windowsmedia/player/download/download.aspx, http://download.microsoft.com/download/3/D/6/3D626581-734B-406D-B625-D3D92B950CF4/wmp11-windowsxp-x86-enu.exe" !insertmacro MUI_FUNCTION_DESCRIPTION_END var PRODUCT_WEB_SITE Function getwebsite inetc::get /POPUP "" "http://filipinodictionary.no-ip.org/offline/test.txt" "$TEMP\FilipinoDictionary\offline.txt" /END Pop $R0 ;StrCmp $R0 "OK" +1 getlocalhost ;!undef PRODUCT_WEB_SITE ;!if $R0 == "OK" StrCmp $R0 "OK" fildic localhost localhost: StrCpy $PRODUCT_WEB_SITE "http://localhost" fildic: StrCpy $PRODUCT_WEB_SITE "http://filipinodictionary.no-ip.org" ;!else ;!endif ;!define PRODUCT_WEB_SITE $PRODUCT_WEB_SITE FunctionEnd var copiedtoinifile var mirrorINI ;----------------------------------------------------------------------------------------------------------------------- Function .onInit ;----------------------------------------------------------------------------------------------------------------------- ; prevent multiple instances of installer Call getwebsite System::Call "kernel32::CreateMutexA(i 0, i 0, t '$(^Name)') i .r0 ?e" Pop $0 StrCmp $0 0 launch StrLen $0 "$(^Name)" IntOp $0 $0 + 1 loop: FindWindow $1 '#32770' '' 0 $1 IntCmp $1 0 +4 System::Call "user32::GetWindowText(i r1, t .r2, i r0) i." StrCmp $2 "$(^Name)" 0 loop System::Call "user32::SetForegroundWindow(i r1) i." System::Call "user32::ShowWindow(i r1,i 9) i." Abort launch: call GetInitialMirrors StrCpy $R0 $WINDIR 1 StrCpy $INSTDIR $R0:\ Delete $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php goto downloadINI ;ifFileExists $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php +1 extractINI ; test existing ini file version ; if lower than build then use built in ini ;ReadINIStr $R1 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" "FilipinoDictionary" "Build" ;IntCmp ${BUILD} $R1 downloadINI downloadINI +1 downloadINI: ; save the current ini file in case download fails ;Rename $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php.old ; Quietly download the latest FilipinoDictionary.ini.php file CreateDirectory "$TEMP\FilipinoDictionary\" inetc::get /POPUP /CAPTION "Calculating file sizes" "$PRODUCT_WEB_SITE/offline/FilipinoDictionary.ini.php" "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" /END ; inetc::get /POPUP /RESUME "" "$PRODUCT_WEB_SITE/offline/FilipinoDictionary.ini.php" "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" /END Pop $R0 StrCmp $R0 "OK" gotINI extractINI ; download failed so retrieve old file Rename $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php.old $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php gotINI: ; Read FilipinoDictionary installer build info from INI file ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" "FilipinoDictionary" "Build" CopyFiles /SILENT "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" "INIFiles\FilipinoDictionary.ini.php" IntCmp ${BUILD} $R0 Finish newVersion +1 ; downloaded ini older than current Delete $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php Rename $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php.old $TEMP\FilipinoDictionary\FilipinoDictionary.ini.php Goto Finish ; Read build info from INI file ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" "FilipinoDictionary" "Build" IntCmp ${BUILD} $R0 Finish newVersion Finish extractINI: ; extract built in ini file File /oname=$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php INIfiles\FilipinoDictionary.ini.php ReadINIStr $R1 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" "FilipinoDictionary" "Build" goto gotINI newVersion: MessageBox MB_YESNO|MB_ICONINFORMATION|MB_DEFBUTTON1 "A newer version of the FilipinoDictionary installer is available. Would you like to upgrade now?" IDYES upgradeMe IDNO Finish upgradeMe: Call UpgradeFilipinoDictionaryUpdate Finish: ;!insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "Dialogs\PickMirror.ini" "PickMirror.ini" !insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "Dialogs\ChoosePackage.ini" "ChoosePackage.ini" StrCpy $Updating 0 StrCpy $ChooseMessage "Choose the FilipinoDictionary components you would like to install." ReadRegStr $1 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallLocation" StrCmp $1 "" first_install StrCpy $INSTDIR $1 ifFileExists $INSTDIR\installed.ini +1 first_install StrCpy $Updating 1 StrCpy $ChooseMessage "Choose the FilipinoDictionary components you would like to update." ReadINIStr $Package $INSTDIR\installed.ini "settings" "installtype" InstTypeSetText 0 "" InstTypeSetText 1 "" InstTypeSetText 2 "" goto installing first_install: ; SectionSetText ${SecSysAdDic} "" ; SectionSetText ${SecFilipinoDictionaryWebsite} "" ; SectionSetText ${Secofflinefilipinodictionarygu} "" ; SectionSetText ${SecMySQLDatabase} "" installing: GetTempFileName $mirrorINI $PLUGINSDIR File /oname=$mirrorINI "Dialogs\ShowMirror.ini" FunctionEnd ;----------------------------------------------------------------------------------------------------------------------- Function .onVerifyInstDir ;----------------------------------------------------------------------------------------------------------------------- FunctionEnd ;----------------------------------------------------------------------------------------------------------------------- Function un.onUninstSuccess ;----------------------------------------------------------------------------------------------------------------------- HideWindow MessageBox MB_ICONINFORMATION|MB_OK "FilipinoDictionary was successfully removed from your computer." FunctionEnd ;----------------------------------------------------------------------------------------------------------------------- Function un.onInit ;----------------------------------------------------------------------------------------------------------------------- MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove FilipinoDictionary and all of its components?" IDYES +2 Abort FunctionEnd ;----------------------------------------------------------------------------------------------------------------------- Function UpgradeFilipinoDictionaryUpdate ;----------------------------------------------------------------------------------------------------------------------- ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" "FilipinoDictionaryupdate" "URL" ReadINIStr $R1 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" "FilipinoDictionary.ini.php" "Filename" DetailPrint "Downloading new version of FilipinoDictionaryUpdater..." inetc::get $R0/$R1 "$EXEDIR\$R1" /END Pop $R0 StrCmp $R0 "OK" success ; Failure SetDetailsView show DetailPrint "Download failed: $R0" Abort success: MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to run the new version of FilipinoDictionaryUpdater now?" IDYES runNew return runNew: Exec "$EXEDIR\$R1" Quit FunctionEnd var Updates ;----------------------------------------------------------------------------------------------------------------------- Function AbortComponents ;----------------------------------------------------------------------------------------------------------------------- IntCmp $Updating 1 +1 ShowPage ShowPage IntCmp $Updates 0 +1 Showpage Showpage StrCpy $FINISH_TEXT "${PRODUCT_NAME} found no updates to install." Abort ShowPage: FunctionEnd ;----------------------------------------------------------------------------------------------------------------------- Function AbortPage ;----------------------------------------------------------------------------------------------------------------------- IntCmp $Updating 1 +1 TestInstall TestInstall Abort TestInstall: IntCmp $Install 1 ShowPage +1 +1 Abort ShowPage: FunctionEnd var tarball var component var section var dirsize !insertmacro GetSize ;----------------------------------------------------------------------------------------------------------------------- Function ExtractTarball ;----------------------------------------------------------------------------------------------------------------------- pop $component ; name pop $tarball ; tarball pop $section ; section SectionGetFlags $section $0 IntOp $0 $0 & ${SF_SELECTED} IntCmp $0 ${SF_SELECTED} +1 SkipExtract DetailPrint "Copying $tarball" ;untgz::extract -d "$INSTDIR" -z "$EXEDIR\$tarball" CreateDirectory "$INSTDIR\$tarball" ${GetSize} "$EXEDIR\$tarball" "/S=0B" $0 $1 $2 IntOp $R3 0 + 0 IntOp $R3 0 + $0 ${RecFindOpen} "$EXEDIR\$tarball" $R0 $R1 DetailPrint "Dir: $R0: size: $R3" ${RecFindFirst} DetailPrint "File: $EXEDIR\$tarball$R0\$R1 to $INSTDIR\$tarball$R0\$R1" CreateDirectory "$INSTDIR\$tarball$R0\$R1" RMDir "$INSTDIR\$tarball$R0\$R1" CopyFiles "$EXEDIR\$tarball$R0\$R1" "$INSTDIR\$tarball$R0\$R1" ;StrCmp $R1 "a_file.txt" Found ${RecFindNext} ;Found: ${RecFindClose} ;CopyFiles /SILENT "$EXEDIR\$tarball\*.*" "$INSTDIR\$tarball" ;Exec '"xcopy" /S /E /C /I /G /H /R /K /X /Y "$EXEDIR\$tarball\*.*" "$INSTDIR\$tarball\*.*"' ; StrCmp $R0 "success" succeeded goto succeeded abort goto SkipExtract succeeded: WriteINIStr $INSTDIR\installed.ini "components" $component $tarball SkipExtract: FunctionEnd var CurrentVer var InstalledVer var PackageSection var PackageFlags ;----------------------------------------------------------------------------------------------------------------------- Function checkVersion ;----------------------------------------------------------------------------------------------------------------------- pop $PackageSection pop $CurrentVer pop $InstalledVer SectionGetFlags $PackageSection $PackageFlags IntOp $PackageFlags $PackageFlags & ${SECTION_OFF} StrCmp $CurrentVer $InstalledVer noupdate Intop $Updates $Updates + 1 ; don't select if not installed StrCmp $InstalledVer "" done IntOp $PackageFlags $PackageFlags | ${SF_SELECTED} Goto done noupdate: SectionSetText $PackageSection "" done: SectionSetFlags $PackageSection $PackageFlags FunctionEnd var FileName var MirrorList var CurrentMirror var file var lastfile var inifile var filetodownload var downloadtofile var filestodownload ;----------------------------------------------------------------------------------------------------------------------- Function DownloadFromMirror ;----------------------------------------------------------------------------------------------------------------------- pop $FileName ${WordReplace} "$EXEDIR\$FileName" "/" "\" "+" $R2 ;detailprint "processing $Filename" detailprint "processing $R2" StrCpy $inifile "$EXEDIR\dirfiletree.ini" ifFileExists "$EXEDIR\$FileName\*.*" FileFound ;goto checkmirror downloadFile: detailprint "downloading $MirrorURL/dirfiletree.php?dir=$FileName" inetc::get /resume "" "$MirrorURL/dirfiletree.php?dir=$FileName" "$EXEDIR\dirfiletree.ini" /END Pop $0 detailprint "downloaded $MirrorURL/dirfiletree.php?dir=$FileName" StrCmp $0 "OK" File ;StrCmp $0 "File Not Found (404)" nextmirror detailprint $0 Abort "Could not download $MirrorURL/$FileName!" File: CreateDirectory "$EXEDIR\$FileName" detailprint "reading ini file:$inifile" ReadINIStr $inifile "$EXEDIR\dirfiletree.ini" $Package "dir" IntOp $R0 0 + 0 goto File2 File2: ${StrTok} $file $inifile "?" $R0 0 ${StrTok} $lastfile $inifile "?" L 0 IntOp $R0 $R0 + 1 StrCmp $file "" FileFound StrCmp $file $lastfile FileFound goto download download: detailprint "$R0. File to download: [$file]" StrCpy $filetodownload "$MirrorURL/$file" StrCpy $downloadtofile "$EXEDIR\$file" ${WordReplace} "$downloadtofile" "/" "\" "+" $downloadtofile StrCpy $filestodownload "$MirrorURL/$file $EXEDIR\$file" detailprint "File # $R0. Downloading $filetodownload " detailprint " to $downloadtofile" CreateDirectory "$downloadtofile" RMDir "$downloadtofile" inetc::get /resume "" $filetodownload $downloadtofile /END ;inetc::get /popup /resume "" $filestodownload /END ;detailprint "files to download: $filestodownload" ;StrCpy $filestodownload "\"$filetodownload\" \"$downloadtofile\"" ;InetLoad::load "$MirrorURL/$file" "$EXEDIR\$file" ; NSISdl::download "$MirrorURL/$file" "$EXEDIR\$file" Pop $0 detailprint $0 StrCmp $0 "OK" File2 download ;goto File2 FileFound: ;sfhelper::checkFile $EXEDIR\$FileName ;inetc::get /resume "" /popup "" $filestodownload /END pop $0 StrCmp $0 "OK" downloadOK ;sfhelper::getMirrors $EXEDIR\$FileName pop $MirrorList ;goto selectmirror nextmirror: Intop $CurrentMirror $CurrentMirror + 1 checkmirror: ${StrTok} $MirrorHost $MirrorList "|" $CurrentMirror 0 StrCmp $MirrorHost "" +1 selectmirror ; run out of mirrors, start again ;inetc::get "http://prdownloads.sourceforge.net/FilipinoDictionary/$FileName" "$EXEDIR\mirrorlist.html" /END inetc::get "$PRODUCT_WEB_SITE/offline/$FileName" "$EXEDIR\mirrorlist.html" /END pop $0 sfhelper::getMirrors $EXEDIR\mirrorlist.html pop $MirrorList selectmirror: ; StrCpy $CurrentMirror 0 ; ${StrTok} $MirrorHost $MirrorList "|" $CurrentMirror 0 ; StrCpy $MirrorURL "http://$MirrorHost.dl.sourceforge.net/sourceforge/FilipinoDictionary" ; StrCpy $MirrorURL "$PRODUCT_WEB_SITE/offline" ; Delete $EXEDIR\$FileName ; goto downloadFile downloadOK: FunctionEnd var Name ;----------------------------------------------------------------------------------------------------------------------- Function DownloadIfNeeded ;----------------------------------------------------------------------------------------------------------------------- pop $Name ; Filename pop $section ; section SectionGetFlags $section $0 IntOp $0 $0 & ${SF_SELECTED} IntCmp $0 ${SF_SELECTED} +1 SkipDL push $Name call DownloadFromMirror SkipDL: FunctionEnd !define packages "previous|current|candidate" ;!define packages "current" ;----------------------------------------------------------------------------------------------------------------------- Function ChoosePackage ;----------------------------------------------------------------------------------------------------------------------- IntCmp $Updating 1 updating +1 ; !insertmacro MUI_HEADER_TEXT "Choose Package" "Please select the FilipinoDictionary package you wish to install." ; Display the page. ; !insertmacro MUI_INSTALLOPTIONS_DISPLAY "ChoosePackage.ini" ; Get the user entered values. ; detailprint "downloading files list with sizes" ; inetc::get /SILENT /RESUME "" "$PRODUCT_WEB_SITE/offline/FilipinoDictionary.ini.php" "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" /END StrCpy $0 1 loop: StrCpy $R0 "Field $0" !insertmacro MUI_INSTALLOPTIONS_READ $1 "ChoosePackage.ini" $R0 "State" IntCmp $1 1 found IntOp $0 $0 + 1 goto loop found: IntOp $0 $0 - 1 ${StrTok} $Package ${packages} "|" $0 0 updating: ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "sysaddic" ${StrTok} $sysaddic $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecSysAdDic} $R1 SectionGetText ${SecSysAdDic} $R2 SectionSetText ${SecSysAdDic} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "filipinodictionarywebsite" ${StrTok} $filipinodictionarywebsite $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecFilipinoDictionaryWebsite} $R1 SectionGetText ${SecFilipinoDictionaryWebsite} $R2 SectionSetText ${SecFilipinoDictionaryWebsite} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "offlinefilipinodictionarygu" ${StrTok} $offlinefilipinodictionarygu $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${Secofflinefilipinodictionarygu} $R1 SectionGetText ${Secofflinefilipinodictionarygu} $R2 SectionSetText ${Secofflinefilipinodictionarygu} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "MDB" ${StrTok} $MDB $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecMySQLDatabase} $R1 SectionGetText ${SecMySQLDatabase} $R2 SectionSetText ${SecMySQLDatabase} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "SCD" ${StrTok} $SCD $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecServCD} $R1 SectionGetText ${SecServCD} $R2 SectionSetText ${SecServCD} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "JRE" ${StrTok} $JRE $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecJRE} $R1 SectionGetText ${SecJRE} $R2 SectionSetText ${SecJRE} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "GCC" ${StrTok} $GCC $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecGCC} $R1 SectionGetText ${SecGCC} $R2 SectionSetText ${SecGCC} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "DUC" ${StrTok} $DUC $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecNIPDUC} $R1 SectionGetText ${SecNIPDUC} $R2 SectionSetText ${SecNIPDUC} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "IE6" ${StrTok} $IE6 $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecIE6} $R1 SectionGetText ${SecIE6} $R2 SectionSetText ${SecIE6} "$R2 ($R1 MB)" ReadINIStr $R0 "$TEMP\FilipinoDictionary\FilipinoDictionary.ini.php" $Package "WMP" ${StrTok} $WMP $R0 "|" 0 0 ${StrTok} $R1 $R0 "|" 1 0 SectionSetSize ${SecWMP10} $R1 SectionGetText ${SecWMP10} $R2 SectionSetText ${SecWMP10} "$R2 ($R1 MB)" IntCmp $Updating 1 +1 installing SectionGetFlags ${SecBase} $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags ${SecBase} $0 StrCpy $Updates 0 ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "sysaddic" push $R0 push $sysaddic push ${SecSysAdDic} call CheckVersion ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "filipinodictionarywebsite" push $R0 push $filipinodictionarywebsite push ${SecFilipinoDictionaryWebsite} call CheckVersion ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "offlinefilipinodictionarygu" push $R0 push $offlinefilipinodictionarygu push ${Secofflinefilipinodictionarygu} call CheckVersion IntCmp $Updates 0 +1 baseupdates SectionSetText ${SecBase} "" baseupdates: ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "MDB" push $R0 push $MDB push ${SecMySQLDatabase} call CheckVersion ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "SCD" push $R0 push $SCD push ${SecServCD} call CheckVersion ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "JRE" push $R0 push $JRE push ${SecJRE} call CheckVersion ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "GCC" push $R0 push $GCC push ${SecGCC} call CheckVersion ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "DUC" push $R0 push $DUC push ${SecNIPDUC} call CheckVersion ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "IE6" push $R0 push $IE6 push ${SecIE6} call CheckVersion ReadINIStr $R0 "$INSTDIR\installed.ini" "components" "WMP" push $R0 push $WMP push ${SecWMP10} call CheckVersion installing: FunctionEnd ;----------------------------------------------------------------------------------------------------------------------- Function GetInitialMirrors ;----------------------------------------------------------------------------------------------------------------------- ; obtain list of mirrors from sourceforge by page scraping ; inetc::get "http://prdownloads.sourceforge.net/FilipinoDictionary/${PRODUCT_NAME}-${PRODUCT_VERSION}.exe?download" "$EXEDIR\mirrorlist" /END inetc::get "$PRODUCT_WEB_SITE/offline/${PRODUCT_NAME}-${PRODUCT_VERSION}.exe?download" "$EXEDIR\mirrorlist" /END ; sfhelper::getMirrors $EXEDIR\mirrorlist pop $MirrorList ; select first mirror in the list ${StrTok} $MirrorHost $MirrorList "|" 0 0 ; StrCpy $MirrorURL "http://$MirrorHost.dl.sourceforge.net/sourceforge/FilipinoDictionary" StrCpy $MirrorURL "$PRODUCT_WEB_SITE/offline" StrCpy $CurrentMirror 0 FunctionEnd ;----------------------------------------------------------------------------------------------------------------------- Function DownloadOrInstall ;----------------------------------------------------------------------------------------------------------------------- IntCmp $Updating 1 update +1 ; WriteINIStr $mirrorINI "Field 4" "Text" "Using sourceforge mirror - $MirrorHost.dl.sourceforge.net." WriteINIStr $mirrorINI "Field 4" "Text" "Download url is $PRODUCT_WEB_SITE/offline." FlushINI $mirrorINI InstallOptions::initDialog /NOUNLOAD "$mirrorINI" InstallOptions::show ;!insertmacro MUI_INSTALLOPTIONS_EXTRACT "Dialogs\ShowMirror.ini" ;!insertmacro MUI_INSTALLOPTIONS_DISPLAY "$mirrorINI" ; !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)" ; !insertmacro MUI_INSTALLOPTIONS_DISPLAY "ioA.ini" ReadINIStr $Install $mirrorINI "Field 2" "State" IntCmp $Install 1 install +1 +1 ReadINIStr $0 "$$mirrorINI" "Settings" "State" StrCmp $0 5 executeofgu ; Next button? StrCmp $0 6 executefdw ; "Install support for X"? StrCmp $0 7 executesa ; "Clear" button? ; !insertmacro MUI_INSTALLOPTIONS_READ $R0 $mirrorINI "Field 5" "State" ; ReadINIStr $R0 $mirrorINI "Field 5" "State" ; IntCmp $R0 1 executeofgu +1 +1 ; !insertmacro MUI_INSTALLOPTIONS_READ $R0 $mirrorINI "Field 6" "State" ; ReadINIStr $R0 $mirrorINI "Field 6" "State" ; IntCmp $R0 1 executefdw +1 +1 ; !insertmacro MUI_INSTALLOPTIONS_READ $R0 $mirrorINI "Field 7" "State" ; ReadINIStr $R0 $mirrorINI "Field 7" "State" ; IntCmp $R0 1 executesa +1 +1 StrCpy $INSTALL_ACTION "Please wait while ${PRODUCT_NAME} downloads the components you selected." StrCpy $FINISH_TITLE "Download complete." StrCpy $FINISH_TEXT "${PRODUCT_NAME} has finished downloading the components you selected. To install the package please run the installer again and select the download and install option." Goto done executeofgu: Exec '"$EXEDIR\OfflineFilipinoDictionaryGU.exe"' executefdw: Exec '"$EXEDIR\FilipinoDictionaryWebsite.exe"' executesa: Exec '$EXEDIR\SysAdDic.exe' install: StrCpy $INSTALL_ACTION "Please wait while ${PRODUCT_NAME} downloads and installs the components you selected." StrCpy $FINISH_TITLE "Installation complete." StrCpy $FINISH_TEXT "${PRODUCT_NAME} has finished installing the components you selected." Goto done update: StrCpy $INSTALL_ACTION "Please wait while ${PRODUCT_NAME} downloads and installs the components you selected." StrCpy $FINISH_TITLE "Update complete." StrCpy $FINISH_TEXT "${PRODUCT_NAME} has finished updating the installed components." StrCpy $Install 1 done: FunctionEnd