From a04a8ea90179f410f6156ada52beccbc13c9fe16 Mon Sep 17 00:00:00 2001 From: pupbrained Date: Sun, 4 May 2025 17:53:31 -0400 Subject: [PATCH] hopefully this works --- src/os/serenity.cpp | 4 ---- src/os/serenity/package.cpp | 31 +++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 src/os/serenity/package.cpp diff --git a/src/os/serenity.cpp b/src/os/serenity.cpp index cd40825..634563c 100644 --- a/src/os/serenity.cpp +++ b/src/os/serenity.cpp @@ -145,10 +145,6 @@ namespace os { return DiskSpace { .used_bytes = used_bytes, .total_bytes = total_bytes }; } - - fn GetPackageCount() -> Result { - return Err(DracError(DracErrorCode::NotSupported, "Package count is not supported on SerenityOS")); - } } // namespace os #endif // __serenity__ diff --git a/src/os/serenity/package.cpp b/src/os/serenity/package.cpp new file mode 100644 index 0000000..ab1099e --- /dev/null +++ b/src/os/serenity/package.cpp @@ -0,0 +1,31 @@ +#ifdef __serenity__ + +// clang-format off +#include "src/core/package.hpp" + +#include "src/util/defs.hpp" +// clang-format on + +namespace { + fn CountUniquePackages(const String& dbPath) -> Result { + std::ifstream dbFile(dbPath); + + if (!dbFile.is_open()) + return Err(DracError(DracErrorCode::NotFound, std::format("Failed to open file: {}", dbPath.string()))); + + std::unordered_set uniquePackages; + String line; + + while (std::getline(dbFile, line)) + if (line.starts_with("manual ") || line.starts_with("auto ")) + uniquePackages.insert(line); + + return uniquePackages.size(); + } +} // namespace + +namespace package { + fn GetSerenityCount() -> Result { return CountUniquePackages("/usr/ports/installed.db"); } +} // namespace package + +#endif // __serenity__