|
|
|
;---FUNCTIONS-----------------------------------------------------------------------
|
|
|
|
; Misc Functions that are called by both the Video and Social Media poster
|
|
|
|
|
|
|
|
|
|
|
|
; -------------------------------Variables-------------------------------
|
|
|
|
; Declare global variables here so they don't have to be declared in each script
|
|
|
|
global ChromeTabsURLArray
|
|
|
|
global DriverTitleArray
|
|
|
|
global LastWebsitePostURL
|
|
|
|
global CurrentTabURL
|
|
|
|
global URLOfLastErrorPage
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DevModeMsgBox(Message){
|
|
|
|
if(!DevMode)
|
|
|
|
return
|
|
|
|
|
|
|
|
Msgbox, 4096, DevModeMsgBox, %Message%
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
; -------------------------------SaveOrPostProgress-------------------------------
|
|
|
|
; PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging,DiscordVideos"
|
|
|
|
SaveOrPostProgress(Message:="",PostType:=""){
|
|
|
|
|
|
|
|
MessageBU := Message
|
|
|
|
; Msgbox % "PostType: " PostType
|
|
|
|
; Msgbox % "CurrentSite: " CurrentSite
|
|
|
|
|
|
|
|
if(CurrentSite != "")
|
|
|
|
Message := CurrentSite . ": " . Message
|
|
|
|
|
|
|
|
if(InStr(PostType, "Tooltip")){
|
|
|
|
TooltipThis(Message)
|
|
|
|
}
|
|
|
|
/* if(InStr(PostType, "ErrorLoggingTextFile")){
|
|
|
|
Func_LogErrorsToTextFile(Message)
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
if(InStr(PostType, "ErrorSummaryVar")){
|
|
|
|
Func_LogErrorsToVar(Message)
|
|
|
|
}
|
|
|
|
if(InStr(PostType, "DiscordErrorLogging")){
|
|
|
|
PostToDiscordChannel(Message,DiscordErrorLoggingWebhookBotURL)
|
|
|
|
}
|
|
|
|
if(InStr(PostType, "DevModeMsgBox")){
|
|
|
|
DevModeMsgBox(Message)
|
|
|
|
}
|
|
|
|
if(InStr(PostType, "DiscordVideos")){
|
|
|
|
Message := MessageBU
|
|
|
|
PostToDiscordChannel(Message,DiscordVideosWebhookURL)
|
|
|
|
}
|
|
|
|
if(InStr(PostType, "DiscordParler")){
|
|
|
|
Message := MessageBU
|
|
|
|
PostToDiscordChannel(Message,DiscordParlerWebhookURL)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
; -------------------------------/SaveOrPostProgress-------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
; -------------------------------TooltipThis-------------------------------
|
|
|
|
TooltipThis(String){
|
|
|
|
; Xposition := StrLen(String)
|
|
|
|
StringFirstLine := StrSplit(String, "`n")
|
|
|
|
StringFirstLine := StringFirstLine[1]
|
|
|
|
Xposition := StrLen(StringFirstLine)
|
|
|
|
; Msgbox % "String: " String
|
|
|
|
Xposition := Xposition * 4
|
|
|
|
X := (A_ScreenWidth / 2) - Xposition
|
|
|
|
; Msgbox % "X: " X
|
|
|
|
if(ShowTooltipProgress){
|
|
|
|
ToolTip, %String%, %X%, 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
; -------------------------------/TooltipThis-------------------------------
|
|
|
|
|
|
|
|
;------------------------------------------------
|
|
|
|
TimedToolTip(Text, x="", y="",RemoveAfterTime:=2000, SetWhichToolTip="") {
|
|
|
|
if(X = ""){
|
|
|
|
Xposition := StrLen(Text)
|
|
|
|
; Msgbox % "Xposition: " Xposition
|
|
|
|
Xposition := Xposition * 4
|
|
|
|
; Xposition := 0
|
|
|
|
X := (A_ScreenWidth / 2) - Xposition
|
|
|
|
; Msgbox % "X: " X
|
|
|
|
}
|
|
|
|
(y = "")?(y:=0):(y:=y)
|
|
|
|
|
|
|
|
; Msgbox % "y: " y
|
|
|
|
ToolTip, %Text%, %X%, %Y%
|
|
|
|
SetTimer, RMApp_ToolTipRASub, % - RemoveAfterTime
|
|
|
|
return
|
|
|
|
RMApp_ToolTipRASub:
|
|
|
|
ToolTip,,,, %WhichToolTip%
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
; -------------------------------LogErrorsToTextFile-------------------------------
|
|
|
|
Func_LogErrorsToTextFile(Text){
|
|
|
|
; ErrorLoggingFile := Filepath
|
|
|
|
FormatTime, TodayDate , YYYYMMDDHH24MISS, yyyyMMdd_hhmmss
|
|
|
|
text =
|
|
|
|
(
|
|
|
|
|
|
|
|
---------------%TodayDate%---------------
|
|
|
|
%Text%
|
|
|
|
|
|
|
|
)
|
|
|
|
FileAppend, %Text%, %ErrorLoggingFilePath%
|
|
|
|
}
|
|
|
|
; -------------------------------/LogErrorsToTextFile-------------------------------
|
|
|
|
|
|
|
|
; -------------------------------LogErrorsToVar-------------------------------
|
|
|
|
Func_LogErrorsToVar(Text){
|
|
|
|
ErrorLogVar .= "`n" . Text
|
|
|
|
}
|
|
|
|
; -------------------------------/LogErrorsToVar-------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
; -------------------------------CheckDirExistAndCreate-------------------------------
|
|
|
|
; Check if directory exists and if not, create it
|
|
|
|
CheckDirExistAndCreate(Path){
|
|
|
|
if(!FileExist(Path)){
|
|
|
|
FileCreateDir, %Path%
|
|
|
|
}
|
|
|
|
}
|
|
|
|
; -------------------------------/CheckDirExistAndCreate-------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CheckIfUpdateAvailable(Filepath, CurrentVersion){
|
|
|
|
FileRead, ScriptUpdateContents, %Filepath%
|
|
|
|
FileContents := StrSplit(ScriptUpdateContents, "ScriptVersion")
|
|
|
|
FileContents := FileContents[2]
|
|
|
|
FileContents := StrSplit(FileContents, "`n")
|
|
|
|
UpdateVersion := FileContents[1]
|
|
|
|
; msgbox % UpdateVersion
|
|
|
|
|
|
|
|
if(!InStr(UpdateVersion, CurrentVersion)){ ; Update found for file, write to settings.ini for next time script is run
|
|
|
|
Message = Update Available to Download
|
|
|
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
|
|
|
|
Return True
|
|
|
|
}
|
|
|
|
Return False
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
*/
|
|
|
|
|
|
|
|
InputFilePathIntoOpenWindow(Filepath){
|
|
|
|
; Msgbox % "Filepath: " Filepath
|
|
|
|
Message = Waiting for "Open" window to appear to input filepath into
|
|
|
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
|
|
|
|
; Tooltip,Waiting for "Open" window to appear to input filepath into,850,0
|
|
|
|
; WinWait, Open
|
|
|
|
WinWait,Open,,5 ; Wait for 10 seconds for window
|
|
|
|
if(ErrorLevel)
|
|
|
|
{
|
|
|
|
; msgbox, failed to find window.
|
|
|
|
Return "Failed"
|
|
|
|
}
|
|
|
|
WinActivate, Open
|
|
|
|
sleep, 1000
|
|
|
|
ControlSetText, Edit1, %Filepath%, Open
|
|
|
|
sleep, 1000
|
|
|
|
ControlSend, Edit1, {Enter}, Open
|
|
|
|
sleep, 1000
|
|
|
|
|
|
|
|
; Do an extra check in case the Open window is still open.
|
|
|
|
OpenWindowExist := WinExist("Open")
|
|
|
|
if(OpenWindowExist)
|
|
|
|
ControlSend, Edit1, {Enter}, Open
|
|
|
|
ToolTip,
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
*/
|
|
|
|
|
|
|
|
; -------------------------------FileXPro Get File Attributes-------------------------------
|
|
|
|
;https://www.autohotkey.com/boards/viewtopic.php?t=59882
|
|
|
|
|
|
|
|
Filexpro( sFile := "", Kind := "", P* ) { ; v.90 By SKAN on D1CC @ goo.gl/jyXFo9
|
|
|
|
Local
|
|
|
|
Static xDetails
|
|
|
|
|
|
|
|
If ( sFile = "" )
|
|
|
|
{ ; Deinit static variable
|
|
|
|
xDetails := ""
|
|
|
|
Return
|
|
|
|
}
|
|
|
|
|
|
|
|
fex := {}, _FileExt := ""
|
|
|
|
|
|
|
|
Loop, Files, % RTrim(sfile,"\*/."), DF
|
|
|
|
{
|
|
|
|
If not FileExist( sFile:=A_LoopFileLongPath )
|
|
|
|
{
|
|
|
|
Return
|
|
|
|
}
|
|
|
|
|
|
|
|
SplitPath, sFile, _FileExt, _Dir, _Ext, _File, _Drv
|
|
|
|
|
|
|
|
If ( p[p.length()] = "xInfo" ) ; Last parameter is xInfo
|
|
|
|
{
|
|
|
|
p.Pop() ; Delete parameter
|
|
|
|
fex.SetCapacity(11) ; Make room for Extra info
|
|
|
|
fex["_Attrib"] := A_LoopFileAttrib
|
|
|
|
fex["_Dir"] := _Dir
|
|
|
|
fex["_Drv"] := _Drv
|
|
|
|
fex["_Ext"] := _Ext
|
|
|
|
fex["_File"] := _File
|
|
|
|
fex["_File.Ext"] := _FileExt
|
|
|
|
fex["_FilePath"] := sFile
|
|
|
|
fex["_FileSize"] := A_LoopFileSize
|
|
|
|
fex["_FileTimeA"] := A_LoopFileTimeAccessed
|
|
|
|
fex["_FileTimeC"] := A_LoopFileTimeCreated
|
|
|
|
fex["_FileTimeM"] := A_LoopFileTimeModified
|
|
|
|
}
|
|
|
|
Break
|
|
|
|
}
|
|
|
|
|
|
|
|
If Not ( _FileExt ) ; Filepath not resolved
|
|
|
|
{
|
|
|
|
Return
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
objShl := ComObjCreate("Shell.Application")
|
|
|
|
objDir := objShl.NameSpace(_Dir)
|
|
|
|
objItm := objDir.ParseName(_FileExt)
|
|
|
|
|
|
|
|
If ( VarSetCapacity(xDetails) = 0 ) ; Init static variable
|
|
|
|
{
|
|
|
|
i:=-1, xDetails:={}, xDetails.SetCapacity(309)
|
|
|
|
|
|
|
|
While ( i++ < 309 )
|
|
|
|
{
|
|
|
|
xDetails[ objDir.GetDetailsOf(0,i) ] := i
|
|
|
|
}
|
|
|
|
|
|
|
|
xDetails.Delete("")
|
|
|
|
}
|
|
|
|
|
|
|
|
If ( Kind and Kind <> objDir.GetDetailsOf(objItm,11) ) ; File isn't desired kind
|
|
|
|
{
|
|
|
|
Return
|
|
|
|
}
|
|
|
|
|
|
|
|
i:=0, nParams:=p.Count(), fex.SetCapacity(nParams + 11)
|
|
|
|
|
|
|
|
While ( i++ < nParams )
|
|
|
|
{
|
|
|
|
Prop := p[i]
|
|
|
|
|
|
|
|
If ( (Dot:=InStr(Prop,".")) and (Prop:=(Dot=1 ? "System":"") . Prop) )
|
|
|
|
{
|
|
|
|
fex[Prop] := objItm.ExtendedProperty(Prop)
|
|
|
|
Continue
|
|
|
|
}
|
|
|
|
|
|
|
|
If ( PropNum := xDetails[Prop] ) > -1
|
|
|
|
{
|
|
|
|
fex[Prop] := ObjDir.GetDetailsOf(objItm,PropNum)
|
|
|
|
Continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fex.SetCapacity(-1)
|
|
|
|
Return fex
|
|
|
|
|
|
|
|
} ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; GuiButtonIcon
|
|
|
|
;------------------------------------------------
|
|
|
|
GuiButtonIcon(Handle, File, Index := 1, Options := "")
|
|
|
|
{
|
|
|
|
RegExMatch(Options, "i)w\K\d+", W), (W="") ? W := 16 :
|
|
|
|
RegExMatch(Options, "i)h\K\d+", H), (H="") ? H := 16 :
|
|
|
|
RegExMatch(Options, "i)s\K\d+", S), S ? W := H := S :
|
|
|
|
RegExMatch(Options, "i)l\K\d+", L), (L="") ? L := 0 :
|
|
|
|
RegExMatch(Options, "i)t\K\d+", T), (T="") ? T := 0 :
|
|
|
|
RegExMatch(Options, "i)r\K\d+", R), (R="") ? R := 0 :
|
|
|
|
RegExMatch(Options, "i)b\K\d+", B), (B="") ? B := 0 :
|
|
|
|
RegExMatch(Options, "i)a\K\d+", A), (A="") ? A := 4 :
|
|
|
|
Psz := A_PtrSize = "" ? 4 : A_PtrSize, DW := "UInt", Ptr := A_PtrSize = "" ? DW : "Ptr"
|
|
|
|
VarSetCapacity( button_il, 20 + Psz, 0 )
|
|
|
|
NumPut( normal_il := DllCall( "ImageList_Create", DW, W, DW, H, DW, 0x21, DW, 1, DW, 1 ), button_il, 0, Ptr ) ; Width & Height
|
|
|
|
NumPut( L, button_il, 0 + Psz, DW ) ; Left Margin
|
|
|
|
NumPut( T, button_il, 4 + Psz, DW ) ; Top Margin
|
|
|
|
NumPut( R, button_il, 8 + Psz, DW ) ; Right Margin
|
|
|
|
NumPut( B, button_il, 12 + Psz, DW ) ; Bottom Margin
|
|
|
|
NumPut( A, button_il, 16 + Psz, DW ) ; Alignment
|
|
|
|
SendMessage, BCM_SETIMAGELIST := 5634, 0, &button_il,, AHK_ID %Handle%
|
|
|
|
return IL_Add( normal_il, File, Index )
|
|
|
|
}
|
|
|
|
|
|
|
|
; \GuiButtonIcon
|
|
|
|
;------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
ToggleTestingMode(){
|
|
|
|
|
|
|
|
IniRead, TestingMode, Settings.ini, General, TestingMode, 0
|
|
|
|
; Msgbox % "TestingMode: " TestingMode
|
|
|
|
if(TestingMode)
|
|
|
|
IniWrite, 0, Settings.ini, General, TestingMode
|
|
|
|
else,
|
|
|
|
IniWrite, 1, Settings.ini, General, TestingMode
|
|
|
|
}
|
|
|
|
|
|
|
|
ToggleManualSubmit(){
|
|
|
|
|
|
|
|
IniRead, ManualSubmit, Settings.ini, General, ManualSubmit, 0
|
|
|
|
; Msgbox % "TestingMode: " TestingMode
|
|
|
|
if(ManualSubmit)
|
|
|
|
IniWrite, 0, Settings.ini, General, ManualSubmit
|
|
|
|
else,
|
|
|
|
IniWrite, 1, Settings.ini, General, ManualSubmit
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ToggleDevMode(){
|
|
|
|
|
|
|
|
IniRead, DevMode, Settings.ini, General, DevMode, 0
|
|
|
|
; Msgbox % "TestingMode: " TestingMode
|
|
|
|
if(DevMode)
|
|
|
|
IniWrite, 0, Settings.ini, General, DevMode
|
|
|
|
else,
|
|
|
|
IniWrite, 1, Settings.ini, General, DevMode
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FormatTextToJSText(Var){ ; Replaces AHK newline characters with javascript ones
|
|
|
|
/*\b Backspace
|
|
|
|
\f Form Feed
|
|
|
|
\n New Line - done
|
|
|
|
\r Carriage Return
|
|
|
|
\t Horizontal Tabulator
|
|
|
|
\v Vertical Tabulator
|
|
|
|
\' Single quote - done
|
|
|
|
\" Double quote - done
|
|
|
|
\\ Backslash - done
|
|
|
|
*/
|
|
|
|
|
|
|
|
SingleQuotationmark = "
|
|
|
|
; Variable of Escaped Symbols
|
|
|
|
EscapedSingleQuote = \'
|
|
|
|
EscapedDoubleQuote = \"
|
|
|
|
EscapedBackslash = \\
|
|
|
|
EscapedNewLine = \n
|
|
|
|
|
|
|
|
; Replace each character that needs replacing in the text string
|
|
|
|
Var := StrReplace(Var, "\", EscapedBackslash) ; needed otherwise selenium will error out
|
|
|
|
Var := StrReplace(Var, "`n", EscapedNewLine) ; needed otherwise selenium will error out
|
|
|
|
Var := StrReplace(Var, "`r", "") ; needed otherwise selenium will error out
|
|
|
|
Var := StrReplace(Var, SingleQuotationmark, EscapedDoubleQuote) ; needed otherwise selenium will error out
|
|
|
|
Var := StrReplace(Var, "'", EscapedSingleQuote) ; needed otherwise selenium will error out
|
|
|
|
; Var := StrReplace(Var, "`r", "") ; needed otherwise selenium will error out
|
|
|
|
Return Var
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; OnMsgbox Functions
|
|
|
|
;------------------------------------------------
|
|
|
|
OnMsgBoxUpdateAvailable() {
|
|
|
|
DetectHiddenWindows, On
|
|
|
|
Process, Exist
|
|
|
|
If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
|
|
|
|
ControlSetText Button1, Cancel
|
|
|
|
ControlSetText Button2, Install
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SaveCurrentChromeVersionToIniFile(){
|
|
|
|
|
|
|
|
if(InstalledChromeVersion = "")
|
|
|
|
InstalledChromeVersion := GetInstalledChromeVersion()
|
|
|
|
|
|
|
|
IniWrite, %InstalledChromeVersion%, Settings.ini, Misc, ChromeVersion
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; -------------------------------HasVal-------------------------------
|
|
|
|
; Function needed for finding a value in an array
|
|
|
|
HasVal(haystack, needle)
|
|
|
|
{
|
|
|
|
if !(IsObject(haystack)) || (haystack.Length() = 0)
|
|
|
|
return 0
|
|
|
|
for index, value in haystack
|
|
|
|
if (value = needle)
|
|
|
|
return index
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HasSubstringVal(haystack, needle)
|
|
|
|
{
|
|
|
|
if !(IsObject(haystack)) || (haystack.Length() = 0)
|
|
|
|
return 0
|
|
|
|
for index, value in haystack
|
|
|
|
if (InStr(value, Needle))
|
|
|
|
return index
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|