
RumbleUpload:
;------------------------------------------------

CurrentSite := "Rumble"
SaveOrPostProgress(Message:="Starting Upload",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

Status := NavigateFromBaseURLTo("https://rumble.com/upload.php")
if(Status)
Return


try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding



CheckForAlerts()


Message = Checking Login Status
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

try CurrentURL := driver.URL
if(InStr(CurrentURL, "/login.php")){

	if(AutoLogin){
		Message = Logging in Automatically by clicking into the UN+PW fields for info to register
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")

		; have to click into username and password field for page to register that there's input
		; clicking with JS doesn't make it register, but with xpath selenium it does
		Xpath = //input[@id='login-username']
		driver.FindElementByXPath(Xpath).click()

		Xpath = //input[@id='login-password']
		driver.FindElementByXPath(Xpath).click()


		js = document.querySelector("button[type='submit']").click(); 
		driver.executeScript(js)


		; Do a double check to make sure that login worked
		Message = Checking Login Status
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")

		try CurrentURL := driver.URL

		if(!InStr(CurrentURL, "/upload")){
			Message = Failed to log back in. Please Log Back In Manually
			SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
			SaveDriverURLOFErrorPage()
			Return
		}


	} 
	else, { ; notify user and return
		Message = Login Expired. Please Log Back in
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
		SaveDriverURLOFErrorPage()
		Return
	}

	Message = Waiting 5 seconds for page to fully load
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
	sleep, 5000
}

; CheckForAlerts()

Message = Uploading Video File
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")

Xpath = //input[@id='Filedata']
Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoFilepath)
if(Status){
	try, CurrentURL := GetCurrentTabURlBase()
	Message = Failed to Upload Video File`nCurrent Tab URL: %CurrentURL%
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	SaveDriverURLOFErrorPage()
	Return
}


; Input Title
try driver.findElementsByName("title").item[1].SendKeys(VideoTitle)     ;selects element based on Name and sends variable to it.
catch e {
	Message = Video Upload Failed, Please Check Login Status
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	SaveDriverURLOFErrorPage()
	Return
}
; Input Description
Loop, 5 { ; Attempt to input video description a couple of times
	TooltipThis("Inputting Description `nAttempt Number: " A_index)

	status := js_SendAndCheckWithID(Element:="description",ValueToCheck:="value",SleepLength:=3000,JSStringText:=JSVideoDescription)
	if(!Status)
	Break

/*	if(A_index = 5){
		Clipboard := VideoDescription
		Message = Unable to Input Video Description`nDescription copied to clipboard, please paste it in at your earliest convenience. 
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")  
		Return
	}

	js = document.getElementsByName('description')[1].value = "%JSVideoDescription%";  ; Send content through javascript (Great for getting around emoji chrome limitaitons)
	try driver.executeScript(js)    ;Executes a Javascript on the webpage, mostly used for buttons.

	try Description := driver.findElementsByName("description").item[2].Attribute("value") ;XPath: ID=site-title & span tag
	if(Description != "")
	Break
	sleep, 2000
	*/
}




; sleep, 5000


Message = Selecting Channel
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")



; try driver.findElementsByID("channelId").item[1].click()

; @todo replace with regex
js = return document.querySelector("#channelId").innerHTML; 
try, ChannelIDNumber := driver.executeScript(js)
; Msgbox % "ChannelIDNumber: " ChannelIDNumber
ChannelIDNumber := StrSplit(ChannelIDNumber, "option value=")

; Msgbox % "ChannelIDNumber: " ChannelIDNumber

ChannelIDNumber := ChannelIDNumber[3]
; Msgbox % "ChannelIDNumber: " ChannelIDNumber

SingleQuote = "
ChannelIDNumber := StrSplit(ChannelIDNumber, "data-private")
ChannelIDNumber := ChannelIDNumber[1]
ChannelIDNumber := StrReplace(ChannelIDNumber, SingleQuote, "")
ChannelIDNumber := StrReplace(ChannelIDNumber, " ", "")

; Msgbox % "ChannelIDNumber: " ChannelIDNumber


; js = return document.querySelector("#channelId").value; 
; try, ChannelIDNumber := driver.executeScript(js)
; Msgbox % "ChannelIDNumber: " ChannelIDNumber
if(ChannelIDNumber = ""){
	Message = ChannelIDNumber is blank. Unable to select Upload Channel
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	SaveDriverURLOFErrorPage()
	Return
}


; //option[@value='762377'] ; freedomain
Xpath = //option[@value='%ChannelIDNumber%']
try driver.FindElementByXPath(Xpath).click()
catch e {
	Message = Failed to click on Channel using %ChannelIDNumber%.
	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	SaveDriverURLOFErrorPage()
	Return
	; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
}



; Input Tags
Message = Inputting Tags
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")

try driver.findElementsByName("tags").item[1].SendKeys(VideoTags)     ;selects element based on Name and sends variable to it.



; Custom Thumbnail
if(VideoThumbFilepath != "") {
	TooltipThis("Uploading Thumbnail")
	Xpath = //input[@name='customThumb']
	Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath)
	if(Status){
		Message = Failed to Upload Thumbanil
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
	}


	; @todo: Add a check to see if progress gets stuck
	; Check Upload Percentage
	TooltipThis("Waiting for Video to Finish Uploading")
	Loop, %Number_of_loops_to_Check_Upload_status% {
		sleep, %Time_Between_Loops_Upload_Status%

		jscheck = return document.getElementsByClassName('num_percent')[0].textContent;
		try RumbleUploadPercent := driver.executeScript(jsCheck)

		; try RumbleUploadPercent := driver.findelementbyxpath(Xpath).Attribute("textContent") 
		RumbleUploadPercent := StrSplit(RumbleUploadPercent, " ")
		RumbleUploadPercent := RumbleUploadPercent[1]

		if(InStr(RumbleUploadPercent, "100%")) ; once variable contains 100%, then we can break out of loop and continue
		Break


		Status := Check_For_Stuck_Video_Upload(A_index, RumbleUploadPercent)
		if(Status = "Failed")
		Return
		; if(HasVal(Array_Index_Num_of_Upload_StatusChecks, A_index)) { ; 30 minutes and 60 minutes - send a notification message
			; 	Message = Upload Progress: %RumbleUploadPercent%
			; 	SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")  
			; }

		}

		; Msgbox % "RumbleUploadPercent: " RumbleUploadPercent

		; Click on one of the video thumbnail options first
		; Seems to be a bug on rumble, in order to be able to select a custom thumb through js, gotta select on of the generated ones first.
		; Xpath = /html/body/main/div/div/div/section/form[1]/div/div[2]/div[3]/a[2] ; thumbnail option #3
		; try driver.FindElementByXPath(Xpath).click()    ;Clicks on Xpath based on variable.




/*	
	js = document.getElementById('customThumb').click(); 
	driver.executeScript(js)    ;Executes a Javascript on the webpage, mostly used for buttons.
	Status := InputFilePathIntoOpenWindow(VideoThumbFilepath)
	if(Status)
	{
		Message = Upload Failed:`nUnable to Find "Open File" window to input filepath into
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
		Return
	}

	*/


}

try UploadPageURL := driver.URL

; Submit Button
js = document.getElementById('submitForm').click(); 
try driver.executeScript(js)    ;


try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding


; Select Rumble Only Licensing
js = document.getElementsByClassName('greenLink mRight last')[0].click(); ; Send content through javascript (Great for getting around emoji chrome limitaitons)
try driver.executeScript(js)    ;Executes a Javascript on the webpage, mostly used for buttons.

; Check off condition 1
js = document.getElementById("crights").click()
try driver.executeScript(js)

; Check off condition 2
js = document.getElementById("cterms").click()
try driver.executeScript(js)

; Click the Submit Button
js = document.getElementById("submitForm2").click()
try driver.executeScript(js)


; Loop until able to grab the direct link from the result page.
Loop, 24 {
	TooltipThis("Waiting for Result Page to load to grab Video URL")
	Sleep, 5000 

	js = return document.getElementById("error_files_2").textContent;
	RumbleError := driver.executeScript(js)    ;Executes a Javascript on the webpage, mostly used for buttons.
	if(RumbleError != "") {
		Message = Rumble Upload Failed due to:`n%RumbleError%
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
		SaveDriverURLOFErrorPage()
		Return
	}

	js = return document.getElementById('direct').value;
	try RumbleURL := driver.executeScript(js)    ;Executes a Javascript on the webpage, mostly used for buttons.

/*	try RumbleURL := driver.findElementsByID("direct").item[1].Attribute("value") ;grab Direct Link from the result page
	catch e { ; if not able to grab it, then sleep for 5 seconds and then loop again
		Continue
	}
	*/
	if(RumbleURL != ""){  ; If URL is grabbed from result page, then kick out of loop
		Break
	}
	if(A_Index = 10) ; if looped for 5 minutes and still no URL grabbed
	{ ; @todo: add error check if submit button clicked and error appears

		Xpath = /html/body/main/div/div/div/section/form[2]/div/div[9] ; grab inner content of where error usually appears.
		try RumbleUploadError := driver.findelementbyxpath(Xpath).Attribute("innerText") ; Grabb innertext
		; Msgbox % "UseThumbUploadToolTextExist: " UseThumbUploadToolTextExist


		Message = Upload Error (E#1341)`nVideo Uploaded but not able to be finalized.`nPlease fix the issue and click the final submit button. `nError: %RumbleUploadError%
		SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")  
		SaveDriverURLOFErrorPage()
		Return
	}
}

IniWrite, %RumbleURL%, %VideoLinksIniFile%, URLs, RumbleURL

Message = Upload Complete: %RumbleURL%
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")  
SaveDriverURL()
AddToTotalVideosUploadedCount()

Return
