summaryrefslogtreecommitdiff
path: root/src/components/progressbar.cpp
blob: 65abfae16980c9dab75e240e57e7665c76fd8657 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "progressbar.hpp"

MessageUploadProgressBar::MessageUploadProgressBar() {
    get_style_context()->add_class("message-progress");
    auto &discord = Abaddon::Get().GetDiscordClient();
    discord.signal_message_progress().connect([this](const std::string &nonce, float percent) {
        if (nonce == m_last_nonce) {
            if (!m_active) {
                m_active = true;
                m_signal_start.emit();
            }
            set_fraction(percent);
        }
    });
    discord.signal_message_send_fail().connect([this](const std::string &nonce, float) {
        if (nonce == m_last_nonce) {
            set_fraction(0.0);
            m_active = false;
            m_signal_stop.emit();
        }
    });
    discord.signal_message_create().connect([this](const Message &msg) {
        if (msg.IsPending) {
            m_last_nonce = *msg.Nonce;
        } else if (msg.Nonce.has_value() && (*msg.Nonce == m_last_nonce)) {
            m_last_nonce = "";
            set_fraction(0.0);
            m_active = false;
            m_signal_stop.emit();
        }
    });
}

MessageUploadProgressBar::type_signal_start MessageUploadProgressBar::signal_start() {
    return m_signal_start;
}

MessageUploadProgressBar::type_signal_stop MessageUploadProgressBar::signal_stop() {
    return m_signal_stop;
}