diff --git a/Freedomain Video Uploader.ahk b/Freedomain Video Uploader.ahk
index 7d75a24..3c6bcab 100644
--- a/Freedomain Video Uploader.ahk
+++ b/Freedomain Video Uploader.ahk
@@ -1506,320 +1506,7 @@ if(SocialMediaPosterFilepath = "" or !FileExist(SocialMediaPosterFilepath)){
run, %SocialMediaPosterFilepath% "%VideoLinksIniFile%"
Return
-/*
-*/
-
-; -------------------------------Podcast-------------------------------
-UploadPodcast:
-CurrentSite := "Podcast"
-PodcastTags := StrReplace(PodcastTags, " ,", ",")
-PodcastTags := StrReplace(PodcastTags, ", ", ",")
-PodcastTags := StrReplace(PodcastTags, " ", "-")
-PodcastTags := StrReplace(PodcastTags, "--", "-")
-PodcastTags := StrReplace(PodcastTags, "--", "-")
-; Msgbox % "PodcastTags: " PodcastTags
-
-
-Message = Starting Upload
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-
-IniRead, FDRRadioURL, %SettingsIniFilepath%, General, FDRRadioURL, %A_Space%
-if(FDRRadioURL = ""){
- Message = FDRRadioURL is blank.`nPlease add URL to Settings.ini file under:`n`n[General]`nFDRRadioURL=
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- MsgBox 0x10,, %Message%
- Return
-}
-
-IniRead, Username, %SettingsIniFilepath%, General, FDRRadioUN, %A_Space%
-IniRead, Password, %SettingsIniFilepath%, General, FDRRadioPW, %A_Space%
-
-if(Username = "" or Password = ""){
- Message = Username and/or Password are blank.`nPlease add Login to Settings.ini file under:`n`n[General]`nFDRRadioUN=`nFDRRadioPW=
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
-}
-
-
-if(MP3AudioFilepath = ""){
- MsgBox 0x33, Unable to Upload Podcast, No MP3 File Was Found/Selected. `nWould you like to select one now?
-
- IfMsgBox Yes, {
- FileSelectFile, MP3AudioFilepath,, %RootDirToStartIn%, Please Select MP3 File
- if(ErrorLevel)
- Return
- } Else IfMsgBox No, {
- Return
- } Else IfMsgBox Cancel, {
- Return
- }
- }
-/*
-Sublime Indentation Reset
-*/
-
-if(!InStr(MP3AudioFilepath, ".mp3")){
-
- Message = Unable to upload podcast, no mp3 file was selected.
- MsgBox 0x40, Error, %Message%
- Return
-}
-
-
-; Message = Grabbing MP3 file data
-; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-
-; https://www.autohotkey.com/boards/viewtopic.php?t=59882
-Message = Calculating MP3 File Size and Length
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile, DiscordErrorLogging")
-
-Obj := Filexpro(MP3AudioFilepath,,
- , "Length"
- , "Size" )
-MP3AudioFilesize := obj["Size"]
-MP3AudioLength := obj["Length"]
-; MsgBox % obj["Size"]
-
-AudioLengthArray := StrSplit(MP3AudioLength,":")
-
-Message = MP3 Audio Length: %MP3AudioLength%
-SaveOrPostProgress(Message:=Message,PostType:="ErrorLoggingTextFile,DiscordErrorLogging")
-
-; AudioLength_Seconds := ((AudioLengthArray[1] * 60 ) * 60) + (AudioLengthArray[2] * 60) + AudioLengthArray[3]
-; Message = MP3 Audio Length in Seconds: %AudioLength_Seconds%
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-AudioLength_Hours := AudioLengthArray[1]
-AudioLength_Minutes := AudioLengthArray[2]
-AudioLength_Seconds := AudioLengthArray[3]
-
-Message = AudioLength_Hours: %AudioLength_Hours%`nAudioLength_Minutes: %AudioLength_Minutes%`nAudioLength_Seconds: %AudioLength_Seconds%
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-; AudioLength_SecondsOriginal := AudioLength_Seconds
-; AudioLength_Seconds := (AudioLength_Minutes * 60) + ((AudioLength_Hours * 60) * 60) + AudioLength_Seconds
-
-; Msgbox % "AudioLength_Hours: " AudioLength_Hours
-; Msgbox % "AudioLength_Minutes: " AudioLength_Minutes
-; Msgbox % "AudioLength_Seconds: " AudioLength_Seconds
-; Msgbox % "AudioLength_SecondsOriginal: " AudioLength_SecondsOriginal
-
-FileGetSize, OutputVar, %MP3AudioFilepath%, K ; Retrieve the size in Kbytes.
-FIlesizeInBytes := OutputVar * 1024
-
-
-Message = Inputting Podcast Information
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-
-Status := NavigateFromBaseURLTo(FDRRadioURL)
-if(Status)
-Return
-
-
-Status := CheckForAlerts()
-if(Status){
-
-}
-
-Message = Logging in
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
-Xpath = //input[@id='email']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=Username)
-if(!Status){ ; if inputting email did NOT fail, then we are on the login page, input the password and then click login.
- Xpath = //input[@id='password']
- Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=Password)
-
- Xpath = //a[@id='loginButton']
- Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
-
- driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
-
- sleep, 2000
-
- try driver.Get(FDRRadioURL) ;Open selected URL
- catch e {
- Message = Upload Failed (E#7295)`nUnable to Navigate to Upload Page`nChrome was closed or Internet down possibly?
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
-
- }
-}
-
-
-
-Message = Waiting for Page to Load
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
-Xpath = //input[@id='num']
-Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=60,SleepLength:=1000)
-if(Status){
- Message = New Podcast Page did not load after 60 seconds. Check Login Status
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
- Return
-}
-
-Message = Inputting Podcast Info
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
-; Click the "Is Active?" Checkbox
-Xpath = //input[@id='isActive']
-Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
-
-; Input Podcast Number
-Xpath = //input[@id='num']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=PodcastNumber)
-
-; Input Podcast Title
-Xpath = //input[@id='title']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoTitle)
-
-; INput Audio URL
-Xpath = //input[@id='url-audio']
-SplitPath, MP3AudioFilepath, MP3AudioNameWithExt
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=MP3AudioNameWithExt)
-
-; INput thumbnail URL
-Xpath = //input[@id='url-thumbnail']
-SplitPath, VideoThumbFilepath, VideoThumbnailFilenameWithExt
-ThumbnailURL = https://cdn.freedomainradio.com/%VideoThumbnailFilenameWithExt%
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=ThumbnailURL)
-
-; Input BitChute URL
-Xpath = //input[@id='url-bitchute']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=BitChuteURL)
-
-; Input Brighteon URL
-Xpath = //input[@id='url-brighteon']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=BrighteonURL)
-
-; Input DailyMotion URL
-Xpath = //input[@id='url-dailymotion']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=DailyMotionURL)
-
-; Input LBRY URL
-Xpath = //input[@id='url-lbry']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=OdyseeVideoURL)
-
-; Input LBRY URL
-Xpath = //input[@id='url-locals']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LocalsURL)
-
-; Input Rumble URL
-Xpath = //input[@id='url-rumble']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=RumbleURL)
-
-
-; Soundcloud but actually LBRY Audio URL
-Xpath = //input[@id='url-lbry-audio']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=OdyseeAudioURL)
-
-
-; INput filesize
-Xpath = //input[@id='fileSize']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=FIlesizeInBytes)
-
-
-Xpath = //input[@id='lengthHours']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=AudioLength_Hours)
-
-Xpath = //input[@id='lengthMinutes']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=AudioLength_Minutes)
-
-Xpath = //input[@id='lengthSeconds']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=AudioLength_Seconds)
-; Message = Audio Length in Seconds that got input: %AudioLength_Seconds%
-; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-Message = Inputting Description
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
-Xpath = //textarea[@id='description']
-Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
-
-; Input Description
-JSVideoDescription := FormatTextToJSText(VideoDescription)
-
-js = document.getElementById('description').value = "%JSVideoDescription%";
-try driver.executeScript(js) ;Executes a Javascript on the webpage, mostly used for buttons.
-
-
-Message = Inputting Tags
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
-Podcasttags := StrReplace(Podcasttags, " , ", ",")
-Podcasttags := StrReplace(Podcasttags, " ,", ",")
-Podcasttags := StrReplace(Podcasttags, ", ", ",")
-
-ArrayOfPodcastTags := StrSplit(Podcasttags,",")
-LengthOfArrayOfPodcastTags := ArrayOfPodcastTags.Length() ; Save total number of items in the array
-
-try pagehtml := driver.pagesource
-; Msgbox % "pagehtml: " pagehtml
-Loop, %LengthOfArrayOfPodcastTags% {
- Tag := ArrayOfPodcastTags[A_Index] ; find value from position in array
-
- SpanID = title">%Tag%
50){
+ Message = Telegram Upload Skipped. Video is larger than 50MB
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
Return
}
-if(!InStr(LocalsPostPageURL, "/share/post")){
- LocalsPostPageURL .= "/share/post"
-}
-
-; replace any double slashes that migth have come from the combining
-; LocalsPostPageURL := StrReplace(LocalsPostPageURL, "//", "/")
-
-
-Status := NavigateFromBaseURLTo(LocalsPostPageURL)
-if(Status)
-Return
-
-/*
-if(DevMode){
- MsgBox 0x4, DevMode Skip, Skip uploading section and skip straight to grab URL?
-
- IfMsgBox Yes, {
- goto, Devmodeskip
- } Else IfMsgBox No, {
-
- }
- }
-
- */
-
-
- Message = Waiting for Page to fully load
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
- Xpath = //textarea[@id='body']
- Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=10,SleepLength:=1000)
- if(Status){
- Message = Page did not load after 10 seconds. Force stopping refresh and trying to continue
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
- send, {Escape} ; Temporary workaround, as Page seems to endlessly load for Stef
-
- Xpath = //textarea[@id='body']
- Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
- if(Status){
- SaveOrPostProgress(Message:="Post Failed: Check Login Status, or Website is Down",PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
-
- Return
- }
- }
-
- Message = Inputting Title
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
- Xpath = //input[@id='title']
- Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000,StringTextContent:=VideoTitle)
- if(Status){
- Message = Failed to input Title
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
- }
-
- sleep, 1000
-
-/*Xpath = //textarea[@id='body']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000,StringTextContent:=VideoDescription)
-if(Status){
- Message = Failed to input Body
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-}
-*/
-
-; Input Description
-TooltipThis("Inputting Description")
-Loop, 5 { ; Attempt to input video description a couple of times
-
-
- 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('body')[0].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.
+CurrentSocialMediaPosting := "Telegram Video"
+Message = Uploading Video to Telegram
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
- ; msgbox
- try driver.findElementsByName("body").item[1].SendKeys(driver.Keys.SPACE)
- ; driver.findElementsByID("ELEMENTID").item[1].SendKeys(driver.Keys.ENTER)
- ; msgbox
+IniRead, TelegramBotToken, %SettingsIniFilepath%, SocialMediaPoster, TelegramBotToken, %A_Space%
+IniRead, TelegramBotChatID, %SettingsIniFilepath%, SocialMediaPoster, TelegramBotChatID, %A_Space%
- jsCheck = return document.getElementsByName('body')[0].value; ; Send content through javascript (Great for getting around emoji chrome limitaitons)
- try Description := driver.executeScript(jsCheck) ;Executes a Javascript on the webpage, mostly used for buttons.
+LineBreakChar = `%0A ; Used for Telegram API
- ; try Description := driver.findElementsByName("body").item[1].Attribute("value") ;XPath: ID=site-title & span tag
- if(Description != "")
- Break
- sleep, 2000
-}
+SaveOrPostProgress(Message:="Posting to Telegram",PostType:="Tooltip,ErrorLoggingTextFile")
-SaveOrPostProgress(Message:="Waiting Video to finish uploading",PostType:="Tooltip,ErrorLoggingTextFile")
-Message = Uploading Video File
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-Xpath = //div[@class='uploadvideo-wrapper']//input[@name='Filedata']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoFilepath)
-if(Status){
- Message = Failed to Upload Video
+if(TelegramBotToken = "" Or TelegramBotChatID =""){
+ Message = TelegramBotToken or TelegramBotChatID is missing from %SettingsIniFilepath%. `nPlease input them and click the button again.
+ msgbox, 4096, Error!, %Message%
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ ; Msgbox, 4096, Error!, TelegramBotToken or TelegramBotChatID is missing from %SettingsIniFilepath%. `nPlease input them and rerun the script.
Return
}
-; check if the "Auto Submit Post" checkbox is checked, and if not check it
-js = return document.querySelector("#autosubmit_enabled").checked;
-try AutoSubmitstatus := driver.executeScript(js)
-; DevModeMsgBox(status)
-; message = AutoSubmitstatus: %AutoSubmitstatus%
-; DevModeMsgBox(message)
-
-if(AutoSubmitstatus = "0"){
- js = document.querySelector("li[id='autosubmit_container'] small").click() ; ; CHECK YES
- try driver.executeScript(js) ; DevModeMsgBox(status)
-
- ; double check that it got selected
- js = return document.querySelector("#autosubmit_enabled").checked;
- try AutoSubmitstatus := driver.executeScript(js)
-
- Message = AutoSubmitstatus after clicking checkbox: %AutoSubmitstatus%
- DevModeMsgBox(message)
-
- if(AutoSubmitstatus != "-1"){
- Message = Failed to check Auto-Submit Post checkbox
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
- ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
- }
+; If description is longer than 2k chars, then API will error out. goto section that will allow user to edit video description to shorten it for posting
+if(StrLen(SocialMediaDescription) > 2000){
+ TelegramVideoUploadDescription := SubStr(SocialMediaDescription, 1, 990)
+ TelegramVideoUploadDescription .= "...."
+ ; msgbox, here goes
+ ; Goto, CreateDescriptionForVideosPosting
}
-DevModeMsgBox("autosubmit status -1 string here")
-; msgbox % AutoSubmitstatus = "-1"
-if(AutoSubmitstatus = "-1"){ ; if checked YES
-
- ; check that there are no error messages
- js = return document.querySelector("div[class='form-error']").textContent;
- try status := driver.executeScript(js)
- ; DevModeMsgBox(status)
- if(status){ ;if element contains error text
- Message = Auto Publish failed: %status%
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
- }
-
+SubmitDescriptionForTelegramVideoUpload:
+TelegramVideoTitle := ASCIISTRReplace(VideoTitle)
- if(VideoThumbFilepath){
- Message = Uploading Thumbnail
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
- Xpath = //div[contains(@class,'post-video-attachments post-video-attachments_upd')]//div[contains(@class,'uploadfile-wrapper')]//input[contains(@name,'Filedata')]
- Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath)
- if(Status){
- Message = Failed to Attach Thumbnail
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- Return
- }
- }
+TelegramBodymessage := ASCIISTRReplace(TelegramVideoUploadDescription)
- ; otherwise everything is good and we can move on to the next site and come back to grab the URL later
- ; LocalsURL := "UploadedButNeedToGrabLink"
- ; Return
+LineBreakChar = `%0A ; Used for API
- Message = Upload Started Successfully
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+Message := "*" . TelegramVideoTitle . "*" . LineBreakChar . TelegramBodymessage . LineBreakChar
- LocalsURL := "LocalsUploadStartedNeedToGrabURL"
- ; Msgbox % "LocalsURL: " LocalsURL
- IniWrite, %LocalsURL%, %VideoLinksIniFile%, URLs, LocalsURL
- AddToTotalVideosUploadedCount()
+Message := StrReplace(Message, "`n", LineBreakChar) ; replace all new line characters with the global charater
- ; Msgbox % "LocalsURL: " LocalsURL
- ; Msgbox % "VideoLinksIniFile: " VideoLinksIniFile
- ;
- ; FileRead, inicontents, %VideoLinksIniFile% ; , Filename
- ; Msgbox % "inicontents: " inicontents
+; Msgbox % "Message: " Message
- ; IniWrite, Value, Filename, Section, Key
+Status := SendTelegramVideo(TelegramBotToken, TelegramBotChatID, VideoFilepath, caption := Message ) ; you could add more options; compare the Telegram API docs
+if(InStr(Status, "error_code")){
+ Message = Telegram Post Failed due to an API Issue. Error was saved to ErrorLogging file. Please send it to Yuriy.
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- ; LocalsTabURL := SaveDriverURL()
+ ; SaveOrPostProgress(Message:=Status,PostType:=",ErrorLoggingTextFile")
+ Message = Telegram Error: %Status%
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ ToolTip
Return
}
-Return
-
-
-
-;--------------\Locals----------------------------------
-
-
-
-
-
-;--------------LocalsGrabURL----------------------------------
-LocalsGrabURL:
+; msgbox
-CurrentSite := Locals
-SaveOrPostProgress(Message:="Navigating to Locals Feed to grab URL",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+Message = Upload Complete to Telegram
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+IniWrite, Successful, %VideoLinksIniFile%, Misc, Telegram
+; SaveDriverURL()
+AddToTotalVideosUploadedCount()
-IniRead, LocalsPostPageURL, %SettingsIniFilepath%, General, LocalsPostPageURL, %A_Space%
-if(LocalsPostPageURL = ""){
- Message = LocalsURL is blank.`nPlease add Locals URL to Settings.ini file under:`n`n[General]`nLocalsPostPageURL=
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- Return
-}
+Return
-if(InStr(LocalsPostPageURL, "/share/post")){
- LocalsFeedPageURL := StrReplace(LocalsPostPageURL, "/share/post", "")
-}
+; BitChute
+;------------------------------------------------
+#Include %A_ScriptDir%\Modules\Bitchute-Upload.ahk
-Status := ActivateChromeTab(LocalsPostPageURL)
-if(Status = "Failed"){
- Message = Failed to Activate Locals Tab. Please grab URL manually
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- Return
-}
-; Msgbox % "Status: " Status
+; Brighteon
+;------------------------------------------------
+#Include %A_ScriptDir%\Modules\Brighteon-Upload.ahk
-try currentpageURL := driver.url
-if(InStr(currentpageURL,"share/post")){ ; we're still on create new post page
-Message = Locals is still on the Create New Post page. Please double check if post was published successfully.
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
-SaveDriverURLOFErrorPage()
-Return
-}
+; DailyMotion
+;------------------------------------------------
+#Include %A_ScriptDir%\Modules\DailyMotion-Upload.ahk
-; otherwise we should be on locals.com home feed page
-; check for "Retrieve Draft button"
-js = return document.querySelector("a[class='btn']").innerText;
-try, status := driver.executeScript(js)
-if(status){
- Message = Video was uploaded but Locals saved it as a draft instead of instantly publishing it. Please go to the Locals Page and Retrieve Draft and manually Publish it.
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
-}
+; LBRY
+;------------------------------------------------
+#Include %A_ScriptDir%\Modules\LBRY-Upload.ahk
-; Get word that's longer than 4 characters in video title
-VideoTitleArray := StrSplit(VideoTitle, " ")
-; Iterate from 1 to the end of the array:
-Loop % VideoTitleArray.Length(){
- VideoTitleFirstWord := VideoTitleArray[A_Index]
- VideoTitleFirstWord := StrReplace(VideoTitleFirstWord, "_","-")
- if(StrLen(VideoTitleFirstWord) > 4)
- Break
+; Rumble
+;------------------------------------------------
+#Include %A_ScriptDir%\Modules\Rumble-Upload.ahk
- ; MsgBox % VideoTitleArray[A_Index]
-}
+; Locals
+;------------------------------------------------
+#Include %A_ScriptDir%\Modules\Locals-Upload.ahk
-loop, 7 {
- ElementIndexNum := A_index - 1
- Message = ElementIndexNum: %ElementIndexNum%
- DevModeMsgBox(Message)
- ; Msgbox % "ElementIndexNum: " ElementIndexNum
+; Podcast
+;------------------------------------------------
+#Include %A_ScriptDir%\Modules\Podcast-Upload.ahk
- jscheck = return document.getElementsByClassName('post-bottom')[%ElementIndexNum%].outerHTML;
- try outerHTML := driver.executeScript(jsCheck)
-
- if(DevMode){
- Message = Looking for VideoTitleFirstWord: %VideoTitleFirstWord% `nwithin outerHTML
- DevModeMsgBox(message)
- Clipboard := outerHTML
- DevModeMsgBox(outerHTML)
- }
-
-
- ; msgbox % "outerHTML: " . outerHTML
-
- if(InStr(OuterHTML,VideoTitleFirstWord)){
- ; @todo replace with regex
- Message = %VideoTitleFirstWord% is in`n`n %OuterHTML%
- DevModeMsgBox(Message)
-
- Message = Found at at index: %A_index%
- DevModeMsgBox(message)
- ; MsgBox, found match at %A_index%
-
-
- DevModeMsgBox("Pulling out url from outerhtml")
-
- ShareLink := StrSplit(OuterHTML, "data-url=")
- ShareLink := ShareLink[2]
-
- DevModeMsgBox(ShareLink)
- ; Msgbox % "ShareLink: " ShareLink
-
- URLEndString = ">
- ShareLink := StrSplit(ShareLink, URLEndString)
- ShareLink := ShareLink[1]
- DevModeMsgBox(ShareLink)
-
- QuotationMark = "
- ShareLink := StrReplace(ShareLink,QuotationMark, "")
- DevModeMsgBox(ShareLink)
- Break
- }
-
- ShareLink :=
-}
-
-DevModeMsgBox(ShareLink)
-
-; ShareLink := "Successful"
-
-Message = Upload Complete: %ShareLink%
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-
-IniWrite, %ShareLink%, %VideoLinksIniFile%, URLs, LocalsURL
-AddToTotalVideosUploadedCount()
-
-SaveDriverURL()
-
-
-Return
-
-
-
-;--------------/LocalsGrabURL----------------------------------
-
-
-
-
-
-
-
-; GetLocals
-; Xpath = //div[@class='uppy-StatusBar-statusPrimary']
-
-; sleep, 30000 ; wait 30 seconds
-; sleep, 2000
-
-/*; Attach Custom Thumbnail
-if(VideoThumbFilepath != ""){
- Message = Attaching Custom Thumbnail
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
- Xpath = //div[@class='custom-thumb-uploader']//input[@name='Filedata']
- Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath)
-
- if(Status){
- Message = Failed to Attach Custom Thumbnail
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- }
-
-}
-
-*/
-
-
-sleep, 10000
-Loop, %Number_of_loops_to_Check_Upload_status% {
- sleep, %Time_Between_Loops_Upload_Status%
-
- jscheck = return document.getElementsByClassName('uppy-StatusBar-statusPrimary')[0].textContent;
- try UploadStatus := driver.executeScript(jsCheck)
-
- ; UploadStatus := StrSplit(UploadStatus, ": ")
- ; UploadStatus := UploadStatus[2]
-
-
- ; message = Waiting for Video To Finish Uploading. `nCurrent Status: %UploadStatus%
- ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
-
- ; Clipboard := jsCheck
- ; msgbox % "textContent: " . textContent
-
-
- /* try UploadStatus := driver.findelementbyxpath(Xpath).Attribute("innerText") ; Grabb innertext
- catch e {
- if(A_index = 1){
- Message = Unable to find Progress Upload Percentage. Upload Most Likely Failed.
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- }
- else,
- Break
- }
- */
-
- if(InStr(UploadStatus, "100%")){
- Message = Video Upload Complete. Waiting 20 seconds for Video to finalize before submitting.
- sleep, 20000
- break
- }
-
- ; if(UploadStatus != ""){
- ; Message =
- ; sleep, 30000 ; 30 seconds
- ; Continue
-
- ; }
-
- if(UploadStatus = "" and A_index = 1){
- Message = Upload Failed. Unable to Grab Upload Status
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
- }
-
- ; if(UploadStatus = ""){
- ; Break
- ; }
-
-
- Status := Check_For_Stuck_Video_Upload(A_index, UploadStatus)
- if(Status = "Failed")
- Return
- }
-
- /*; attach custom thumbnail
- xpath = //label[normalize-space()='Upload Custom Video Thumbnail']
- Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath)
- if(Status){
- Message = Failed to Attach Thumbnail
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- ; SaveDriverURLOFErrorPage()
- ; Return
- }
- Status := InputFilePathIntoOpenWindow(VideoThumbFilepath)
-
- */
-
- ; DevModeMsgBox("pause")
-
- ; Click the publish button
- js = document.getElementsByName('submitPost')[0].click();
- try driver.executeScript(js)
-
-
- Message = Waiting 5 seconds for Video to Get Processed
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
- sleep, 5000
-
-
- try currentpage := driver.url
- if(CUrrentpage = LocalsPostPageURL){
- Message = Final page is same as post page. Please double check if post was published successfully.
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- Return
- }
- ; sleep, 500
- ; ToolTip
- ; AddToTotalPostsPostedCount()
-
-
- Devmodeskip:
-
- Message = Trying to Grab Share Link
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-
- ; refresh page
- try driver.executeScript("history.go(0)")
- try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
-
- ; check for "Retrieve Draft button"
- js = return document.querySelector("a[class='btn']").innerText;
- try, status := driver.executeScript(js)
- if(status = "Retrieve Draft"){
- Message = Video was uploaded but Locals saved it as a draft instead of instantly publishing it. Please go to the Locals Page and Retrieve Draft and manually Publish it.
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
- }
-
-
-
- ; Get word that's longer than 4 characters in video title
- VideoTitleArray := StrSplit(VideoTitle, " ")
- ; Iterate from 1 to the end of the array:
- Loop % VideoTitleArray.Length(){
- VideoTitleFirstWord := VideoTitleArray[A_Index]
- VideoTitleFirstWord := StrReplace(VideoTitleFirstWord, "_","-")
- if(StrLen(VideoTitleFirstWord) > 4)
- Break
-
- ; MsgBox % VideoTitleArray[A_Index]
-
- }
-
- ; DevModeMsgBox(VideoTitleFirstWord)
-
- ; Message = VideoTitleFirstWord: %VideoTitleFirstWord%
- ; SaveOrPostProgress(Message:=Message,PostType:=",ErrorLoggingTextFile")
-
- ; VideoTitleFirstWord := VideoTitleFirstWord[1]
- ; Msgbox % "VideoTitleFirstWord: " VideoTitleFirstWord
-
-/* ; Format the post title to remove all spaces and special characters to match with Locals Post
- ShareLinkFormatted := StrReplace(VideoTitle, " ", "-")
- ShareLinkFormatted := StrReplace(ShareLinkFormatted, "?", "")
- ShareLinkFormatted := StrReplace(ShareLinkFormatted, "!", "")
- ShareLinkFormatted := StrReplace(ShareLinkFormatted, ".", "")
- ShareLinkFormatted := StrReplace(ShareLinkFormatted, "", "")
- ShareLinkFormattedFirst5Chars := SubStr(ShareLinkFormatted, 1, 5)
-
- */
-
-
-
- LocalsBaseURL := StrReplace(LocalsURL, "/share/post", "")
- ; Msgbox % "LocalsPostPageURL: " LocalsPostPageURL
- ; Msgbox % "LocalsURL: " LocalsURL
- ; Msgbox % "LocalsBaseURL: " LocalsBaseURL
- loop, 5 {
- ElementIndexNum := A_index - 1
- DevModeMsgBox(ElementIndexNum)
- ; Msgbox % "ElementIndexNum: " ElementIndexNum
-
-
- jscheck = return document.getElementsByClassName('post-bottom')[%ElementIndexNum%].outerHTML;
- try outerHTML := driver.executeScript(jsCheck)
-
- ; Clipboard := outerHTML
- ; DevModeMsgBox(outerHTML)
-
- ; msgbox % "outerHTML: " . outerHTML
-
- if(InStr(OuterHTML,VideoTitleFirstWord)){
-
- Message = %VideoTitleFirstWord% is in %OuterHTML%
- ; DevModeMsgBox(Message)
-
- ; MsgBox, found match at %A_index%
-
-
-
-
- ShareLink := StrSplit(OuterHTML, "data-url=")
- ShareLink := ShareLink[2]
- ; DevModeMsgBox(ShareLink)
- ; Msgbox % "ShareLink: " ShareLink
-
- URLEndString = ">
- ShareLink := StrSplit(ShareLink, URLEndString)
- ; ShareLink := ShareLink[1]
-
- QuotationMark = "
- ShareLink := StrReplace(ShareLink,QuotationMark, "")
-
- Break
- }
-
- ShareLink :=
- }
-
- DevModeMsgBox(ShareLink)
-
- ; ShareLink := "Successful"
-
- Message = Upload Complete: %ShareLink%
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-
- IniWrite, %ShareLink%, %VideoLinksIniFile%, URLs, LocalsURL
- AddToTotalVideosUploadedCount()
-
- SaveDriverURL()
-
-
- Return
-
- ;
- ;------------------/Locals------------------------------
-/*
-*/
-;
-;--------------------Telegram----------------------------
-TelegramVideoUpload:
-
-if(VideoFileSizeInMB > 50){
- Message = Telegram Upload Skipped. Video is larger than 50MB
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- Return
-}
-
-CurrentSocialMediaPosting := "Telegram Video"
-Message = Uploading Video to Telegram
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
-IniRead, TelegramBotToken, %SettingsIniFilepath%, SocialMediaPoster, TelegramBotToken, %A_Space%
-IniRead, TelegramBotChatID, %SettingsIniFilepath%, SocialMediaPoster, TelegramBotChatID, %A_Space%
-
-
-LineBreakChar = `%0A ; Used for Telegram API
-
-SaveOrPostProgress(Message:="Posting to Telegram",PostType:="Tooltip,ErrorLoggingTextFile")
-
-if(TelegramBotToken = "" Or TelegramBotChatID =""){
- Message = TelegramBotToken or TelegramBotChatID is missing from %SettingsIniFilepath%. `nPlease input them and click the button again.
- msgbox, 4096, Error!, %Message%
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- ; Msgbox, 4096, Error!, TelegramBotToken or TelegramBotChatID is missing from %SettingsIniFilepath%. `nPlease input them and rerun the script.
- Return
-}
-
-
-; If description is longer than 2k chars, then API will error out. goto section that will allow user to edit video description to shorten it for posting
-if(StrLen(SocialMediaDescription) > 2000){
- TelegramVideoUploadDescription := SubStr(SocialMediaDescription, 1, 990)
- TelegramVideoUploadDescription .= "...."
- ; msgbox, here goes
- ; Goto, CreateDescriptionForVideosPosting
-}
-
-
-SubmitDescriptionForTelegramVideoUpload:
-TelegramVideoTitle := ASCIISTRReplace(VideoTitle)
-
-TelegramBodymessage := ASCIISTRReplace(TelegramVideoUploadDescription)
-
-LineBreakChar = `%0A ; Used for API
-
-
-Message := "*" . TelegramVideoTitle . "*" . LineBreakChar . TelegramBodymessage . LineBreakChar
-
-Message := StrReplace(Message, "`n", LineBreakChar) ; replace all new line characters with the global charater
-
-; Msgbox % "Message: " Message
-
-Status := SendTelegramVideo(TelegramBotToken, TelegramBotChatID, VideoFilepath, caption := Message ) ; you could add more options; compare the Telegram API docs
-if(InStr(Status, "error_code")){
- Message = Telegram Post Failed due to an API Issue. Error was saved to ErrorLogging file. Please send it to Yuriy.
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
-
- ; SaveOrPostProgress(Message:=Status,PostType:=",ErrorLoggingTextFile")
- Message = Telegram Error: %Status%
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
-
- ToolTip
- Return
-}
-; msgbox
-
-
-Message = Upload Complete to Telegram
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-IniWrite, Successful, %VideoLinksIniFile%, Misc, Telegram
-; SaveDriverURL()
-AddToTotalVideosUploadedCount()
-
-Return
-
-
-; -------------------------------BitChute-------------------------------
-#Include %A_ScriptDir%\Modules\Bitchute-Upload.ahk
-
-; -------------------------------Brighteon Upload-------------------------------
-#Include %A_ScriptDir%\Modules\Brighteon-Upload.ahk
-
-
-; -------------------------------DailyMotion-------------------------------
-#Include %A_ScriptDir%\Modules\DailyMotion-Upload.ahk
-
-
-; -------------------------------LBRY-------------------------------
-#Include %A_ScriptDir%\Modules\LBRY-Upload.ahk
-
-
-; -------------------------------Rumble-------------------------------
-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
-
-; -------------------------------/Rumble-------------------------------
-
-
-;---Facebook---
+; Miscellaneous-Functions
;------------------------------------------------
-FacebookUpload:
-CurrentSite := "Facebook"
-SaveOrPostProgress(Message:="Starting Upload",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-Status := NavigateFromBaseURLTo("https://www.facebook.com/")
-if(Status)
-Return
-
-
-try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
-
-
-; Create a description for Facebook
-SplitText = Free Documentaries:
-FacebookDescription := StrSplit(VideoDescription, SplitText)
-FacebookDescription := FacebookDescription[1]
-FacebookTitleAndDescription := VideoTitle . "`n`n" . FacebookDescription
-JSFacebookTitleAndDescription := FormatTextToJSText(FacebookTitleAndDescription)
-
-
-Message = Calculating Video Length
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
-try Obj := Filexpro(VideoFilepath,,
- , "Length"
- , "Size" )
-VideoFilesize := obj["Size"]
-VideoLength := obj["Length"]
-
-; Msgbox % "VideoLength: " VideoLength
-
-VideoLengthArray := StrSplit(VideoLength, ":")
-VideoLengthInMinutes := (VideoLengthArray[1] * 60) + VideoLengthArray[2]
-; Msgbox % "VideoLengthInMinutes: " VideoLengthInMinutes
-
-if(VideoLengthInMinutes >= 240){
- Message = Skipped: Longer than 240 Minutes
- IniWrite, %Message%, %VideoLinksIniFile%, URLs, FacebookURL
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
-}
-
-
-; Upload Video
-Xpath = //div[@aria-label='Create a post']//div//input[@type='file']
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoFilepath)
-if(Status){
- Message =Post Failed: Check Login Status
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
-}
-
-;
-Message = Waiting 15 Seconds for Video Preview to Load
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip")
-sleep, 15000
-
-Xpath = //div[@data-block='true']//div
-Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=3,SleepLength:=2000,StringTextContent:=FacebookTitleAndDescription)
-if(Status){
- Message = Failed to Input Video Description
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
-}
-; msgbox
-
-; Click submit button
-xpath = //div[@aria-label='Post']//div//div//div//span[contains(text(),'Post')]
-Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
-if(Status){
- Message = Failed to click "Post" button
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return
-}
-
-
-IniWrite, Submitted, %VideoLinksIniFile%, URLs, FacebookURL
-
-Message = Upload Started Successfully
-SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-SaveDriverURL()
-AddToTotalVideosUploadedCount()
-Return
-
-;---\Facebook---
-;------------------------------------------------
-
-
-; -------------------------------Functions-------------------------------
-CheckLBRYProcess(){
- ; Check if LBRY Process exists
- Process, Exist,LBRY.exe
- if(ErrorLevel = 0) ; if doesn't exist
- {
- Message = Not Running. Starting up LBRY.exe
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
-
- LBRYExeFilepath = C:\Program Files\LBRY\LBRY.exe
- if(!FileExist(LBRYExeFilepath)){
- Message = Failed to Find LBRY.exe executable. LBRY not installed?
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- Return
- }
-
- Message = Checking LBRY daemon_settings.yml file for Odysee Wallet Servers
- SaveOrPostProgress(Message:=Message,PostType:=",ErrorLoggingTextFile,DiscordErrorLogging")
-
- FileRead, daemon_settingsFileContent, C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings.yml
-
- if(!InStr(daemon_settingsFileContent, "a-hub1.odysee.com")){
- Message = Odysee wallet server is not in daemon_settings.yml. Replacing File with required settings.
- SaveOrPostProgress(Message:=Message,PostType:=",DiscordErrorLogging")
-
- LBRYDaemonSettingsFP = C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings.yml
- LBRYDaemonSettingsBackupFP = C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings_BU.yml
-
-
- ; Msgbox % "daemon_settingsText: " daemon_settingsText
- FileMove, %LBRYDaemonSettingsFP%, %LBRYDaemonSettingsBackupFP%, 1 ; Dest [, Flag (1 = overwrite)]
-
- UrlDownloadToFile, https://git.freedomainplaylists.com/yuriy/Freedomain-Video-Uploader/raw/branch/main/Assets/daemon_settings.yml , %LBRYDaemonSettingsFP%
-
- sleep, 1000
-
- if(!FileExist(LBRYDaemonSettingsFP)){
- Message = Failed to download the custom daemon_settings.yml file from git. Restoring Original File
- SaveOrPostProgress(Message:=Message,PostType:=",ErrorLoggingTextFile,DiscordErrorLogging")
- FileMove,%LBRYDaemonSettingsBackupFP%,%LBRYDaemonSettingsFP%, 1
- }
- }
-
-
- try run, "%LBRYExeFilepath%"
- Message = Waiting 1 Minute for LBRY to start up
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip")
- Sleep, 60000 ; 1 minute
-
- Process, Exist,LBRY.exe
- if(ErrorLevel = 0) ; if doesn't exist
- {
- Message = Failed to Start LBRY.exe after 60 seconds of waiting
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- Return
- }
- WinMinimize, LBRY
- }
- Return
-}
-
-
-GetPermanentLBRYURL(UploadResult){
- SingleQuotationmark = "
-
- UploadResult := StrSplit(UploadResult, "`n") ; split results by new line
-
- ; Iterate through the array of the results
- Loop % UploadResult.Length() {
- PermanentURL := UploadResult[A_Index]
- if(InStr(PermanentURL, "permanent_url"))
- Break
- }
-
- ; Starting Result: "permanent_url": "lbry://Test-Video-161-Numbered#c9ad9afe54c7178d6f870b59bbe129aef8efc3ff",
- PermanentURL := StrSplit(PermanentURL, "lbry:")
- PermanentURL := "lbry:" . PermanentURL[2]
- PermanentURL := StrReplace(PermanentURL, ",", "")
- PermanentURL := StrReplace(PermanentURL, SingleQuotationmark, "")
- PermanentURL := StrReplace(PermanentURL, "`n", "")
- PermanentURL := StrReplace(PermanentURL, "`r", "")
-
- ; End Result lbry://Test-Video-161-Numbered#c9ad9afe54c7178d6f870b59bbe129aef8efc3ff
- Return PermanentURL
-}
-
-
-GetLBRYCanonicalURL(LBRYJSONObject){ ; input json string
- ; ResolveURL := StrSplit(LBRYResolveAPICommand, "lbry://")
- ; ResolveURL := "lbry://" . ResolveURL[2]
- ; StrReplace(Haystack, SearchText [, ReplaceText, OutputVarCount, Limit := -1])
- LBRYPermanentURLJsonOBJ := StrReplace(LBRYJSONObject, LBRYPermanentURL, "LBRYPermanentURL")
- ; clipboard := LBRYPermanentURLJsonOBJ
- ; DevModeMsgBox(LBRYPermanentURLJsonOBJ)
-
- try parsed := JSON.Load(LBRYPermanentURLJsonOBJ)
- try LBRYCanonicalURL := parsed.LBRYPermanentURL.canonical_url
-
- ; DevModeMsgBox(LBRYCanonicalURL)
-
- if(LBRYCanonicalURL = ""){
- Return "" ; return blank
- }
-
- ; otherwise return the LBRY url
- LBRYCanonicalURL := StrReplace(LBRYCanonicalURL, "lbry://", "https://lbry.tv/")
- Return LBRYCanonicalURL
-}
-
-
-LBRYCMDTextReplacement(LBRYURLSlug){
- SingleQUote = "
- LBRYURLSlug := StrReplace(LBRYURLSlug, " ", "_") ; replace all spaces with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, ":", "_") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, ",", "_") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "?", "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "!", "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "`;", "_") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "/", "_") ; replace all colons with dashes
- ; LBRYURLSlug := StrReplace(LBRYURLSlug, "?", "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "<", "_") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, ">", "_") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, SingleQUote, "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "'", "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "=", "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, ";", "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, ")", "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "(", "") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "___", "_") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "__", "_") ; replace all colons with dashes
- LBRYURLSlug := StrReplace(LBRYURLSlug, "__", "_") ; replace all colons with dashes
- Return LBRYURLSlug
-}
-
-GetLBRYAPIErrorFromString(UploadResult){
- UploadResultArray := StrSplit(UploadResult, "message")
- LBRYAPIError := UploadResultArray[2]
- ; LBRYAPIErrorStrLen := StrLen(LBRYAPIError)
-
- ; LBRYAPIErrorStrToTrim := LBRYAPIErrorStrLen - 3
- ; Msgbox % "LBRYAPIErrorStrToTrim: " LBRYAPIErrorStrToTrim
- LBRYAPIError := SubStr(LBRYAPIError, 4)
- LBRYAPIError := StrReplace(LBRYAPIError, "}", "")
-
-
- ; Msgbox % "LBRYAPIError: " LBRYAPIError
- Return LBRYAPIError
-
-}
-
-
-LogErrorToTextFile(Error){
-/* if(LogErrorsToTextFile != 1)
- Return
- */
- ErrorLoggingFile := VideoFolderDir . "\" . "ErrorLogging.txt"
- FormatTime, TodayDate , YYYYMMDDHH24MISS, yyyyMMdd_hhmmss
- text =
- (
-
-
- ---------------%TodayDate%---------------
- %CurrentSite%: %Error%
-
-
- )
- if(LogErrorsToMsgbox)
- Msgbox % "Text: " Text
-
- FileAppend, %Text%, %ErrorLoggingFile%
- } ; End of Function
-
-
-
- SaveDriverURL()
- AddToTotalVideosUploadedCount(){
- IniRead, TotalVideosUploaded, %SettingsIniFilepath%, General, TotalVideosUploaded, %A_Space%
- TotalVideosUploaded += 1
- IniWrite, %TotalVideosUploaded%, %SettingsIniFilepath%, General, TotalVideosUploaded
- }
-
-
-
- OnMsgBoxPodcastFinish() {
- DetectHiddenWindows, On
- Process, Exist
- If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
- WinMove,, 0
- }
- }
-
- OnMsgBoxSocialMediaPoster() {
- DetectHiddenWindows, On
- Process, Exist
- If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
- ControlSetText Button1, Yes
- ControlSetText Button2, Not Now
- }
- }
-
-
-
- Check_For_Stuck_Video_Upload(Index_Number, Upload_Status){
- if(A_index = 1){ ; Create a blank array
- ProgressStatusArray := []
- Return
- }
-
- Message = Upload Status: %Upload_Status%
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip")
-
- ; if we reached the last loop number:
- if(A_index = %Number_of_loops_to_Check_Upload_status%){
- Message = Upload Most Likely Failed: Video Hasn't Finished Uploading after 1 hour.
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return "Failed"
- }
-
- ; If progress is still the same after a ten minute interval then error out
- if(HasVal(Array_Index_Num_of_Upload_StatusChecks, A_index)){ ; if current index is in Array of index numbers to check status during
-
- ; Send a notification message of upload status
- Message = Upload Status: %Upload_Status%
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
-
- ; if current upload_status is in the array of values that are updated every 10 mins
- if(HasVal(ProgressStatusArray, Upload_Status)){
- Message = Upload Failed (E#4508)`nUpload Stuck at same point for 10 minutes. Stuck Status: %ProgressStatus%
- SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
- SaveDriverURLOFErrorPage()
- Return "Failed"
- }
- ProgressStatusArray.Push(Upload_Status) ; append current status to array
- }
- } ; end of func
\ No newline at end of file
+#Include %A_ScriptDir%\Modules\Miscellaneous-Functions.ahk
diff --git a/Modules/Locals-Upload.ahk b/Modules/Locals-Upload.ahk
new file mode 100644
index 0000000..f2beeec
--- /dev/null
+++ b/Modules/Locals-Upload.ahk
@@ -0,0 +1,595 @@
+LocalsUpload:
+;------------------------------------------------
+CurrentSite := "Locals"
+
+
+SaveOrPostProgress(Message:="Navigating to Post Creation Page",PostType:="Tooltip,ErrorLoggingTextFile")
+; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+IniRead, LocalsPostPageURL, %SettingsIniFilepath%, General, LocalsPostPageURL, %A_Space%
+if(LocalsPostPageURL = ""){
+ Message = LocalsURL is blank.`nPlease add Locals URL to Settings.ini file under:`n`n[General]`nLocalsPostPageURL=
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ Return
+}
+
+if(!InStr(LocalsPostPageURL, "/share/post")){
+ LocalsPostPageURL .= "/share/post"
+}
+
+; replace any double slashes that migth have come from the combining
+; LocalsPostPageURL := StrReplace(LocalsPostPageURL, "//", "/")
+
+
+Status := NavigateFromBaseURLTo(LocalsPostPageURL)
+if(Status)
+Return
+
+/*
+if(DevMode){
+ MsgBox 0x4, DevMode Skip, Skip uploading section and skip straight to grab URL?
+
+ IfMsgBox Yes, {
+ goto, Devmodeskip
+ } Else IfMsgBox No, {
+
+ }
+ }
+
+ */
+
+
+ Message = Waiting for Page to fully load
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+ Xpath = //textarea[@id='body']
+ Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=10,SleepLength:=1000)
+ if(Status){
+ Message = Page did not load after 10 seconds. Force stopping refresh and trying to continue
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+ send, {Escape} ; Temporary workaround, as Page seems to endlessly load for Stef
+
+ Xpath = //textarea[@id='body']
+ Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
+ if(Status){
+ SaveOrPostProgress(Message:="Post Failed: Check Login Status, or Website is Down",PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+
+ Return
+ }
+ }
+
+ Message = Inputting Title
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+ Xpath = //input[@id='title']
+ Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000,StringTextContent:=VideoTitle)
+ if(Status){
+ Message = Failed to input Title
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+ }
+
+ sleep, 1000
+
+/*Xpath = //textarea[@id='body']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000,StringTextContent:=VideoDescription)
+if(Status){
+ Message = Failed to input Body
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+}
+*/
+
+; Input Description
+TooltipThis("Inputting Description")
+Loop, 5 { ; Attempt to input video description a couple of times
+
+
+ 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('body')[0].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.
+
+ ; msgbox
+ try driver.findElementsByName("body").item[1].SendKeys(driver.Keys.SPACE)
+ ; driver.findElementsByID("ELEMENTID").item[1].SendKeys(driver.Keys.ENTER)
+ ; msgbox
+
+ jsCheck = return document.getElementsByName('body')[0].value; ; Send content through javascript (Great for getting around emoji chrome limitaitons)
+ try Description := driver.executeScript(jsCheck) ;Executes a Javascript on the webpage, mostly used for buttons.
+
+
+ ; try Description := driver.findElementsByName("body").item[1].Attribute("value") ;XPath: ID=site-title & span tag
+ if(Description != "")
+ Break
+ sleep, 2000
+}
+
+SaveOrPostProgress(Message:="Waiting Video to finish uploading",PostType:="Tooltip,ErrorLoggingTextFile")
+Message = Uploading Video File
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+Xpath = //div[@class='uploadvideo-wrapper']//input[@name='Filedata']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoFilepath)
+if(Status){
+ Message = Failed to Upload Video
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ Return
+}
+
+
+; check if the "Auto Submit Post" checkbox is checked, and if not check it
+js = return document.querySelector("#autosubmit_enabled").checked;
+try AutoSubmitstatus := driver.executeScript(js)
+; DevModeMsgBox(status)
+; message = AutoSubmitstatus: %AutoSubmitstatus%
+; DevModeMsgBox(message)
+
+if(AutoSubmitstatus = "0"){
+ js = document.querySelector("li[id='autosubmit_container'] small").click() ; ; CHECK YES
+ try driver.executeScript(js) ; DevModeMsgBox(status)
+
+ ; double check that it got selected
+ js = return document.querySelector("#autosubmit_enabled").checked;
+ try AutoSubmitstatus := driver.executeScript(js)
+
+ Message = AutoSubmitstatus after clicking checkbox: %AutoSubmitstatus%
+ DevModeMsgBox(message)
+
+ if(AutoSubmitstatus != "-1"){
+ Message = Failed to check Auto-Submit Post checkbox
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ SaveDriverURLOFErrorPage()
+ Return
+ ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+ }
+}
+
+
+DevModeMsgBox("autosubmit status -1 string here")
+; msgbox % AutoSubmitstatus = "-1"
+if(AutoSubmitstatus = "-1"){ ; if checked YES
+
+ ; check that there are no error messages
+ js = return document.querySelector("div[class='form-error']").textContent;
+ try status := driver.executeScript(js)
+ ; DevModeMsgBox(status)
+ if(status){ ;if element contains error text
+ Message = Auto Publish failed: %status%
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ SaveDriverURLOFErrorPage()
+ Return
+ }
+
+
+ if(VideoThumbFilepath){
+ Message = Uploading Thumbnail
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+ Xpath = //div[contains(@class,'post-video-attachments post-video-attachments_upd')]//div[contains(@class,'uploadfile-wrapper')]//input[contains(@name,'Filedata')]
+ Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath)
+ if(Status){
+ Message = Failed to Attach Thumbnail
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ Return
+ }
+ }
+
+ ; otherwise everything is good and we can move on to the next site and come back to grab the URL later
+ ; LocalsURL := "UploadedButNeedToGrabLink"
+ ; Return
+
+
+ Message = Upload Started Successfully
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+ LocalsURL := "LocalsUploadStartedNeedToGrabURL"
+ ; Msgbox % "LocalsURL: " LocalsURL
+ IniWrite, %LocalsURL%, %VideoLinksIniFile%, URLs, LocalsURL
+ AddToTotalVideosUploadedCount()
+
+ ; Msgbox % "LocalsURL: " LocalsURL
+ ; Msgbox % "VideoLinksIniFile: " VideoLinksIniFile
+ ;
+ ; FileRead, inicontents, %VideoLinksIniFile% ; , Filename
+ ; Msgbox % "inicontents: " inicontents
+
+ ; IniWrite, Value, Filename, Section, Key
+
+ ; LocalsTabURL := SaveDriverURL()
+
+ Return
+}
+Return
+
+
+
+;--------------\Locals----------------------------------
+
+
+
+
+
+;--------------LocalsGrabURL----------------------------------
+LocalsGrabURL:
+
+CurrentSite := Locals
+
+SaveOrPostProgress(Message:="Navigating to Locals Feed to grab URL",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+IniRead, LocalsPostPageURL, %SettingsIniFilepath%, General, LocalsPostPageURL, %A_Space%
+if(LocalsPostPageURL = ""){
+ Message = LocalsURL is blank.`nPlease add Locals URL to Settings.ini file under:`n`n[General]`nLocalsPostPageURL=
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ Return
+}
+
+if(InStr(LocalsPostPageURL, "/share/post")){
+ LocalsFeedPageURL := StrReplace(LocalsPostPageURL, "/share/post", "")
+}
+
+
+Status := ActivateChromeTab(LocalsPostPageURL)
+if(Status = "Failed"){
+ Message = Failed to Activate Locals Tab. Please grab URL manually
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ Return
+}
+; Msgbox % "Status: " Status
+
+
+try currentpageURL := driver.url
+if(InStr(currentpageURL,"share/post")){ ; we're still on create new post page
+Message = Locals is still on the Create New Post page. Please double check if post was published successfully.
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+SaveDriverURLOFErrorPage()
+Return
+}
+
+
+; otherwise we should be on locals.com home feed page
+; check for "Retrieve Draft button"
+js = return document.querySelector("a[class='btn']").innerText;
+try, status := driver.executeScript(js)
+if(status){
+ Message = Video was uploaded but Locals saved it as a draft instead of instantly publishing it. Please go to the Locals Page and Retrieve Draft and manually Publish it.
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ SaveDriverURLOFErrorPage()
+ Return
+}
+
+
+
+; Get word that's longer than 4 characters in video title
+VideoTitleArray := StrSplit(VideoTitle, " ")
+; Iterate from 1 to the end of the array:
+Loop % VideoTitleArray.Length(){
+ VideoTitleFirstWord := VideoTitleArray[A_Index]
+ VideoTitleFirstWord := StrReplace(VideoTitleFirstWord, "_","-")
+ if(StrLen(VideoTitleFirstWord) > 4)
+ Break
+
+ ; MsgBox % VideoTitleArray[A_Index]
+
+}
+
+
+loop, 7 {
+ ElementIndexNum := A_index - 1
+ Message = ElementIndexNum: %ElementIndexNum%
+ DevModeMsgBox(Message)
+ ; Msgbox % "ElementIndexNum: " ElementIndexNum
+
+
+ jscheck = return document.getElementsByClassName('post-bottom')[%ElementIndexNum%].outerHTML;
+ try outerHTML := driver.executeScript(jsCheck)
+
+ if(DevMode){
+ Message = Looking for VideoTitleFirstWord: %VideoTitleFirstWord% `nwithin outerHTML
+ DevModeMsgBox(message)
+ Clipboard := outerHTML
+ DevModeMsgBox(outerHTML)
+ }
+
+
+ ; msgbox % "outerHTML: " . outerHTML
+
+ if(InStr(OuterHTML,VideoTitleFirstWord)){
+ ; @todo replace with regex
+ Message = %VideoTitleFirstWord% is in`n`n %OuterHTML%
+ DevModeMsgBox(Message)
+
+ Message = Found at at index: %A_index%
+ DevModeMsgBox(message)
+ ; MsgBox, found match at %A_index%
+
+
+ DevModeMsgBox("Pulling out url from outerhtml")
+
+ ShareLink := StrSplit(OuterHTML, "data-url=")
+ ShareLink := ShareLink[2]
+
+ DevModeMsgBox(ShareLink)
+ ; Msgbox % "ShareLink: " ShareLink
+
+ URLEndString = ">
+ ShareLink := StrSplit(ShareLink, URLEndString)
+ ShareLink := ShareLink[1]
+ DevModeMsgBox(ShareLink)
+
+ QuotationMark = "
+ ShareLink := StrReplace(ShareLink,QuotationMark, "")
+ DevModeMsgBox(ShareLink)
+ Break
+ }
+
+ ShareLink :=
+}
+
+DevModeMsgBox(ShareLink)
+
+; ShareLink := "Successful"
+
+Message = Upload Complete: %ShareLink%
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+
+IniWrite, %ShareLink%, %VideoLinksIniFile%, URLs, LocalsURL
+AddToTotalVideosUploadedCount()
+
+SaveDriverURL()
+
+
+Return
+
+
+
+;--------------/LocalsGrabURL----------------------------------
+
+
+
+
+
+
+
+; GetLocals
+; Xpath = //div[@class='uppy-StatusBar-statusPrimary']
+
+; sleep, 30000 ; wait 30 seconds
+; sleep, 2000
+
+/*; Attach Custom Thumbnail
+if(VideoThumbFilepath != ""){
+ Message = Attaching Custom Thumbnail
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+ Xpath = //div[@class='custom-thumb-uploader']//input[@name='Filedata']
+ Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath)
+
+ if(Status){
+ Message = Failed to Attach Custom Thumbnail
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ }
+
+}
+
+*/
+
+
+sleep, 10000
+Loop, %Number_of_loops_to_Check_Upload_status% {
+ sleep, %Time_Between_Loops_Upload_Status%
+
+ jscheck = return document.getElementsByClassName('uppy-StatusBar-statusPrimary')[0].textContent;
+ try UploadStatus := driver.executeScript(jsCheck)
+
+ ; UploadStatus := StrSplit(UploadStatus, ": ")
+ ; UploadStatus := UploadStatus[2]
+
+
+ ; message = Waiting for Video To Finish Uploading. `nCurrent Status: %UploadStatus%
+ ; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+
+ ; Clipboard := jsCheck
+ ; msgbox % "textContent: " . textContent
+
+
+ /* try UploadStatus := driver.findelementbyxpath(Xpath).Attribute("innerText") ; Grabb innertext
+ catch e {
+ if(A_index = 1){
+ Message = Unable to find Progress Upload Percentage. Upload Most Likely Failed.
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ }
+ else,
+ Break
+ }
+ */
+
+ if(InStr(UploadStatus, "100%")){
+ Message = Video Upload Complete. Waiting 20 seconds for Video to finalize before submitting.
+ sleep, 20000
+ break
+ }
+
+ ; if(UploadStatus != ""){
+ ; Message =
+ ; sleep, 30000 ; 30 seconds
+ ; Continue
+
+ ; }
+
+ if(UploadStatus = "" and A_index = 1){
+ Message = Upload Failed. Unable to Grab Upload Status
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ SaveDriverURLOFErrorPage()
+ Return
+ }
+
+ ; if(UploadStatus = ""){
+ ; Break
+ ; }
+
+
+ Status := Check_For_Stuck_Video_Upload(A_index, UploadStatus)
+ if(Status = "Failed")
+ Return
+ }
+
+ /*; attach custom thumbnail
+ xpath = //label[normalize-space()='Upload Custom Video Thumbnail']
+ Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoThumbFilepath)
+ if(Status){
+ Message = Failed to Attach Thumbnail
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ ; SaveDriverURLOFErrorPage()
+ ; Return
+ }
+ Status := InputFilePathIntoOpenWindow(VideoThumbFilepath)
+
+ */
+
+ ; DevModeMsgBox("pause")
+
+ ; Click the publish button
+ js = document.getElementsByName('submitPost')[0].click();
+ try driver.executeScript(js)
+
+
+ Message = Waiting 5 seconds for Video to Get Processed
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+ sleep, 5000
+
+
+ try currentpage := driver.url
+ if(CUrrentpage = LocalsPostPageURL){
+ Message = Final page is same as post page. Please double check if post was published successfully.
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ Return
+ }
+ ; sleep, 500
+ ; ToolTip
+ ; AddToTotalPostsPostedCount()
+
+
+ Devmodeskip:
+
+ Message = Trying to Grab Share Link
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+
+ ; refresh page
+ try driver.executeScript("history.go(0)")
+ try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
+
+ ; check for "Retrieve Draft button"
+ js = return document.querySelector("a[class='btn']").innerText;
+ try, status := driver.executeScript(js)
+ if(status = "Retrieve Draft"){
+ Message = Video was uploaded but Locals saved it as a draft instead of instantly publishing it. Please go to the Locals Page and Retrieve Draft and manually Publish it.
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ SaveDriverURLOFErrorPage()
+ Return
+ }
+
+
+
+ ; Get word that's longer than 4 characters in video title
+ VideoTitleArray := StrSplit(VideoTitle, " ")
+ ; Iterate from 1 to the end of the array:
+ Loop % VideoTitleArray.Length(){
+ VideoTitleFirstWord := VideoTitleArray[A_Index]
+ VideoTitleFirstWord := StrReplace(VideoTitleFirstWord, "_","-")
+ if(StrLen(VideoTitleFirstWord) > 4)
+ Break
+
+ ; MsgBox % VideoTitleArray[A_Index]
+
+ }
+
+ ; DevModeMsgBox(VideoTitleFirstWord)
+
+ ; Message = VideoTitleFirstWord: %VideoTitleFirstWord%
+ ; SaveOrPostProgress(Message:=Message,PostType:=",ErrorLoggingTextFile")
+
+ ; VideoTitleFirstWord := VideoTitleFirstWord[1]
+ ; Msgbox % "VideoTitleFirstWord: " VideoTitleFirstWord
+
+/* ; Format the post title to remove all spaces and special characters to match with Locals Post
+ ShareLinkFormatted := StrReplace(VideoTitle, " ", "-")
+ ShareLinkFormatted := StrReplace(ShareLinkFormatted, "?", "")
+ ShareLinkFormatted := StrReplace(ShareLinkFormatted, "!", "")
+ ShareLinkFormatted := StrReplace(ShareLinkFormatted, ".", "")
+ ShareLinkFormatted := StrReplace(ShareLinkFormatted, "", "")
+ ShareLinkFormattedFirst5Chars := SubStr(ShareLinkFormatted, 1, 5)
+
+ */
+
+
+
+ LocalsBaseURL := StrReplace(LocalsURL, "/share/post", "")
+ ; Msgbox % "LocalsPostPageURL: " LocalsPostPageURL
+ ; Msgbox % "LocalsURL: " LocalsURL
+ ; Msgbox % "LocalsBaseURL: " LocalsBaseURL
+ loop, 5 {
+ ElementIndexNum := A_index - 1
+ DevModeMsgBox(ElementIndexNum)
+ ; Msgbox % "ElementIndexNum: " ElementIndexNum
+
+
+ jscheck = return document.getElementsByClassName('post-bottom')[%ElementIndexNum%].outerHTML;
+ try outerHTML := driver.executeScript(jsCheck)
+
+ ; Clipboard := outerHTML
+ ; DevModeMsgBox(outerHTML)
+
+ ; msgbox % "outerHTML: " . outerHTML
+
+ if(InStr(OuterHTML,VideoTitleFirstWord)){
+
+ Message = %VideoTitleFirstWord% is in %OuterHTML%
+ ; DevModeMsgBox(Message)
+
+ ; MsgBox, found match at %A_index%
+
+
+
+
+ ShareLink := StrSplit(OuterHTML, "data-url=")
+ ShareLink := ShareLink[2]
+ ; DevModeMsgBox(ShareLink)
+ ; Msgbox % "ShareLink: " ShareLink
+
+ URLEndString = ">
+ ShareLink := StrSplit(ShareLink, URLEndString)
+ ; ShareLink := ShareLink[1]
+
+ QuotationMark = "
+ ShareLink := StrReplace(ShareLink,QuotationMark, "")
+
+ Break
+ }
+
+ ShareLink :=
+ }
+
+ DevModeMsgBox(ShareLink)
+
+ ; ShareLink := "Successful"
+
+ Message = Upload Complete: %ShareLink%
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+
+ IniWrite, %ShareLink%, %VideoLinksIniFile%, URLs, LocalsURL
+ AddToTotalVideosUploadedCount()
+
+ SaveDriverURL()
+
+
+ Return
+
+ ;
+ ;------------------/Locals------------------------------
\ No newline at end of file
diff --git a/Modules/Miscellaneous-Functions.ahk b/Modules/Miscellaneous-Functions.ahk
new file mode 100644
index 0000000..d263c69
--- /dev/null
+++ b/Modules/Miscellaneous-Functions.ahk
@@ -0,0 +1,237 @@
+
+; -------------------------------Functions-------------------------------
+CheckLBRYProcess(){
+ ; Check if LBRY Process exists
+ Process, Exist,LBRY.exe
+ if(ErrorLevel = 0) ; if doesn't exist
+ {
+ Message = Not Running. Starting up LBRY.exe
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+ LBRYExeFilepath = C:\Program Files\LBRY\LBRY.exe
+ if(!FileExist(LBRYExeFilepath)){
+ Message = Failed to Find LBRY.exe executable. LBRY not installed?
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ Return
+ }
+
+ Message = Checking LBRY daemon_settings.yml file for Odysee Wallet Servers
+ SaveOrPostProgress(Message:=Message,PostType:=",ErrorLoggingTextFile,DiscordErrorLogging")
+
+ FileRead, daemon_settingsFileContent, C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings.yml
+
+ if(!InStr(daemon_settingsFileContent, "a-hub1.odysee.com")){
+ Message = Odysee wallet server is not in daemon_settings.yml. Replacing File with required settings.
+ SaveOrPostProgress(Message:=Message,PostType:=",DiscordErrorLogging")
+
+ LBRYDaemonSettingsFP = C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings.yml
+ LBRYDaemonSettingsBackupFP = C:\Users\%A_UserName%\AppData\Local\lbry\lbrynet\daemon_settings_BU.yml
+
+
+ ; Msgbox % "daemon_settingsText: " daemon_settingsText
+ FileMove, %LBRYDaemonSettingsFP%, %LBRYDaemonSettingsBackupFP%, 1 ; Dest [, Flag (1 = overwrite)]
+
+ UrlDownloadToFile, https://git.freedomainplaylists.com/yuriy/Freedomain-Video-Uploader/raw/branch/main/Assets/daemon_settings.yml , %LBRYDaemonSettingsFP%
+
+ sleep, 1000
+
+ if(!FileExist(LBRYDaemonSettingsFP)){
+ Message = Failed to download the custom daemon_settings.yml file from git. Restoring Original File
+ SaveOrPostProgress(Message:=Message,PostType:=",ErrorLoggingTextFile,DiscordErrorLogging")
+ FileMove,%LBRYDaemonSettingsBackupFP%,%LBRYDaemonSettingsFP%, 1
+ }
+ }
+
+
+ try run, "%LBRYExeFilepath%"
+ Message = Waiting 1 Minute for LBRY to start up
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip")
+ Sleep, 60000 ; 1 minute
+
+ Process, Exist,LBRY.exe
+ if(ErrorLevel = 0) ; if doesn't exist
+ {
+ Message = Failed to Start LBRY.exe after 60 seconds of waiting
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ Return
+ }
+ WinMinimize, LBRY
+ }
+ Return
+}
+
+
+GetPermanentLBRYURL(UploadResult){
+ SingleQuotationmark = "
+
+ UploadResult := StrSplit(UploadResult, "`n") ; split results by new line
+
+ ; Iterate through the array of the results
+ Loop % UploadResult.Length() {
+ PermanentURL := UploadResult[A_Index]
+ if(InStr(PermanentURL, "permanent_url"))
+ Break
+ }
+
+ ; Starting Result: "permanent_url": "lbry://Test-Video-161-Numbered#c9ad9afe54c7178d6f870b59bbe129aef8efc3ff",
+ PermanentURL := StrSplit(PermanentURL, "lbry:")
+ PermanentURL := "lbry:" . PermanentURL[2]
+ PermanentURL := StrReplace(PermanentURL, ",", "")
+ PermanentURL := StrReplace(PermanentURL, SingleQuotationmark, "")
+ PermanentURL := StrReplace(PermanentURL, "`n", "")
+ PermanentURL := StrReplace(PermanentURL, "`r", "")
+
+ ; End Result lbry://Test-Video-161-Numbered#c9ad9afe54c7178d6f870b59bbe129aef8efc3ff
+ Return PermanentURL
+}
+
+
+GetLBRYCanonicalURL(LBRYJSONObject){ ; input json string
+ ; ResolveURL := StrSplit(LBRYResolveAPICommand, "lbry://")
+ ; ResolveURL := "lbry://" . ResolveURL[2]
+ ; StrReplace(Haystack, SearchText [, ReplaceText, OutputVarCount, Limit := -1])
+ LBRYPermanentURLJsonOBJ := StrReplace(LBRYJSONObject, LBRYPermanentURL, "LBRYPermanentURL")
+ ; clipboard := LBRYPermanentURLJsonOBJ
+ ; DevModeMsgBox(LBRYPermanentURLJsonOBJ)
+
+ try parsed := JSON.Load(LBRYPermanentURLJsonOBJ)
+ try LBRYCanonicalURL := parsed.LBRYPermanentURL.canonical_url
+
+ ; DevModeMsgBox(LBRYCanonicalURL)
+
+ if(LBRYCanonicalURL = ""){
+ Return "" ; return blank
+ }
+
+ ; otherwise return the LBRY url
+ LBRYCanonicalURL := StrReplace(LBRYCanonicalURL, "lbry://", "https://lbry.tv/")
+ Return LBRYCanonicalURL
+}
+
+
+LBRYCMDTextReplacement(LBRYURLSlug){
+ SingleQUote = "
+ LBRYURLSlug := StrReplace(LBRYURLSlug, " ", "_") ; replace all spaces with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, ":", "_") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, ",", "_") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "?", "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "!", "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "`;", "_") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "/", "_") ; replace all colons with dashes
+ ; LBRYURLSlug := StrReplace(LBRYURLSlug, "?", "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "<", "_") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, ">", "_") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, SingleQUote, "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "'", "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "=", "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, ";", "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, ")", "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "(", "") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "___", "_") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "__", "_") ; replace all colons with dashes
+ LBRYURLSlug := StrReplace(LBRYURLSlug, "__", "_") ; replace all colons with dashes
+ Return LBRYURLSlug
+}
+
+GetLBRYAPIErrorFromString(UploadResult){
+ UploadResultArray := StrSplit(UploadResult, "message")
+ LBRYAPIError := UploadResultArray[2]
+ ; LBRYAPIErrorStrLen := StrLen(LBRYAPIError)
+
+ ; LBRYAPIErrorStrToTrim := LBRYAPIErrorStrLen - 3
+ ; Msgbox % "LBRYAPIErrorStrToTrim: " LBRYAPIErrorStrToTrim
+ LBRYAPIError := SubStr(LBRYAPIError, 4)
+ LBRYAPIError := StrReplace(LBRYAPIError, "}", "")
+
+
+ ; Msgbox % "LBRYAPIError: " LBRYAPIError
+ Return LBRYAPIError
+
+}
+
+
+LogErrorToTextFile(Error){
+/* if(LogErrorsToTextFile != 1)
+ Return
+ */
+ ErrorLoggingFile := VideoFolderDir . "\" . "ErrorLogging.txt"
+ FormatTime, TodayDate , YYYYMMDDHH24MISS, yyyyMMdd_hhmmss
+ text =
+ (
+
+
+ ---------------%TodayDate%---------------
+ %CurrentSite%: %Error%
+
+
+ )
+ if(LogErrorsToMsgbox)
+ Msgbox % "Text: " Text
+
+ FileAppend, %Text%, %ErrorLoggingFile%
+ } ; End of Function
+
+
+
+ SaveDriverURL()
+ AddToTotalVideosUploadedCount(){
+ IniRead, TotalVideosUploaded, %SettingsIniFilepath%, General, TotalVideosUploaded, %A_Space%
+ TotalVideosUploaded += 1
+ IniWrite, %TotalVideosUploaded%, %SettingsIniFilepath%, General, TotalVideosUploaded
+ }
+
+
+
+ OnMsgBoxPodcastFinish() {
+ DetectHiddenWindows, On
+ Process, Exist
+ If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
+ WinMove,, 0
+ }
+ }
+
+ OnMsgBoxSocialMediaPoster() {
+ DetectHiddenWindows, On
+ Process, Exist
+ If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
+ ControlSetText Button1, Yes
+ ControlSetText Button2, Not Now
+ }
+ }
+
+
+
+ Check_For_Stuck_Video_Upload(Index_Number, Upload_Status){
+ if(A_index = 1){ ; Create a blank array
+ ProgressStatusArray := []
+ Return
+ }
+
+ Message = Upload Status: %Upload_Status%
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip")
+
+ ; if we reached the last loop number:
+ if(A_index = %Number_of_loops_to_Check_Upload_status%){
+ Message = Upload Most Likely Failed: Video Hasn't Finished Uploading after 1 hour.
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ SaveDriverURLOFErrorPage()
+ Return "Failed"
+ }
+
+ ; If progress is still the same after a ten minute interval then error out
+ if(HasVal(Array_Index_Num_of_Upload_StatusChecks, A_index)){ ; if current index is in Array of index numbers to check status during
+
+ ; Send a notification message of upload status
+ Message = Upload Status: %Upload_Status%
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+ ; if current upload_status is in the array of values that are updated every 10 mins
+ if(HasVal(ProgressStatusArray, Upload_Status)){
+ Message = Upload Failed (E#4508)`nUpload Stuck at same point for 10 minutes. Stuck Status: %ProgressStatus%
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ SaveDriverURLOFErrorPage()
+ Return "Failed"
+ }
+ ProgressStatusArray.Push(Upload_Status) ; append current status to array
+ }
+ } ; end of func
\ No newline at end of file
diff --git a/Modules/Podcast-Upload.ahk b/Modules/Podcast-Upload.ahk
new file mode 100644
index 0000000..772b705
--- /dev/null
+++ b/Modules/Podcast-Upload.ahk
@@ -0,0 +1,311 @@
+UploadPodcast:
+;------------------------------------------------
+CurrentSite := "Podcast"
+PodcastTags := StrReplace(PodcastTags, " ,", ",")
+PodcastTags := StrReplace(PodcastTags, ", ", ",")
+PodcastTags := StrReplace(PodcastTags, " ", "-")
+PodcastTags := StrReplace(PodcastTags, "--", "-")
+PodcastTags := StrReplace(PodcastTags, "--", "-")
+; Msgbox % "PodcastTags: " PodcastTags
+
+
+Message = Starting Upload
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+
+IniRead, FDRRadioURL, %SettingsIniFilepath%, General, FDRRadioURL, %A_Space%
+if(FDRRadioURL = ""){
+ Message = FDRRadioURL is blank.`nPlease add URL to Settings.ini file under:`n`n[General]`nFDRRadioURL=
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+ MsgBox 0x10,, %Message%
+ Return
+}
+
+IniRead, Username, %SettingsIniFilepath%, General, FDRRadioUN, %A_Space%
+IniRead, Password, %SettingsIniFilepath%, General, FDRRadioPW, %A_Space%
+
+if(Username = "" or Password = ""){
+ Message = Username and/or Password are blank.`nPlease add Login to Settings.ini file under:`n`n[General]`nFDRRadioUN=`nFDRRadioPW=
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+}
+
+
+if(MP3AudioFilepath = ""){
+ MsgBox 0x33, Unable to Upload Podcast, No MP3 File Was Found/Selected. `nWould you like to select one now?
+
+ IfMsgBox Yes, {
+ FileSelectFile, MP3AudioFilepath,, %RootDirToStartIn%, Please Select MP3 File
+ if(ErrorLevel)
+ Return
+ } Else IfMsgBox No, {
+ Return
+ } Else IfMsgBox Cancel, {
+ Return
+ }
+ }
+/*
+Sublime Indentation Reset
+*/
+
+if(!InStr(MP3AudioFilepath, ".mp3")){
+
+ Message = Unable to upload podcast, no mp3 file was selected.
+ MsgBox 0x40, Error, %Message%
+ Return
+}
+
+
+; Message = Grabbing MP3 file data
+; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+
+; https://www.autohotkey.com/boards/viewtopic.php?t=59882
+Message = Calculating MP3 File Size and Length
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile, DiscordErrorLogging")
+
+Obj := Filexpro(MP3AudioFilepath,,
+ , "Length"
+ , "Size" )
+MP3AudioFilesize := obj["Size"]
+MP3AudioLength := obj["Length"]
+; MsgBox % obj["Size"]
+
+AudioLengthArray := StrSplit(MP3AudioLength,":")
+
+Message = MP3 Audio Length: %MP3AudioLength%
+SaveOrPostProgress(Message:=Message,PostType:="ErrorLoggingTextFile,DiscordErrorLogging")
+
+; AudioLength_Seconds := ((AudioLengthArray[1] * 60 ) * 60) + (AudioLengthArray[2] * 60) + AudioLengthArray[3]
+; Message = MP3 Audio Length in Seconds: %AudioLength_Seconds%
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+AudioLength_Hours := AudioLengthArray[1]
+AudioLength_Minutes := AudioLengthArray[2]
+AudioLength_Seconds := AudioLengthArray[3]
+
+Message = AudioLength_Hours: %AudioLength_Hours%`nAudioLength_Minutes: %AudioLength_Minutes%`nAudioLength_Seconds: %AudioLength_Seconds%
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+; AudioLength_SecondsOriginal := AudioLength_Seconds
+; AudioLength_Seconds := (AudioLength_Minutes * 60) + ((AudioLength_Hours * 60) * 60) + AudioLength_Seconds
+
+; Msgbox % "AudioLength_Hours: " AudioLength_Hours
+; Msgbox % "AudioLength_Minutes: " AudioLength_Minutes
+; Msgbox % "AudioLength_Seconds: " AudioLength_Seconds
+; Msgbox % "AudioLength_SecondsOriginal: " AudioLength_SecondsOriginal
+
+FileGetSize, OutputVar, %MP3AudioFilepath%, K ; Retrieve the size in Kbytes.
+FIlesizeInBytes := OutputVar * 1024
+
+
+Message = Inputting Podcast Information
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+
+Status := NavigateFromBaseURLTo(FDRRadioURL)
+if(Status)
+Return
+
+
+Status := CheckForAlerts()
+if(Status){
+
+}
+
+Message = Logging in
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+Xpath = //input[@id='email']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=Username)
+if(!Status){ ; if inputting email did NOT fail, then we are on the login page, input the password and then click login.
+ Xpath = //input[@id='password']
+ Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=Password)
+
+ Xpath = //a[@id='loginButton']
+ Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
+
+ driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
+
+ sleep, 2000
+
+ try driver.Get(FDRRadioURL) ;Open selected URL
+ catch e {
+ Message = Upload Failed (E#7295)`nUnable to Navigate to Upload Page`nChrome was closed or Internet down possibly?
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
+
+ }
+}
+
+
+
+Message = Waiting for Page to Load
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+Xpath = //input[@id='num']
+Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=60,SleepLength:=1000)
+if(Status){
+ Message = New Podcast Page did not load after 60 seconds. Check Login Status
+ SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+ Return
+}
+
+Message = Inputting Podcast Info
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+; Click the "Is Active?" Checkbox
+Xpath = //input[@id='isActive']
+Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
+
+; Input Podcast Number
+Xpath = //input[@id='num']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=PodcastNumber)
+
+; Input Podcast Title
+Xpath = //input[@id='title']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=VideoTitle)
+
+; INput Audio URL
+Xpath = //input[@id='url-audio']
+SplitPath, MP3AudioFilepath, MP3AudioNameWithExt
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=MP3AudioNameWithExt)
+
+; INput thumbnail URL
+Xpath = //input[@id='url-thumbnail']
+SplitPath, VideoThumbFilepath, VideoThumbnailFilenameWithExt
+ThumbnailURL = https://cdn.freedomainradio.com/%VideoThumbnailFilenameWithExt%
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=ThumbnailURL)
+
+; Input BitChute URL
+Xpath = //input[@id='url-bitchute']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=BitChuteURL)
+
+; Input Brighteon URL
+Xpath = //input[@id='url-brighteon']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=BrighteonURL)
+
+; Input DailyMotion URL
+Xpath = //input[@id='url-dailymotion']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=DailyMotionURL)
+
+; Input LBRY URL
+Xpath = //input[@id='url-lbry']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=OdyseeVideoURL)
+
+; Input LBRY URL
+Xpath = //input[@id='url-locals']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=LocalsURL)
+
+; Input Rumble URL
+Xpath = //input[@id='url-rumble']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=RumbleURL)
+
+
+; Soundcloud but actually LBRY Audio URL
+Xpath = //input[@id='url-lbry-audio']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=OdyseeAudioURL)
+
+
+; INput filesize
+Xpath = //input[@id='fileSize']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=FIlesizeInBytes)
+
+
+Xpath = //input[@id='lengthHours']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=AudioLength_Hours)
+
+Xpath = //input[@id='lengthMinutes']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=AudioLength_Minutes)
+
+Xpath = //input[@id='lengthSeconds']
+Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=AudioLength_Seconds)
+; Message = Audio Length in Seconds that got input: %AudioLength_Seconds%
+; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
+
+Message = Inputting Description
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+Xpath = //textarea[@id='description']
+Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
+
+; Input Description
+JSVideoDescription := FormatTextToJSText(VideoDescription)
+
+js = document.getElementById('description').value = "%JSVideoDescription%";
+try driver.executeScript(js) ;Executes a Javascript on the webpage, mostly used for buttons.
+
+
+Message = Inputting Tags
+SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile")
+
+Podcasttags := StrReplace(Podcasttags, " , ", ",")
+Podcasttags := StrReplace(Podcasttags, " ,", ",")
+Podcasttags := StrReplace(Podcasttags, ", ", ",")
+
+ArrayOfPodcastTags := StrSplit(Podcasttags,",")
+LengthOfArrayOfPodcastTags := ArrayOfPodcastTags.Length() ; Save total number of items in the array
+
+try pagehtml := driver.pagesource
+; Msgbox % "pagehtml: " pagehtml
+Loop, %LengthOfArrayOfPodcastTags% {
+ Tag := ArrayOfPodcastTags[A_Index] ; find value from position in array
+
+ SpanID = title">%Tag%