#pragma once #include #include #include namespace waybar::modules::SNI { class Watcher { private: Watcher(); public: ~Watcher(); using singleton = std::shared_ptr; static singleton getInstance() { static std::weak_ptr weak; std::shared_ptr strong = weak.lock(); if (!strong) { strong = std::shared_ptr(new Watcher()); weak = strong; } return strong; } private: typedef enum { GF_WATCH_TYPE_HOST, GF_WATCH_TYPE_ITEM } GfWatchType; typedef struct { GfWatchType type; Watcher *watcher; gchar *service; gchar *bus_name; gchar *object_path; guint watch_id; } GfWatch; void busAcquired(const Glib::RefPtr &, Glib::ustring); static gboolean handleRegisterHost(Watcher *, GDBusMethodInvocation *, const gchar *); static gboolean handleRegisterItem(Watcher *, GDBusMethodInvocation *, const gchar *); static GfWatch *gfWatchFind(GSList *list, const gchar *bus_name, const gchar *object_path); static GfWatch *gfWatchNew(GfWatchType, const gchar *, const gchar *, const gchar *, Watcher *); static void nameVanished(GDBusConnection *connection, const char *name, gpointer data); static void gfWatchFree(gpointer data); void updateRegisteredItems(SnWatcher *obj); uint32_t bus_name_id_; GSList *hosts_ = nullptr; GSList *items_ = nullptr; SnWatcher *watcher_ = nullptr; }; } // namespace waybar::modules::SNI