From ffa69660acbef9120cc562013fd67d86a7801e7a Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Sat, 26 Jan 2013 20:30:43 +0100 Subject: [PATCH 01/11] change of NSIS directory --- buildPy2exe.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index 2ba16b2..5541c40 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -9,7 +9,7 @@ import sys import os import subprocess -p = "C:\\Program Files (x86)\\NSIS\\makensis.exe" #TODO: how to move that into proper place, huh +p = "C:\\Program Files\\NSIS\\makensis.exe" #TODO: how to move that into proper place, huh NSIS_COMPILE = p if os.path.isfile(p) else "makensis.exe" OUT_DIR = "syncplay v{}".format(syncplay.version) SETUP_SCRIPT_PATH = "syncplay_setup.nsi" @@ -108,10 +108,6 @@ NSIS_SCRIPT_TEMPLATE = r""" !insertmacro APP_UNASSOCIATE "wmv" "Syncplay.wmv" FunctionEnd - Function un.DeleteFiles - $uninstallFiles - FunctionEnd - ;Prevents from running more than one instance of installer Function .onInit System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e' @@ -148,7 +144,7 @@ NSIS_SCRIPT_TEMPLATE = r""" Section "Uninstall" Call un.AssociateDel - Call un.DeleteFiles + $uninstallFiles DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" DeleteRegKey HKLM SOFTWARE\Syncplay Delete $$INSTDIR\uninstall.exe From 5a84022b5ec3008535257616e6c40d4d1304fe0f Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Sat, 26 Jan 2013 21:37:51 +0100 Subject: [PATCH 02/11] Added version in installation name. --- buildPy2exe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index 5541c40..55751e6 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -20,8 +20,8 @@ NSIS_SCRIPT_TEMPLATE = r""" LoadLanguageFile "$${NSISDIR}\Contrib\Language files\English.nlf" LoadLanguageFile "$${NSISDIR}\Contrib\Language files\Polish.nlf" - Name "Syncplay" - OutFile "Syncplay.exe" + Name "Syncplay $version" + OutFile "Syncplay $version Setup.exe" InstallDir $$PROGRAMFILES\Syncplay RequestExecutionLevel admin XPStyle on From 36d26934fd7809b10070b4380d16afe5e0f8600e Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Sat, 26 Jan 2013 22:10:28 +0100 Subject: [PATCH 03/11] Fixed Icon in Control Panel. Added Version Info and Estimated Size in Control Panel --- buildPy2exe.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index 55751e6..0b90312 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -16,6 +16,7 @@ SETUP_SCRIPT_PATH = "syncplay_setup.nsi" NSIS_SCRIPT_TEMPLATE = r""" !include LogicLib.nsh !include nsDialogs.nsh + !include FileFunc.nsh LoadLanguageFile "$${NSISDIR}\Contrib\Language files\English.nlf" LoadLanguageFile "$${NSISDIR}\Contrib\Language files\Polish.nlf" @@ -86,14 +87,18 @@ NSIS_SCRIPT_TEMPLATE = r""" FunctionEnd Function WriteRegistry + $${GetSize} "$$INSTDIR" "/S=0K" $$0 $$1 $$2 + IntFmt $$0 "0x%08X" $$0 WriteRegStr HKLM SOFTWARE\Syncplay "Install_Dir" "$$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "DisplayName" "Syncplay" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "UninstallString" '"$$INSTDIR\uninstall.exe"' - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "DisplayIcon" "$$INSTDIR\lib\icon.ico" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "DisplayIcon" "$$INSTDIR\resources\icon.ico" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "Publisher" "Syncplay" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "DisplayVersion" "$version" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "URLInfoAbout" "http://syncplay.pl/" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "NoRepair" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "EstimatedSize" "$$0" FunctionEnd Function un.AssociateDel @@ -136,10 +141,11 @@ NSIS_SCRIPT_TEMPLATE = r""" SetOverwrite on SetOutPath $$INSTDIR WriteUninstaller uninstall.exe - Call Associate - Call WriteRegistry $installFiles + + Call Associate + Call WriteRegistry SectionEnd Section "Uninstall" From 771d9e54642ecccf5fdc9d65ef4ca11e012dc438 Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Sat, 26 Jan 2013 22:17:40 +0100 Subject: [PATCH 04/11] Fixed not removing directories upon uninstalling --- buildPy2exe.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/buildPy2exe.py b/buildPy2exe.py index 0b90312..e5f16de 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -154,6 +154,8 @@ NSIS_SCRIPT_TEMPLATE = r""" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" DeleteRegKey HKLM SOFTWARE\Syncplay Delete $$INSTDIR\uninstall.exe + RMDir $$INSTDIR\resources + RMDir $$INSTDIR\lib RMDir $$INSTDIR SectionEnd """ From e3ef6d70734c0948ded7827a5c5ded28051873fa Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Sat, 26 Jan 2013 23:42:13 +0100 Subject: [PATCH 05/11] Changed back the NSIS directory. --- buildPy2exe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index e5f16de..22471b8 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -9,7 +9,7 @@ import sys import os import subprocess -p = "C:\\Program Files\\NSIS\\makensis.exe" #TODO: how to move that into proper place, huh +p = "C:\\Program Files (x86)\\NSIS\\makensis.exe" #TODO: how to move that into proper place, huh NSIS_COMPILE = p if os.path.isfile(p) else "makensis.exe" OUT_DIR = "syncplay v{}".format(syncplay.version) SETUP_SCRIPT_PATH = "syncplay_setup.nsi" From fa9af8c74ebb6e21061e52db5f1af85ce7717f04 Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Tue, 29 Jan 2013 13:30:40 +0100 Subject: [PATCH 06/11] Added checkboxes in directory page. Reordered functions --- buildPy2exe.py | 266 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 236 insertions(+), 30 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index 22471b8..a94ccf9 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -38,16 +38,60 @@ NSIS_SCRIPT_TEMPLATE = r""" VIAddVersionKey /LANG=$${LANG_POLISH} "ProductName" "Syncplay" VIAddVersionKey /LANG=$${LANG_POLISH} "FileVersion" "$version.0" VIAddVersionKey /LANG=$${LANG_POLISH} "LegalCopyright" "Syncplay" - VIAddVersionKey /LANG=$${LANG_POLISH} "FileDescription" "Syncplay" + VIAddVersionKey /LANG=$${LANG_POLISH} "FileDescription" "Syncplay" + + LangString ^Associate $${LANG_ENGLISH} "Associate Syncplay with multimedia files." + LangString ^VLC $${LANG_ENGLISH} "Install Syncplay interface for VLC (requires VLC 2.0.X)" + LangString ^Shortcut $${LANG_ENGLISH} "Create Shortcuts in following locations:" + LangString ^StartMenu $${LANG_ENGLISH} "Start Menu" + LangString ^Desktop $${LANG_ENGLISH} "Desktop" + LangString ^QuickLaunchBar $${LANG_ENGLISH} "Quick Launch Bar" + + LangString ^Associate $${LANG_POLISH} "Skojarz Syncplaya z multimediami" + LangString ^VLC $${LANG_POLISH} "Zainstaluj interface Syncplaya dla VLC(wymaga VLC 2.0.X)" + LangString ^Shortcut $${LANG_POLISH} "Utworz skroty w nastepujacych miejscach:" + LangString ^StartMenu $${LANG_POLISH} "Menu Start" + LangString ^Desktop $${LANG_POLISH} "Pulpit" + LangString ^QuickLaunchBar $${LANG_POLISH} "Pasek szybkiego uruchamiania" PageEx license LicenseData resources\license.txt PageExEnd - Page directory + Page custom DirectoryCustom DirectoryCustomLeave Page instFiles UninstPage uninstConfirm UninstPage instFiles + + Var Dialog + Var Syncplay_Icon + Var Syncplay_Icon_Handle + Var CheckBox_Associate + Var CheckBox_VLC + Var CheckBox_StartMenuShortcut + Var CheckBox_DesktopShortcut + Var CheckBox_QuickLaunchShortcut + Var CheckBox_Associate_State + Var CheckBox_VLC_State + Var CheckBox_StartMenuShortcut_State + Var CheckBox_DesktopShortcut_State + Var CheckBox_QuickLaunchShortcut_State + Var Button_Browse + Var Directory + Var GroupBox_DirSub + Var Label_Text + Var Label_Shortcut + Var Label_Size + Var Label_Space + Var Text_Directory + + Var Size + Var SizeHex + Var AvailibleSpace + Var AvailibleSpaceGiB + Var Drive + Var VLC_Directory + Var VLC_Version !macro APP_ASSOCIATE EXT FileCLASS DESCRIPTION COMMANDTEXT COMMAND WriteRegStr HKCR ".$${EXT}" "" "$${FileCLASS}" @@ -64,6 +108,180 @@ NSIS_SCRIPT_TEMPLATE = r""" DeleteRegKey HKCR `$${FileCLASS}` !macroend + ;Prevents from running more than one instance of installer and sets default state of checkboxes + Function .onInit + System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e' + Pop $$R0 + StrCmp $$R0 0 +3 + MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." + Abort + + StrCpy $$CheckBox_Associate_State $${BST_CHECKED} + StrCpy $$CheckBox_StartMenuShortcut_State $${BST_CHECKED} + + Call GetSize + Call DriveSpace + Call Language + FunctionEnd + + ;Language selection dialog + Function Language + Push "" + Push $${LANG_ENGLISH} + Push English + Push $${LANG_POLISH} + Push Polski + Push A ; A means auto count languages + LangDLL::LangDialog "Installer Language" "Please select the language of the installer" + Pop $$LANGUAGE + StrCmp $$LANGUAGE "cancel" 0 +2 + Abort + FunctionEnd + + Function DirectoryCustom + + nsDialogs::Create 1018 + Pop $$Dialog + + GetFunctionAddress $$R8 DirectoryCustomLeave + nsDialogs::OnBack $$R8 + + $${NSD_CreateIcon} 0u 0u 22u 20u "" + Pop $$Syncplay_Icon + $${NSD_SetIconFromInstaller} $$Syncplay_Icon $$Syncplay_Icon_Handle + + $${NSD_CreateLabel} 25u 0u 241u 34u "$$(^DirText)" + Pop $$Label_Text + + $${NSD_CreateText} 8u 38u 187u 12u "$$INSTDIR" + Pop $$Text_Directory + $${NSD_SetFocus} $$Text_Directory + + $${NSD_CreateBrowseButton} 202u 37u 55u 14u "$$(^BrowseBtn)" + Pop $$Button_Browse + $${NSD_OnClick} $$Button_Browse DirectoryBrowseDialog + + $${NSD_CreateGroupBox} 1u 27u 264u 30u "$$(^DirSubText)" + Pop $$GroupBox_DirSub + + $${NSD_CreateLabel} 0u 111u 265u 8u "$$(^SpaceRequired)$$SizeMB" + Pop $$Label_Size + + $${NSD_CreateLabel} 0u 122u 265u 8u "$$(^SpaceAvailable)$$AvailibleSpaceGiB.$$AvailibleSpaceGB" + Pop $$Label_Space + + $${NSD_CreateCheckBox} 8u 59u 187u 10u "$$(^Associate)" + Pop $$CheckBox_Associate + + $${NSD_CreateCheckBox} 8u 72u 250u 10u "$$(^VLC)" + Pop $$CheckBox_VLC + + $${NSD_CreateLabel} 8u 85u 187u 10u "$$(^Shortcut)" + Pop $$Label_Shortcut + + $${NSD_CreateCheckbox} 8u 98u 50u 10u "$$(^StartMenu)" + Pop $$CheckBox_StartMenuShortcut + + $${NSD_CreateCheckbox} 68u 98u 50u 10u "$$(^Desktop)" + Pop $$CheckBox_DesktopShortcut + + $${NSD_CreateCheckbox} 128u 98u 150u 10u "$$(^QuickLaunchBar)" + Pop $$CheckBox_QuickLaunchShortcut + + $${If} $$CheckBox_Associate_State == $${BST_CHECKED} + $${NSD_Check} $$CheckBox_Associate + $${EndIf} + + $${If} $$CheckBox_VLC_State == $${BST_CHECKED} + $${NSD_Check} $$CheckBox_VLC + $${EndIf} + + $${If} $$CheckBox_StartMenuShortcut_State == $${BST_CHECKED} + $${NSD_Check} $$CheckBox_StartMenuShortcut + $${EndIf} + + $${If} $$CheckBox_DesktopShortcut_State == $${BST_CHECKED} + $${NSD_Check} $$CheckBox_DesktopShortcut + $${EndIf} + + $${If} $$CheckBox_QuickLaunchShortcut_State == $${BST_CHECKED} + $${NSD_Check} $$CheckBox_QuickLaunchShortcut + $${EndIf} + + ReadRegStr $$VLC_Version HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" "VersionMajor" + $${If} $$VLC_Version != "2" + EnableWindow $$CheckBox_VLC 0 + $${EndIf} + nsDialogs::Show + + $${NSD_FreeIcon} $$Syncplay_Icon_Handle + + FunctionEnd + + Function DirectoryCustomLeave + $${NSD_GetState} $$CheckBox_Associate $$CheckBox_Associate_State + $${NSD_GetState} $$CheckBox_VLC $$CheckBox_VLC_State + $${NSD_GetState} $$CheckBox_StartMenuShortcut $$CheckBox_StartMenuShortcut_State + $${NSD_GetState} $$CheckBox_DesktopShortcut $$CheckBox_DesktopShortcut_State + $${NSD_GetState} $$CheckBox_QuickLaunchShortcut $$CheckBox_QuickLaunchShortcut_State + FunctionEnd + + Function DirectoryBrowseDialog + nsDialogs::SelectFolderDialog $$(^DirBrowseText) + Pop $$Directory + $${If} $$Directory != error + StrCpy $$INSTDIR $$Directory + $${NSD_SetText} $$Text_Directory $$INSTDIR + Call DriveSpace + $${NSD_SetText} $$Label_Space "$$(^SpaceAvailable)$$AvailibleSpaceGiB.$$AvailibleSpaceGB" + $${EndIf} + Abort + FunctionEnd + + ;Calculates size of installation files + Function GetSize + $${GetSize} "$$PROGRAMFILES\Syncplay" "/S=0K" $$Size $$1 $$2 + IntFmt $$SizeHex "0x%08X" $$Size + IntOp $$Size $$Size / 1024 + FunctionEnd + + ;Calculates Free Space on HDD + Function DriveSpace + StrCpy $$Drive $$INSTDIR 1 + $${DriveSpace} "$$Drive:\" "/D=F /S=M" $$AvailibleSpace + IntOp $$AvailibleSpaceGiB $$AvailibleSpace / 1024 + IntOp $$AvailibleSpace $$AvailibleSpace % 1024 + IntOp $$AvailibleSpace $$AvailibleSpace / 102 + FunctionEnd + + Function InstallOptions + $${If} $$CheckBox_Associate_State == $${BST_CHECKED} + Call Associate + DetailPrint "Associated Syncplay with multimedia files" + $${EndIf} + + $${If} $$CheckBox_StartMenuShortcut_State == $${BST_CHECKED} + CreateDirectory $$SMPROGRAMS\Syncplay + CreateShortCut "$$SMPROGRAMS\Syncplay\Syncplay.lnk" "$$INSTDIR\Syncplay.exe" "" + CreateShortCut "$$SMPROGRAMS\Syncplay\Uninstall.lnk" "$$INSTDIR\Uninstall.exe" "" + WriteINIStr "$$SMPROGRAMS\Syncplay\SyncplayWebsite.url" "InternetShortcut" "URL" "http://syncplay.pl" + $${EndIf} + + $${If} $$CheckBox_DesktopShortcut_State == $${BST_CHECKED} + CreateShortCut "$$DESKTOP\Syncplay.lnk" "$$INSTDIR\Syncplay.exe" "" + $${EndIf} + + $${If} $$CheckBox_QuickLaunchShortcut_State == $${BST_CHECKED} + CreateShortCut "$$QUICKLAUNCH\Syncplay.lnk" "$$INSTDIR\Syncplay.exe" "" + $${EndIf} + + $${If} $$CheckBox_VLC_State == $${BST_CHECKED} + ReadRegStr $$VLC_Directory HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" "InstallLocation" + SetOutPath $$VLC_Directory\lua\intf + File resources\syncplay.lua + $${EndIf} + FunctionEnd + ;Associates extensions with Syncplay Function Associate !insertmacro APP_ASSOCIATE "mkv" "Syncplay.mkv" "$$INSTDIR\Syncplay.exe,%1%" \ @@ -87,10 +305,10 @@ NSIS_SCRIPT_TEMPLATE = r""" FunctionEnd Function WriteRegistry - $${GetSize} "$$INSTDIR" "/S=0K" $$0 $$1 $$2 - IntFmt $$0 "0x%08X" $$0 + Call GetSize WriteRegStr HKLM SOFTWARE\Syncplay "Install_Dir" "$$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "DisplayName" "Syncplay" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "InstallLocation" "$$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "UninstallString" '"$$INSTDIR\uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "DisplayIcon" "$$INSTDIR\resources\icon.ico" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "Publisher" "Syncplay" @@ -98,7 +316,7 @@ NSIS_SCRIPT_TEMPLATE = r""" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "URLInfoAbout" "http://syncplay.pl/" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "NoRepair" 1 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "EstimatedSize" "$$0" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "EstimatedSize" "$$SizeHex" FunctionEnd Function un.AssociateDel @@ -113,30 +331,17 @@ NSIS_SCRIPT_TEMPLATE = r""" !insertmacro APP_UNASSOCIATE "wmv" "Syncplay.wmv" FunctionEnd - ;Prevents from running more than one instance of installer - Function .onInit - System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e' - Pop $$R0 - StrCmp $$R0 0 +3 - MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." - Abort - Call Language + Function un.InstallOptions + Delete $$SMPROGRAMS\Syncplay\Syncplay.lnk + Delete $$SMPROGRAMS\Syncplay\Uninstall.lnk + Delete $$SMPROGRAMS\Syncplay\SyncplayWebsite.url + RMDir $$SMPROGRAMS\Syncplay + Delete $$DESKTOP\Syncplay.lnk + Delete $$QUICKLAUNCH\Syncplay.lnk + ReadRegStr $$VLC_Directory HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" "InstallLocation" + Delete $$VLC_Directory\lua\intf\syncplay.lua FunctionEnd - - ;Language selection dialog - Function Language - Push "" - Push $${LANG_ENGLISH} - Push English - Push $${LANG_POLISH} - Push Polski - Push A ; A means auto count languages - LangDLL::LangDialog "Installer Language" "Please select the language of the installer" - Pop $$LANGUAGE - StrCmp $$LANGUAGE "cancel" 0 +2 - Abort - FunctionEnd - + Section "Install" SetOverwrite on SetOutPath $$INSTDIR @@ -144,19 +349,20 @@ NSIS_SCRIPT_TEMPLATE = r""" $installFiles - Call Associate + Call InstallOptions Call WriteRegistry SectionEnd Section "Uninstall" Call un.AssociateDel + Call un.InstallOptions $uninstallFiles DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" DeleteRegKey HKLM SOFTWARE\Syncplay Delete $$INSTDIR\uninstall.exe RMDir $$INSTDIR\resources RMDir $$INSTDIR\lib - RMDir $$INSTDIR + RMDir $$INSTDIR SectionEnd """ From 05081c349d83dcec77ee0feb6d1ea25a4bd5f660 Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Tue, 29 Jan 2013 15:15:40 +0100 Subject: [PATCH 07/11] Now Uninstaller asks about deleting config file. --- buildPy2exe.py | 61 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index a94ccf9..70254a4 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -46,6 +46,7 @@ NSIS_SCRIPT_TEMPLATE = r""" LangString ^StartMenu $${LANG_ENGLISH} "Start Menu" LangString ^Desktop $${LANG_ENGLISH} "Desktop" LangString ^QuickLaunchBar $${LANG_ENGLISH} "Quick Launch Bar" + LangString ^UninstConfig $${LANG_ENGLISH} "Delete configuration file." LangString ^Associate $${LANG_POLISH} "Skojarz Syncplaya z multimediami" LangString ^VLC $${LANG_POLISH} "Zainstaluj interface Syncplaya dla VLC(wymaga VLC 2.0.X)" @@ -53,19 +54,21 @@ NSIS_SCRIPT_TEMPLATE = r""" LangString ^StartMenu $${LANG_POLISH} "Menu Start" LangString ^Desktop $${LANG_POLISH} "Pulpit" LangString ^QuickLaunchBar $${LANG_POLISH} "Pasek szybkiego uruchamiania" + LangString ^UninstConfig $${LANG_POLISH} "Usun plik konfiguracyjny." PageEx license LicenseData resources\license.txt PageExEnd Page custom DirectoryCustom DirectoryCustomLeave Page instFiles - + + UninstPage custom un.installConfirm un.installConfirmLeave UninstPage uninstConfirm UninstPage instFiles Var Dialog - Var Syncplay_Icon - Var Syncplay_Icon_Handle + Var Icon_Syncplay + Var Icon_Syncplay_Handle Var CheckBox_Associate Var CheckBox_VLC Var CheckBox_StartMenuShortcut @@ -85,6 +88,15 @@ NSIS_SCRIPT_TEMPLATE = r""" Var Label_Space Var Text_Directory + Var Uninst_Dialog + Var Uninst_Icon + Var Uninst_Icon_Handle + Var Uninst_Label_Directory + Var Uninst_Label_Text + Var Uninst_Text_Directory + Var Uninst_CheckBox_Config + Var Uninst_CheckBox_Config_State + Var Size Var SizeHex Var AvailibleSpace @@ -147,8 +159,8 @@ NSIS_SCRIPT_TEMPLATE = r""" nsDialogs::OnBack $$R8 $${NSD_CreateIcon} 0u 0u 22u 20u "" - Pop $$Syncplay_Icon - $${NSD_SetIconFromInstaller} $$Syncplay_Icon $$Syncplay_Icon_Handle + Pop $$Icon_Syncplay + $${NSD_SetIconFromInstaller} $$Icon_Syncplay $$Icon_Syncplay_Handle $${NSD_CreateLabel} 25u 0u 241u 34u "$$(^DirText)" Pop $$Label_Text @@ -214,7 +226,7 @@ NSIS_SCRIPT_TEMPLATE = r""" $${EndIf} nsDialogs::Show - $${NSD_FreeIcon} $$Syncplay_Icon_Handle + $${NSD_FreeIcon} $$Icon_Syncplay_Handle FunctionEnd @@ -319,6 +331,37 @@ NSIS_SCRIPT_TEMPLATE = r""" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "EstimatedSize" "$$SizeHex" FunctionEnd + Function un.installConfirm + nsDialogs::Create 1018 + Pop $$Uninst_Dialog + + $${NSD_CreateIcon} 0u 1u 22u 20u "" + Pop $$Uninst_Icon + $${NSD_SetIconFromInstaller} $$Uninst_Icon $$Uninst_Icon_Handle + + $${NSD_CreateLabel} 0u 45u 55u 8u "$$(^UninstallingSubText)" + Pop $$Uninst_Label_Directory + + $${NSD_CreateLabel} 25u 0u 241u 34u "$$(^UninstallingText)" + Pop $$Uninst_Label_Text + + ReadRegStr $$INSTDIR HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Syncplay" "InstallLocation" + $${NSD_CreateText} 56u 43u 209u 12u "$$INSTDIR" + Pop $$Uninst_Text_Directory + EnableWindow $$Uninst_Text_Directory 0 + + $${NSD_CreateCheckBox} 0u 60u 250u 10u "$$(^UninstConfig)" + Pop $$Uninst_CheckBox_Config + + + nsDialogs::Show + $${NSD_FreeIcon} $$Uninst_Icon_Handle + FunctionEnd + + Function un.installConfirmLeave + $${NSD_GetState} $$Uninst_CheckBox_Config $$Uninst_CheckBox_Config_State + FunctionEnd + Function un.AssociateDel !insertmacro APP_UNASSOCIATE "mkv" "Syncplay.mkv" !insertmacro APP_UNASSOCIATE "mp4" "Syncplay.mp4" @@ -362,7 +405,11 @@ NSIS_SCRIPT_TEMPLATE = r""" Delete $$INSTDIR\uninstall.exe RMDir $$INSTDIR\resources RMDir $$INSTDIR\lib - RMDir $$INSTDIR + RMDir $$INSTDIR + + $${If} $$Uninst_CheckBox_Config_State == $${BST_CHECKED} + Delete $$APPDATA\.syncplay + $${EndIf} SectionEnd """ From 368e7bd5bdb668d63f755439665db6d732492ae3 Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Tue, 29 Jan 2013 18:49:41 +0100 Subject: [PATCH 08/11] Fixed not updating INSTDIR while manually typing directory. --- buildPy2exe.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index 70254a4..9ec7708 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -131,7 +131,8 @@ NSIS_SCRIPT_TEMPLATE = r""" StrCpy $$CheckBox_Associate_State $${BST_CHECKED} StrCpy $$CheckBox_StartMenuShortcut_State $${BST_CHECKED} - Call GetSize + SectionGetSize 1 $$Size + ;Call GetSize Call DriveSpace Call Language FunctionEnd @@ -231,6 +232,7 @@ NSIS_SCRIPT_TEMPLATE = r""" FunctionEnd Function DirectoryCustomLeave + $${NSD_GetText} $$Text_Directory $$INSTDIR $${NSD_GetState} $$CheckBox_Associate $$CheckBox_Associate_State $${NSD_GetState} $$CheckBox_VLC $$CheckBox_VLC_State $${NSD_GetState} $$CheckBox_StartMenuShortcut $$CheckBox_StartMenuShortcut_State @@ -385,7 +387,7 @@ NSIS_SCRIPT_TEMPLATE = r""" Delete $$VLC_Directory\lua\intf\syncplay.lua FunctionEnd - Section "Install" + Section "Install" 1 SetOverwrite on SetOutPath $$INSTDIR WriteUninstaller uninstall.exe From 1e1d4ca9b86a5cc0bf2a73375ca3cdce79d13b07 Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Tue, 29 Jan 2013 19:19:32 +0100 Subject: [PATCH 09/11] Fixed required space computing. --- buildPy2exe.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index 9ec7708..01869d7 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -63,7 +63,6 @@ NSIS_SCRIPT_TEMPLATE = r""" Page instFiles UninstPage custom un.installConfirm un.installConfirmLeave - UninstPage uninstConfirm UninstPage instFiles Var Dialog @@ -130,9 +129,8 @@ NSIS_SCRIPT_TEMPLATE = r""" StrCpy $$CheckBox_Associate_State $${BST_CHECKED} StrCpy $$CheckBox_StartMenuShortcut_State $${BST_CHECKED} - - SectionGetSize 1 $$Size - ;Call GetSize + + Call GetSize Call DriveSpace Call Language FunctionEnd @@ -252,9 +250,9 @@ NSIS_SCRIPT_TEMPLATE = r""" Abort FunctionEnd - ;Calculates size of installation files Function GetSize - $${GetSize} "$$PROGRAMFILES\Syncplay" "/S=0K" $$Size $$1 $$2 + StrCpy $$Size "$totalSize" + IntOp $$Size $$Size / 1024 IntFmt $$SizeHex "0x%08X" $$Size IntOp $$Size $$Size / 1024 FunctionEnd @@ -387,7 +385,7 @@ NSIS_SCRIPT_TEMPLATE = r""" Delete $$VLC_Directory\lua\intf\syncplay.lua FunctionEnd - Section "Install" 1 + Section "Install" SetOverwrite on SetOutPath $$INSTDIR WriteUninstaller uninstall.exe @@ -417,7 +415,8 @@ NSIS_SCRIPT_TEMPLATE = r""" class NSISScript(object): def create(self): - fileList = self.getBuildDirContents(OUT_DIR) + fileList, totalSize = self.getBuildDirContents(OUT_DIR) + print "Total size eq: {}".format(totalSize) installFiles = self.prepareInstallListTemplate(fileList) uninstallFiles = self.prepareDeleteListTemplate(fileList) @@ -427,11 +426,14 @@ class NSISScript(object): version = syncplay.version, uninstallFiles = uninstallFiles, installFiles = installFiles, + totalSize = totalSize, ) with open(SETUP_SCRIPT_PATH, "w") as outfile: outfile.write(contents) def compile(self): + if(not os.path.isfile(NSIS_COMPILE)): + return "makensis.exe not found, won't create the installer" subproc = subprocess.Popen([NSIS_COMPILE, SETUP_SCRIPT_PATH], env=os.environ) subproc.communicate() retcode = subproc.returncode @@ -441,14 +443,15 @@ class NSISScript(object): def getBuildDirContents(self, path): fileList = {} + totalSize = 0 for root, _, files in os.walk(path): + totalSize += sum(os.path.getsize(os.path.join(root, file_)) for file_ in files) for file_ in files: new_root = root.replace(OUT_DIR, "").strip("\\") if(not fileList.has_key(new_root)): fileList[new_root] = [] fileList[new_root].append(file_) - return fileList - + return fileList, totalSize def prepareInstallListTemplate(self, fileList): create = [] From e1dd07cd739064ef694f2fb43a335afa76f5ef0d Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Tue, 29 Jan 2013 19:35:11 +0100 Subject: [PATCH 10/11] Changed registry string from which VLC directory is read. --- buildPy2exe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index 01869d7..5aecd6d 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -288,7 +288,7 @@ NSIS_SCRIPT_TEMPLATE = r""" $${EndIf} $${If} $$CheckBox_VLC_State == $${BST_CHECKED} - ReadRegStr $$VLC_Directory HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" "InstallLocation" + ReadRegStr $$VLC_Directory HKLM "Software\VideoLAN\VLC" "InstallDir" SetOutPath $$VLC_Directory\lua\intf File resources\syncplay.lua $${EndIf} @@ -381,7 +381,7 @@ NSIS_SCRIPT_TEMPLATE = r""" RMDir $$SMPROGRAMS\Syncplay Delete $$DESKTOP\Syncplay.lnk Delete $$QUICKLAUNCH\Syncplay.lnk - ReadRegStr $$VLC_Directory HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" "InstallLocation" + ReadRegStr $$VLC_Directory HKLM "Software\VideoLAN\VLC" "InstallDir" Delete $$VLC_Directory\lua\intf\syncplay.lua FunctionEnd From fa3892cf06c568d42d6f70d32e05d33b00e57eeb Mon Sep 17 00:00:00 2001 From: Bosmanfrx Date: Tue, 29 Jan 2013 20:08:43 +0100 Subject: [PATCH 11/11] Now associates way more extensions. --- buildPy2exe.py | 84 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/buildPy2exe.py b/buildPy2exe.py index 5aecd6d..d9f6146 100644 --- a/buildPy2exe.py +++ b/buildPy2exe.py @@ -119,6 +119,15 @@ NSIS_SCRIPT_TEMPLATE = r""" DeleteRegKey HKCR `$${FileCLASS}` !macroend + !macro ASSOCIATE EXT + !insertmacro APP_ASSOCIATE "$${EXT}" "Syncplay.$${EXT}" "$$INSTDIR\Syncplay.exe,%1%" \ + "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" + !macroend + + !macro UNASSOCIATE EXT + !insertmacro APP_UNASSOCIATE "$${EXT}" "Syncplay.$${EXT}" + !macroend + ;Prevents from running more than one instance of installer and sets default state of checkboxes Function .onInit System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e' @@ -296,24 +305,30 @@ NSIS_SCRIPT_TEMPLATE = r""" ;Associates extensions with Syncplay Function Associate - !insertmacro APP_ASSOCIATE "mkv" "Syncplay.mkv" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" - !insertmacro APP_ASSOCIATE "mp4" "Syncplay.mp4" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" - !insertmacro APP_ASSOCIATE "avi" "Syncplay.avi" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" - !insertmacro APP_ASSOCIATE "flv" "Syncplay.flv" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" - !insertmacro APP_ASSOCIATE "mpg" "Syncplay.mpg" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" - !insertmacro APP_ASSOCIATE "rmvb" "Syncplay.rmvb" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" - !insertmacro APP_ASSOCIATE "vob" "Syncplay.vob" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" - !insertmacro APP_ASSOCIATE "swf" "Syncplay.swf" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" - !insertmacro APP_ASSOCIATE "wmv" "Syncplay.wmv" "$$INSTDIR\Syncplay.exe,%1%" \ - "Open with Syncplay" "$$INSTDIR\Syncplay.exe $$\"%1$$\"" + !insertmacro ASSOCIATE avi + !insertmacro ASSOCIATE mpg + !insertmacro ASSOCIATE mpeg + !insertmacro ASSOCIATE mpe + !insertmacro ASSOCIATE m1v + !insertmacro ASSOCIATE m2v + !insertmacro ASSOCIATE mpv2 + !insertmacro ASSOCIATE mp2v + !insertmacro ASSOCIATE mkv + !insertmacro ASSOCIATE mp4 + !insertmacro ASSOCIATE m4v + !insertmacro ASSOCIATE mp4v + !insertmacro ASSOCIATE 3gp + !insertmacro ASSOCIATE 3gpp + !insertmacro ASSOCIATE 3g2 + !insertmacro ASSOCIATE 3pg2 + !insertmacro ASSOCIATE flv + !insertmacro ASSOCIATE f4v + !insertmacro ASSOCIATE rm + !insertmacro ASSOCIATE wmv + !insertmacro ASSOCIATE swf + !insertmacro ASSOCIATE rmvb + !insertmacro ASSOCIATE divx + !insertmacro ASSOCIATE amv FunctionEnd Function WriteRegistry @@ -363,15 +378,30 @@ NSIS_SCRIPT_TEMPLATE = r""" FunctionEnd Function un.AssociateDel - !insertmacro APP_UNASSOCIATE "mkv" "Syncplay.mkv" - !insertmacro APP_UNASSOCIATE "mp4" "Syncplay.mp4" - !insertmacro APP_UNASSOCIATE "avi" "Syncplay.avi" - !insertmacro APP_UNASSOCIATE "flv" "Syncplay.flv" - !insertmacro APP_UNASSOCIATE "mpg" "Syncplay.mpg" - !insertmacro APP_UNASSOCIATE "rmvb" "Syncplay.rmvb" - !insertmacro APP_UNASSOCIATE "vob" "Syncplay.vob" - !insertmacro APP_UNASSOCIATE "swf" "Syncplay.swf" - !insertmacro APP_UNASSOCIATE "wmv" "Syncplay.wmv" + !insertmacro UNASSOCIATE avi + !insertmacro UNASSOCIATE mpg + !insertmacro UNASSOCIATE mpeg + !insertmacro UNASSOCIATE mpe + !insertmacro UNASSOCIATE m1v + !insertmacro UNASSOCIATE m2v + !insertmacro UNASSOCIATE mpv2 + !insertmacro UNASSOCIATE mp2v + !insertmacro UNASSOCIATE mkv + !insertmacro UNASSOCIATE mp4 + !insertmacro UNASSOCIATE m4v + !insertmacro UNASSOCIATE mp4v + !insertmacro UNASSOCIATE 3gp + !insertmacro UNASSOCIATE 3gpp + !insertmacro UNASSOCIATE 3g2 + !insertmacro UNASSOCIATE 3pg2 + !insertmacro UNASSOCIATE flv + !insertmacro UNASSOCIATE f4v + !insertmacro UNASSOCIATE rm + !insertmacro UNASSOCIATE wmv + !insertmacro UNASSOCIATE swf + !insertmacro UNASSOCIATE rmvb + !insertmacro UNASSOCIATE divx + !insertmacro UNASSOCIATE amv FunctionEnd Function un.InstallOptions