#include #include #include #include #include #include "discord/discord.hpp" #include "windows/mainwindow.hpp" #include "settings.hpp" #define APP_TITLE "Abaddon" class Abaddon { private: Abaddon(); ~Abaddon(); Abaddon(const Abaddon &) = delete; Abaddon &operator=(const Abaddon &) = delete; Abaddon(Abaddon &&) = delete; Abaddon &operator=(Abaddon &&) = delete; public: static Abaddon &Get(); int StartGTK(); void StartDiscord(); void StopDiscord(); void LoadFromSettings(); void ActionConnect(); void ActionDisconnect(); void ActionSetToken(); void ActionMoveGuildUp(Snowflake id); void ActionMoveGuildDown(Snowflake id); void ActionCopyGuildID(Snowflake id); void ActionListChannelItemClick(Snowflake id); void ActionChatInputSubmit(std::string msg, Snowflake channel); void ActionChatLoadHistory(Snowflake id); void ActionChatDeleteMessage(Snowflake channel_id, Snowflake id); void ActionChatEditMessage(Snowflake channel_id, Snowflake id); void ActionInsertMention(Snowflake id); void ActionReloadCSS(); std::string GetDiscordToken() const; bool IsDiscordActive() const; const DiscordClient &GetDiscordClient() const; void DiscordOnReady(); void DiscordOnChannelListRefresh(); void DiscordOnMessageCreate(Snowflake id); void DiscordOnMessageDelete(Snowflake id, Snowflake channel_id); void DiscordOnMessageUpdate(Snowflake id, Snowflake channel_id); void DiscordOnGuildMemberListUpdate(Snowflake guild_id); private: DiscordClient m_discord; std::string m_discord_token; // todo make these map snowflake to attribs std::unordered_set m_channels_requested; std::unordered_set m_channels_history_loaded; std::unordered_map m_oldest_listed_message; std::unordered_set m_channels_history_loading; mutable std::mutex m_mutex; Glib::RefPtr m_gtk_app; Glib::RefPtr m_css_provider; SettingsManager m_settings; std::unique_ptr m_main_window; // wah wah cant create a gtkstylecontext fuck you };