[plasma/union] src: Add an uninstall method to PackageHandler

Arjen Hiemstra <[email protected]> Wed, 5 Aug 2026 10:33:24 +0000 (UTC)
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 49ca9201703561c9e810fdce1d3d6071bb36a2b6 by Arjen Hiemstra.
Committed on 05/08/2026 at 10:24.
Pushed by ahiemstra into branch 'master'.

Add an uninstall method to PackageHandler

It will uninstall a package if it is currently installed.

M  +20   -0    src/PackageHandler.cpp
M  +12   -0    src/PackageHandler.h

https://invent.kde.org/plasma/union/-/commit/49ca9201703561c9e810fdce1d3d6071bb36a2b6

diff --git a/src/PackageHandler.cpp b/src/PackageHandler.cpp
index 490b7861..df32be0f 100644
--- a/src/PackageHandler.cpp
+++ b/src/PackageHandler.cpp
@@ -90,3 +90,23 @@ PackageHandler::Error PackageHandler::install(const StylePackage &package)
 
     return Error::None;
 }
+
+PackageHandler::Error PackageHandler::uninstall(const StylePackage &package)
+{
+    if (!package.isValid()) {
+        return Error::InvalidPackage;
+    }
+
+    const auto installPaths = d->platform->stylePackagePaths();
+    if (!installPaths.contains(package.path().parent_path())) {
+        return Error::NotInstalled;
+    }
+
+    std::error_code ec;
+    fs::remove_all(package.path(), ec);
+    if (ec) {
+        return Error::FilesystemError;
+    }
+
+    return Error::None;
+}
diff --git a/src/PackageHandler.h b/src/PackageHandler.h
index c82e7896..8408d5ca 100644
--- a/src/PackageHandler.h
+++ b/src/PackageHandler.h
@@ -38,12 +38,15 @@ public:
      *      The operation failed because a file system error occurred during the
      *      operation. Note that this can be anything from insufficient
      *      permissions to disk failure.
+     * \value NotInstalled
+     *      The operation failed because the provided package is not installed.
      */
     enum class Error {
         None,
         InvalidPackage,
         AlreadyInstalled,
         FilesystemError,
+        NotInstalled,
     };
 
     PackageHandler(const std::shared_ptr<PlatformPlugin> &platformPlugin);
@@ -70,6 +73,15 @@ public:
      * system error occurs.
      */
     Error install(const StylePackage &package);
+    /*!
+     * Uninstall a package.
+     *
+     * This will uninstall the package \p package if it is currently installed.
+     * It will return Error::None if uninstallation was successful. It will
+     * return Error::NotInstalled if the package is not installed. It will
+     * return Error::FilesystemError if an operating system error occurs.
+     */
+    Error uninstall(const StylePackage &package);
 
 private:
     class Private;