Add send_command variant that exposes error details
This commit is contained in:
@@ -287,6 +287,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool send_command(const std::string& command) const;
|
bool send_command(const std::string& command) const;
|
||||||
|
|
||||||
|
bool send_command(const std::string& command, std::optional<std::string>& error_info) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request a list of workspaces
|
* Request a list of workspaces
|
||||||
* @return List of workspaces
|
* @return List of workspaces
|
||||||
|
|||||||
16
src/ipc.cpp
16
src/ipc.cpp
@@ -632,7 +632,7 @@ std::shared_ptr<bar_config_t> connection::get_bar_config(const std::string& na
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool connection::send_command(const std::string& command) const {
|
bool connection::send_command(const std::string& command, std::optional<std::string>& error_info) const {
|
||||||
#define i3IPC_TYPE_STR "COMMAND"
|
#define i3IPC_TYPE_STR "COMMAND"
|
||||||
auto buf = i3_msg(m_main_socket, ClientMessageType::COMMAND, command);
|
auto buf = i3_msg(m_main_socket, ClientMessageType::COMMAND, command);
|
||||||
Json::Value root;
|
Json::Value root;
|
||||||
@@ -646,13 +646,25 @@ bool connection::send_command(const std::string& command) const {
|
|||||||
} else {
|
} else {
|
||||||
Json::Value error = payload["error"];
|
Json::Value error = payload["error"];
|
||||||
if (!error.isNull()) {
|
if (!error.isNull()) {
|
||||||
I3IPC_ERR("Failed to execute command: " << error.asString())
|
error_info = error.asString();
|
||||||
|
} else {
|
||||||
|
error_info.reset();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#undef i3IPC_TYPE_STR
|
#undef i3IPC_TYPE_STR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool connection::send_command(const std::string& command) const {
|
||||||
|
std::optional<std::string> error_info{};
|
||||||
|
bool result = send_command(command, error_info);
|
||||||
|
if (!error_info.has_value()) {
|
||||||
|
I3IPC_ERR("Failed to execute command: " << error_info.value());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t connection::get_main_socket_fd() { return m_main_socket; }
|
int32_t connection::get_main_socket_fd() { return m_main_socket; }
|
||||||
|
|
||||||
int32_t connection::get_event_socket_fd() { return m_event_socket; }
|
int32_t connection::get_event_socket_fd() { return m_event_socket; }
|
||||||
|
|||||||
Reference in New Issue
Block a user