diff --git a/DefaultFallbackWallpaper.jpg b/DefaultFallbackWallpaper.jpg new file mode 100644 index 0000000..b4134d4 Binary files /dev/null and b/DefaultFallbackWallpaper.jpg differ diff --git a/sample_config.toml b/sample_config.toml index 188417d..9c08a8a 100644 --- a/sample_config.toml +++ b/sample_config.toml @@ -5,7 +5,7 @@ enable_wallpaper_sets = true used_sets = ["anime", "nature"] wallpapers_per_set = 5 notify = false -fallback_wallpaper = "/path/to/paper" +fallback_wallpaper = "/etc/wallman/DefaultFallbackWallpaper.jpg" loglevel = "INFO" systray = true behavior = "fill" diff --git a/wallman/wallman_lib.py b/wallman/wallman_lib.py index 39a7123..e02fa8a 100644 --- a/wallman/wallman_lib.py +++ b/wallman/wallman_lib.py @@ -13,7 +13,7 @@ from wallman.wallman_classes import ConfigError, ConfigGeneral, ConfigFile global logger logger = logging.getLogger("wallman") -class _ConfigLib: +class _Config: # Initializes the most important config values. TODO: Add handling for the empty config edge case and the FileNotFound case def __init__(self) -> None: self.config_file: ConfigFile = self._initialize_config() # Full config @@ -45,7 +45,7 @@ class _ConfigLib: if self.config_systray: self._verify_systray_deps() - # Read config. TODO: Add error handling for the config not found case. + # Read config def _initialize_config(self) -> ConfigFile: chdir(str(getenv("HOME")) + "/.config/wallman/") try: @@ -76,14 +76,12 @@ class _ConfigLib: system("touch wallman.log") logging.basicConfig(filename="wallman.log", encoding="utf-8", level=numeric_level) - # TODO: Make this all just work inside the try/except block, there is no need for get() - # TODO: Adjust these variable names def _set_behavior(self) -> str: try: - self.config_general.get("behavior") + behavior = self.config_general["behavior"] except KeyError: - logger.error("There is no wallpaper behavior specified in general, defaulting to fill...") - print("ERROR: There is no wallpaper behavior specified in general, defaulting to fill...") + logger.warning("There is no wallpaper behavior specified in general, defaulting to fill...") + print("WARNING: There is no wallpaper behavior specified in general, defaulting to fill...") human_behaviors: List[str] = ["plain", "tile", "center", "fill", "max", "scale"] machine_behaviors: List[str] = ["--bg", "--bg-tile", "--bg-center", "--bg-fill", "--bg-max", "--bg-scale"] @@ -110,7 +108,6 @@ class _ConfigLib: logger.info(f"The wallpaper behavior '{behavior}' has been set.") return behavior - def _set_fallback_wallpaper(self) -> None: if self.config_general["fallback_wallpaper"]: system(f"feh {self.config_behavior} --no-fehbg {self.config_general['fallback_wallpaper']}") @@ -119,6 +116,23 @@ class _ConfigLib: logger.critical("An Error occured and no fallback wallpaper was provided, exiting...") raise ConfigError("An error occured and no fallback wallpaper has been set, exiting...") + def _initialize_general(self) -> bool: + # Create Config General Dict + try: + self.config_general: ConfigGeneral = self.config_file["general"] + except KeyError: + print("CRITICAL: No general dictionary found in Config file.") + return False + # Set up logger. + self.config_log_level = self.config_general.get("log_level", "INFO").upper() + self._set_log_level() + logger.debug(f"Log level has been set to {self.config_log_level}") + logger.debug("Logger initialized successfully") + # Set up fallback wallpaper + + return True + + class ConfigValidity(_ConfigLib): # TODO: Add handling for the empty config case. def __init__(self): @@ -201,7 +215,6 @@ class ConfigValidity(_ConfigLib): return False def validate_config(self) -> bool: - # NOTE: Consider changing this to exit(-1) # HACK: Consider using different exit codes for different errors to help users debug. if not self._check_fallback_wallpaper(): pass @@ -218,7 +231,7 @@ class ConfigValidity(_ConfigLib): # TODO: Improve modularity. See notes inside the class for more details. # TODO: Ensure functionality and if needed add handling for the 1 wallpaper per set case. -class WallpaperLogic(_ConfigLib): +class WallpaperLogic(_Config): def __init__(self) -> None: super().__init__() self.wallpaper_list: List[str] = None # pyright: ignore