# Copyright 2023 Signal Messenger, LLC
# SPDX-License-Identifier: AGPL-3.0-only

!include WinVer.nsh
!include SignalStrings.nsh

ManifestDPIAware true

!macro preInit
  Var /Global OLD_SIGNAL_VERSION

  # Check minimum OS version
  ${IfNot} ${AtLeastWin10}
    MessageBox MB_OK|MB_ICONEXCLAMATION "$(signalMinWinVersionErr)"
    DetailPrint `Windows version check failed`
    Abort
  ${EndIf}

  # If previously installed
  ReadRegStr $OLD_SIGNAL_VERSION SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}" \
      "DisplayVersion"
  StrCmp $OLD_SIGNAL_VERSION "" end_semver_check

  # Check that we are not overwriting newer version of the app.
  ${StdUtils.ScanStr3} $R0 $R1 $R2 "%d.%d.%d" $OLD_SIGNAL_VERSION 0 0 0
  ${StdUtils.ScanStr3} $R3 $R4 $R5 "%d.%d.%d" ${VERSION} 0 0 0

  # Compare major number
  IntCmp $R0 $R3 same_major end_semver_check downgrade

  # Compare minor number
  same_major:
    IntCmp $R1 $R4 same_minor end_semver_check downgrade

  # Compare patch number
  same_minor:
    IntCmp $R2 $R5 end_semver_check end_semver_check downgrade

  # Detected downgrade - show message box
  downgrade:
    MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
        "$(signalMinAppVersionErr)" /SD IDCANCEL IDOK end_semver_check
    DetailPrint `SemVer check failed`
    Abort

  end_semver_check:
!macroend

!macro customInstall
  ${If} ${Silent}
  ${AndIf} ${isUpdated}
    # Copied from app-builder-lib templates/nsis/common.nsh:

    # "otherwise app window will be in background"
    HideWindow

    # Signal modification: '--start-in-tray' added
    ${StdUtils.ExecShellAsUser} $0 "$launchLink" "open" \
        "--updated --start-in-tray"
  ${EndIf}
!macroend