fixed setting invidious and piped instances

This commit is contained in:
Hazel 2023-09-12 12:33:39 +02:00
parent 263b1f203b
commit 8397c61a50
4 changed files with 20 additions and 67 deletions

View File

@ -1,11 +1,13 @@
from typing import Dict, List from typing import Dict, List
from dataclasses import dataclass from dataclasses import dataclass
from collections import defaultdict from collections import defaultdict
from urllib.parse import urlparse
from ..utils import cli_function from ..utils import cli_function
from ...objects import Country from ...objects import Country
from ...utils import config, write_config from ...utils import config, write_config
from ...utils.config import youtube_settings
from ...connection import Connection from ...connection import Connection
@ -35,7 +37,15 @@ class FrontendInstance:
def add_instance(self, instance: Instance): def add_instance(self, instance: Instance):
self.all_instances.append(instance) self.all_instances.append(instance)
config.set_name_to_value("youtube_url", instance.uri) youtube_lists = youtube_settings["youtube_url"]
existing_netlocs = set(tuple(url.netloc for url in youtube_lists))
parsed_instance = urlparse(instance.uri)
instance_netloc = parsed_instance.netloc
if instance_netloc not in existing_netlocs:
youtube_lists.append(parsed_instance)
youtube_settings.__setitem__("youtube_url", youtube_lists, is_parsed=True)
for region in instance.regions: for region in instance.regions:
self.region_instances[region].append(instance) self.region_instances[region].append(instance)
@ -45,8 +55,7 @@ class FrontendInstance:
print(f"Downloading {type(self).__name__} instances...") print(f"Downloading {type(self).__name__} instances...")
def set_instance(self, instance: Instance): def set_instance(self, instance: Instance):
config.set_name_to_value(self.SETTING_NAME, instance.uri) youtube_settings.__setitem__(self.SETTING_NAME, instance.uri)
write_config()
def _choose_country(self) -> List[Instance]: def _choose_country(self) -> List[Instance]:
print("Input the country code, an example would be \"US\"") print("Input the country code, an example would be \"US\"")

View File

@ -28,6 +28,8 @@ class PageType(Enum):
SONG = "MUSIC_VIDEO_TYPE_ATV" SONG = "MUSIC_VIDEO_TYPE_ATV"
VIDEO = "MUSIC_VIDEO_TYPE_UGC" VIDEO = "MUSIC_VIDEO_TYPE_UGC"
OFFICIAL_MUSIC_VIDEO = "MUSIC_VIDEO_TYPE_OMV" OFFICIAL_MUSIC_VIDEO = "MUSIC_VIDEO_TYPE_OMV"
# returns this type if you search for the band Queen
# S = "MUSIC_VIDEO_TYPE_OFFICIAL_SOURCE_MUSIC"
def parse_run_element(run_element: dict) -> Optional[DatabaseObject]: def parse_run_element(run_element: dict) -> Optional[DatabaseObject]:
@ -43,7 +45,10 @@ def parse_run_element(run_element: dict) -> Optional[DatabaseObject]:
page_type_string = navigation_endpoint.get("watchEndpointMusicSupportedConfigs", {}).get("watchEndpointMusicConfig", {}).get("musicVideoType", "") page_type_string = navigation_endpoint.get("watchEndpointMusicSupportedConfigs", {}).get("watchEndpointMusicConfig", {}).get("musicVideoType", "")
if not is_video: if not is_video:
page_type_string = navigation_endpoint.get("browseEndpointContextSupportedConfigs", {}).get("browseEndpointContextMusicConfig", {}).get("pageType", "") page_type_string = navigation_endpoint.get("browseEndpointContextSupportedConfigs", {}).get("browseEndpointContextMusicConfig", {}).get("pageType", "")
try:
element_type = PageType(page_type_string) element_type = PageType(page_type_string)
except ValueError:
return
element_id = navigation_endpoint.get("videoId" if is_video else "browseId") element_id = navigation_endpoint.get("videoId" if is_video else "browseId")
element_text = run_element.get("text") element_text = run_element.get("text")

View File

@ -13,8 +13,8 @@ class ConfigDict(dict):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def __getattribute__(self, __name: str) -> Any: def __getitem__(self, __name: str) -> Any:
return super().__getattribute__(__name) return super().__getitem__(__name)
def __setitem__(self, __key: Any, __value: Any, from_attribute: bool = False, is_parsed: bool = False) -> None: def __setitem__(self, __key: Any, __value: Any, from_attribute: bool = False, is_parsed: bool = False) -> None:
if not from_attribute: if not from_attribute:

View File

@ -1,61 +0,0 @@
from typing import TypedDict, List
from urllib.parse import ParseResult
from logging import Logger
from pathlib import Path
class SettingsStructure(TypedDict):
hasnt_yet_started: bool
result_history: bool
history_length: int
happy_messages: List[str]
modify_gc: bool
id_bits: int
# audio
bitrate: int
audio_format: str
sort_by_date: bool
sort_album_by_type: bool
download_path: str
download_file: str
album_type_blacklist: List[str]
# connection
proxies: List[str]
tor: bool
tor_port: int
chunk_size: int
show_download_errors_threshold: float
# youtube
invidious_instance: ParseResult
piped_instance: ParseResult
sleep_after_youtube_403: float
youtube_music_api_key: str
youtube_music_clean_data: bool
youtube_url: List[ParseResult]
use_sponsor_block: bool
# logging
logging_format: str
log_level: int
download_logger: Logger
tagging_logger: Logger
codex_logger: Logger
object_logger: Logger
database_logger: Logger
musify_logger: Logger
youtube_logger: Logger
youtube_music_logger: Logger
metal_archives_logger: Logger
genius_logger: Logger
# paths
music_directory: Path
temp_directory: Path
log_file: Path
not_a_genre_regex: List[str]
ffmpeg_binary: Path