/*
Copyright © 2016 Gluzskiy Alexandr (sss)
This file is part of Unknown Download Manager (UDM).
UDM is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
UDM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with UDM. If not, see .
*/
#include
#include "api_core_events.h"
#include "server_session.h"
#include "utilities.h"
#include "../../protocol/udm.pb.h"
#include "api_module_base.h"
#include
extern lockable_container > sessions;
extern lockable_container > downloads;
namespace core_events
{
void core_events::download_state_changed(module_base *m, std::list state_list) //TODO: multiple downloads at once should be supported
{
//TODO: redesign, very unefficient implementation (reverse search in downloads list should be eleminated)
server_msg msg;
msg.set_type(SERVER_MSG_TYPE::SERVER_DOWNLOAD_STATE_CHANGE);
downloads.lock();
for(auto s : state_list)
{
for(auto d : downloads)
{
if(d.second.module_name == m->get_module_info().name)
{
if(s.download_id == d.second.module_id)
{
download_state_change *sc =msg.add_download_state_changes();
sc->set_download_id(d.first);
switch(s.state)
{
case download_state::download_stopped:
sc->set_state(SUBSCRIPTION_DOWNLOAD_STATE::SDS_STOPPED);
break;
case download_state::download_running:
sc->set_state(SUBSCRIPTION_DOWNLOAD_STATE::SDS_STARTED);
break;
case download_state::download_completed:
sc->set_state(SUBSCRIPTION_DOWNLOAD_STATE::SDS_COMPLETED);
break;
default:
BOOST_LOG_TRIVIAL(debug)<<__FILE__<<":"<<__LINE__<<"\t"<<__func__<<"\nunhandled download state change event";
break;
}
}
}
}
}
downloads.unlock();
sessions.lock();
for(auto p : sessions)
{
p->fire_event(SUBSCRIPTION_TYPE::ST_DOWNLOAD_STATE_CHANGE, msg);
}
sessions.unlock();
}
};