music-kraken-core/src/main.py

106 lines
2.9 KiB
Python
Raw Normal View History

import metadata
2022-10-17 12:56:32 +00:00
import download_links
2022-10-17 22:27:30 +00:00
import url_to_path
2022-10-18 16:48:24 +00:00
import download
2022-10-21 19:24:38 +00:00
import logging
2022-10-18 16:48:24 +00:00
import requests
2022-10-21 19:24:38 +00:00
import os
2022-10-24 11:55:34 +00:00
# "/home/lars/Projekts/big projects/music-downloader/venv/bin/python3.10" "/home/lars/Projekts/big projects/music-downloader/src/main.py"
TEMP = "temp"
STEP_ONE_CACHE = ".cache1.csv"
STEP_TWO_CACHE = ".cache2.csv"
2022-10-18 16:48:24 +00:00
STEP_THREE_CACHE = ".cache3.csv"
2022-10-24 11:11:32 +00:00
NOT_A_GENRE = ".", "..", "misc_scripts", "Music", "script", ".git", ".idea"
2022-10-21 19:24:38 +00:00
MUSIC_DIR = os.path.expanduser('~/Music')
2022-10-19 15:47:48 +00:00
TOR = False
logging.basicConfig(level=logging.INFO)
2022-10-24 11:11:32 +00:00
def get_existing_genre():
valid_directories = []
for elem in os.listdir(MUSIC_DIR):
if elem not in NOT_A_GENRE:
valid_directories.append(elem)
return valid_directories
def search_for_metadata(query: str):
search = metadata.Search(query=query, temp=TEMP)
print(search.options)
while True:
input_ = input(
"q to quit, ok to download, .. for previous options, . for current options, int for this element: ").lower()
input_.strip()
if input_ == "q":
exit(0)
if input_ == "ok":
return search
if input_ == ".":
print(search.options)
continue
if input_ == "..":
print(search.get_previous_options())
continue
if input_.isdigit():
print(search.choose(int(input_)))
continue
2022-10-24 11:11:32 +00:00
def get_genre():
existing_genres = get_existing_genre()
print("printing available genres:")
for i, genre_option in enumerate(existing_genres):
print(f"{i}: {genre_option}")
genre = input("Input the ID for an existing genre or text for a new one: ")
if genre.isdigit():
genre_id = int(genre)
if genre_id >= len(existing_genres):
logging.warning("An invalid genre id has been given")
return get_genre()
return existing_genres[genre_id]
return genre
def cli(start_at: int = 0):
2022-10-18 16:48:24 +00:00
session = requests.Session()
2022-10-19 15:47:48 +00:00
if TOR:
session.proxies = {
'http': 'socks5h://127.0.0.1:9150',
'https': 'socks5h://127.0.0.1:9150'
}
if start_at <= 2:
2022-10-24 11:11:32 +00:00
genre = get_genre()
logging.info(f"{genre} has been set as genre.")
2022-10-18 16:48:24 +00:00
if start_at <= 0:
search = search_for_metadata(query=input("initial query: "))
logging.info("Starting Downloading of metadata")
search.download(file=STEP_ONE_CACHE)
if start_at <= 1:
logging.info("Fetching Download Links")
download_links.Download(file=STEP_TWO_CACHE, metadata_csv=STEP_ONE_CACHE, temp=TEMP, session=session)
2022-10-17 22:27:30 +00:00
if start_at <= 2:
logging.info("creating Paths")
url_to_path.UrlPath(genre=genre)
2022-10-17 12:56:32 +00:00
if start_at <= 3:
logging.info("starting to download the mp3's")
download.Download(session=session, file=STEP_THREE_CACHE, temp=TEMP, base_path=MUSIC_DIR)
2022-10-18 16:48:24 +00:00
if __name__ == "__main__":
2022-10-24 11:11:32 +00:00
cli(start_at=0)