hyprctl: return exitStatus in requestHyprpaper() and request() (#6083)

This commit is contained in:
Raphael Tannous 2024-05-15 18:54:23 +03:00 committed by GitHub
parent 3381e2b55b
commit 3fe5280ce9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 31 additions and 27 deletions

View File

@ -90,24 +90,24 @@ std::vector<SInstanceData> instances() {
return result; return result;
} }
void request(std::string arg, int minArgs = 0) { int request(std::string arg, int minArgs = 0) {
const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0); const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0);
const auto ARGS = std::count(arg.begin(), arg.end(), ' '); const auto ARGS = std::count(arg.begin(), arg.end(), ' ');
if (ARGS < minArgs) { if (ARGS < minArgs) {
std::cout << "Not enough arguments, expected at least " << minArgs; std::cout << "Not enough arguments, expected at least " << minArgs;
return; return -1;
} }
if (SERVERSOCKET < 0) { if (SERVERSOCKET < 0) {
std::cout << "Couldn't open a socket (1)"; std::cout << "Couldn't open a socket (1)";
return; return 1;
} }
if (instanceSignature.empty()) { if (instanceSignature.empty()) {
std::cout << "HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?)"; std::cout << "HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?)";
return; return 2;
} }
const std::string USERID = std::to_string(getpwuid(getuid())->pw_uid); const std::string USERID = std::to_string(getpwuid(getuid())->pw_uid);
@ -121,14 +121,14 @@ void request(std::string arg, int minArgs = 0) {
if (connect(SERVERSOCKET, (sockaddr*)&serverAddress, SUN_LEN(&serverAddress)) < 0) { if (connect(SERVERSOCKET, (sockaddr*)&serverAddress, SUN_LEN(&serverAddress)) < 0) {
std::cout << "Couldn't connect to " << socketPath << ". (3)"; std::cout << "Couldn't connect to " << socketPath << ". (3)";
return; return 3;
} }
auto sizeWritten = write(SERVERSOCKET, arg.c_str(), arg.length()); auto sizeWritten = write(SERVERSOCKET, arg.c_str(), arg.length());
if (sizeWritten < 0) { if (sizeWritten < 0) {
std::cout << "Couldn't write (4)"; std::cout << "Couldn't write (4)";
return; return 4;
} }
std::string reply = ""; std::string reply = "";
@ -138,7 +138,7 @@ void request(std::string arg, int minArgs = 0) {
if (sizeWritten < 0) { if (sizeWritten < 0) {
std::cout << "Couldn't read (5)"; std::cout << "Couldn't read (5)";
return; return 5;
} }
reply += std::string(buffer, sizeWritten); reply += std::string(buffer, sizeWritten);
@ -147,7 +147,7 @@ void request(std::string arg, int minArgs = 0) {
sizeWritten = read(SERVERSOCKET, buffer, 8192); sizeWritten = read(SERVERSOCKET, buffer, 8192);
if (sizeWritten < 0) { if (sizeWritten < 0) {
std::cout << "Couldn't read (5)"; std::cout << "Couldn't read (5)";
return; return 5;
} }
reply += std::string(buffer, sizeWritten); reply += std::string(buffer, sizeWritten);
} }
@ -155,19 +155,21 @@ void request(std::string arg, int minArgs = 0) {
close(SERVERSOCKET); close(SERVERSOCKET);
std::cout << reply; std::cout << reply;
return 0;
} }
void requestHyprpaper(std::string arg) { int requestHyprpaper(std::string arg) {
const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0); const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0);
if (SERVERSOCKET < 0) { if (SERVERSOCKET < 0) {
std::cout << "Couldn't open a socket (1)"; std::cout << "Couldn't open a socket (1)";
return; return 1;
} }
if (instanceSignature.empty()) { if (instanceSignature.empty()) {
std::cout << "HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?)"; std::cout << "HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?)";
return; return 2;
} }
sockaddr_un serverAddress = {0}; sockaddr_un serverAddress = {0};
@ -181,7 +183,7 @@ void requestHyprpaper(std::string arg) {
if (connect(SERVERSOCKET, (sockaddr*)&serverAddress, SUN_LEN(&serverAddress)) < 0) { if (connect(SERVERSOCKET, (sockaddr*)&serverAddress, SUN_LEN(&serverAddress)) < 0) {
std::cout << "Couldn't connect to " << socketPath << ". (3)"; std::cout << "Couldn't connect to " << socketPath << ". (3)";
return; return 3;
} }
arg = arg.substr(arg.find_first_of('/') + 1); // strip flags arg = arg.substr(arg.find_first_of('/') + 1); // strip flags
@ -191,7 +193,7 @@ void requestHyprpaper(std::string arg) {
if (sizeWritten < 0) { if (sizeWritten < 0) {
std::cout << "Couldn't write (4)"; std::cout << "Couldn't write (4)";
return; return 4;
} }
char buffer[8192] = {0}; char buffer[8192] = {0};
@ -200,12 +202,14 @@ void requestHyprpaper(std::string arg) {
if (sizeWritten < 0) { if (sizeWritten < 0) {
std::cout << "Couldn't read (5)"; std::cout << "Couldn't read (5)";
return; return 5;
} }
close(SERVERSOCKET); close(SERVERSOCKET);
std::cout << std::string(buffer); std::cout << std::string(buffer);
return 0;
} }
void batchRequest(std::string arg, bool json) { void batchRequest(std::string arg, bool json) {
@ -384,33 +388,33 @@ int main(int argc, char** argv) {
if (fullRequest.contains("/--batch")) if (fullRequest.contains("/--batch"))
batchRequest(fullRequest, json); batchRequest(fullRequest, json);
else if (fullRequest.contains("/hyprpaper")) else if (fullRequest.contains("/hyprpaper"))
requestHyprpaper(fullRequest); exitStatus = requestHyprpaper(fullRequest);
else if (fullRequest.contains("/switchxkblayout")) else if (fullRequest.contains("/switchxkblayout"))
request(fullRequest, 2); exitStatus = request(fullRequest, 2);
else if (fullRequest.contains("/seterror")) else if (fullRequest.contains("/seterror"))
request(fullRequest, 1); exitStatus = request(fullRequest, 1);
else if (fullRequest.contains("/setprop")) else if (fullRequest.contains("/setprop"))
request(fullRequest, 3); exitStatus = request(fullRequest, 3);
else if (fullRequest.contains("/plugin")) else if (fullRequest.contains("/plugin"))
request(fullRequest, 1); exitStatus = request(fullRequest, 1);
else if (fullRequest.contains("/dismissnotify")) else if (fullRequest.contains("/dismissnotify"))
request(fullRequest, 0); exitStatus = request(fullRequest, 0);
else if (fullRequest.contains("/notify")) else if (fullRequest.contains("/notify"))
request(fullRequest, 2); exitStatus = request(fullRequest, 2);
else if (fullRequest.contains("/output")) else if (fullRequest.contains("/output"))
request(fullRequest, 2); exitStatus = request(fullRequest, 2);
else if (fullRequest.contains("/setcursor")) else if (fullRequest.contains("/setcursor"))
request(fullRequest, 1); exitStatus = request(fullRequest, 1);
else if (fullRequest.contains("/dispatch")) else if (fullRequest.contains("/dispatch"))
request(fullRequest, 1); exitStatus = request(fullRequest, 1);
else if (fullRequest.contains("/keyword")) else if (fullRequest.contains("/keyword"))
request(fullRequest, 2); exitStatus = request(fullRequest, 2);
else if (fullRequest.contains("/decorations")) else if (fullRequest.contains("/decorations"))
request(fullRequest, 1); exitStatus = request(fullRequest, 1);
else if (fullRequest.contains("/--help")) else if (fullRequest.contains("/--help"))
std::cout << USAGE << std::endl; std::cout << USAGE << std::endl;
else { else {
request(fullRequest); exitStatus = request(fullRequest);
} }
std::cout << std::endl; std::cout << std::endl;