From dfeb19b0a83b8ce57d28bf94a4f8d129993d1064 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Mon, 12 Jan 2026 23:06:20 +0100 Subject: Initial commit --- src/notify.cc | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/notify.cc (limited to 'src/notify.cc') diff --git a/src/notify.cc b/src/notify.cc new file mode 100644 index 0000000..2403dc6 --- /dev/null +++ b/src/notify.cc @@ -0,0 +1,59 @@ +#include "notify.hh" + +#include "dbus_common.hh" +#include "find_desktop.hh" + +#include +#include +#include +#include +#include +#include +#include +#include + +int Notify::run(std::optional display) { + rapidjson::Document d; + rapidjson::IStreamWrapper stream(std::cin); + d.ParseStream(stream); + if (d.HasParseError()) { + std::cerr << "Error parsing input: " << d.GetErrorOffset() << ": " + << rapidjson::GetParseError_En(d.GetParseError()) << '\n'; + return 2; + } + + if (d.IsObject() && d.HasMember("session_id") && d["session_id"].IsString() && + d.HasMember("hook_event_name") && d["hook_event_name"].IsString()) { + std::string session_id = d["session_id"].GetString(); + std::string event_name = d["hook_event_name"].GetString(); + std::optional cwd; + if (d.HasMember("cwd") && d["cwd"].IsString()) { + cwd = d["cwd"].GetString(); + } + std::optional notification_type; + if (d.HasMember("notification_type") && d["notification_type"].IsString()) { + notification_type = d["notification_type"].GetString(); + } + + std::optional desktop = + find_desktop(std::move(display), /* use_prefix */ false); + + auto proxy = sdbus::createProxy(dbus::kServiceName, dbus::kObjectPath); + + try { + proxy->callMethod("notify") + .onInterface(dbus::kInterfaceName) + .withArguments(session_id, event_name, cwd.value_or(""), + notification_type.value_or(""), desktop.value_or("")) + .dontExpectReply(); + } catch (sdbus::Error const& err) { + std::cerr << "Failed to notify: " << err.what() << '\n'; + return 2; + } + + return 0; + } + + std::cerr << "Unexpected input." << '\n'; + return 2; +} -- cgit v1.2.3-70-g09d2