mirror of
https://github.com/uowuo/abaddon.git
synced 2024-09-20 06:51:51 +00:00
add dm's
This commit is contained in:
parent
299ecc71d9
commit
713ed0f927
|
@ -86,6 +86,54 @@ void ChannelList::on_row_activated(Gtk::ListBoxRow *row) {
|
|||
}
|
||||
}
|
||||
|
||||
void ChannelList::AddPrivateChannels() {
|
||||
auto dms = m_abaddon->GetDiscordClient().GetPrivateChannels();
|
||||
|
||||
auto *parent_row = Gtk::manage(new Gtk::ListBoxRow);
|
||||
auto *parent_ev = Gtk::manage(new Gtk::EventBox);
|
||||
auto *parent_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
|
||||
auto *parent_label = Gtk::manage(new Gtk::Label);
|
||||
parent_label->set_use_markup(true);
|
||||
parent_label->set_markup("<b>Direct Messages</b>");
|
||||
parent_box->set_halign(Gtk::ALIGN_START);
|
||||
parent_box->pack_start(*parent_label);
|
||||
parent_ev->add(*parent_box);
|
||||
parent_row->add(*parent_ev);
|
||||
parent_row->show_all();
|
||||
m_list->add(*parent_row);
|
||||
|
||||
ListItemInfo parent_info;
|
||||
parent_info.IsUserCollapsed = true;
|
||||
parent_info.IsHidden = false;
|
||||
parent_info.Type = ListItemInfo::ListItemType::Guild; // good nuf
|
||||
|
||||
for (const auto &dmid : dms) {
|
||||
auto *data = m_abaddon->GetDiscordClient().GetChannel(dmid);
|
||||
|
||||
auto *dm_row = Gtk::manage(new Gtk::ListBoxRow);
|
||||
auto *dm_ev = Gtk::manage(new Gtk::EventBox);
|
||||
auto *dm_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
|
||||
auto *dm_label = Gtk::manage(new Gtk::Label);
|
||||
dm_label->set_text(data->Recipients[0].Username);
|
||||
dm_box->set_halign(Gtk::ALIGN_START);
|
||||
dm_box->pack_start(*dm_label);
|
||||
dm_ev->add(*dm_box);
|
||||
dm_row->add(*dm_ev);
|
||||
dm_row->show_all_children();
|
||||
m_list->add(*dm_row);
|
||||
|
||||
ListItemInfo info;
|
||||
info.ID = dmid;
|
||||
info.IsUserCollapsed = false;
|
||||
info.IsHidden = false;
|
||||
info.Type = ListItemInfo::ListItemType::Channel;
|
||||
m_infos[dm_row] = std::move(info);
|
||||
parent_info.Children.insert(dm_row);
|
||||
}
|
||||
|
||||
m_infos[parent_row] = std::move(parent_info);
|
||||
}
|
||||
|
||||
void ChannelList::SetListingFromGuildsInternal() {
|
||||
DiscordClient::Guilds_t *guilds;
|
||||
{
|
||||
|
@ -109,6 +157,8 @@ void ChannelList::SetListingFromGuildsInternal() {
|
|||
return;
|
||||
}
|
||||
|
||||
AddPrivateChannels();
|
||||
|
||||
// map each category to its channels
|
||||
std::unordered_map<Snowflake, std::vector<const ChannelData *>> cat_to_channels;
|
||||
std::unordered_map<Snowflake, std::vector<const ChannelData *>> orphan_channels;
|
||||
|
|
|
@ -51,6 +51,7 @@ protected:
|
|||
Glib::Dispatcher m_update_dispatcher;
|
||||
mutable std::mutex m_update_mutex;
|
||||
std::queue<DiscordClient::Guilds_t> m_update_queue;
|
||||
void AddPrivateChannels(); // retard moment
|
||||
void SetListingFromGuildsInternal();
|
||||
void AttachMenuHandler(Gtk::ListBoxRow* row);
|
||||
|
||||
|
|
|
@ -145,6 +145,10 @@ const MessageData *DiscordClient::GetMessage(Snowflake id) const {
|
|||
return &m_messages.at(id);
|
||||
}
|
||||
|
||||
const ChannelData *DiscordClient::GetChannel(Snowflake id) const {
|
||||
return &m_channels.at(id);
|
||||
}
|
||||
|
||||
void DiscordClient::SendChatMessage(std::string content, Snowflake channel) {
|
||||
// @([^@#]{1,32})#(\\d{4})
|
||||
CreateMessageObject obj;
|
||||
|
@ -260,9 +264,17 @@ void DiscordClient::HandleGatewayReady(const GatewayMessage &msg) {
|
|||
for (const auto &g : data.Guilds) {
|
||||
if (g.IsUnavailable)
|
||||
printf("guild (%lld) unavailable\n", g.ID);
|
||||
else
|
||||
else {
|
||||
StoreGuild(g.ID, g);
|
||||
for (const auto &c : g.Channels)
|
||||
StoreChannel(c.ID, c);
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &dm : data.PrivateChannels) {
|
||||
StoreChannel(dm.ID, dm);
|
||||
}
|
||||
|
||||
m_abaddon->DiscordNotifyReady();
|
||||
m_user_settings = data.UserSettings;
|
||||
}
|
||||
|
@ -291,6 +303,21 @@ void DiscordClient::StoreMessage(Snowflake id, const MessageData &m) {
|
|||
m_chan_to_message_map[m.ChannelID].insert(&m_messages[id]);
|
||||
}
|
||||
|
||||
void DiscordClient::StoreChannel(Snowflake id, const ChannelData &c) {
|
||||
m_channels[id] = c;
|
||||
}
|
||||
|
||||
std::set<Snowflake> DiscordClient::GetPrivateChannels() const {
|
||||
auto ret = std::set<Snowflake>();
|
||||
|
||||
for (const auto &[id, chan] : m_channels) {
|
||||
if (chan.Type == ChannelType::DM || chan.Type == ChannelType::GROUP_DM)
|
||||
ret.insert(id);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void DiscordClient::HeartbeatThread() {
|
||||
while (m_client_connected) {
|
||||
if (!m_heartbeat_acked) {
|
||||
|
|
|
@ -57,6 +57,7 @@ public:
|
|||
void Stop();
|
||||
bool IsStarted() const;
|
||||
|
||||
using Channels_t = std::unordered_map<Snowflake, ChannelData>;
|
||||
using Guilds_t = std::unordered_map<Snowflake, GuildData>;
|
||||
using Messages_t = std::unordered_map<Snowflake, MessageData>;
|
||||
|
||||
|
@ -64,11 +65,13 @@ public:
|
|||
const UserSettingsData &GetUserSettings() const;
|
||||
std::vector<std::pair<Snowflake, GuildData>> GetUserSortedGuilds() const;
|
||||
std::unordered_set<const MessageData *> GetMessagesForChannel(Snowflake id) const;
|
||||
std::set<Snowflake> GetPrivateChannels() const;
|
||||
|
||||
void UpdateSettingsGuildPositions(const std::vector<Snowflake> &pos);
|
||||
void FetchMessagesInChannel(Snowflake id, std::function<void(const std::vector<MessageData> &)> cb);
|
||||
void FetchMessagesInChannelBefore(Snowflake channel_id, Snowflake before_id, std::function<void(const std::vector<MessageData> &)> cb);
|
||||
const MessageData *GetMessage(Snowflake id) const;
|
||||
const ChannelData *GetChannel(Snowflake id) const;
|
||||
|
||||
void SendChatMessage(std::string content, Snowflake channel);
|
||||
|
||||
|
@ -103,6 +106,9 @@ private:
|
|||
Messages_t m_messages;
|
||||
std::unordered_map<Snowflake, std::unordered_set<const MessageData *>> m_chan_to_message_map;
|
||||
|
||||
void StoreChannel(Snowflake id, const ChannelData &c);
|
||||
Channels_t m_channels;
|
||||
|
||||
UserSettingsData m_user_settings;
|
||||
|
||||
Websocket m_websocket;
|
||||
|
|
|
@ -169,6 +169,7 @@ void from_json(const nlohmann::json &j, ReadyEventData &m) {
|
|||
JS_D("analytics_token", m.AnalyticsToken);
|
||||
JS_D("friend_suggestion_count", m.FriendSuggestionCount);
|
||||
JS_D("user_settings", m.UserSettings);
|
||||
JS_D("private_channels", m.PrivateChannels);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, UserSettingsData &m) {
|
||||
|
|
|
@ -361,12 +361,20 @@ struct MessageData {
|
|||
friend void from_json(const nlohmann::json &j, MessageData &m);
|
||||
};
|
||||
|
||||
struct MessageDeleteData {
|
||||
Snowflake ID; //
|
||||
Snowflake ChannelID; //
|
||||
Snowflake GuildID; // opt
|
||||
|
||||
friend void from_json(const nlohmann::json &j, MessageDeleteData &m);
|
||||
};
|
||||
|
||||
struct ReadyEventData {
|
||||
int GatewayVersion; //
|
||||
UserData User; //
|
||||
std::vector<GuildData> Guilds; //
|
||||
std::string SessionID; //
|
||||
// std::vector<ChannelData?/PrivateChannelData?> PrivateChannels;
|
||||
int GatewayVersion; //
|
||||
UserData User; //
|
||||
std::vector<GuildData> Guilds; //
|
||||
std::string SessionID; //
|
||||
std::vector<ChannelData> PrivateChannels; //
|
||||
|
||||
// undocumented
|
||||
std::string AnalyticsToken; // opt
|
||||
|
|
Loading…
Reference in New Issue
Block a user