mirror of
https://gitgud.io/Melon__Bread/auto-ttv-grabber.git
synced 2024-11-24 16:28:30 -05:00
Refactored & kills subprocess on exit
This commit is contained in:
parent
4edf3ffdf2
commit
2dc8ac2af7
100
main.py
100
main.py
@ -13,6 +13,7 @@ downloading = {}
|
||||
|
||||
|
||||
def write_log(channel):
|
||||
"""Writes the latest stdout of a process to log.txt"""
|
||||
with open("log.txt", "a") as log:
|
||||
line = downloading[channel].stdout.readline()
|
||||
if line:
|
||||
@ -20,6 +21,7 @@ def write_log(channel):
|
||||
|
||||
|
||||
def download_stream(channel):
|
||||
"""Downloads a given channel name in its own subprocess"""
|
||||
downloading[channel] = subprocess.Popen(
|
||||
["dl-stream", "-r", channel],
|
||||
start_new_session=True,
|
||||
@ -29,53 +31,73 @@ def download_stream(channel):
|
||||
write_log(channel)
|
||||
|
||||
|
||||
# TODO: Clean things up intp their own method
|
||||
def check_system():
|
||||
"""Makes sure everything is place for the script to run"""
|
||||
# TODO: Make it fallback to streamlink if dl-stream not present
|
||||
# Checks if dl-stream is in the systems path
|
||||
if not shutil.which("dl-stream"):
|
||||
sys.exit("ERROR: dl-stream is not found in the systems path!")
|
||||
|
||||
# Checks if dl-stream is in the systems path
|
||||
if not shutil.which("dl-stream"):
|
||||
sys.exit("ERROR: dl-stream is not found in the systems path!")
|
||||
# Checks if the channel_list exists and if not makes one
|
||||
if not os.path.exists("channel_list.txt"):
|
||||
print("ERROR:'channel_list.txt' does not exist, creating now!")
|
||||
with open("channel_list.txt", "w"):
|
||||
pass # Creates empty file
|
||||
sys.exit("Please populate the channel_list.txt with one channel per line!")
|
||||
|
||||
|
||||
# Checks if the channel_list exists and if not makes one
|
||||
if os.path.exists("channel_list.txt"):
|
||||
def stop_downloads():
|
||||
"""Goes through every process and stops it if running"""
|
||||
print("\nCleaning up...")
|
||||
for name, proc in downloading.items():
|
||||
proc.terminate()
|
||||
print("Stopping download of " + name)
|
||||
|
||||
|
||||
def main():
|
||||
"""Main entry point of the app"""
|
||||
# Grab all the channels from channel_list.txt and put them in a list
|
||||
with open("channel_list.txt", "r") as file:
|
||||
# channel_list = file.readlines()
|
||||
channel_list = [
|
||||
line for line in file if line.strip()
|
||||
] # Removes all white spaces per line
|
||||
else:
|
||||
print("ERROR:'channel_list.txt' does not exist, creating now!")
|
||||
with open("channel_list.txt", "w") as file:
|
||||
pass # Writes Nothing
|
||||
sys.exit("Please populate the channel_list.txt with one channel per line!")
|
||||
|
||||
# Run untill progam is killed
|
||||
# TODO: Make it so user can kill gracefully
|
||||
# TODO: This includes all the subprocess too!
|
||||
while True:
|
||||
# Exits the program if there is no channels to Grab
|
||||
if not channel_list:
|
||||
sys.exit("Please populate the channel_list.txt with one channel per line!")
|
||||
print("\n------------------------------------")
|
||||
for channel in channel_list:
|
||||
channel = channel.strip()
|
||||
contents = requests.get("https://www.twitch.tv/" + channel).content.decode(
|
||||
"utf-8"
|
||||
)
|
||||
if "isLiveBroadcast" in contents:
|
||||
print("\033[1m" + channel + "\033[0m is \033[32mlive\033[0m!")
|
||||
if channel not in downloading:
|
||||
download_stream(channel)
|
||||
# Run untill progam is killed
|
||||
while True:
|
||||
# Exits the program if there is no channels to grab
|
||||
if not channel_list:
|
||||
sys.exit("Please populate the channel_list.txt with one channel per line!")
|
||||
print("\n------------------------------------")
|
||||
for channel in channel_list:
|
||||
channel = channel.strip()
|
||||
contents = requests.get("https://www.twitch.tv/" + channel).content.decode(
|
||||
"utf-8"
|
||||
)
|
||||
if "isLiveBroadcast" in contents:
|
||||
print("\033[1m" + channel + "\033[0m is \033[32mlive\033[0m!")
|
||||
if channel not in downloading:
|
||||
download_stream(channel)
|
||||
else:
|
||||
print(channel + " is already downloading")
|
||||
write_log(channel)
|
||||
else:
|
||||
print(channel + " is already downloading")
|
||||
write_log(channel)
|
||||
else:
|
||||
print("\033[1m" + channel + "\033[0m is \033[31mnot live\033[0m.")
|
||||
if channel in downloading:
|
||||
del downloading[channel]
|
||||
print(channel + " is no longer downloading")
|
||||
time.sleep(1) # Wait one second before going to next channel
|
||||
print("\n\033[3mLast checked: " + datetime.now().strftime("%H:%M:%S") + "\033[0m")
|
||||
print("------------------------------------")
|
||||
time.sleep(60) # Wait 60 Seconds before trying again
|
||||
print("\033[1m" + channel + "\033[0m is \033[31mnot live\033[0m.")
|
||||
if channel in downloading:
|
||||
del downloading[channel]
|
||||
print(channel + " is no longer downloading")
|
||||
time.sleep(1) # Wait one second before going to next channel
|
||||
print(
|
||||
"\n\033[3mLast checked: " + datetime.now().strftime("%H:%M:%S") + "\033[0m"
|
||||
)
|
||||
print("------------------------------------")
|
||||
time.sleep(60) # Wait 60 Seconds before trying again
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
""" This is executed when run from the command line """
|
||||
try:
|
||||
check_system()
|
||||
main()
|
||||
finally:
|
||||
stop_downloads()
|
||||
|
Loading…
Reference in New Issue
Block a user