aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-05-21 01:22:57 +0200
committerdec05eba <dec05eba@protonmail.com>2018-05-21 01:23:00 +0200
commitc3e40967ad41f2d31955d37606c2ff408131f6ac (patch)
treefacb4711537e351071029093059a58313c453a79
parent4cbb01e9884297534c18e2a49ab1e9faab6b2776 (diff)
Focus when displaying new message
-rw-r--r--src/main.cpp66
1 files changed, 38 insertions, 28 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 91f99af..a6dfb5f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -143,11 +143,12 @@ int main(int argc, char **argv)
recursive_mutex channelMessageMutex;
bool waitingToJoin = false;
bool loggedIn = false;
+ sf::Clock lastFocusedTimer;
odhtdb::Database *database = nullptr;
odhtdb::DatabaseCallbackFuncs callbackFuncs;
- callbackFuncs.createNodeCallbackFunc = [&waitingToJoinChannels, &database, &channels, &channelMessageMutex, &waitingToJoin, &localNodeUsers](const odhtdb::DatabaseCreateNodeRequest &request)
+ callbackFuncs.createNodeCallbackFunc = [&waitingToJoinChannels, &database, &channels, &channelMessageMutex, &waitingToJoin, &localNodeUsers, &lastFocusedTimer](const odhtdb::DatabaseCreateNodeRequest &request)
{
lock_guard<recursive_mutex> lock(channelMessageMutex);
//printf("Create node callback func %s\n", request.nodeHash->toString().c_str());
@@ -186,7 +187,7 @@ int main(int argc, char **argv)
}
};
- callbackFuncs.addNodeCallbackFunc = [&channels, &channelMessageMutex](const odhtdb::DatabaseAddNodeRequest &request)
+ callbackFuncs.addNodeCallbackFunc = [&channels, &channelMessageMutex, &lastFocusedTimer](const odhtdb::DatabaseAddNodeRequest &request)
{
lock_guard<recursive_mutex> lock(channelMessageMutex);
//printf("Add node callback func %s\n", request.requestHash->toString().c_str());
@@ -195,12 +196,13 @@ int main(int argc, char **argv)
if(*request.nodeHash == *channel->getNodeInfo().getRequestHash())
{
channelAddStoredMessage(channel, *request.requestHash, *request.creatorPublicKey, StringView((const char*)request.decryptedData.data, request.decryptedData.size), request.timestamp);
+ lastFocusedTimer.restart();
return;
}
}
};
- callbackFuncs.addUserCallbackFunc = [&channels, &channelMessageMutex, &waitingToJoin, &localNodeUsers](const odhtdb::DatabaseAddUserRequest &request)
+ callbackFuncs.addUserCallbackFunc = [&channels, &channelMessageMutex, &waitingToJoin, &localNodeUsers, &lastFocusedTimer](const odhtdb::DatabaseAddUserRequest &request)
{
lock_guard<recursive_mutex> lock(channelMessageMutex);
printf("Add user callback. Channel to add user to: %s\n", request.nodeHash->toString().c_str());
@@ -219,6 +221,8 @@ int main(int argc, char **argv)
return;
}
+ lastFocusedTimer.restart();
+
if(*request.userToAddPublicKey == nodeUserData->second.userKeyPair->getPublicKey())
{
printf("You were added to channel %s by %s\n", request.nodeHash->toString().c_str(), request.creatorPublicKey->toString().c_str());
@@ -235,6 +239,12 @@ int main(int argc, char **argv)
};
database = new odhtdb::Database("bootstrap.ring.cx", 4222, Cache::getDchatDir(), callbackFuncs);
+ auto addSystemMessage = [&lastFocusedTimer](const std::string &msg)
+ {
+ Channel::getCurrent()->addLocalMessage(msg, Channel::getCurrent()->getSystemUser());
+ lastFocusedTimer.restart();
+ };
+
// Login to account
Command::add("login", [&localNodeUsers, &database, &channels, &loggedIn, &channelMessageMutex, &currentUsername, &currentPassword](const vector<string> &args)
{
@@ -311,7 +321,7 @@ int main(int argc, char **argv)
// TODO: Use database->addData to change channel name
// Create channel
- Command::add("cc", [&database, &channels, &channelMessageMutex, &loggedIn, &localNodeUsers, &currentUsername, &currentPassword](const vector<string> &args)
+ Command::add("cc", [&database, &channels, &channelMessageMutex, &loggedIn, &localNodeUsers, &currentUsername, &currentPassword, &lastFocusedTimer, addSystemMessage](const vector<string> &args)
{
lock_guard<recursive_mutex> lock(channelMessageMutex);
if(args.size() != 1)
@@ -335,14 +345,15 @@ int main(int argc, char **argv)
ChannelSidePanel::addChannel(channel);
channels.push_back(channel);
Channel::setCurrent(channel);
+ lastFocusedTimer.restart();
localNodeUsers[*createResponse->getRequestHash()] = { createResponse->getNodeEncryptionKey(), createResponse->getNodeAdminKeyPair() };
database->storeNodeInfoForUserEncrypted(databaseNode, currentUsername, currentPassword, *createResponse->getNodeAdminKeyPair());
- Channel::getCurrent()->addLocalMessage("Channel created and stored in database", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("Channel created and stored in database");
});
// Create invite key
- Command::add("invite", [&channelMessageMutex, &offlineChannel, &database](const vector<string> &args)
+ Command::add("invite", [&channelMessageMutex, &offlineChannel, &database, addSystemMessage](const vector<string> &args)
{
lock_guard<recursive_mutex> lock(channelMessageMutex);
if(args.size() != 0)
@@ -354,7 +365,7 @@ int main(int argc, char **argv)
Channel *currentChannel = Channel::getCurrent();
if(currentChannel == &offlineChannel)
{
- Channel::getCurrent()->addLocalMessage("You need to be in a channel to create an invite key", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("You need to be in a channel to create an invite key");
return;
}
@@ -372,7 +383,7 @@ int main(int argc, char **argv)
string msg = "You are now listening for users to join the channel using the key: ";
msg += inviteKey;
- Channel::getCurrent()->addLocalMessage(msg, Channel::getCurrent()->getSystemUser());
+ addSystemMessage(msg);
printf("%s\n", msg.c_str());
sibs::SafeSerializer keySerializer;
@@ -542,14 +553,14 @@ int main(int argc, char **argv)
printf("UI scaling set to %f\n", scaling);
});
- Command::add("addbind", [](const vector<string> &args)
+ Command::add("addbind", [addSystemMessage](const vector<string> &args)
{
if(args.size() != 2)
{
string errMsg = "Expected 2 arguments for command addbind, got ";
errMsg += to_string(args.size());
errMsg += " argument(s)";
- Channel::getCurrent()->addLocalMessage(errMsg, Channel::getCurrent()->getSystemUser());
+ addSystemMessage(errMsg);
return;
}
@@ -560,25 +571,25 @@ int main(int argc, char **argv)
if(key.size() > 255)
{
// 253 = bind + two colons
- Channel::getCurrent()->addLocalMessage("Bind is too long. Max size is 253 bytes", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("Bind is too long. Max size is 253 bytes");
return;
}
bool bindAdded = Chatbar::addBind(key, args[1]);
if(bindAdded)
- Channel::getCurrent()->addLocalMessage("Bind added", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("Bind added");
else
- Channel::getCurrent()->addLocalMessage("Bind already exists. Remove it first if you want to replace it", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("Bind already exists. Remove it first if you want to replace it");
});
- Command::add("removebind", [](const vector<string> &args)
+ Command::add("removebind", [addSystemMessage](const vector<string> &args)
{
if(args.size() != 1)
{
string errMsg = "Expected 1 argument for command removebind, got ";
errMsg += to_string(args.size());
errMsg += " argument(s)";
- Channel::getCurrent()->addLocalMessage(errMsg, Channel::getCurrent()->getSystemUser());
+ addSystemMessage(errMsg);
return;
}
@@ -589,25 +600,25 @@ int main(int argc, char **argv)
if(key.size() > 255)
{
// 253 = bind + two colons
- Channel::getCurrent()->addLocalMessage("Bind is too long. Max size is 253 bytes", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("Bind is too long. Max size is 253 bytes");
return;
}
bool bindRemoved = Chatbar::removeBind(key);
if(bindRemoved)
- Channel::getCurrent()->addLocalMessage("Bind removed", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("Bind removed");
else
- Channel::getCurrent()->addLocalMessage("Bind doesn't exist, nothing was removed", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("Bind doesn't exist, nothing was removed");
});
- Command::add("binds", [](const vector<string> &args)
+ Command::add("binds", [addSystemMessage](const vector<string> &args)
{
if(args.size() != 0)
{
string errMsg = "Expected 0 arguments for command removebind, got ";
errMsg += to_string(args.size());
errMsg += " argument(s)";
- Channel::getCurrent()->addLocalMessage(errMsg, Channel::getCurrent()->getSystemUser());
+ addSystemMessage(errMsg);
return;
}
@@ -620,43 +631,43 @@ int main(int argc, char **argv)
msg += " ";
msg += bind.second;
}
- Channel::getCurrent()->addLocalMessage(msg, Channel::getCurrent()->getSystemUser());
+ addSystemMessage(msg);
});
// Change nick of current user in current channel
- Command::add("nick", [&loggedIn, &offlineChannel](const vector<string> &args)
+ Command::add("nick", [&loggedIn, &offlineChannel, addSystemMessage](const vector<string> &args)
{
if(args.size() != 1)
{
string errMsg = "Expected 1 argument for command nick, got ";
errMsg += to_string(args.size());
errMsg += " argument(s)";
- Channel::getCurrent()->addLocalMessage(errMsg, Channel::getCurrent()->getSystemUser());
+ addSystemMessage(errMsg);
return;
}
if(!loggedIn)
{
- Channel::getCurrent()->addLocalMessage("You need to be logged in to change your nickname", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("You need to be logged in to change your nickname");
return;
}
if(Channel::getCurrent() == &offlineChannel)
{
- Channel::getCurrent()->addLocalMessage("You need to be in a channel to change your nickname", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("You need to be in a channel to change your nickname");
return;
}
if(args[0].size() == 0 || args[0].size() > 255)
{
- Channel::getCurrent()->addLocalMessage("Invalid nickname. Nickname has to be between 1 and 255 characters", Channel::getCurrent()->getSystemUser());
+ addSystemMessage("Invalid nickname. Nickname has to be between 1 and 255 characters");
return;
}
Channel::getCurrent()->changeNick(args[0]);
string msg = "Your nickname was changed to ";
msg += args[0];
- Channel::getCurrent()->addLocalMessage(msg, Channel::getCurrent()->getSystemUser());
+ addSystemMessage(msg);
});
Command::add("clearcache", [&database](const vector<string> &args)
@@ -664,7 +675,6 @@ int main(int argc, char **argv)
printf("Cleared cache (%d bytes)\n", database->clearCache());
});
- sf::Clock lastFocusedTimer;
sf::Clock frameTimer;
while (window.isOpen())