drastically improved genre selection
This commit is contained in:
parent
c1fb6df3b5
commit
064479074d
@ -3,9 +3,12 @@ import musicbrainzngs
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import List
|
||||||
|
|
||||||
from . import objects, pages
|
from . import objects, pages
|
||||||
from .utils.shared import MUSIC_DIR, NOT_A_GENRE, MODIFY_GC, get_random_message
|
from .utils.string_processing import fit_to_file_system
|
||||||
|
from .utils.shared import MUSIC_DIR, MODIFY_GC, NOT_A_GENRE_REGEX, get_random_message
|
||||||
|
|
||||||
if MODIFY_GC:
|
if MODIFY_GC:
|
||||||
"""
|
"""
|
||||||
@ -39,31 +42,53 @@ EXIT_COMMANDS = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def cli():
|
def cli():
|
||||||
|
def get_existing_genre() -> List[str]:
|
||||||
|
"""
|
||||||
|
gets the name of all subdirectories of shared.MUSIC_DIR,
|
||||||
|
but filters out all directories, where the name matches with any patern
|
||||||
|
from shared.NOT_A_GENRE_REGEX.
|
||||||
|
"""
|
||||||
|
existing_genres: List[str] = []
|
||||||
|
|
||||||
|
# get all subdirectories of MUSIC_DIR, not the files in the dir.
|
||||||
|
existing_subdirectories: List[Path] = [f for f in MUSIC_DIR.iterdir() if f.is_dir()]
|
||||||
|
|
||||||
|
for subdirectory in existing_subdirectories:
|
||||||
|
name: str = subdirectory.name
|
||||||
|
|
||||||
|
if not any(re.match(regex_pattern, name) for regex_pattern in NOT_A_GENRE_REGEX):
|
||||||
|
existing_genres.append(name)
|
||||||
|
|
||||||
|
return existing_genres
|
||||||
|
|
||||||
def get_genre():
|
def get_genre():
|
||||||
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
|
|
||||||
|
|
||||||
existing_genres = get_existing_genre()
|
existing_genres = get_existing_genre()
|
||||||
print("Available genres:")
|
|
||||||
for i, genre_option in enumerate(existing_genres):
|
for i, genre_option in enumerate(existing_genres):
|
||||||
print(f"{i}: {genre_option}")
|
print(f"{i+1:0>2}: {genre_option}")
|
||||||
|
|
||||||
genre = input("Input the ID for an existing genre or text for a new one: ")
|
|
||||||
|
while True:
|
||||||
|
genre = input("id or new genre: ")
|
||||||
|
|
||||||
if genre.isdigit():
|
if genre.isdigit():
|
||||||
genre_id = int(genre)
|
genre_id = int(genre) - 1
|
||||||
if genre_id >= len(existing_genres):
|
if genre_id >= len(existing_genres):
|
||||||
logging.warning("An invalid genre id has been given")
|
print(f"no genre under the id {genre_id+1}")
|
||||||
return get_genre()
|
continue
|
||||||
|
|
||||||
return existing_genres[genre_id]
|
return existing_genres[genre_id]
|
||||||
|
|
||||||
return genre
|
new_genre = fit_to_file_system(genre)
|
||||||
|
|
||||||
|
agree_inputs = {"y", "yes", "ok"}
|
||||||
|
verification = input(f"create new genre \"{new_genre}\"? (Y/N): ").lower()
|
||||||
|
if verification in agree_inputs:
|
||||||
|
return new_genre
|
||||||
|
|
||||||
|
|
||||||
def next_search(_search: pages.Search, query: str, genre: str) -> bool:
|
def next_search(_search: pages.Search, query: str, genre: str) -> bool:
|
||||||
"""
|
"""
|
||||||
|
@ -63,7 +63,10 @@ DOWNLOAD_LOGGER = logging.getLogger("download")
|
|||||||
TAGGING_LOGGER = logging.getLogger("tagging")
|
TAGGING_LOGGER = logging.getLogger("tagging")
|
||||||
|
|
||||||
NOT_A_GENRE = ".", "..", "misc_scripts", "Music", "script", ".git", ".idea"
|
NOT_A_GENRE = ".", "..", "misc_scripts", "Music", "script", ".git", ".idea"
|
||||||
MUSIC_DIR = Path(os.path.expanduser("~"), "Music")
|
MUSIC_DIR: Path = Path(os.path.expanduser("~"), "Music")
|
||||||
|
NOT_A_GENRE_REGEX: List[str] = (
|
||||||
|
r'^\.', # is hidden/starts with a "."
|
||||||
|
)
|
||||||
|
|
||||||
if current_os == "linux":
|
if current_os == "linux":
|
||||||
# XDG_USER_DIRS_FILE reference: https://freedesktop.org/wiki/Software/xdg-user-dirs/
|
# XDG_USER_DIRS_FILE reference: https://freedesktop.org/wiki/Software/xdg-user-dirs/
|
||||||
@ -76,7 +79,7 @@ if current_os == "linux":
|
|||||||
config = configparser.ConfigParser(allow_no_value=True)
|
config = configparser.ConfigParser(allow_no_value=True)
|
||||||
config.read_string(data)
|
config.read_string(data)
|
||||||
xdg_config = config['XDG_USER_DIRS']
|
xdg_config = config['XDG_USER_DIRS']
|
||||||
MUSIC_DIR = os.path.expandvars(xdg_config['xdg_music_dir'].strip('"'))
|
MUSIC_DIR: Path = Path(os.path.expandvars(xdg_config['xdg_music_dir'].strip('"')))
|
||||||
|
|
||||||
except (FileNotFoundError, KeyError) as E:
|
except (FileNotFoundError, KeyError) as E:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
@ -84,7 +87,7 @@ if current_os == "linux":
|
|||||||
f"Will fallback on default \"$HOME/Music\"."
|
f"Will fallback on default \"$HOME/Music\"."
|
||||||
)
|
)
|
||||||
|
|
||||||
TOR = False
|
TOR: bool = False
|
||||||
proxies = {
|
proxies = {
|
||||||
'http': 'socks5h://127.0.0.1:9150',
|
'http': 'socks5h://127.0.0.1:9150',
|
||||||
'https': 'socks5h://127.0.0.1:9150'
|
'https': 'socks5h://127.0.0.1:9150'
|
||||||
|
Loading…
Reference in New Issue
Block a user