Skip to content

Commit

Permalink
Showing notifications on Linux
Browse files Browse the repository at this point in the history
  • Loading branch information
houmain committed Dec 2, 2022
1 parent eaecca9 commit 6451ff9
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 58 deletions.
8 changes: 7 additions & 1 deletion src/client/linux/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ namespace {
auto configuration_updated = false;
if (g_settings.auto_update_config &&
g_config_file.update()) {
verbose("Configuration updated");
message("Configuration updated");
if (!g_server.send_config(g_config_file.config()))
return;
configuration_updated = true;
Expand Down Expand Up @@ -146,6 +146,12 @@ namespace {
}
} // namespace

void show_notification(const char* message) {
auto ss = std::stringstream();
ss << "notify-send -a keymapper keymapper \"" << message << "\"";
std::system(ss.str().c_str());
}

int main(int argc, char* argv[]) {
if (!interpret_commandline(g_settings, argc, argv)) {
print_help_message();
Expand Down
80 changes: 23 additions & 57 deletions src/common/output.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,19 @@ const char* about_footer =
"This program comes with absolutely no warranty.\n"
"See the GNU General Public License, version 3 for details.";

#if defined(_WIN32)

#include "windows/win.h"
#include <winsock2.h>

extern void show_notification(const char* message);

#if defined(_WIN32)
# include "windows/win.h"
# include <winsock2.h>
#endif

namespace {
void vprint(bool notify, const char* format, va_list args) {
void vprint(const char* format, va_list args, bool notify, bool is_error) {
auto buffer = std::array<char, 1024>();
std::vsnprintf(buffer.data(), buffer.size(), format, args);

#if defined(_WIN32)
static const auto s_has_console = [](){
if (AttachConsole(ATTACH_PARENT_PROCESS)) {
FILE *stream;
Expand All @@ -38,80 +42,42 @@ namespace {
return false;
}();

if (s_has_console) {
std::vfprintf(stdout, format, args);
std::fputc('\n', stdout);
std::fflush(stdout);
}

auto buffer = std::array<char, 1024>();
std::vsnprintf(buffer.data(), buffer.size(), format, args);
if (notify)
show_notification(buffer.data());

#if !defined(NDEBUG)
# if !defined(NDEBUG)
OutputDebugStringA(buffer.data());
OutputDebugStringA("\n");
# endif
#endif
}
} // namespace

void message(const char* format, ...) {
va_list args;
va_start(args, format);
vprint(true, format, args);
va_end(args);
}

void error(const char* format, ...) {
va_list args;
va_start(args, format);
vprint(true, format, args);
va_end(args);
}
if (is_error)
std::fputs("ERROR: ", stdout);
std::fputs(buffer.data(), stdout);
std::fputc('\n', stdout);
std::fflush(stdout);

void verbose(const char* format, ...) {
if (g_verbose_output) {
va_list args;
va_start(args, format);
vprint(false, format, args);
va_end(args);
if (notify)
show_notification(buffer.data());
}
}

#else // !defined(_WIN32)

#include <unistd.h>
#include <cerrno>
#include <sys/select.h>
} // namespace

void message(const char* format, ...) {
va_list args;
va_start(args, format);
std::vfprintf(stdout, format, args);
vprint(format, args, true, false);
va_end(args);
std::fputc('\n', stdout);
std::fflush(stdout);
}

void error(const char* format, ...) {
va_list args;
va_start(args, format);
std::fprintf(stderr, "ERROR: ");
std::vfprintf(stderr, format, args);
vprint(format, args, true, true);
va_end(args);
std::fputc('\n', stderr);
}

void verbose(const char* format, ...) {
if (g_verbose_output) {
va_list args;
va_start(args, format);
std::vfprintf(stdout, format, args);
vprint(format, args, false, false);
va_end(args);
std::fputc('\n', stdout);
std::fflush(stdout);
}
}

#endif // !defined(_WIN32)
4 changes: 4 additions & 0 deletions src/server/linux/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,10 @@ namespace {
}
} // namespace

void show_notification(const char* message) {
// don't show notifications
}

int main(int argc, char* argv[]) {
auto settings = Settings{ };

Expand Down

0 comments on commit 6451ff9

Please sign in to comment.