/* * Copyright (c) 2010-2011 Kevin Smith * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include #include #include namespace Swift { OutgoingAdHocCommandSession::OutgoingAdHocCommandSession(const DiscoItems::Item& command, AdHocCommandWindowFactory* /*factory*/, IQRouter* iqRouter) : command_(command), iqRouter_(iqRouter), isMultiStage_(false) { } void OutgoingAdHocCommandSession::handleResponse(boost::shared_ptr payload, ErrorPayload::ref error) { if (error) { onError(error); } else { sessionID_ = payload->getSessionID(); const std::vector actions = payload->getAvailableActions(); if (std::find(actions.begin(), actions.end(), Command::Next) != actions.end() || std::find(actions.begin(), actions.end(), Command::Prev) != actions.end()) { isMultiStage_ = true; } onNextStageReceived(payload); } } bool OutgoingAdHocCommandSession::getIsMultiStage() { return isMultiStage_; } void OutgoingAdHocCommandSession::start() { boost::shared_ptr commandPayload(new Command(command_.getNode())); boost::shared_ptr > commandRequest(new GenericRequest(IQ::Set, command_.getJID(), commandPayload, iqRouter_)); commandRequest->onResponse.connect(boost::bind(&OutgoingAdHocCommandSession::handleResponse, this, _1, _2)); commandRequest->send(); } void OutgoingAdHocCommandSession::cancel() { if (!sessionID_.empty()) { boost::shared_ptr commandPayload(new Command(command_.getNode(), sessionID_, Command::Cancel)); boost::shared_ptr > commandRequest(new GenericRequest(IQ::Set, command_.getJID(), commandPayload, iqRouter_)); commandRequest->onResponse.connect(boost::bind(&OutgoingAdHocCommandSession::handleResponse, this, _1, _2)); commandRequest->send(); } } void OutgoingAdHocCommandSession::goBack() { boost::shared_ptr commandPayload(new Command(command_.getNode(), sessionID_, Command::Prev)); boost::shared_ptr > commandRequest(new GenericRequest(IQ::Set, command_.getJID(), commandPayload, iqRouter_)); commandRequest->onResponse.connect(boost::bind(&OutgoingAdHocCommandSession::handleResponse, this, _1, _2)); commandRequest->send(); } void OutgoingAdHocCommandSession::complete(Form::ref form) { Command* command = new Command(command_.getNode(), sessionID_, Command::Complete); boost::shared_ptr commandPayload(command); command->setForm(form); boost::shared_ptr > commandRequest(new GenericRequest(IQ::Set, command_.getJID(), commandPayload, iqRouter_)); commandRequest->onResponse.connect(boost::bind(&OutgoingAdHocCommandSession::handleResponse, this, _1, _2)); commandRequest->send(); } void OutgoingAdHocCommandSession::goNext(Form::ref form) { Command* command = new Command(command_.getNode(), sessionID_, Command::Next); boost::shared_ptr commandPayload(command); command->setForm(form); boost::shared_ptr > commandRequest(new GenericRequest(IQ::Set, command_.getJID(), commandPayload, iqRouter_)); commandRequest->onResponse.connect(boost::bind(&OutgoingAdHocCommandSession::handleResponse, this, _1, _2)); commandRequest->send(); } }