aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-05-17 07:29:25 +0200
committerdec05eba <dec05eba@protonmail.com>2018-05-17 07:29:27 +0200
commita1766fb9389931481aad96a21a52a0a56d95f55c (patch)
tree701da642284f401b8d923ce6bc3f36fa256df82e /src
parent73a8952e3dd2eae66f01721a6aec2053d185c6a8 (diff)
Send notification when a new message is received and window is not focused
Diffstat (limited to 'src')
-rw-r--r--src/Cache.cpp1
-rw-r--r--src/main.cpp19
2 files changed, 19 insertions, 1 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp
index cf1510a..a6270f0 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -357,6 +357,7 @@ namespace dchat
string downloadLimitBytesStr = to_string(downloadLimitBytes);
+ // TODO: Escape url, it can contain escape sequence and execute shell code maliciously...
Process::string_type cmd = "curl -L --silent -o '";
cmd += filepath.native();
cmd += "' --max-filesize " + downloadLimitBytesStr + " --range 0-" + downloadLimitBytesStr + " --url '" + url + "'";
diff --git a/src/main.cpp b/src/main.cpp
index 9d8c6aa..fa33556 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -19,11 +19,14 @@
#include <odhtdb/hex2bin.hpp>
#include <ntp/NtpClient.hpp>
#include <sibs/SafeSerializer.hpp>
+#include <libnotify/notify.h>
#include <X11/Xlib.h>
using namespace std;
using namespace dchat;
-using namespace TinyProcessLib;
+
+static bool focused = true;
+static NotifyNotification *notification = nullptr;
void channelChangeUserNickname(Channel *channel, const StringView data, const odhtdb::Signature::PublicKey &userPublicKey)
{
@@ -63,6 +66,12 @@ void channelAddStoredMessage(Channel *channel, const odhtdb::Hash &requestHash,
{
string msg(decryptedData.data, decryptedData.size);
channel->addLocalMessage(msg, user, ntp::NtpTimestamp::fromCombined(timestamp).seconds, requestHash);
+ if(!focused)
+ {
+ notify_notification_update(notification, "dchat", msg.c_str(), 0);
+ notify_notification_set_timeout(notification, 5000); // 5 sec timeout
+ notify_notification_show(notification, 0);
+ }
break;
}
case ChannelDataType::DELETE_MESSAGE:
@@ -104,6 +113,8 @@ int main(int argc, char **argv)
printf("parent path: %s\n", parentPath.string().c_str());
boost::filesystem::current_path(parentPath); // Ensures loading of resources works no matter which path we run this executable from
*/
+ notify_init("dchat");
+ notification = notify_notification_new("dchat", "", 0);
const int FRAMERATE_FOCUSED = 200;
const int FRAMERATE_NOT_FOCUSED = 30;
@@ -673,6 +684,12 @@ int main(int argc, char **argv)
window.setFramerateLimit(FRAMERATE_FOCUSED);
//else if(event.type == sf::Event::LostFocus)
// window.setFramerateLimit(FRAMERATE_NOT_FOCUSED);
+
+ if(event.type == sf::Event::GainedFocus)
+ focused = true;
+ else if(event.type == sf::Event::LostFocus)
+ focused = false;
+
GlobalContextMenu::processEvent(event);
currentChannel->processEvent(event);
}