FWSUpdates for WPKG on iPasserelle
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
6.0 KiB

REM @echo off
setlocal enabledelayedexpansion
REM Detect if we have admin rights
SET /A ADMIN=0
net session 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 0 SET /A ADMIN=1
IF %ADMIN% EQU 1 CALL %~dp0\..\conf\adm\conf.bat
IF %ADMIN% NEQ 1 CALL %~dp0\..\conf\user\conf.bat
SET /A WAIT=0
CALL %~dp0\..\lang\en.bat
FOR /F "tokens=3" %%A IN ('reg query "HKLM\System\CurrentControlSet\Control\nls\Language" /v Installlanguage') DO SET LANG=%%A
IF EXIST %~dp0\..\lang\%LANG%.bat CALL %~dp0\..\lang\%LANG%.bat
SET watitle=%L_WINDOW_TITLE%
SET wasig=%L_WINDOW_SIG%
SET walabels=%L_BTN_PREV%;%L_BTN_NEXT%;%L_BTN_OK%;%L_BTN_CANCEL%
SET wabmp=%SystemDrive%\FWSUpdates\assets\img\fws.bmp
SET waico=%SystemDrive%\FWSUpdates\assets\img\fws.ico
SET wabat=%TEMP%\fwsupdates_resp.bat
:loop
IF NOT "%1" == "loop" IF NOT %WAIT% EQU 0 goto :EOF
timeout /t %WAIT% 1>NUL 2>NUL
:begin
SET /A WAIT=300
SET /A SYNC_IN_PROGRESS=0
SET /A RUN_ON_SHUTDOWN=0
REM Wait if a sync is running
reg query "HKLM\Software\FWS\Updates" /v SyncInProgress 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 0 FOR /F "tokens=3" %%A IN ('reg query "HKLM\Software\FWS\Updates" /v SyncInProgress') DO SET /A SYNC_IN_PROGRESS=%%A
IF %SYNC_IN_PROGRESS% EQU 1 (
IF "%1" == "loop" goto loop
SET watext=%L_SYNC_ALREADY_IN_PROGRESS%
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe FINISH NOBACK NOCANCEL TB
goto :EOF
)
REM if updates are already scheduled for next shutdown, just quit now, there's no point in looping
reg query "HKLM\Software\FWS\Updates\User" /v RunOnShutdown 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 0 FOR /F "tokens=3" %%A IN ('reg query "HKLM\Software\FWS\Updates\User" /v RunOnShutdown') DO SET /A RUN_ON_SHUTDOWN=%%A
IF %RUN_ON_SHUTDOWN% EQU 0 (
reg query "HKLM\Software\FWS\Updates" /v RunOnShutdown 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 0 FOR /F "tokens=3" %%A IN ('reg query "HKLM\Software\FWS\Updates" /v RunOnShutdown') DO SET /A RUN_ON_SHUTDOWN=%%A
)
IF %RUN_ON_SHUTDOWN% EQU 1 (
IF "%1" == "loop" goto :EOF
IF %ADMIN% NEQ 1 (
SET watext=%L_ALREADY_SCHEDULED_ON_SHUTDOWN%
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe FINISH NOBACK NOCANCEL TB
goto :EOF
)
)
SET CHANGES=0
reg query "HKLM\Software\FWS\Updates" /v PendingChanges 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 0 FOR /F "tokens=3" %%A IN ('reg query "HKLM\Software\FWS\Updates" /v PendingChanges') DO SET /A CHANGES=%%A
IF %CHANGES% LSS 1 IF %ADMIN% NEQ 1 (
IF "%1" == "loop" goto loop
SET watext=%L_NO_UPDATE_AVAILABLE% %L_FOR_YOUR_SYSTEM%.
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe FINISH NOBACK NOCANCEL TB
goto :EOF
)
SET /A NOW=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%
SET /A SINCE=%NOW%
reg query "HKLM\Software\FWS\Updates" /v ChangesAvailableSince 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 0 OR /F "tokens=3 delims= " %%A IN ('reg query "HKLM\Software\FWS\Updates" /v ChangesAvailableSince') DO SET /A SINCE=%%A
REM Some wording changes if there's only 1 single change to apply
IF %CHANGES% EQU 1 (
SET INTRO=1 %L_ONE_UPDATE_AVAILABLE%
SET AVAILABLE_SINCE=%L_ONE_UPDATE_AVAILABLE_SINCE%
) ELSE (
SET INTRO=%CHANGES% %L_X_UPDATES_AVAILABLE%
SET AVAILABLE_SINCE=%L_X_UPDATES_AVAILABLE_SINCE%
)
REM Compute how many days left we can delay updates
SET /A MAX=%SINCE%+%MAX_REPORT%
SET /A AGE=%NOW%-%SINCE%
SET /A REMAINING=%MAX%-%NOW%
REM Non admin on RDP shouldn't see updates notif
IF %ADMIN% NEQ 1 IF NOT "%SESSIONNAME%" == "Console" goto :EOF
REM Check if we can delay updates
REM Users can only delay for %MAX_REPORT% days while admins can always delay
SET /A CAN_REPORT=0
IF %NOW% LEQ %MAX% SET /A CAN_REPORT=1
IF %ADMIN% EQU 1 SET /A CAN_REPORT=1
IF %CHANGES% LSS 1 IF %ADMIN% EQU 1 (
SET watext=%L_NO_UPDATE_AVAILABLE% %L_FOR_YOUR_SYSTEM%.
SET wainput= %L_CHECK_ONLINE_FOR_UPDATES%
SET waoutnum=0
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe NOBACK RB
IF errorlevel 2 goto cancel_no_update
IF errorlevel 1 goto previous
IF !waoutnum! EQU 0 goto check
)
ELSE (
IF %CAN_REPORT% EQU 1 (
SET watext=%INTRO% %L_FOR_YOUR_SYSTEM%.~~%L_YOU_CAN_SCHEDULE%.~~%L_INSTALL_FORCED_IN% %REMAINING% %L_DAYS%
SET wainput= %L_SCHEDULE_ON_SHUTDOWN%; %L_REPORT%
IF %ADMIN% EQU 1 (
IF %RUN_ON_SHUTDOWN% NEQ 1 (
SET wainput= %L_SCHEDULE_ON_SHUTDOWN%; %L_REPORT%; %L_INSTALL_NOW%; %L_CHECK_ONLINE_FOR_UPDATES%
) ELSE (
SET watext=%INTRO% %L_FOR_YOUR_SYSTEM%.~~%L_ALREADY_SCHEDULED_ON_SHUTDOWN%.~~%L_INSTALL_FORCED_IN% %REMAINING% %L_DAYS%
SET wainput= %L_MAINTAIN_ON_SHUTDOWN%; %L_CANCEL_SCHEDULE_ON_SHUTDOWN%; %L_INSTALL_NOW%; %L_CHECK_ONLINE_FOR_UPDATES%
)
)
SET waoutnum=0
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe NOBACK RB
IF errorlevel 2 goto cancel
IF errorlevel 1 goto previous
CALL %wabat%
IF !waoutnum! EQU 0 goto shutdown
IF !waoutnum! EQU 1 goto later
IF !waoutnum! EQU 2 goto now
IF !waoutnum! EQU 3 goto check
) ELSE (
SET watext=%INTRO% %L_FOR_YOUR_SYSTEM%.~~%AVAILABLE_SINCE% %L_SINCE% %AGE% %L_DAYS%.~~%L_CANT_REPORT_ANYMORE%
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe FINISH TB
goto :shutdown
)
)
goto :loop
:cancel
goto :later
:cancel_no_update
goto :EOF
:previous
goto :loop
:later
reg del "HKLM\Software\FWS\Updates\User" /v RunOnShutdown /f 1>NUL 2>NUL
IF %ADMIN% EQU 1 reg del "HKLM\Software\FWS\Updates" /v RunOnShutdown /f 1>NUL 2>NUL
SET watext=%L_UPDATES_REPORTED%.
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe FINISH NOBACK TB
SET /A WAIT=WAIT+10800
goto loop
:shutdown
reg add "HKLM\Software\FWS\Updates\User" /v RunOnShutdown /t REG_DWORD /d 1 /f
SET watext=%L_UPDATES_SCHEDULED%
%SystemDrive%\FWSUpdates\bin\wizapp.exe FINISH NOBACK TB
goto :EOF
:now
IF %ADMIN% NEQ 1 goto later
CALL %~dp0\wpkg_feedback.bat %CHANGES%
SET watext=%L_UPDATES_FINISHED%
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe FINISH NOBACK NOCANCEL TB
goto :loop
:check
IF %ADMIN% NEQ 1 goto later
SET watext=%L_CHECKING_UPDATES%
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe PB OPEN NOBACK NOCANCEL
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe PB UPDATE 10
CALL %~dp0\sync.bat
start /w %SystemDrive%\FWSUpdates\bin\wizapp.exe PB CLOSE
goto begin