/* 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; 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(); } };