Add callscreen DWM plugin for incoming and active voice calls

This commit is contained in:
Luxferre
2026-10-22 10:17:24 +03:00
parent cbac6743bc
commit 6e58218e10
38 changed files with 2120 additions and 38 deletions
+36
View File
@@ -160,6 +160,39 @@ static int try_send_plugin_fifo(const char *plugin_name, int sub_argc, char **su
} else if (strcmp(plugin_name, "dmenu") == 0 && sub_argc >= 2 && sub_argv[1] &&
strcmp(sub_argv[1], "close") == 0) {
len = snprintf(cmd, sizeof(cmd), "CLOSE\n");
} else if (strcmp(plugin_name, "callscreen") == 0) {
if (sub_argc >= 2 && sub_argv[1] && sub_argv[1][0]) {
const char *verb = sub_argv[1];
const char *a1 = (sub_argc >= 3 && sub_argv[2]) ? sub_argv[2] : "";
const char *a2 = (sub_argc >= 4 && sub_argv[3]) ? sub_argv[3] : "";
if (strcasecmp(verb, "incoming") == 0) {
len = snprintf(cmd, sizeof(cmd), "INCOMING %s %s\n", a1[0] ? a1 : "-", a2);
} else if (strcasecmp(verb, "outgoing") == 0) {
len = snprintf(cmd, sizeof(cmd), "OUTGOING %s %s\n", a1[0] ? a1 : "-", a2);
} else if (strcasecmp(verb, "active") == 0) {
len = snprintf(cmd, sizeof(cmd), "ACTIVE %s %s\n", a1[0] ? a1 : "-", a2);
} else if (strcasecmp(verb, "accept") == 0 || strcasecmp(verb, "pickup") == 0) {
len = snprintf(cmd, sizeof(cmd), "ACCEPT\n");
} else if (strcasecmp(verb, "hangup") == 0 || strcasecmp(verb, "reject") == 0) {
len = snprintf(cmd, sizeof(cmd), "HANGUP\n");
} else if (strcasecmp(verb, "mute") == 0 || strcasecmp(verb, "mute_ring") == 0 ||
strcasecmp(verb, "ignore") == 0) {
len = snprintf(cmd, sizeof(cmd), "MUTE_RING\n");
} else if (strcasecmp(verb, "ended") == 0 || strcasecmp(verb, "end") == 0) {
len = a1[0] ? snprintf(cmd, sizeof(cmd), "ENDED %s\n", a1)
: snprintf(cmd, sizeof(cmd), "ENDED\n");
} else if (strcasecmp(verb, "close") == 0) {
len = snprintf(cmd, sizeof(cmd), "CLOSE\n");
} else if (strcasecmp(verb, "record") == 0 || strcasecmp(verb, "toggle_rec") == 0) {
len = snprintf(cmd, sizeof(cmd), "TOGGLE_REC\n");
} else if (strcasecmp(verb, "mic") == 0 || strcasecmp(verb, "toggle_mic") == 0) {
len = snprintf(cmd, sizeof(cmd), "TOGGLE_MIC\n");
} else {
len = snprintf(cmd, sizeof(cmd), "OPEN %s\n", verb);
}
} else {
len = snprintf(cmd, sizeof(cmd), "OPEN\n");
}
} else if (sub_argc >= 2 && sub_argv[1] && strcmp(sub_argv[1], "newcontact") == 0) {
const char *num = (sub_argc >= 3 && sub_argv[2]) ? sub_argv[2] : "";
len = snprintf(cmd, sizeof(cmd), "OPEN new:%s\n", num);
@@ -203,6 +236,9 @@ static const char *resolve_plugin_name_from_argv0(const char *argv0) {
if (strcasecmp(base, "xcalllog") == 0 || strcasecmp(base, "calllog") == 0) {
return "calllog";
}
if (strcasecmp(base, "xcallscreen") == 0 || strcasecmp(base, "callscreen") == 0) {
return "callscreen";
}
if (strcasecmp(base, "xcontacts") == 0 || strcasecmp(base, "contacts") == 0) {
return "contacts";
}