2018-04-27 19:10:26 +00:00
#!/usr/bin/env python
#coding:utf8
#*** TROUBLESHOOTING ***
#1) If you get the error "ImportError: No module named zope.interface" then add an empty __init__.py file to the PYTHONDIR/Lib/site-packages/zope directory
#2) It is expected that you will have NSIS 3 NSIS from http://nsis.sourceforge.net installed.
import sys , codecs
# try:
# if (sys.version_info.major != 2) or (sys.version_info.minor < 7):
# raise Exception("You must build Syncplay with Python 2.7!")
# except AttributeError:
# import warnings
# warnings.warn("You must build Syncplay with Python 2.7!")
from string import Template
import syncplay
import os
import subprocess
from syncplay . messages import getMissingStrings
missingStrings = getMissingStrings ( )
if missingStrings is not None and missingStrings is not " " :
import warnings
warnings . warn ( " MISSING/UNUSED STRINGS DETECTED: \n {} " . format ( missingStrings ) )
def get_nsis_path ( ) :
bin_name = " makensis.exe "
from winreg import HKEY_LOCAL_MACHINE as HKLM
from winreg import KEY_READ , KEY_WOW64_32KEY , OpenKey , QueryValueEx
try :
nsisreg = OpenKey ( HKLM , " Software \\ NSIS " , 0 , KEY_READ | KEY_WOW64_32KEY )
if QueryValueEx ( nsisreg , " VersionMajor " ) [ 0 ] > = 3 :
return " {} \\ {} " . format ( QueryValueEx ( nsisreg , " " ) [ 0 ] , bin_name )
else :
raise Exception ( " You must install NSIS 3 or later. " )
except WindowsError :
return bin_name
NSIS_COMPILE = get_nsis_path ( )
2018-04-27 19:27:06 +00:00
OUT_DIR = " dist \ Syncplay "
2018-04-27 19:10:26 +00:00
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 "
LoadLanguageFile " $$ {NSISDIR} \ Contrib \ Language files \ Russian.nlf "
LoadLanguageFile " $$ {NSISDIR} \ Contrib \ Language files \ German.nlf "
LoadLanguageFile " $$ {NSISDIR} \ Contrib \ Language files \ Italian.nlf "
Unicode true
Name " Syncplay $version "
OutFile " Syncplay-$version-Setup.exe "
InstallDir $ $ PROGRAMFILES \Syncplay
RequestExecutionLevel admin
XPStyle on
Icon resources \icon . ico ; Change DIR
SetCompressor / SOLID lzma
VIProductVersion " $version.0 "
VIAddVersionKey / LANG = $ $ { LANG_ENGLISH } " ProductName " " Syncplay "
VIAddVersionKey / LANG = $ $ { LANG_ENGLISH } " FileVersion " " $version.0 "
VIAddVersionKey / LANG = $ $ { LANG_ENGLISH } " LegalCopyright " " Syncplay "
VIAddVersionKey / LANG = $ $ { LANG_ENGLISH } " FileDescription " " Syncplay "
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_RUSSIAN } " ProductName " " Syncplay "
VIAddVersionKey / LANG = $ $ { LANG_RUSSIAN } " FileVersion " " $version.0 "
VIAddVersionKey / LANG = $ $ { LANG_RUSSIAN } " LegalCopyright " " Syncplay "
VIAddVersionKey / LANG = $ $ { LANG_RUSSIAN } " FileDescription " " Syncplay "
VIAddVersionKey / LANG = $ $ { LANG_ITALIAN } " ProductName " " Syncplay "
VIAddVersionKey / LANG = $ $ { LANG_ITALIAN } " FileVersion " " $version.0 "
VIAddVersionKey / LANG = $ $ { LANG_ITALIAN } " LegalCopyright " " Syncplay "
VIAddVersionKey / LANG = $ $ { LANG_ITALIAN } " FileDescription " " Syncplay "
LangString ^ SyncplayLanguage $ $ { LANG_ENGLISH } " en "
LangString ^ Associate $ $ { LANG_ENGLISH } " Associate Syncplay with multimedia files. "
LangString ^ VLC $ $ { LANG_ENGLISH } " Install Syncplay interface for VLC 2 and above "
LangString ^ BrowseVLCBtn $ $ { LANG_ENGLISH } " Select VLC folder "
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 ^ AutomaticUpdates $ $ { LANG_ENGLISH } " Check for updates automatically "
LangString ^ UninstConfig $ $ { LANG_ENGLISH } " Delete configuration file. "
LangString ^ SyncplayLanguage $ $ { LANG_POLISH } " pl "
LangString ^ Associate $ $ { LANG_POLISH } " Skojarz Syncplaya z multimediami "
LangString ^ VLC $ $ { LANG_POLISH } " Zainstaluj interface Syncplaya dla VLC 2+ "
LangString ^ BrowseVLCBtn $ $ { LANG_POLISH } " Określ folder VLC "
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 "
LangString ^ UninstConfig $ $ { LANG_POLISH } " Usun plik konfiguracyjny. "
LangString ^ SyncplayLanguage $ $ { LANG_RUSSIAN } " ru "
LangString ^ Associate $ $ { LANG_RUSSIAN } " Ассоциировать Syncplay с видеофайлами "
LangString ^ VLC $ $ { LANG_RUSSIAN } " Установить интерфейс Syncplay для VLC 2+ "
LangString ^ BrowseVLCBtn $ $ { LANG_RUSSIAN } " Укажите папку VLC "
LangString ^ Shortcut $ $ { LANG_RUSSIAN } " Создать ярлыки: "
LangString ^ StartMenu $ $ { LANG_RUSSIAN } " в меню Пуск "
LangString ^ Desktop $ $ { LANG_RUSSIAN } " на рабочем столе "
LangString ^ QuickLaunchBar $ $ { LANG_RUSSIAN } " в меню быстрого запуска "
LangString ^ AutomaticUpdates $ $ { LANG_RUSSIAN } " Проверять обновления автоматически " ; TODO : Confirm Russian translation ( " Check for updates automatically " )
LangString ^ UninstConfig $ $ { LANG_RUSSIAN } " Удалить файл настроек. "
LangString ^ SyncplayLanguage $ $ { LANG_GERMAN } " de "
LangString ^ Associate $ $ { LANG_GERMAN } " Syncplay als Standardprogramm für Multimedia-Dateien verwenden. "
LangString ^ VLC $ $ { LANG_GERMAN } " Syncplay-Interface für VLC installieren (ab VLC 2+) "
LangString ^ Shortcut $ $ { LANG_GERMAN } " Erstelle Verknüpfungen an folgenden Orten: "
LangString ^ BrowseVLCBtn $ $ { LANG_GERMAN } " VLC-Ordner wählen "
LangString ^ StartMenu $ $ { LANG_GERMAN } " Startmenü "
LangString ^ Desktop $ $ { LANG_GERMAN } " Desktop "
LangString ^ QuickLaunchBar $ $ { LANG_GERMAN } " Schnellstartleiste "
LangString ^ AutomaticUpdates $ $ { LANG_GERMAN } " Automatisch nach Updates suchen " ;
LangString ^ UninstConfig $ $ { LANG_GERMAN } " Konfigurationsdatei löschen. "
LangString ^ SyncplayLanguage $ $ { LANG_ITALIAN } " it "
LangString ^ Associate $ $ { LANG_ITALIAN } " Associa Syncplay con i file multimediali. "
LangString ^ VLC $ $ { LANG_ITALIAN } " Installa l ' interfaccia di Syncplay per VLC 2+ "
LangString ^ BrowseVLCBtn $ $ { LANG_ITALIAN } " Cartella di VLC "
LangString ^ Shortcut $ $ { LANG_ITALIAN } " Crea i collegamenti nei percorsi seguenti: "
LangString ^ StartMenu $ $ { LANG_ITALIAN } " Menu Start "
LangString ^ Desktop $ $ { LANG_ITALIAN } " Desktop "
LangString ^ QuickLaunchBar $ $ { LANG_ITALIAN } " Barra di avvio rapido "
LangString ^ AutomaticUpdates $ $ { LANG_ITALIAN } " Controllo automatico degli aggiornamenti "
LangString ^ UninstConfig $ $ { LANG_ITALIAN } " Cancella i file di configurazione. "
; Remove text to save space
LangString ^ ClickInstall $ $ { LANG_GERMAN } " "
PageEx license
LicenseData resources \license . rtf
PageExEnd
Page custom DirectoryCustom DirectoryCustomLeave
Page instFiles
UninstPage custom un . installConfirm un . installConfirmLeave
UninstPage instFiles
Var Dialog
Var Icon_Syncplay
Var Icon_Syncplay_Handle
; Var CheckBox_Associate
Var CheckBox_VLC
Var CheckBox_AutomaticUpdates
Var CheckBox_StartMenuShortcut
Var CheckBox_DesktopShortcut
Var CheckBox_QuickLaunchShortcut
; Var CheckBox_Associate_State
Var CheckBox_VLC_State
Var CheckBox_AutomaticUpdates_State
Var CheckBox_StartMenuShortcut_State
Var CheckBox_DesktopShortcut_State
Var CheckBox_QuickLaunchShortcut_State
Var Button_Browse
Var Button_Browse_VLC
Var Directory
Var GroupBox_DirSub
Var Label_Text
Var Label_Shortcut
Var Label_Size
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
Var AvailibleSpaceGiB
Var Drive
Var VLC_Directory
; ! macro APP_ASSOCIATE EXT FileCLASS DESCRIPTION COMMANDTEXT COMMAND
; WriteRegStr HKCR " .$$ {EXT} " " " " $$ {FileCLASS} "
; WriteRegStr HKCR " $$ {FileCLASS} " " " ` $ $ { DESCRIPTION } `
; WriteRegStr HKCR " $$ {FileCLASS} \ shell " " " " open "
; WriteRegStr HKCR " $$ {FileCLASS} \ shell \ open " " " ` $ $ { COMMANDTEXT } `
; WriteRegStr HKCR " $$ {FileCLASS} \ shell \ open \ command " " " ` $ $ { COMMAND } `
; ! macroend
! macro APP_UNASSOCIATE EXT FileCLASS
; Backup the previously associated File class
ReadRegStr $ $ R0 HKCR " .$$ {EXT} " ` $ $ { FileCLASS } _backup `
WriteRegStr HKCR " .$$ {EXT} " " " " $$R0 "
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 " SyncplayMutex " ) 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 GetVLCDir
Call UpdateVLCCheckbox
Call GetSize
Call DriveSpace
Call Language
FunctionEnd
; Language selection dialog
Function Language
Push " "
Push $ $ { LANG_ENGLISH }
Push English
Push $ $ { LANG_POLISH }
Push Polski
Push $ $ { LANG_RUSSIAN }
Push Русский
Push $ $ { LANG_GERMAN }
Push Deutsch
Push $ $ { LANG_ITALIAN }
Push Italiano
Push A ; A means auto count languages
LangDLL : : LangDialog " Language Selection " " Please select the language of Syncplay and 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 } 0 u 0 u 22 u 20 u " "
Pop $ $ Icon_Syncplay
$ $ { NSD_SetIconFromInstaller } $ $ Icon_Syncplay $ $ Icon_Syncplay_Handle
$ $ { NSD_CreateLabel } 25 u 0 u 241 u 34 u " $$(^DirText) "
Pop $ $ Label_Text
$ $ { NSD_CreateText } 8 u 38 u 187 u 12 u " $$INSTDIR "
Pop $ $ Text_Directory
$ $ { NSD_SetFocus } $ $ Text_Directory
$ $ { NSD_CreateBrowseButton } 202 u 37 u 55 u 14 u " $$(^BrowseBtn) "
Pop $ $ Button_Browse
$ $ { NSD_OnClick } $ $ Button_Browse DirectoryBrowseDialog
$ $ { NSD_CreateGroupBox } 1 u 27 u 264 u 30 u " $$(^DirSubText) "
Pop $ $ GroupBox_DirSub
$ $ { NSD_CreateLabel } 0 u 122 u 132 8 u " $$(^SpaceRequired)$$SizeMB "
Pop $ $ Label_Size
$ $ { NSD_CreateLabel } 321 u 122 u 132 8 u " $$(^SpaceAvailable)$$AvailibleSpaceGiB.$$AvailibleSpaceGB "
Pop $ $ Label_Space
; $ $ { NSD_CreateCheckBox } 8 u 59 u 187 u 10 u " $$(^Associate) "
; Pop $ $ CheckBox_Associate
$ $ { NSD_CreateBrowseButton } 185 u 70 u 70 u 14 u " $$(^BrowseVLCBtn) "
Pop $ $ Button_Browse_VLC
$ $ { NSD_OnClick } $ $ Button_Browse_VLC DirectoryBrowseDialogVLC
$ $ { NSD_CreateCheckBox } 8 u 72 u 250 u 10 u " $$(^VLC) "
Pop $ $ CheckBox_VLC
$ $ { NSD_CreateCheckBox } 8 u 85 u 250 u 10 u " $$(^AutomaticUpdates) "
Pop $ $ CheckBox_AutomaticUpdates
$ $ { NSD_Check } $ $ CheckBox_AutomaticUpdates
$ $ { NSD_CreateLabel } 8 u 98 u 187 u 10 u " $$(^Shortcut) "
Pop $ $ Label_Shortcut
$ $ { NSD_CreateCheckbox } 8 u 111 u 60 u 10 u " $$(^StartMenu) "
Pop $ $ CheckBox_StartMenuShortcut
$ $ { NSD_CreateCheckbox } 78 u 111 u 70 u 10 u " $$(^Desktop) "
Pop $ $ CheckBox_DesktopShortcut
$ $ { NSD_CreateCheckbox } 158 u 111 u 130 u 10 u " $$(^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 }
Call UpdateVLCCheckbox
$ $ { 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 }
$ $ { If } $ $ CheckBox_AutomaticUpdates_State == $ $ { BST_CHECKED }
$ $ { NSD_Check } $ $ CheckBox_AutomaticUpdates
$ $ { EndIf }
nsDialogs : : Show
$ $ { NSD_FreeIcon } $ $ Icon_Syncplay_Handle
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_AutomaticUpdates $ $ CheckBox_AutomaticUpdates_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
Function GetVLCDir
IfFileExists " $$VLC_Directory \v lc.exe " VLCFound 0
ReadRegStr $ $ VLC_Directory HKLM " Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ Syncplay " " VLCInstallLocation "
IfFileExists " $$VLC_Directory \v lc.exe " VLCFound 0
ReadRegStr $ $ VLC_Directory HKLM " Software \ VideoLAN \ VLC " " InstallDir "
IfFileExists " $$VLC_Directory \v lc.exe " VLCFound 0
StrCpy $ $ VLC_Directory " c: \ program files (x86) \v ideolan \v lc "
IfFileExists " $$VLC_Directory \v lc.exe " VLCFound 0
StrCpy $ $ VLC_Directory " c: \ program files \v ideolan \v lc "
IfFileExists " $$VLC_Directory \v lc.exe " VLCFound 0
StrCpy $ $ VLC_Directory " "
VLCFound :
FunctionEnd
Function UpdateVLCCheckbox
IfFileExists " $$VLC_Directory \v lc.exe " VLC_Enabled VLC_Disabled
VLC_Enabled :
EnableWindow $ $ CheckBox_VLC 1
StrCpy $ $ CheckBox_VLC_State $ $ { BST_CHECKED }
$ $ { NSD_SetState } $ $ CheckBox_VLC $ $ CheckBox_VLC_State
goto CheckboxUpdated
VLC_Disabled :
EnableWindow $ $ CheckBox_VLC 0
StrCpy $ $ CheckBox_VLC_State $ $ { BST_UNCHECKED }
$ $ { NSD_SetState } $ $ CheckBox_VLC $ $ CheckBox_VLC_State
CheckboxUpdated :
FunctionEnd
Function DirectoryBrowseDialogVLC
nsDialogs : : SelectFolderDialog $ $ ( ^ BrowseVLCBtn ) $ $ VLC_Directory
Pop $ $ Directory
$ $ { If } $ $ Directory != error
StrCpy $ $ VLC_Directory $ $ Directory
Call UpdateVLCCheckbox
$ $ { EndIf }
Abort
FunctionEnd
Function GetSize
StrCpy $ $ Size " $totalSize "
IntOp $ $ Size $ $ Size / 1024
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 \ Syncplay Server.lnk " " $$INSTDIR \ syncplayServer.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 }
IfFileExists " $$VLC_Directory \v lc.exe " 0 EndOfVLC
SetOutPath $ $ VLC_Directory \lua \intf
File resources \lua \intf \syncplay . lua
EndOfVLC :
$ $ { EndIf }
FunctionEnd
; Associates extensions with Syncplay
; Function Associate
; ! 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 3 gp
; ! insertmacro ASSOCIATE 3 gpp
; ! insertmacro ASSOCIATE 3 g2
; ! insertmacro ASSOCIATE 3 pg2
; ! 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
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 " " VLCInstallLocation " " $$VLC_Directory "
WriteRegStr HKLM " Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ Syncplay " " UninstallString " ' " $$INSTDIR \ uninstall.exe " '
WriteRegStr HKLM " Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ Syncplay " " DisplayIcon " " $$INSTDIR \r esources \ 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 " " $$SizeHex "
WriteINIStr $ $ APPDATA \syncplay . ini general language $ $ ( ^ SyncplayLanguage )
$ $ { If } $ $ CheckBox_AutomaticUpdates_State == $ $ { BST_CHECKED }
WriteINIStr $ $ APPDATA \syncplay . ini general CheckForUpdatesAutomatically " True "
$ $ { Else }
WriteINIStr $ $ APPDATA \syncplay . ini general CheckForUpdatesAutomatically " False "
$ $ { EndIf }
FunctionEnd
Function un . installConfirm
nsDialogs : : Create 1018
Pop $ $ Uninst_Dialog
$ $ { NSD_CreateIcon } 0 u 1 u 22 u 20 u " "
Pop $ $ Uninst_Icon
$ $ { NSD_SetIconFromInstaller } $ $ Uninst_Icon $ $ Uninst_Icon_Handle
$ $ { NSD_CreateLabel } 0 u 45 u 55 u 8 u " $$(^UninstallingSubText) "
Pop $ $ Uninst_Label_Directory
$ $ { NSD_CreateLabel } 25 u 0 u 241 u 34 u " $$(^UninstallingText) "
Pop $ $ Uninst_Label_Text
ReadRegStr $ $ INSTDIR HKLM " Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ Syncplay " " InstallLocation "
$ $ { NSD_CreateText } 56 u 43 u 209 u 12 u " $$INSTDIR "
Pop $ $ Uninst_Text_Directory
EnableWindow $ $ Uninst_Text_Directory 0
$ $ { NSD_CreateCheckBox } 0 u 60 u 250 u 10 u " $$(^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 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 3 gp
! insertmacro UNASSOCIATE 3 gpp
! insertmacro UNASSOCIATE 3 g2
! insertmacro UNASSOCIATE 3 pg2
! 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
Delete $ $ SMPROGRAMS \Syncplay \Syncplay . lnk
Delete " $$SMPROGRAMS \ Syncplay \ Syncplay Server.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 \ Syncplay " " VLCInstallLocation "
IfFileExists " $$VLC_Directory \ lua \ intf \ syncplay.lua " 0 + 2
Delete $ $ VLC_Directory \lua \intf \syncplay . lua
FunctionEnd
Section " Install "
SetOverwrite on
SetOutPath $ $ INSTDIR
WriteUninstaller uninstall . exe
$ installFiles
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 \Syncplay \\resources \lua \intf
RMDir $ $ INSTDIR \Syncplay \\resources \lua
RMDir $ $ INSTDIR \Syncplay \\resources
RMDir $ $ INSTDIR \resources
RMDir $ $ INSTDIR \lib
RMDir $ $ INSTDIR
$ $ { If } $ $ Uninst_CheckBox_Config_State == $ $ { BST_CHECKED }
IfFileExists " $$APPDATA \ .syncplay " 0 + 2
Delete $ $ APPDATA \. syncplay
IfFileExists " $$APPDATA \ syncplay.ini " 0 + 2
Delete $ $ APPDATA \syncplay . ini
$ $ { EndIf }
SectionEnd
"""
class NSISScript ( object ) :
def create ( self ) :
fileList , totalSize = self . getBuildDirContents ( OUT_DIR )
print ( " Total size eq: {} " . format ( totalSize ) )
installFiles = self . prepareInstallListTemplate ( fileList )
uninstallFiles = self . prepareDeleteListTemplate ( fileList )
if os . path . isfile ( SETUP_SCRIPT_PATH ) :
raise RuntimeError ( " Cannot create setup script, file exists at {} " . format ( SETUP_SCRIPT_PATH ) )
contents = Template ( NSIS_SCRIPT_TEMPLATE ) . substitute (
version = syncplay . version ,
uninstallFiles = uninstallFiles ,
installFiles = installFiles ,
totalSize = totalSize ,
)
with codecs . open ( SETUP_SCRIPT_PATH , " w " , " utf-8-sig " ) as outfile :
2018-04-27 19:32:21 +00:00
outfile . write ( contents )
2018-04-27 19:10:26 +00:00
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
os . remove ( SETUP_SCRIPT_PATH )
if retcode :
raise RuntimeError ( " NSIS compilation return code: %d " % retcode )
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 new_root not in fileList :
fileList [ new_root ] = [ ]
fileList [ new_root ] . append ( file_ )
return fileList , totalSize
def prepareInstallListTemplate ( self , fileList ) :
create = [ ]
for dir_ in fileList . keys ( ) :
create . append ( ' SetOutPath " $INSTDIR \\ {} " ' . format ( dir_ ) )
for file_ in fileList [ dir_ ] :
create . append ( ' FILE " {} \\ {} \\ {} " ' . format ( OUT_DIR , dir_ , file_ ) )
return " \n " . join ( create )
def prepareDeleteListTemplate ( self , fileList ) :
delete = [ ]
for dir_ in fileList . keys ( ) :
for file_ in fileList [ dir_ ] :
delete . append ( ' DELETE " $INSTDIR \\ {} \\ {} " ' . format ( dir_ , file_ ) )
delete . append ( ' RMdir " $INSTDIR \\ {} " ' . format ( file_ ) )
return " \n " . join ( delete )
guiIcons = [ ' resources/accept.png ' , ' resources/arrow_undo.png ' , ' resources/clock_go.png ' ,
' resources/control_pause_blue.png ' , ' resources/cross.png ' , ' resources/door_in.png ' ,
' resources/folder_explore.png ' , ' resources/help.png ' , ' resources/table_refresh.png ' ,
' resources/timeline_marker.png ' , ' resources/control_play_blue.png ' ,
' resources/mpc-hc.png ' , ' resources/mpc-hc64.png ' , ' resources/mplayer.png ' ,
' resources/mpc-be.png ' ,
' resources/mpv.png ' , ' resources/vlc.png ' , ' resources/house.png ' , ' resources/film_link.png ' ,
' resources/eye.png ' , ' resources/comments.png ' , ' resources/cog_delete.png ' , ' resources/chevrons_right.png ' ,
' resources/user_key.png ' , ' resources/lock.png ' , ' resources/key_go.png ' , ' resources/page_white_key.png ' ,
' resources/tick.png ' , ' resources/lock_open.png ' , ' resources/empty_checkbox.png ' , ' resources/tick_checkbox.png ' ,
' resources/world_explore.png ' , ' resources/application_get.png ' , ' resources/cog.png ' , ' resources/arrow_switch.png ' ,
' resources/film_go.png ' , ' resources/world_go.png ' , ' resources/arrow_refresh.png ' , ' resources/bullet_right_grey.png ' ,
' resources/user_comment.png ' ,
' resources/error.png ' ,
' resources/film_folder_edit.png ' ,
' resources/film_edit.png ' ,
' resources/folder_film.png ' ,
' resources/shield_edit.png ' ,
' resources/shield_add.png ' ,
' resources/email_go.png ' ,
' resources/world_add.png ' , ' resources/film_add.png ' , ' resources/delete.png ' , ' resources/spinner.mng '
]
resources = [ " resources/icon.ico " , " resources/syncplay.png " , " resources/syncplayintf.lua " , " resources/license.rtf " , " resources/third-party-notices.rtf " ]
resources . extend ( guiIcons )
intf_resources = [ " resources/lua/intf/syncplay.lua " ]
common_info = dict (
name = ' Syncplay ' ,
version = syncplay . version ,
author = ' Uriziel ' ,
author_email = ' dev@syncplay.pl ' ,
description = ' Syncplay ' ,
)
script = NSISScript ( )
script . create ( )
print ( " *** compiling the NSIS setup script*** " )
script . compile ( )
print ( " *** DONE *** " )