diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-09-12 03:17:34 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-09-12 03:17:34 -0400 |
commit | e68f8ef8f45987ab0caa5a05d53980a3556547f3 (patch) | |
tree | 6c9270e8b6e25ef63697fc428ff1ce8fdb683f95 /components/chatwindow.cpp | |
parent | d6ed75c33938a23d547f5ded692195597266eb3b (diff) | |
download | abaddon-portaudio-e68f8ef8f45987ab0caa5a05d53980a3556547f3.tar.gz abaddon-portaudio-e68f8ef8f45987ab0caa5a05d53980a3556547f3.zip |
make avatar loading a bit better
Diffstat (limited to 'components/chatwindow.cpp')
-rw-r--r-- | components/chatwindow.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/components/chatwindow.cpp b/components/chatwindow.cpp index d8ae2b7..b7da92d 100644 --- a/components/chatwindow.cpp +++ b/components/chatwindow.cpp @@ -115,6 +115,25 @@ void ChatWindow::ProcessMessage(const Message *data, bool prepend) { } else { container = Gtk::manage(new ChatMessageContainer(data)); // only accesses timestamp and user container->Update(); + + auto user_id = data->Author.ID; + const auto *user = Abaddon::Get().GetDiscordClient().GetUser(user_id); + if (user == nullptr) return; + Abaddon::Get().GetImageManager().LoadFromURL(user->GetAvatarURL(), [this, user_id](Glib::RefPtr<Gdk::Pixbuf> buf) { + // am i retarded? + Glib::signal_idle().connect([this, buf, user_id]() -> bool { + auto children = m_listbox->get_children(); + for (auto child : children) { + auto *row = dynamic_cast<ChatMessageContainer *>(child); + if (row == nullptr) continue; + if (row->UserID == user_id) { + row->SetAvatarFromPixbuf(buf); + } + } + + return false; + }); + }); m_num_rows++; } |