From 818ab818dcc87bacb1acc8448f49c5c5ff99d37f Mon Sep 17 00:00:00 2001
From: canni0 <canni0@b956fd51-792f-4845-bead-9b4dfca2ff2c>
Date: Sat, 1 May 2010 02:25:01 +0000
Subject: - better support for update installation - old files will be removed
 - uninstaller now deletes all shortcuts - select components in uninstaller:
 covers, highscores, config, screenshots, playlists, songs

git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2325 b956fd51-792f-4845-bead-9b4dfca2ff2c
---
 installer/UltraStar Deluxe.nsi              | 114 ++++++++++++++++++++++------
 installer/languages/English.nsh             |   9 ++-
 installer/languages/German.nsh              |   9 ++-
 installer/languages/Hungarian.nsh           |  10 ++-
 installer/settings/files_main_install.nsh   |  27 ++++++-
 installer/settings/files_main_uninstall.nsh |  11 +--
 6 files changed, 143 insertions(+), 37 deletions(-)

diff --git a/installer/UltraStar Deluxe.nsi b/installer/UltraStar Deluxe.nsi
index 66b0bd42..13cf46d0 100644
--- a/installer/UltraStar Deluxe.nsi	
+++ b/installer/UltraStar Deluxe.nsi	
@@ -158,8 +158,20 @@ Function Settings
 
 ; Get all the variables:
 
-Var /GLOBAL CHECKBOX
-Var /GLOBAL checkbox_state
+Var /GLOBAL LABEL_COMPONENTS
+
+Var /GLOBAL CHECKBOX_COVERS
+Var /GLOBAL CB_COVERS_State
+Var /GLOBAL CHECKBOX_SCORES
+Var /GLOBAL CB_SCORES_State
+Var /GLOBAL CHECKBOX_CONFIG
+Var /GLOBAL CB_CONFIG_State
+Var /GLOBAL CHECKBOX_SCREENSHOTS
+Var /GLOBAL CB_SCREENSHOTS_State
+Var /GLOBAL CHECKBOX_PLAYLISTS
+Var /GLOBAL CB_PLAYLISTS_State
+Var /GLOBAL CHECKBOX_SONGS 
+Var /GLOBAL CB_SONGS_State
 
 var /GLOBAL fullscreen
 var /GLOBAL language2
@@ -219,10 +231,33 @@ Function un.AskDelete
 
 nsDialogs::Create /NOUNLOAD 1018
 
-	${NSD_CreateCheckbox} 0 -150 100% 8u "$(delete_all)"
-	Pop $CHECKBOX
+	${NSD_CreateLabel} 0 -195 100% 12u "$(delete_components)"
+	Pop $LABEL_COMPONENTS
+
+	${NSD_CreateCheckbox} 0 -175 100% 8u "$(delete_covers)"
+	Pop $CHECKBOX_COVERS
+	nsDialogs::OnClick /NOUNLOAD $CHECKBOX_COVERS $1
+
+	${NSD_CreateCheckbox} 0 -155 100% 8u "$(delete_config)"
+	Pop $CHECKBOX_CONFIG
+	nsDialogs::OnClick /NOUNLOAD $CHECKBOX_CONFIG $2
+
+	${NSD_CreateCheckbox} 0 -135 100% 8u "$(delete_highscores)"
+	Pop $CHECKBOX_SCORES 
+	nsDialogs::OnClick /NOUNLOAD $CHECKBOX_SCORES $3
+
+	${NSD_CreateCheckbox} 0 -115 100% 8u "$(delete_screenshots)"
+	Pop $CHECKBOX_SCREENSHOTS 
+	nsDialogs::OnClick /NOUNLOAD $CHECKBOX_SCREENSHOTS $4
+
+	${NSD_CreateCheckbox} 0 -95 100% 8u "$(delete_playlists)"
+	Pop $CHECKBOX_PLAYLISTS
+	nsDialogs::OnClick /NOUNLOAD $CHECKBOX_PLAYLISTS $5
+
+	${NSD_CreateCheckbox} 0 -65 100% 18u "$(delete_songs)"
+	Pop $CHECKBOX_SONGS 
+	nsDialogs::OnClick /NOUNLOAD $CHECKBOX_SONGS $6
 
-	nsDialogs::OnClick /NOUNLOAD $CHECKBOX $0
 
 nsDialogs::Show
 
@@ -230,29 +265,53 @@ FunctionEnd
 
 Function un.DeleteAll
 
-${NSD_GetState} $CHECKBOX $checkbox_state
-
-${If} $checkbox_state == "1"
-
-; Remove settings, songs, highscores, covers
+${NSD_GetState} $CHECKBOX_COVERS $CB_COVERS_State
+${NSD_GetState} $CHECKBOX_CONFIG $CB_CONFIG_State
+${NSD_GetState} $CHECKBOX_SCORES $CB_SCORES_State
+${NSD_GetState} $CHECKBOX_SCORES $CB_SCREENSHOTS_State
+${NSD_GetState} $CHECKBOX_SCORES $CB_PLAYLISTS_State
+${NSD_GetState} $CHECKBOX_SONGS  $CB_SONGS_State
 
- RMDir /r "$INSTDIR\songs"
+${If} $CB_COVERS_State == "1" ; Remove covers
  RMDir /r "$INSTDIR\covers"
- Delete "$INSTDIR\config.ini"
- Delete "$INSTDIR\Ultrastar.db"
-
  SetShellVarContext current	
- RMDir /r "$APPDATA\ultrastardx\songs"
  RMDir /r "$APPDATA\ultrastardx\covers"
- Delete "$APPDATA\ultrastardx\config.ini"
- Delete "$APPDATA\ultrastardx\Ultrastar.db"
  SetShellVarContext all
+${EndIf}
 
-${Else}
+${If} $CB_CONFIG_State == "1" ; Remove config
+ SetShellVarContext current
+ Delete "$APPDATA\ultrastardx\config.ini" 
+ SetShellVarContext all
+ Delete "$INSTDIR\config.ini"
+${EndIf}
 
-; If checkbox_state = 0
+${If} $CB_SCORES_State == "1" ; Remove highscores
+ SetShellVarContext current
+ Delete "$APPDATA\ultrastardx\Ultrastar.db" 
+ SetShellVarContext all
+ Delete "$INSTDIR\Ultrastar.db"
+${EndIf}
 
+${If} $CB_SCREENSHOTS_State == "1" ; Remove screenshots
+ RMDir /r "$INSTDIR\sreenshots"
+ SetShellVarContext current
+ RMDir /r "$APPDATA\ultrastardx\screenshots"
+ SetShellVarContext all
+${EndIf}
 
+${If} $CB_SCREENSHOTS_State == "1" ; Remove playlists
+ RMDir /r "$INSTDIR\playlists"
+ SetShellVarContext current
+ RMDir /r "$APPDATA\ultrastardx\playlists"
+ SetShellVarContext all
+${EndIf}
+
+${If} $CB_SONGS_State == "1" ; Remove songs
+ RMDir /r "$INSTDIR\songs"
+ SetShellVarContext current
+ RMDir /r "$APPDATA\ultrastardx\songs"
+ SetShellVarContext all
 ${EndIf}
 
 
@@ -432,7 +491,7 @@ var /GLOBAL version
 StrCpy $version "1.1beta"
 
 
-   System::Call 'kernel32::CreateMutexA(i 0, i 0, t "USdx Installer.exe") ?e'
+  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "USdx Installer.exe") ?e'
 
   Pop $R0
 
@@ -445,22 +504,27 @@ StrCpy $version "1.1beta"
   ${If} $R0 == $version
 	  MessageBox MB_YESNO|MB_ICONEXCLAMATION \
           "${name} v.$R0 $(oninit_alreadyinstalled). $\n$\n $(oninit_installagain)" \
-          IDYES done
+          IDYES continue
           Abort
   ${EndIf}
 
-  ReadRegStr $R1 HKLM \
-  "Software\Microsoft\Windows\CurrentVersion\Uninstall\${name}" \
-  "UninstallString"
+  ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${name}" 'UninstallString'
   StrCmp $R1 "" done
+  
 
   ${If} $R0 != $version
 	  MessageBox MB_YESNO|MB_ICONEXCLAMATION \
           "${name} v.$R0 $(oninit_alreadyinstalled). $\n$\n $(oninit_updateusdx) v.$R0 -> v.${version}" \
-          IDYES done
+          IDYES continue
           Abort
   ${EndIf}
 
+
+continue:
+  ReadRegStr $R2 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${name}" 'UninstallString'
+  MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(oninit_uninstall)" IDNO done
+  ExecWait '"$R2" _?=$INSTDIR'
+
 done:
 
   !insertmacro MUI_LANGDLL_DISPLAY
diff --git a/installer/languages/English.nsh b/installer/languages/English.nsh
index c6c759b9..a3325d5b 100644
--- a/installer/languages/English.nsh
+++ b/installer/languages/English.nsh
@@ -9,13 +9,20 @@ LangString oninit_installagain ${LANG_ENGLISH} "Are you sure you want to install
 LangString oninit_alreadyinstalled ${LANG_ENGLISH} "is already installed"
 LangString oninit_closeusdx ${LANG_ENGLISH} "cannot be uninstalled while its running! Do you want to close it?"
 LangString oninit_updateusdx ${LANG_ENGLISH} "Do you want to update the installation from:"
+LangString oninit_uninstall ${LANG_ENGLISH} "Do you want to uninstall the old version? (recommended)"
 
 LangString update_connect ${LANG_ENGLISH} "Establish internet connection and check for new version"
 LangString button_next ${LANG_ENGLISH} "Next >"
 LangString button_close ${LANG_ENGLISH} "Close"
 LangString update_information ${LANG_ENGLISH} "You can check if a new version of 'UltraStar Deluxe' is available. Thereto an internet connection will be established. If a new version is found, it can be installed afterwards."
 
-LangString delete_all ${LANG_ENGLISH} "Also delete Songs, Settings, Highscores and Covers ?"
+LangString delete_components ${LANG_ENGLISH} "Also delete the following components:"
+LangString delete_covers ${LANG_ENGLISH} "Cover?"
+LangString delete_highscores ${LANG_ENGLISH} "Highscores?"
+LangString delete_config ${LANG_ENGLISH} "Config?"
+LangString delete_screenshots ${LANG_ENGLISH} "Screenshots?"
+LangString delete_playlists ${LANG_ENGLISH} "Playlists?"
+LangString delete_songs ${LANG_ENGLISH} "Remove songs? WARNING: ALL files within the InstallationDir\songs folder will be removed(!)"
 
 LangString update_check_older ${LANG_ENGLISH} "Your version $R0 is outdated. The new version $1 of UltraStar Deluxe is available. Do you want to update?"
 LangString update_check_equal ${LANG_ENGLISH} "Your currently installed version $R0 is up-to-date. No update needed."
diff --git a/installer/languages/German.nsh b/installer/languages/German.nsh
index 6580fa7a..56507ec5 100644
--- a/installer/languages/German.nsh
+++ b/installer/languages/German.nsh
@@ -9,13 +9,20 @@ LangString oninit_installagain ${LANG_GERMAN} "Bist du sicher, dass du es erneut
 LangString oninit_alreadyinstalled ${LANG_GERMAN} "ist bereits installiert"
 LangString oninit_closeusdx ${LANG_GERMAN} "kann nicht w�hrend der Laufzeit deinstalliert werden. Soll es geschlossen werden?"
 LangString oninit_updateusdx ${LANG_GERMAN} "M�chtest du das Programm aktualisieren von"
+LangString oninit_uninstall ${LANG_GERMAN} "M�chtest du die alte Version entfernen? (empfohlen)"
 
 LangString update_connect ${LANG_GERMAN} "Mit dem Internet verbinden und nach aktueller Version suchen"
 LangString button_next ${LANG_GERMAN} "Weiter >"
 LangString button_close ${LANG_GERMAN} "Beenden"
 LangString update_information ${LANG_GERMAN} "Du kannst nach einer aktuelleren Version von 'UltraStar Deluxe' suchen. Dazu wird eine Verbindung mit dem Internet hergestellt. Wurde eine aktuellere Version gefunden, kann diese anschlie�end installiert werden."
 
-LangString delete_all ${LANG_GERMAN} "Lieder, Einstellungen, Highscores und Cover auch l�schen?"
+LangString delete_components ${LANG_GERMAN} "Folgende Komponenten ebenfalls entfernen:"
+LangString delete_covers ${LANG_GERMAN} "Cover?"
+LangString delete_highscores ${LANG_GERMAN} "Statistiken?"
+LangString delete_config ${LANG_GERMAN} "Konfiguration?"
+LangString delete_screenshots ${LANG_GERMAN} "Screenshots?"
+LangString delete_playlists ${LANG_GERMAN} "Playlisten?"
+LangString delete_songs ${LANG_GERMAN} "Lieder l�schen? WARNUNG: ALLE Dateien im Unterordner 'songs' des Installationsverzeichnisses werden gel�scht(!)"
 
 LangString update_check_older ${LANG_GERMAN} "Deine aktuelle Version $R0 ist veraltet. Die neue Version $1 von UltraStar Deluxe ist verf�gbar. M�chtest du sie runterladen?"
 LangString update_check_equal ${LANG_GERMAN} "Deine aktuelle Version $R0 ist auf dem neusten Stand.$\n$\rKein Update ben�tigt."
diff --git a/installer/languages/Hungarian.nsh b/installer/languages/Hungarian.nsh
index d1cc569d..198251f6 100644
--- a/installer/languages/Hungarian.nsh
+++ b/installer/languages/Hungarian.nsh
@@ -10,12 +10,20 @@ LangString oninit_installagain ${LANG_HUNGARIAN} "Biztos abban, hogy m
 LangString oninit_alreadyinstalled ${LANG_HUNGARIAN} "m�r telep�tve van"
 LangString oninit_closeusdx ${LANG_HUNGARIAN} "nem elt�vol�that�, ha m�g fut! K�v�nja a program bez�r�s�t?"
 LangString oninit_updateusdx ${LANG_HUNGARIAN} "K�v�nja-e a programot friss�teni err�l a helyr�l:"
+LangString oninit_uninstall ${LANG_HUNGARIAN} "Do you want to uninstall the old version? (recommended)"
 
 LangString update_connect ${LANG_HUNGARIAN} "�j verzi� keres�se az interneten"
 LangString button_next ${LANG_HUNGARIAN} "Tov�bb >"
 LangString button_close ${LANG_HUNGARIAN} "Bez�r�s"
 LangString update_information ${LANG_HUNGARIAN} "Ellen�rizheti, hogy van-e �j 'UltraStar Deluxe'-verzi�. Ehhez internetkapcsolat sz�ks�ges. Ha van �j verzi�, az ezt k�vet�en telep�thet�."
-LangString delete_all ${LANG_HUNGARIAN} "T�r�lj�k a dalokat, a pontsz�mokat �s a bor�t�kat is?"
+
+LangString delete_components ${LANG_HUNGARIAN} "Also delete the following components:"
+LangString delete_covers ${LANG_HUNGARIAN} "T�r�lj�k a bor�t�kat?"
+LangString delete_highscores ${LANG_HUNGARIAN} "T�r�lj�k a pontsz�mokat?"
+LangString delete_config ${LANG_HUNGARIAN} "Config?"
+LangString delete_screenshots ${LANG_HUNGARIAN} "Screenshots?"
+LangString delete_playlists ${LANG_HUNGARIAN} "Playlists?"
+LangString delete_songs ${LANG_HUNGARIAN} "T�r�lj�k a dalokat is? WARNING: ALL files within the InstallationDir\songs folder will be removed(!)"
 
 LangString update_check_older ${LANG_HUNGARIAN} "Az �n g�p�n telep�tett verzi�n�l ($R0) van m�r �jabb ($1). K�v�nja friss�teni?"
 LangString update_check_equal ${LANG_HUNGARIAN} "Az �n g�p�n a legfrissebb verzi� ($R0) van telep�tve. Friss�t�s nem sz�ks�ges."
diff --git a/installer/settings/files_main_install.nsh b/installer/settings/files_main_install.nsh
index df697d5e..a79d4991 100644
--- a/installer/settings/files_main_install.nsh
+++ b/installer/settings/files_main_install.nsh
@@ -2,6 +2,31 @@
 ; UltraStar Deluxe Installer: Main components
 ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~
 
+; Remove old files from previous versions
+IfFileExists $INSTDIR\ScoreConverter.exe 0 +2
+Delete "$INSTDIR\ScoreConverter.exe"
+IfFileExists $INSTDIR\USdx.exe 0 +2
+Delete "$INSTDIR\USdx.exe"
+IfFileExists $INSTDIR\covers.cache 0 +2
+Delete "$INSTDIR\covers.cache"
+IfFileExists $INSTDIR\avcodec-51.dll 0 +2
+Delete "$INSTDIR\avcodec-51.dll"
+IfFileExists $INSTDIR\avformat-50.dll 0 +2
+Delete "$INSTDIR\avformat-50.dll"
+IfFileExists $INSTDIR\avutil-49.dll 0 +2
+Delete "$INSTDIR\avutil-49.dll"
+IfFileExists $INSTDIR\bass.dll 0 +2
+Delete "$INSTDIR\bass.dll"
+IfFileExists $INSTDIR\SDL.dll 0 +2
+Delete "$INSTDIR\SDL.dll"
+IfFileExists $INSTDIR\sqlite3.dll 0 +2
+Delete "$INSTDIR\sqlite3.dll"
+
+RMDir /r "$INSTDIR\Themes"
+RMDir /r "$INSTDIR\Skins"
+RMDir /r "$INSTDIR\Plugins"
+RMDir /r "$INSTDIR\Languages"
+
 ; Create Directories:
 
 CreateDirectory $INSTDIR\plugins
@@ -62,4 +87,4 @@ File ..\game\covers\NoCover.jpg
 SetOutPath "$INSTDIR\plugins\"
 File "..\game\plugins\*.*"
 
-SetOutPath "$INSTDIR"
+SetOutPath "$INSTDIR"
\ No newline at end of file
diff --git a/installer/settings/files_main_uninstall.nsh b/installer/settings/files_main_uninstall.nsh
index 6a081c5b..ed2259bf 100644
--- a/installer/settings/files_main_uninstall.nsh
+++ b/installer/settings/files_main_uninstall.nsh
@@ -11,6 +11,7 @@
 
  Delete "$Desktop\Play UltraStar Deluxe.lnk"
  Delete "$Desktop\UltraStar Deluxe spielen.lnk"
+ Delete "$Desktop\UltraStar Deluxe karaoke.lnk"
 
 ; Remove dirs
 
@@ -22,14 +23,6 @@
  RMDir /r "$INSTDIR\resources"
  RMDir /r "$INSTDIR\sounds"
 
-; Remove old files from previous versions
- IfFileExists $INSTDIR\ScoreConverter.exe 0 +2
- Delete "$INSTDIR\ScoreConverter.exe"
- IfFileExists $INSTDIR\USdx.exe 0 +2
- Delete "$INSTDIR\USdx.exe"
- IfFileExists $INSTDIR\covers.cache 0 +2
- Delete "$INSTDIR\covers.cache"
-
 ; Delete remaining files
  Delete "$INSTDIR\ScoreConverter.exe"
  Delete "$INSTDIR\${exe}.exe"
@@ -44,6 +37,7 @@
  Delete "$INSTDIR\config.ini.lnk"
 
  Delete "$INSTDIR\Error.log"
+ Delete "$INSTDIR\Benchmark.log"
  Delete "$INSTDIR\cover.db"
 
  Delete "$INSTDIR\avcodec-52.dll"
@@ -88,6 +82,7 @@
  SetShellVarContext current
 
  Delete "$APPDATA\ultrastardx\Error.log"
+ Delete "$APPDATA\ultrastardx\Benchmark.log"
  Delete "$APPDATA\ultrastardx\cover.db"
 
  StrCpy $0 "$APPDATA\ultrastardx\covers"
-- 
cgit v1.2.3