music-kraken-core/src/music_kraken/utils/shared.py

126 lines
4.1 KiB
Python
Raw Normal View History

2023-04-04 18:19:29 +00:00
from typing import List
2022-11-11 23:29:07 +00:00
import logging
import tempfile
import os
import configparser
from sys import platform as current_os
2023-04-03 08:38:12 +00:00
from pathlib import Path
2023-04-04 18:19:29 +00:00
import random
2023-04-04 20:07:56 +00:00
# modifies the garbage collector to speed up the program
# https://mkennedy.codes/posts/python-gc-settings-change-this-and-make-your-app-go-20pc-faster/
# https://web.archive.org/web/20221124122222/https://mkennedy.codes/posts/python-gc-settings-change-this-and-make-your-app-go-20pc-faster/
MODIFY_GC: bool = True
2023-04-04 18:19:29 +00:00
"""
I will now and then use those messages in the programm.
But I won't overuse them dw.
I will keep those messages, if you disagree with me on the messages,
feel free to fork the programm and edit them, or just edit them in the config
file once I implemented it.
"""
HAPPY_MESSAGES: List[str] = [
"Support the artist.",
"Star Me: https://github.com/HeIIow2/music-downloader",
"🏳️‍⚧️🏳️‍⚧️ Trans rights are human rights. 🏳️‍⚧️🏳️‍⚧️",
"🏳️‍⚧️🏳️‍⚧️ Trans women are women, trans men are men. 🏳️‍⚧️🏳️‍⚧️",
"🏴‍☠️🏴‍☠️ Unite under one flag, fuck borders. 🏴‍☠️🏴‍☠️",
"Join my Matrix Space: https://matrix.to/#/#music-kraken:matrix.org",
2023-04-05 08:08:27 +00:00
"Gotta love the BPJM!! >:(",
"🏳️‍⚧️🏳️‍⚧️ Protect trans youth. 🏳️‍⚧️🏳️‍⚧️"
2023-04-04 18:19:29 +00:00
]
def get_random_message() -> str:
return random.choice(HAPPY_MESSAGES)
2022-11-11 23:29:07 +00:00
2022-11-28 13:49:13 +00:00
2023-04-03 08:38:12 +00:00
TEMP_DIR = Path(tempfile.gettempdir(), "music-downloader")
TEMP_DIR.mkdir(exist_ok=True)
2023-04-05 07:35:52 +00:00
LOG_PATH = Path(TEMP_DIR, "download_logs.log")
2022-11-22 13:53:29 +00:00
2022-11-17 12:23:27 +00:00
# configure logger default
logging.basicConfig(
level=logging.INFO,
format=logging.BASIC_FORMAT,
handlers=[
2023-04-05 07:35:52 +00:00
logging.FileHandler(Path(TEMP_DIR, LOG_PATH)),
2022-11-17 12:23:27 +00:00
logging.StreamHandler()
]
)
2022-11-11 23:29:07 +00:00
2023-04-04 19:10:47 +00:00
OBJECT_LOGGER = logging.getLogger("objects")
TARGET_LOGGER = logging.getLogger("target")
2022-11-11 23:29:07 +00:00
DATABASE_LOGGER = logging.getLogger("database")
2023-04-04 19:10:47 +00:00
YOUTUBE_LOGGER = logging.getLogger("Youtube")
2022-11-17 12:23:27 +00:00
MUSIFY_LOGGER = logging.getLogger("Musify")
2022-11-11 23:29:07 +00:00
GENIUS_LOGGER = logging.getLogger("genius")
2023-01-24 08:40:01 +00:00
ENCYCLOPAEDIA_METALLUM_LOGGER = logging.getLogger("ma")
2023-04-04 19:10:47 +00:00
DOWNLOAD_LOGGER = logging.getLogger("download")
2023-04-04 19:18:56 +00:00
TAGGING_LOGGER = logging.getLogger("tagging")
2023-04-04 19:10:47 +00:00
2022-11-17 12:23:27 +00:00
NOT_A_GENRE = ".", "..", "misc_scripts", "Music", "script", ".git", ".idea"
2023-04-05 08:01:51 +00:00
MUSIC_DIR: Path = Path(os.path.expanduser("~"), "Music")
NOT_A_GENRE_REGEX: List[str] = (
r'^\.', # is hidden/starts with a "."
)
2022-11-11 23:29:07 +00:00
if current_os == "linux":
2022-11-28 14:16:04 +00:00
# XDG_USER_DIRS_FILE reference: https://freedesktop.org/wiki/Software/xdg-user-dirs/
XDG_USER_DIRS_FILE = os.path.join(os.path.expanduser("~"), ".config", "user-dirs.dirs")
2022-11-28 13:49:13 +00:00
logger = logging.getLogger("init_path")
logger.setLevel(logging.WARNING)
try:
2022-11-28 14:16:04 +00:00
with open(XDG_USER_DIRS_FILE, 'r') as f:
data = "[XDG_USER_DIRS]\n" + f.read()
2022-11-28 13:49:13 +00:00
config = configparser.ConfigParser(allow_no_value=True)
config.read_string(data)
2022-11-28 13:49:13 +00:00
xdg_config = config['XDG_USER_DIRS']
2023-04-05 08:01:51 +00:00
MUSIC_DIR: Path = Path(os.path.expandvars(xdg_config['xdg_music_dir'].strip('"')))
2023-04-04 18:19:29 +00:00
except (FileNotFoundError, KeyError) as E:
2023-04-03 08:38:12 +00:00
logger.warning(
2023-04-04 18:20:15 +00:00
f"Missing file or No entry found for \"xdg_music_dir\" in: \"{XDG_USER_DIRS_FILE}\".\n"
2023-04-04 18:19:29 +00:00
f"Will fallback on default \"$HOME/Music\"."
)
2023-04-05 08:01:51 +00:00
TOR: bool = False
2022-11-11 23:29:07 +00:00
proxies = {
'http': 'socks5h://127.0.0.1:9150',
'https': 'socks5h://127.0.0.1:9150'
} if TOR else {}
2023-04-03 08:38:12 +00:00
"""
available variables:
- genre
- label
- artist
- album
- song
2023-04-04 08:43:52 +00:00
- album_type
2023-04-03 08:38:12 +00:00
"""
2023-04-04 08:43:52 +00:00
DOWNLOAD_PATH = "{genre}/{artist}/{album_type}/{album}"
2023-04-03 08:38:12 +00:00
DOWNLOAD_FILE = "{song}.mp3"
DEFAULT_VALUES = {
"genre": "Various Genre",
"label": "Various Labels",
"artist": "Various Artists",
"album": "Various Album",
"song": "Various Song",
2023-04-04 08:43:52 +00:00
"album_type": "Other"
2023-04-03 08:38:12 +00:00
}
2023-04-05 10:59:00 +00:00
# kB per second
BITRATE = 100
# size of the chunks that are streamed
CHUNK_SIZE = 1024
# this is a percentage describing the percentage of failed downloads,
# relative to the total downloads.
# If the percentage goes over this threshold DownloadResult returns the download errors
# in the __str__ method
SHOW_DOWNLOAD_ERRORS_THRESHOLD = 0.3