diff --git a/unhacs/main.py b/unhacs/main.py index ef9e628..4ac2e4d 100644 --- a/unhacs/main.py +++ b/unhacs/main.py @@ -201,7 +201,7 @@ class Unhacs: packages_to_remove = [ package for package in get_installed_packages() - if package.name in package_names + if (package.name in package_names or package.url in package_names) ] remaining_packages = [ package diff --git a/unhacs/packages.py b/unhacs/packages.py index fe6f89b..8ecb009 100644 --- a/unhacs/packages.py +++ b/unhacs/packages.py @@ -198,6 +198,22 @@ class Package: yaml.dump(self.to_yaml(), js_path.joinpath(f"{filename}-unhacs.yaml").open("w")) + # Write to resources + resources: list[dict] = [] + resources_file = hass_config_path / "resources.yaml" + if resources_file.exists(): + resources = yaml.safe_load(resources_file.open()) or [] + + if not any(r["url"] == f"/local/js/{filename}" for r in resources): + resources.append( + { + "url": f"/local/js/{filename}", + "type": "module", + } + ) + + yaml.dump(resources, resources_file.open("w")) + def install_integration(self, hass_config_path: Path): """Installs the integration package.""" zipball_url = get_ref_zip(self.url, self.version) @@ -239,20 +255,36 @@ class Package: def uninstall(self, hass_config_path: Path) -> bool: """Uninstalls the package if it is installed, returning True if it was uninstalled.""" - if self.path: - if self.path.is_dir(): - shutil.rmtree(self.path) - else: - self.path.unlink() - self.path.with_name(f"{self.path.name}-unhacs.yaml").unlink() - return True + if not self.path: + print("No path found for package, searching...") + if installed_package := self.installed_package(hass_config_path): + installed_package.uninstall(hass_config_path) + return True - installed_package = self.installed_package(hass_config_path) - if installed_package: - installed_package.uninstall(hass_config_path) - return True + return False - return False + print("Removing", self.path) + + if self.path.is_dir(): + shutil.rmtree(self.path) + else: + self.path.unlink() + self.path.with_name(f"{self.path.name}-unhacs.yaml").unlink() + + # Remove from resources + resources_file = hass_config_path / "resources.yaml" + if resources_file.exists(): + with resources_file.open("r") as f: + resources = yaml.safe_load(f) or [] + new_resources = [ + r for r in resources if r["url"] != f"/local/js/{self.path.name}" + ] + if len(new_resources) != len(resources): + + with resources_file.open("w") as f: + yaml.dump(new_resources, f) + + return True def installed_package(self, hass_config_path: Path) -> "Package|None": """Returns the installed package if it exists, otherwise None."""