From ec8984e8da1246ec382ec5ea03803d7468f28e97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Lipok?= Date: Wed, 2 Mar 2022 19:10:54 +0100 Subject: [PATCH 1/4] OPERA: _WD_UpdateDriver + __WD_UpdateExtractor --- wd_helper.au3 | 150 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 102 insertions(+), 48 deletions(-) diff --git a/wd_helper.au3 b/wd_helper.au3 index ea82e94d..f8ae0e38 100644 --- a/wd_helper.au3 +++ b/wd_helper.au3 @@ -1279,7 +1279,7 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF Local Const $sFuncName = "_WD_UpdateDriver" Local $iErr = $_WD_ERROR_Success, $iExt = 0, $sDriverEXE, $sBrowserVersion, $bResult = False Local $sDriverCurrent, $sDriverLatest, $sURLNewDriver - Local $sTempFile, $oShell, $FilesInZip + Local $sTempFile Local $bKeepArch = False If $sInstallDir = Default Then $sInstallDir = @ScriptDir @@ -1302,10 +1302,15 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF $sBrowserVersion = _WD_GetBrowserVersion($sBrowser) $iErr = @error - Local $iIndex = @extended If $iErr = $_WD_ERROR_Success Then - ; Match exe file name in list of supported browsers + If StringInStr($sBrowser, '\') Then + ; Extract filename from full path + $sBrowser = StringRegExpReplace($sBrowser, "^.*\\|\..*$", "") + EndIf + + ; Match in list of supported browsers + Local $iIndex = _ArraySearch($_WD_SupportedBrowsers, $sBrowser, Default, Default, Default, Default, Default, $_WD_BROWSER_Name) $sDriverEXE = $_WD_SupportedBrowsers[$iIndex][$_WD_BROWSER_DriverName] ; Determine current local webdriver Architecture @@ -1345,53 +1350,15 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF ; Close any instances of webdriver __WD_CloseDriver($sDriverEXE) - #Region - Extract new instance of webdriver - ; Handle COM Errors - Local $oErr = ObjEvent("AutoIt.Error", __WD_ErrHnd) - #forceref $oErr - $oShell = ObjCreate("Shell.Application") - If @error Then - $iErr = $_WD_ERROR_GeneralError - ElseIf FileGetSize($sTempFile) = 0 Then - $iErr = $_WD_ERROR_FileIssue - $iExt = 11 ; $iExt from 11 to 19 are related to _WD_UpdateDriver() - ElseIf IsObj($oShell.NameSpace($sTempFile)) = 0 Then - $iErr = $_WD_ERROR_FileIssue - $iExt = 12 - ElseIf IsObj($oShell.NameSpace($sInstallDir)) = 0 Then - $iErr = $_WD_ERROR_FileIssue - $iExt = 13 - Else - Local $oNameSpace_Temp = $oShell.NameSpace($sTempFile) - $FilesInZip = $oNameSpace_Temp.items - If @error Then - $iErr = $_WD_ERROR_GeneralError - Else - Local $oNameSpace_Install = $oShell.NameSpace($sInstallDir) - Local $bEXEWasFound = False - For $FileItem In $FilesInZip ; Check the files in the archive separately - ; https://docs.microsoft.com/en-us/windows/win32/shell/folderitem - If StringRight($FileItem.Name, 4) = ".exe" Or StringRight($FileItem.Path, 4) = ".exe" Then ; extract only EXE files - ; delete webdriver from disk before unpacking to avoid potential problems - FileDelete($sInstallDir & $sDriverEXE) - $bEXEWasFound = True - $oNameSpace_Install.CopyHere($FileItem, 20) ; 20 = (4) Do not display a progress dialog box. + (16) Respond with "Yes to All" for any dialog box that is displayed. - EndIf - Next - If @error Then - $iErr = $_WD_ERROR_GeneralError - ElseIf Not $bEXEWasFound Then - $iErr = $_WD_ERROR_FileIssue - $iExt = 19 ; $iExt from 11 to 19 are related to _WD_UpdateDriver() - Else - $iErr = $_WD_ERROR_Success - $bResult = True - EndIf - EndIf - EndIf - #EndRegion - Extract new instance of webdriver + ; Extract + __WD_UpdateExtractor($sTempFile, $sInstallDir, $sDriverEXE) + If Not @error Then $bResult = True + $iErr = @error + $iExt = @extended EndIf FileDelete($sTempFile) + ShellExecute($sInstallDir) + Exit EndIf EndIf EndIf @@ -1410,6 +1377,93 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF Return SetError(__WD_Error($sFuncName, $iErr), $iExt, $bResult) EndFunc ;==>_WD_UpdateDriver +; #INTERNAL_USE_ONLY# =========================================================================================================== +; Name ..........: __WD_UpdateExtractor +; Description ...: +; Syntax ........: __WD_UpdateExtractor($sTempFile, $sInstallDir, $sDriverEXE[, $sSubDir = ""]) +; Parameters ....: $sTempFile - a string value. +; $sInstallDir - a string value. +; $sDriverEXE - a string value. +; $sSubDir - [optional] a string value. Default is "". +; Return values .: None +; Author ........: Danp2 +; Modified ......: mLipok +; Remarks .......: +; Related .......: +; Link ..........: +; Example .......: No +; =============================================================================================================================== +Func __WD_UpdateExtractor($sTempFile, $sInstallDir, $sDriverEXE, $sSubDir = "") + Local Const $sFuncName = "__WD_UpdateExtractor" + Local $iErr = $_WD_ERROR_Success, $iExt = 0 + + ; Handle COM Errors + Local $oErr = ObjEvent("AutoIt.Error", __WD_ErrHnd) + #forceref $oErr + + Local $oShell = ObjCreate("Shell.Application") + If @error Then + $iErr = $_WD_ERROR_GeneralError + ElseIf FileGetSize($sTempFile) = 0 Then + $iErr = $_WD_ERROR_FileIssue + $iExt = 11 ; $iExt from 11 to 19 are related to __WD_UpdateExtractor() + ElseIf IsObj($oShell.NameSpace($sTempFile)) = 0 Then + $iErr = $_WD_ERROR_FileIssue + $iExt = 12 + ElseIf IsObj($oShell.NameSpace($sInstallDir)) = 0 Then + $iErr = $_WD_ERROR_FileIssue + $iExt = 13 + Else + Local $oNameSpace_Temp = $oShell.NameSpace($sTempFile & $sSubDir) + Local $FilesInZip = $oNameSpace_Temp.items + If @error Then + $iErr = $_WD_ERROR_GeneralError + $iExt = 14 + Else + Local $oNameSpace_Install = $oShell.NameSpace($sInstallDir) + Local $bEXEWasFound = False + For $FileItem In $FilesInZip ; Check the files in the archive separately + ; https://docs.microsoft.com/en-us/windows/win32/shell/folderitem + + ; ConsoleWrite only for testing - should be deleted before merge to master + ConsoleWrite("! " & @ScriptLineNumber & ' ' & $FileItem.Name & @CRLF) + ConsoleWrite("! " & @ScriptLineNumber & ' ' & $FileItem.Type & @CRLF) + ConsoleWrite("! " & @ScriptLineNumber & ' ' & $FileItem.IsFolder & @CRLF) + ConsoleWrite("! " & @ScriptLineNumber & ' ' & IsBool($FileItem.IsFolder) & @CRLF) + ConsoleWrite("! " & @ScriptLineNumber & ' ' & IsString($FileItem.IsFolder) & @CRLF) + ConsoleWrite("! " & @ScriptLineNumber & ' ' & VarGetType($FileItem.IsFolder) & @CRLF) + + If $FileItem.IsFolder Then + ; try to Extract subdir content + __WD_UpdateExtractor($sTempFile, $sInstallDir, $sDriverEXE, '\' & $FileItem.Name) + Else + If StringRight($FileItem.Name, 4) = ".exe" Or StringRight($FileItem.Path, 4) = ".exe" Then ; extract only EXE files + $bEXEWasFound = True + ; delete webdriver from disk before unpacking to avoid potential problems + FileDelete($sInstallDir & $sDriverEXE) + $oNameSpace_Install.CopyHere($FileItem, 20) ; 20 = (4) Do not display a progress dialog box. + (16) Respond with "Yes to All" for any dialog box that is displayed. + EndIf + EndIf + Next + If @error Then + $iErr = $_WD_ERROR_GeneralError + $iExt = 15 + ElseIf Not $bEXEWasFound Then + $iErr = $_WD_ERROR_NotFound + $iExt = 19 ; $iExt from 11 to 19 are related to __WD_UpdateExtractor() + Else + $iErr = $_WD_ERROR_Success + EndIf + EndIf + EndIf + + If $_WD_DEBUG = $_WD_DEBUG_Info Then + __WD_ConsoleWrite($sFuncName & ': Error = ' & $iErr & ' : Extended = ' & $iExt & @CRLF) + EndIf + + Return SetError(__WD_Error($sFuncName, $iErr), $iExt) +EndFunc ;==>__WD_UpdateExtractor + ; #FUNCTION# ==================================================================================================================== ; Name ..........: _WD_GetBrowserVersion ; Description ...: Get version number of specified browser. From a23eb7f278559a77ef389e3a2705628dd5b243c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Lipok?= Date: Wed, 2 Mar 2022 20:33:08 +0100 Subject: [PATCH 2/4] StringInStr($sBrowser, '\') and $iIndex --- fixed this was cross version errors - I miss some already done merged PR --- wd_helper.au3 | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/wd_helper.au3 b/wd_helper.au3 index f8ae0e38..0a2f8a81 100644 --- a/wd_helper.au3 +++ b/wd_helper.au3 @@ -1302,15 +1302,10 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF $sBrowserVersion = _WD_GetBrowserVersion($sBrowser) $iErr = @error + Local $iIndex = @extended If $iErr = $_WD_ERROR_Success Then - If StringInStr($sBrowser, '\') Then - ; Extract filename from full path - $sBrowser = StringRegExpReplace($sBrowser, "^.*\\|\..*$", "") - EndIf - - ; Match in list of supported browsers - Local $iIndex = _ArraySearch($_WD_SupportedBrowsers, $sBrowser, Default, Default, Default, Default, Default, $_WD_BROWSER_Name) + ; Match exe file name in list of supported browsers $sDriverEXE = $_WD_SupportedBrowsers[$iIndex][$_WD_BROWSER_DriverName] ; Determine current local webdriver Architecture @@ -1357,8 +1352,10 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF $iExt = @extended EndIf FileDelete($sTempFile) - ShellExecute($sInstallDir) - Exit + ; ShellExecute and Exit are only for easier testing together with wd_demo.au3 + ; Should be deleted before merge to master + ; ShellExecute($sInstallDir) + ; Exit EndIf EndIf EndIf From b455052446d3de9f9cf034b99b9483eafa013747 Mon Sep 17 00:00:00 2001 From: Dan Pollak Date: Wed, 2 Mar 2022 14:26:13 -0600 Subject: [PATCH 3/4] cleanup --- wd_helper.au3 | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/wd_helper.au3 b/wd_helper.au3 index 0a2f8a81..3ec5783c 100644 --- a/wd_helper.au3 +++ b/wd_helper.au3 @@ -1315,9 +1315,6 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF If $bKeepArch Then $bFlag64 = $bDriverIs64Bit If $_WD_SupportedBrowsers[$iIndex][$_WD_BROWSER_64Bit] And $bDriverIs64Bit <> $bFlag64 Then $bForce = True -;~ If $WDDebugSave = $_WD_DEBUG_Info Then -;~ __WD_ConsoleWrite($sFuncName & ': ' & $sDriverEXE & ' = ' & (($bDriverIs64Bit) ? ("switching 64>32 Bit") : ("switching 32>64 Bit")) & @CRLF) -;~ EndIf EndIf EndIf @@ -1352,10 +1349,6 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF $iExt = @extended EndIf FileDelete($sTempFile) - ; ShellExecute and Exit are only for easier testing together with wd_demo.au3 - ; Should be deleted before merge to master - ; ShellExecute($sInstallDir) - ; Exit EndIf EndIf EndIf @@ -1365,8 +1358,6 @@ Func _WD_UpdateDriver($sBrowser, $sInstallDir = Default, $bFlag64 = Default, $bF EndIf If $_WD_DEBUG = $_WD_DEBUG_Info Then -;~ __WD_ConsoleWrite($sFuncName & ': Local File = ' & $sInstallDir & $sDriverEXE & @CRLF) -;~ __WD_ConsoleWrite($sFuncName & ': URLNewDriver = ' & $sURLNewDriver & @CRLF) __WD_ConsoleWrite($sFuncName & ': DriverCurrent = ' & $sDriverCurrent & ' : DriverLatest = ' & $sDriverLatest & @CRLF) __WD_ConsoleWrite($sFuncName & ': Error = ' & $iErr & ' : Extended = ' & $iExt & ' : Result = ' & $bResult & @CRLF) EndIf @@ -1422,14 +1413,6 @@ Func __WD_UpdateExtractor($sTempFile, $sInstallDir, $sDriverEXE, $sSubDir = "") For $FileItem In $FilesInZip ; Check the files in the archive separately ; https://docs.microsoft.com/en-us/windows/win32/shell/folderitem - ; ConsoleWrite only for testing - should be deleted before merge to master - ConsoleWrite("! " & @ScriptLineNumber & ' ' & $FileItem.Name & @CRLF) - ConsoleWrite("! " & @ScriptLineNumber & ' ' & $FileItem.Type & @CRLF) - ConsoleWrite("! " & @ScriptLineNumber & ' ' & $FileItem.IsFolder & @CRLF) - ConsoleWrite("! " & @ScriptLineNumber & ' ' & IsBool($FileItem.IsFolder) & @CRLF) - ConsoleWrite("! " & @ScriptLineNumber & ' ' & IsString($FileItem.IsFolder) & @CRLF) - ConsoleWrite("! " & @ScriptLineNumber & ' ' & VarGetType($FileItem.IsFolder) & @CRLF) - If $FileItem.IsFolder Then ; try to Extract subdir content __WD_UpdateExtractor($sTempFile, $sInstallDir, $sDriverEXE, '\' & $FileItem.Name) From 4aa47c15b8f23fc31aab4efd2ec55e9297faf2de Mon Sep 17 00:00:00 2001 From: Dan Pollak Date: Wed, 2 Mar 2022 14:30:01 -0600 Subject: [PATCH 4/4] Update header --- wd_helper.au3 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/wd_helper.au3 b/wd_helper.au3 index 3ec5783c..f73a38fa 100644 --- a/wd_helper.au3 +++ b/wd_helper.au3 @@ -1367,12 +1367,12 @@ EndFunc ;==>_WD_UpdateDriver ; #INTERNAL_USE_ONLY# =========================================================================================================== ; Name ..........: __WD_UpdateExtractor -; Description ...: +; Description ...: Extract webdriver executable from zip file ; Syntax ........: __WD_UpdateExtractor($sTempFile, $sInstallDir, $sDriverEXE[, $sSubDir = ""]) -; Parameters ....: $sTempFile - a string value. -; $sInstallDir - a string value. -; $sDriverEXE - a string value. -; $sSubDir - [optional] a string value. Default is "". +; Parameters ....: $sTempFile - Full path to zip file. +; $sInstallDir - Directory where extracted files are placed +; $sDriverEXE - Name of webdriver executable +; $sSubDir - [optional] Directory containing files to extract. ; Return values .: None ; Author ........: Danp2 ; Modified ......: mLipok