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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
/*
* Copyright (c) 2010 Kevin Smith
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#pragma once
#include <boost/shared_ptr.hpp>
#include <string>
#include <Swiften/Elements/Payload.h>
#include <Swiften/Elements/Form.h>
namespace Swift {
/**
* Ad-Hoc Command (XEP-0050).
*/
class Command : public Payload {
public:
typedef boost::shared_ptr<Command> ref;
enum Status {Executing, Completed, Canceled, NoStatus};
enum Action {Cancel, Execute, Complete, Prev, Next, NoAction};
struct Note {
enum Type {Info, Warn, Error};
Note(std::string note, Type type) : note(note), type(type) {};
std::string note;
Type type;
};
public:
Command(const std::string& node, const std::string& sessionID, Status status) { constructor(node, sessionID, NoAction, status);}
Command(const std::string& node = "", const std::string& sessionID = "", Action action = Execute) { constructor(node, sessionID, action, NoStatus); }
const std::string& getNode() const { return node_; }
void setNode(const std::string& node) { node_ = node; }
const std::string& getSessionID() const { return sessionID_; }
void setSessionID(const std::string& id) { sessionID_ = id; }
Action getAction() const { return action_; }
void setAction(Action action) { action_ = action; }
void setExecuteAction(Action action) { executeAction_ = action; }
Action getExecuteAction() const { return executeAction_; }
Status getStatus() const { return status_; }
void setStatus(Status status) { status_ = status; }
void addAvailableAction(Action action) { availableActions_.push_back(action); }
const std::vector<Action>& getAvailableActions() const { return availableActions_; }
void addNote(const Note& note) { notes_.push_back(note); }
const std::vector<Note>& getNotes() const { return notes_; }
Form::ref getForm() const { return form_; }
void setForm(Form::ref payload) { form_ = payload; }
private:
void constructor(const std::string& node, const std::string& sessionID, Action action, Status status) {
node_ = node;
sessionID_ = sessionID;
action_ = action;
status_ = status;
executeAction_ = NoAction;
}
private:
std::string node_;
std::string sessionID_;
Action action_;
Status status_;
Action executeAction_;
std::vector<Action> availableActions_;
std::vector<Note> notes_;
Form::ref form_;
};
}
|