summaryrefslogtreecommitdiffstats
blob: c802035328f39e7541281a660c01d295fc1ccfc4 (plain)
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
/*
 * Copyright (c) 2010 Kevin Smith
 * Licensed under the GNU General Public License v3.
 * See Documentation/Licenses/GPLv3.txt for more information.
 */

#pragma once

#include "Swiften/Base/String.h"
#include "Swiften/Elements/Payload.h"

namespace Swift {
	/**
	 * Ad-Hoc Command (XEP-0050).
	 */
	class Command : public Payload {
		public:
			enum Status {Executing, Completed, Canceled, NoStatus};
			enum Action {Cancel, Execute, Complete, Prev, Next, NoAction};

			struct Note {
				enum Type {Info, Warn, Error};

				Note(String note, Type type) : note(note), type(type) {};

				String note;
				Type type;
			};

		public:
			Command(const String& node, const String& sessionID, Status status) { constructor(node, sessionID, NoAction, status);}
			Command(const String& node, const String& sessionID = "", Action action = Execute) { constructor(node, sessionID, action, NoStatus); }

			const String& getNode() const { return node_; }
			const String& getSessionID() const { return sessionID_; }
			Action getPerformedAction() const { return performedAction_; }
			void setExecuteAction(Action action) { executeAction_ = action; }
			Action getExecuteAction() const { return executeAction_; }
			Status getStatus() const { return 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_; }
			boost::shared_ptr<Payload> getPayload() const { return payload_; }
			void setPayload(boost::shared_ptr<Payload> payload) { payload_ = payload; }

		private:
			void constructor(const String& node, const String& sessionID, Action action, Status status) {
				node_ = node;
				sessionID_ = sessionID;
				performedAction_ = action;
				status_ = status;
				executeAction_ = NoAction;
			}

		private:
			String node_;
			String sessionID_;
			Action performedAction_;
			Status status_;
			Action executeAction_;
			std::vector<Action> availableActions_;
			std::vector<Note> notes_;
			boost::shared_ptr<Payload> payload_;
	};
}