1 #pragma once 2 3 #include <dbus-status-notifier-watcher.h> 4 #include <giomm.h> 5 #include <glibmm/refptr.h> 6 #include <json/json.h> 7 #include <tuple> 8 #include "bar.hpp" 9 #include "modules/sni/item.hpp" 10 11 namespace waybar::modules::SNI { 12 13 class Host { 14 public: 15 Host(const std::size_t id, const Json::Value&, const Bar&, 16 const std::function<void(std::unique_ptr<Item>&)>&, 17 const std::function<void(std::unique_ptr<Item>&)>&); 18 ~Host(); 19 20 private: 21 void busAcquired(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring); 22 void nameAppeared(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring, 23 const Glib::ustring&); 24 void nameVanished(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring); 25 static void proxyReady(GObject*, GAsyncResult*, gpointer); 26 static void registerHost(GObject*, GAsyncResult*, gpointer); 27 static void itemRegistered(SnWatcher*, const gchar*, gpointer); 28 static void itemUnregistered(SnWatcher*, const gchar*, gpointer); 29 30 std::tuple<std::string, std::string> getBusNameAndObjectPath(const std::string); 31 void addRegisteredItem(std::string service); 32 33 std::vector<std::unique_ptr<Item>> items_; 34 const std::string bus_name_; 35 const std::string object_path_; 36 std::size_t bus_name_id_; 37 std::size_t watcher_id_; 38 GCancellable* cancellable_ = nullptr; 39 SnWatcher* watcher_ = nullptr; 40 const Json::Value& config_; 41 const Bar& bar_; 42 const std::function<void(std::unique_ptr<Item>&)> on_add_; 43 const std::function<void(std::unique_ptr<Item>&)> on_remove_; 44 }; 45 46 } // namespace waybar::modules::SNI 47