Compare commits
No commits in common. 'main' and '1.2' have entirely different histories.
Binary file not shown.
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 101 KiB |
Binary file not shown.
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 50 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 93 KiB |
@ -1,84 +0,0 @@
|
|||||||
;---ENVIRONMENT---------------------------------------------------------------------
|
|
||||||
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
|
|
||||||
;#Warn ; Enable warnings to assist with detecting common errors.
|
|
||||||
;DetectHiddenWindows, On
|
|
||||||
#SingleInstance, Force
|
|
||||||
DetectHiddenWindows, ON
|
|
||||||
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
|
|
||||||
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
|
|
||||||
;SetKeyDelay, 500
|
|
||||||
CoordMode, ToolTip, Screen
|
|
||||||
CoordMode, Mouse, Screen
|
|
||||||
; #NoTrayIcon
|
|
||||||
; Menu, Tray, Icon, RMScriptManager.ico
|
|
||||||
|
|
||||||
;---Notes/Extra Info/#Includes------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
;---VARIABLES-----------------------------------------------------------------------
|
|
||||||
ScriptName = Freedomain Livestream Scheduler
|
|
||||||
|
|
||||||
AHKFilepath = %A_ScriptDir%\%ScriptName%.ahk
|
|
||||||
Exefilepath = %A_ScriptDir%\%ScriptName%.exe
|
|
||||||
icopath = %A_ScriptDir%\Assets\Icon.ico
|
|
||||||
VersionIniFP = %A_ScriptDir%\Version.ini
|
|
||||||
|
|
||||||
|
|
||||||
;---MAIN SCRIPT---------------------------------------------------------------------
|
|
||||||
|
|
||||||
; Bump the version number in the version.ini file
|
|
||||||
IniRead, VersionNumber, %VersionIniFP%, %ScriptName%, Version, 0.0 ; , Filename, Section, Key [, Default]
|
|
||||||
VersionNumber += .01
|
|
||||||
VersionNumber := SubStr(VersionNumber, 1, 4)
|
|
||||||
|
|
||||||
IniWrite, %VersionNumber%, %VersionIniFP%,%ScriptName%, Version
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Kill any active intances of the uploaders so the .exe file can be overwriten by the compilation
|
|
||||||
process, close, %ScriptName%.exe
|
|
||||||
|
|
||||||
sleep, 1000
|
|
||||||
|
|
||||||
; Delete the .exe file so it can be repalced
|
|
||||||
if(FileExist(Exefilepath)){
|
|
||||||
FileDelete, %Exefilepath%
|
|
||||||
if(ErrorLevel){
|
|
||||||
msgbox, failed to delete Exe file. Please delete manually and re-run the compiler.
|
|
||||||
ExitApp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(!FileExist(AHKFilepath)){
|
|
||||||
msgbox, %AHKFilepath% does not exist`nExiting
|
|
||||||
ExitApp
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(!FileExist(icopath)){
|
|
||||||
msgbox, %icopath% does not exist`nExiting
|
|
||||||
ExitApp
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
run, %comspec% /c ""C:\Program Files\AutoHotkey\Compiler\Ahk2Exe.exe" /in "%AHKFilepath%" /out "%exefilepath%" /icon "%icopath%""
|
|
||||||
|
|
||||||
|
|
||||||
; OldNotify(ScriptToCompile,"Compiled Successfully",5)
|
|
||||||
; sleep, 5000
|
|
||||||
ExitApp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;---FUNCTIONS-----------------------------------------------------------------------
|
|
@ -1 +1 @@
|
|||||||
Subproject commit cf56ae8136def874793895733d595349b20d9c19
|
Subproject commit 124a26c3b03e5f1292691909c20a116f64957955
|
@ -1,119 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
MediaManagerUpdate:
|
|
||||||
; ------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
CurrentSite := "Media Manager"
|
|
||||||
SaveOrPostProgress(Message:="Navigating to Website",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
|
||||||
|
|
||||||
|
|
||||||
IniRead, FDRRadioURL, %SettingsIniFilepath%, General, FDRRadioURL, %A_Space%
|
|
||||||
if(FDRRadioURL = ""){
|
|
||||||
Message = FDRRadioURL is blank in Settings.ini. Please add it to the following location: [General]`nFDRRadioURL=
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
Return
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FDRRadioBaseURL := "https://" . ExtractBaseURL(FDRRadioURL)
|
|
||||||
FDRRadioURL := FDRRadioBaseURL . "/manage/"
|
|
||||||
|
|
||||||
Status := NavigateFromBaseURLTo(FDRRadioURL)
|
|
||||||
if(Status)
|
|
||||||
Return
|
|
||||||
|
|
||||||
CheckForAlerts()
|
|
||||||
|
|
||||||
Message = Checking Login Status
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
|
||||||
|
|
||||||
Try, PageURL := driver.Url
|
|
||||||
if(InStr(PageURL, "/NotLoggedIn")){
|
|
||||||
Message = Logged out. Trying to log back in.
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
|
||||||
|
|
||||||
Xpath = (//span[contains(text(),'Login')])[1]
|
|
||||||
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
|
||||||
|
|
||||||
sleep, 1000
|
|
||||||
|
|
||||||
Try, PageURL := driver.Url
|
|
||||||
if(InStr(PageURL, "/NotLoggedIn")){
|
|
||||||
Message = Failed to log back in automatically. Please login and try again.
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
Return
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Message = Updating Redirect URLs
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
|
||||||
|
|
||||||
; URL for each redirect
|
|
||||||
LocalsLiveRedirectURL := FDRRadioBaseURL . "/manage/#/Redirects/Modify?redirectID=738"
|
|
||||||
RumbleLiveRedirectURL := FDRRadioBaseURL . "/manage/#/Redirects/Modify?redirectID=739"
|
|
||||||
OdyseeLiveRedirectURL := FDRRadioBaseURL . "/manage/#/Redirects/Modify?redirectID=742"
|
|
||||||
|
|
||||||
; read the url's from the status file
|
|
||||||
IniRead, LocalsLivestreamURL, %PostStatusesFilepath%, Livestream,LocalsLivestreamURL, %A_Space%
|
|
||||||
IniRead, RumbleLivestreamURL, %PostStatusesFilepath%, Livestream,RumbleLivestreamURL, %A_Space%
|
|
||||||
IniRead, OdyseeLivestreamURL, %PostStatusesFilepath%, Livestream,OdyseeLivestreamURL, %A_Space%
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(LocalsLivestreamURL)
|
|
||||||
UpdateMediaManagerRedirect(LocalsLiveRedirectURL, LocalsLivestreamURL)
|
|
||||||
else, {
|
|
||||||
Message = LocalsLivestreamURL is blank. Skipping
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
}
|
|
||||||
|
|
||||||
if(RumbleLivestreamURL)
|
|
||||||
UpdateMediaManagerRedirect(RumbleLiveRedirectURL, RumbleLivestreamURL)
|
|
||||||
else, {
|
|
||||||
Message = RumbleLivestreamURL is blank. Skipping
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(OdyseeLivestreamURL)
|
|
||||||
UpdateMediaManagerRedirect(OdyseeLiveRedirectURL, OdyseeLivestreamURL)
|
|
||||||
else, {
|
|
||||||
Message = OdyseeLivestreamURL is blank. Skipping
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
UpdateMediaManagerRedirect(MediaManagerRedirectPageURL, RedirectURL){
|
|
||||||
|
|
||||||
try, driver.Get(MediaManagerRedirectPageURL) ;Open selected URL
|
|
||||||
try, driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
|
|
||||||
|
|
||||||
Xpath = (//input[@id='destinationURL'])[1]
|
|
||||||
Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=RedirectURL, ClearElement := 1)
|
|
||||||
|
|
||||||
|
|
||||||
; Snippet to for check:
|
|
||||||
if (ConfirmBeforeSubmit && ConfirmBeforeSubmitMsgboxFunc() != true) {
|
|
||||||
Message = User Selected STOP button when asked for confirmation. Cancelling Rest of Site Upload.
|
|
||||||
SaveOrPostProgress(Message:=Message, PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
; Save button
|
|
||||||
Xpath = (//span[contains(text(),'Save')])[1]
|
|
||||||
Status := Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
|
||||||
if(Status){
|
|
||||||
Message = Failed to click Save button
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
Return
|
|
||||||
}
|
|
||||||
|
|
||||||
Sleep, 1000
|
|
||||||
Return "Success"
|
|
||||||
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
RumbleSetRTMP:
|
|
||||||
;------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
CurrentSite := "Rumble Studio"
|
|
||||||
|
|
||||||
Status := NavigateFromBaseURLTo("https://studio.rumble.com/settings/connections")
|
|
||||||
if(Status)
|
|
||||||
Return
|
|
||||||
|
|
||||||
try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
|
|
||||||
|
|
||||||
CheckForAlerts()
|
|
||||||
|
|
||||||
Message = Inputting Custom RTMP Settings into Rumble Studio
|
|
||||||
SaveOrPostProgress(Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
|
||||||
|
|
||||||
|
|
||||||
IniRead, LocalsRTMPURL, %PostStatusesFilepath%, Livestream,LocalsRTMPURL, %A_Space%
|
|
||||||
IniRead, LocalsRTMPKey, %PostStatusesFilepath%, Livestream,LocalsRTMPKey, %A_Space%
|
|
||||||
|
|
||||||
IniRead, OdyseeRTMPKey, %PostStatusesFilepath%, Livestream,OdyseeRTMPKey, %A_Space%
|
|
||||||
IniRead, OdyseeRTMPURL, %PostStatusesFilepath%, Livestream,OdyseeRTMPURL, %A_Space%
|
|
||||||
|
|
||||||
|
|
||||||
if(LocalsRTMPURL = ""){
|
|
||||||
Message = Skipping. No LocalsRTMPURL in Status.ini file
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
Return
|
|
||||||
}
|
|
||||||
|
|
||||||
if(OdyseeRTMPURL = ""){
|
|
||||||
Message = Skipping. No OdyseeRTMPURL in Status.ini file
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
Return
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loop, 10 {
|
|
||||||
|
|
||||||
; IndexPlusOne := A_index + 1
|
|
||||||
IndexMinusOne := A_index - 1
|
|
||||||
Xpath = (//div[@class='flex shrink-0 items-center gap-x-4'])[%A_index%]
|
|
||||||
XpathCheckbox = (//img[@alt='More options'])[%IndexMinusOne%]
|
|
||||||
|
|
||||||
|
|
||||||
try SecondaryPlatformCheckboxName := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text
|
|
||||||
|
|
||||||
if(SecondaryPlatformCheckboxName = "LOCALS RTMP USE" OR SecondaryPlatformCheckboxName = "ODYSEE RTMP"){
|
|
||||||
|
|
||||||
if(SecondaryPlatformCheckboxName = "LOCALS RTMP USE"){
|
|
||||||
SiteRTMPURL := LocalsRTMPURL
|
|
||||||
SiteRTMPKey := LocalsRTMPKey
|
|
||||||
}
|
|
||||||
|
|
||||||
if(SecondaryPlatformCheckboxName = "ODYSEE RTMP"){
|
|
||||||
SiteRTMPURL := OdyseeRTMPURL
|
|
||||||
SiteRTMPKey := OdyseeRTMPKey
|
|
||||||
}
|
|
||||||
|
|
||||||
Status := Selenium_LoopToClickXpath(Xpath:=XpathCheckbox,NumOfLoops:=2,SleepLength:=1000)
|
|
||||||
if(Status){
|
|
||||||
Message = Failed to click into 3 dot menu for %SecondaryPlatformCheckboxName%
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
Return
|
|
||||||
}
|
|
||||||
|
|
||||||
; click Edit RTMP in the popup menu
|
|
||||||
Xpath = (//span[normalize-space()='Edit RTMP'])[1]
|
|
||||||
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
|
||||||
if(Status){
|
|
||||||
Message = Failed to click into 3 dot menu for %SecondaryPlatformCheckboxName%
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; Input New RTMP Info
|
|
||||||
XpathRTMP = (//input[@placeholder='Enter the RTMP URL'])[1]
|
|
||||||
XpathStreamkey = (//input[@placeholder='Enter the stream key'])[1]
|
|
||||||
|
|
||||||
Status := Selenium_LoopToSendValueToXpath(Xpath:=XpathRTMP,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=SiteRTMPURL,ClearElement:=1)
|
|
||||||
Status := Selenium_LoopToSendValueToXpath(Xpath:=XpathStreamkey,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=SiteRTMPKey,ClearElement:=1)
|
|
||||||
|
|
||||||
; click save button
|
|
||||||
Xpath = (//button[@class='rounded-full block px-6 py-2 bg-primary hover:brightness-[0.92] cursor-pointer'])[1]
|
|
||||||
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
|
||||||
if(Status){
|
|
||||||
Message = Failed to Click Save Button for %SecondaryPlatformCheckboxName% modified RMTP Settings
|
|
||||||
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
|
||||||
Return
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RumbleCustomRTMPs := "Success"
|
|
||||||
IniWrite, %RumbleCustomRTMPs%, %PostStatusesFilepath%, Livestream,RumbleCustomRTMPs
|
|
@ -1,13 +1,3 @@
|
|||||||
# Freedomain-Livestream-Scheduler
|
# Freedomain-Livestream-Scheduler
|
||||||
|
|
||||||
Livestream Scheduler written for the [Freedomain Philosophy Show](https://freedomain.com/)
|
Livestream Scheduler written for the [Freedomain Philosophy Show](https://freedomain.com/)
|
||||||
|
|
||||||
![Alt text](Assets/Preview.png "Screenshot of Main Window")
|
|
||||||
|
|
||||||
## Features
|
|
||||||
Automated scheduling of livestreams on the following platforms using Selenium Chrome automation.
|
|
||||||
* Odysee
|
|
||||||
* Locals
|
|
||||||
* Rumble
|
|
||||||
|
|
||||||
- The RTMP information from each platform will be grabbed at the end of the schedule and then input into Rumble Studio for Livestreaming.
|
|
Binary file not shown.
Loading…
Reference in New Issue