annotate irccdctl/rule_info_cli.cpp @ 574:18e80ec38ac7

Irccd: get rid of user/channel separation, closes #734 Do not make separate events on messages, notices and modes. This was currently added because the original libircclient made these distinctions between the both. In the IRC specification, the channel represents both a nickname and a real channel. Delete: - onChannelMode, - onChannelNotice, - onQuery, - onQueryCommand. Add: - Server.isSelf(target).
author David Demelier <markand@malikania.fr>
date Wed, 29 Nov 2017 14:44:36 +0100
parents 9daccaeedcce
children 27587ff92a64
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
528
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * rule_info_cli.cpp -- implementation of irccdctl rule-info
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr>
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include "rule_info_cli.hpp"
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 namespace irccd {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 namespace ctl {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 void rule_info_cli::print(const nlohmann::json& json, int index)
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 assert(json.is_object());
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 auto unjoin = [] (auto array) {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 std::ostringstream oss;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 for (auto it = array.begin(); it != array.end(); ++it) {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 if (!it->is_string())
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 continue;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 oss << it->template get<std::string>() << " ";
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 return oss.str();
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 };
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 auto unstr = [] (auto action) {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 if (action.is_string() && action == "accept")
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 return "accept";
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 else
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 return "drop";
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 };
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 std::cout << "rule: " << index << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 std::cout << "servers: " << unjoin(json["servers"]) << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 std::cout << "channels: " << unjoin(json["channels"]) << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 std::cout << "plugins: " << unjoin(json["plugins"]) << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 std::cout << "events: " << unjoin(json["events"]) << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 std::cout << "action: " << unstr(json["action"]) << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 std::cout << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 std::string rule_info_cli::name() const
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 return "rule-info";
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 void rule_info_cli::exec(ctl::controller& ctl, const std::vector<std::string>& args)
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 if (args.size() < 1)
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 throw std::invalid_argument("rule-info requires 1 argument");
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
66
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 int index = 0;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 try {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 index = std::stoi(args[0]);
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 } catch (...) {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 throw std::invalid_argument("invalid number '" + args[0] + "'");
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
74
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 auto json = nlohmann::json::object({
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 { "command", "rule-info" },
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 { "index", index }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 });
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 request(ctl, std::move(json), [] (auto result) {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 print(result, 0);
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 });
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
84
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 } // !ctl
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 } // !irccd