You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

40 lines
1.6 KiB

#include "alertmanager.h"
/**
* A macro to generate the switch case statements to handle specific alert types
*/
#define ALERT_EVENT_CASE(name, signal, alert) \
case name: \
emit signal(lt::alert_cast<lt::name>(alert)); \
break
AlertManager::AlertManager(QObject *parent) : QObject(parent)
{
connect(this, &AlertManager::alertsReady, this, &AlertManager::dispatchAlertsForSession);
}
void AlertManager::addSession(lt::session_handle *session)
{
session->set_alert_notify([this, session]() -> void {
emit alertsReady(session);
});
}
void AlertManager::dispatchAlertsForSession(lt::session_handle *session)
{
std::vector<lt::alert*> alerts;
session->pop_alerts(&alerts);
for (auto alert : alerts) {
switch(alert->type()) {
ALERT_EVENT_CASE(add_torrent_alert, addTorrentAlerted, alert);
ALERT_EVENT_CASE(file_completed_alert, fileCompletedAlerted, alert);
ALERT_EVENT_CASE(metadata_received_alert, metadataReceivedAlerted, alert);
ALERT_EVENT_CASE(save_resume_data_alert, saveResumeDataAlerted, alert);
ALERT_EVENT_CASE(save_resume_data_failed_alert, saveResumeDataFailedAlerted, alert);
ALERT_EVENT_CASE(state_changed_alert, stateChangedAlerted, alert);
ALERT_EVENT_CASE(state_update_alert, stateUpdateAlerted, alert);
ALERT_EVENT_CASE(torrent_finished_alert, torrentFinishedAlerted, alert);
}
}
}