diff --git a/Modules/Locals-Schedule.ahk b/Modules/Locals-Schedule.ahk index dfe21f7..6f59ddc 100644 --- a/Modules/Locals-Schedule.ahk +++ b/Modules/Locals-Schedule.ahk @@ -90,9 +90,21 @@ try, driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.BackSpace).SendKeys(d Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LocalsLivestreamTime) -if(ConfirmBeforeSubmit) -msgbox, Please check that all data was input correctly and then click OK to Finalize Schedule and grab RTMP Settings - +if(ConfirmBeforeSubmit){ + OnMessage(0x44, "OnMsgBoxUserConfirmation") + MsgBox 0x21, User Confirmation, Please check that all data was input correctly and fix any mistakes and then click PROCEED to finalize the Upload.`n`nClick STOP to cancel the rest of this Upload and move on to the next website. + OnMessage(0x44, "") + + IfMsgBox OK, { + + } Else IfMsgBox Cancel, { + Message = User Selected STOP button when asked for confirmation. Cancelling Rest of Site Upload. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + } +/* +*/ ; click schedule button Xpath = //span[normalize-space()='Schedule'] @@ -160,10 +172,11 @@ Xpath = //div[@class='modal-wrapper modal-wrapper_stream']//div[5] LocalsRTMPKey := GetHTMLValueFromXpathOuterHTML(XPATH, "value") -ToolTip -; Msgbox % "PostStatusesFilepath: " PostStatusesFilepath + + IniWrite, %LocalsRTMPURL%, %PostStatusesFilepath%, Livestream,LocalsRTMPURL IniWrite, %LocalsRTMPKey%, %PostStatusesFilepath%, Livestream,LocalsRTMPKey IniWrite, %LivestreamURL%, %PostStatusesFilepath%, Livestream,LivestreamURL +ToolTip Return diff --git a/Modules/Odysee-Schedule.ahk b/Modules/Odysee-Schedule.ahk index 9efdf99..e74919f 100644 --- a/Modules/Odysee-Schedule.ahk +++ b/Modules/Odysee-Schedule.ahk @@ -20,14 +20,319 @@ if(InStr(PageURL, "/signup")){ Return } +; If clear button exists, click it and clear any data from a previous attempt +Xpath = //span[contains(text(),'Clear')] +try, Status := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text +if(InStr(Status, "Clear")){ + Message = Clearing out previous unfinished upload + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + ; we need to wipe out the previously unfinished upload + Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000) + if(Status){ + Message = Failed to clear out previous upload + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } +} + + +; create a slug string and format it +FormatTime, OdyseeLivestreamDate , %LivestreamDate%, MM-dd-yyyy ; _hhmmss +OdyseeLivestreamSlug := "livestream-" . OdyseeLivestreamDate +OdyseeURLSLUG := LBRYCMDTextReplacement(OdyseeLivestreamSlug) + +Message = Inputting Livestream Information +SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + +Xpath = //input[@placeholder='Descriptive titles work best'] +Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamTitle) +if(Status){ + Message = Failed to Input Livestream Title + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return +} + +Xpath = //input[@name='content_name'] +Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=OdyseeURLSLUG) +if(Status){ + Message = Failed to Input Livestream URL + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return +} + + +Xpath = //textarea[@id='content_description'] +Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamDescription) +if(Status){ + Message = Failed to Input Livestream Description + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return +} + + + + + +; Click "Scheduled Time" checkbox +Message = Selecting -Scheduled Time- checkbox +SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + +Xpath = //label[normalize-space()='Scheduled Time'] +Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=5000) +if(Status){ + Message = Failed to click the "Scheduled Time" checkbox + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return +} + + +; Create variables with time and date of timestream +FormatTime, LivestreamYear , %LivestreamDate%, yyyy ; _hhmmss +FormatTime, LivestreamMonth , %LivestreamDate%, MM ; _hhmmss +FormatTime, LivestreamDay , %LivestreamDate%, dd ; _hhmmss + +FormatTime, LivestreamHour , %LivestreamTime%, h ; _hhmmss +FormatTime, LivestreamMinute , %LivestreamTime%, m ; _hhmmss +FormatTime, LivestreamAMPM , %LivestreamTime%, tt ; _hhmmss + + +; Input Livestream Time and Date +Xpath = //input[@placeholder='----'] +Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamYear) + +Xpath = //input[@name='month'] +Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamMonth, ClearElement:=1) + +Xpath = //input[@name='day'] +Status := Selenium_LoopToSendValueToXpath(Xpath,NumOfLoops:=1,SleepLength:=1000,StringTextContent:=LivestreamDay, ClearElement:=1) + +Xpath = //input[@name='hour12'] +Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamHour, ClearElement:=1) + +Xpath = //input[@name='minute'] +Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamMinute, ClearElement:=1) + +Xpath = //select[@name='amPm'] +Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamAMPM) + + +if(LivestreamThumbnail != ""){ + ; Upload Thumbnail + Xpath = //input[@accept='.png, .jpg, .jpeg, .gif, .webp'] + Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LivestreamThumbnail) + if(Status){ + Message = Failed to Upload Thumbnail + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + } + + ; check for the Upload Thumbnail Confirmation popup + Xpath = //h1[normalize-space()='Upload thumbnail'] + loop, 10 { + if(A_index = 10){ + Message = Upload Thumbnail Confirmation did not appear after 10 seconds. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + } + + try, Status := driver.findelementbyxpath(Xpath).Attribute("innerText") + if(Status = "Upload Thumbnail"){ + break + } + else, { + sleep, 1000 + Continue + } + } + + try, Status := driver.findelementbyxpath(Xpath).Attribute("innerText") + if(Status = "Upload Thumbnail"){ + ; click confirm upload button + Xpath = //div[@class='card__actions']//button[@aria-label='Upload']//span[@class='button__content'] + Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000) + } + else, { + Message = Upload Failed: Upload thumbnail confirmation popup did not show up. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + +/* ; check if the "Are you sure you want to upload this thumbnail to odysee.com?" popup exists + ; Xpath = /html/body/div[4]/div/div/label + ; try Status := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text + if(Status){ ; if element exists, then click the confirm button + + Xpath = //div[@class='card__actions']//button[@aria-label='Upload']//span[@class='button__content'] + Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000) + ; MsgBox,,Element innerText: `n, % driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text + } + else, { + Message = Upload thumbnail confirmation popup did not show up. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + } + */ + + + Xpath = //div[@class='column__item thumbnail-picker__preview'] + + ; Get element with Thumbnail and check if image upload was successful + Try, Status := driver.findelementbyxpath(Xpath).Attribute("outerHTML") ;XPATH-ID & Tag + if(!InStr(Status, "thumbs.odycdn.com")){ + Message = Thumbnail Upload Failed + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + } + + } else, { + Message = Video Upload Failed. Odysee Requires a thumbnail for video uploads. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + + + LivestreamTagsArray := StrSplit(LivestreamTags, ",") + + Loop % LivestreamTagsArray.Length(){ + ; ArrayItem := ARRAY[A_Index] + Tag := LivestreamTagsArray[A_Index] + Xpath = //input[@placeholder='gaming, crypto'] + + Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=Tag) + sleep, 500 + driver.FindElementByXPath(Xpath).SendKeys(driver.Keys.ENTER) + sleep, 500 + + ; Odysee accepts max of 5 tags + if(A_Index = 5) + break + } + + + if(ConfirmBeforeSubmit){ + OnMessage(0x44, "OnMsgBoxUserConfirmation") + MsgBox 0x21, User Confirmation, Please check that all data was input correctly and fix any mistakes and then click PROCEED to finalize the Upload.`n`nClick STOP to cancel the rest of this Upload and move on to the next website. + OnMessage(0x44, "") + + IfMsgBox OK, { + + } Else IfMsgBox Cancel, { + Message = User Selected STOP button when asked for confirmation. Cancelling Rest of Site Upload. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + } +/* +*/ + + +Message = Submitting Livestream +SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + +; Click Create Button in the confirmation popup +Xpath = //span[contains(text(),'Create')] +Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000) + +; Click confirm button in the popup +Xpath = //button[@aria-label='Confirm']//span[@class='button__content'] +Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000) + + +Message = Waiting for Livestream Created Confirmation Popup +SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + +Xpath = //h2[normalize-space()='Livestream Created'] + +Loop, 60 { + + try, Status := ElementInnerText := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text + if(Status = "Livestream Created") + break + else, { + sleep, 1000 + Continue + } + +} + + +Message = Grabbing Livestream URL from Livestream Settings Page +SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") +/* + ; Grab and Format the livestream URL + Xpath = //li[@role='link'] + Loop, 60 { + URLSLUG := GetHTMLValueFromXpathOuterHTML(XPATH, "href") + if(URLSLug = "Failed"){ + Message = Failed to Grab URL SLug from confirmation popup + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + ; Msgbox % "URLSLug: " URLSLug + if(InStr(URLSLug, OdyseeLivestreamSlug)) + break + + if(A_Index = 60){ + Message = Odysee did not generate permanant livestream URL after 1 minute of waiting. Congestion Issues? + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + + sleep, 1000 + + } + */ + ; Message = + Xpath = //span[contains(text(),'View Livestream Settings')] + Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000) + if(Status){ + Message = Failed to click on View Livestream Settigns Button + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + + ; Double check that we're on the right page. + Xpath = //label[normalize-space()='Stream server'] + try InnerText := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text + if(InnerText != "Stream server"){ + Message = Failed to Navigate to View Livestream Settings Page + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + + + + Xpath = //div[@class='section']//li[1] + Try ElementOuterHTML := driver.findelementbyxpath(Xpath).Attribute("outerHTML") ;XPATH-ID & Tag + ; Clipboard := OdyseeURLSLUG + ; Msgbox % "OdyseeURLSLUG: " OdyseeURLSLUG + ; Clipboard := ElementOuterHTML + ; Msgbox % "ElementOuterHTML: " ElementOuterHTML + + + if(!InStr(ElementOuterHTML, OdyseeURLSLUG)){ + Message = Failed to Grab Livestream URL. Please copy and paste it manually. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + return + + } + Xpath = //div[@class='section']//li[1] + URLSLUG := GetHTMLValueFromXpathOuterHTML(XPATH, "href") + if(URLSLUG = "Failed"){ + Message = Failed to Grab Livestream URL from outerHTML of livestream element. + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging") + Return + } + OdyseeLivestreamURL := "https://odysee.com" . URLSLug + ; Msgbox % "OdyseeLivestreamURL: " OdyseeLivestreamURL + ; Message = URL Slug Grabbed from Confirmation Popup: %URLSLug% + SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging") + ; OdyseeLivestreamURL := "https://odysee.com" . URLSLug + IniWrite, %OdyseeLivestreamURL%, %PostStatusesFilepath%, Livestream,OdyseeLivestreamURL -Return \ No newline at end of file + Return \ No newline at end of file