mirror of https://notabug.org/acetone/ircabot.git
web page anchors
parent
0704122bfd
commit
304d917fd2
|
@ -358,15 +358,19 @@ body {
|
||||||
width: 95%;
|
width: 95%;
|
||||||
margin: 1% 0 0 2.5%;
|
margin: 1% 0 0 2.5%;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
color: #821010;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.main_payload__chat_username {
|
.main_payload__chat_username {
|
||||||
|
text-decoration: none;
|
||||||
flex: 10%;
|
flex: 10%;
|
||||||
margin-right: 1%;
|
margin-right: 1%;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.main_payload__chat_username:hover {
|
||||||
|
background-color: #d4d4d4;
|
||||||
|
}
|
||||||
|
|
||||||
.main_payload__chat_mail {
|
.main_payload__chat_mail {
|
||||||
flex: 89%;
|
flex: 89%;
|
||||||
color: #2f444c;
|
color: #2f444c;
|
||||||
|
|
139
httpserver.cpp
139
httpserver.cpp
|
@ -898,6 +898,12 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
//// Main section body compilation
|
//// Main section body compilation
|
||||||
QString payloadBlock;
|
QString payloadBlock;
|
||||||
|
|
||||||
|
std::pair<QString,QString> lastGreenNickname; // nick, color
|
||||||
|
std::pair<QString,QString> lastRedNickname; // nick, color
|
||||||
|
quint64 messageAnchorCounter = 0;
|
||||||
|
NickColorist nickColorist;
|
||||||
|
bool colorEdited = false;
|
||||||
|
|
||||||
// Search request
|
// Search request
|
||||||
if (not searchRequest.isEmpty()) {
|
if (not searchRequest.isEmpty()) {
|
||||||
uint counter = 0;
|
uint counter = 0;
|
||||||
|
@ -969,6 +975,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
QString buffer {file.readLine()};
|
QString buffer {file.readLine()};
|
||||||
while (not buffer.isEmpty()) {
|
while (not buffer.isEmpty()) {
|
||||||
removeBrakelineSymbols(buffer);
|
removeBrakelineSymbols(buffer);
|
||||||
|
messageAnchorCounter++;
|
||||||
|
|
||||||
bool finded = false;
|
bool finded = false;
|
||||||
if (rgxIsValid) {
|
if (rgxIsValid) {
|
||||||
|
@ -992,13 +999,34 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
message.replace("class=\"main_payload__chat\"",
|
message.replace("class=\"main_payload__chat\"",
|
||||||
"class=\"main_payload__chat\" style=\"opacity: .5\"");
|
"class=\"main_payload__chat\" style=\"opacity: .5\"");
|
||||||
}
|
}
|
||||||
|
message.remove(" name=\"{{ANCHOR}}\"");
|
||||||
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
|
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
|
||||||
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
|
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
|
||||||
message.replace("class=\"main_payload__chat_username\"",
|
if (lastGreenNickname.first == rawMessage.first) {
|
||||||
"class=\"main_payload__chat_username\" style=\"color: green\"");
|
replaceTag(message, "COLOR", lastGreenNickname.second);
|
||||||
|
}else{
|
||||||
|
replaceTag(message, "COLOR", nickColorist.getGreenColor());
|
||||||
|
lastGreenNickname.first = rawMessage.first;
|
||||||
|
lastGreenNickname.second = nickColorist.getGreenColor(false);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (not colorEdited) {
|
||||||
|
if (lastRedNickname.first == rawMessage.first) {
|
||||||
|
replaceTag(message, "COLOR", lastRedNickname.second);
|
||||||
|
}else{
|
||||||
|
replaceTag(message, "COLOR", nickColorist.getRedColor());
|
||||||
|
lastRedNickname.first = rawMessage.first;
|
||||||
|
lastRedNickname.second = nickColorist.getRedColor(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QString logFolder {m_dataFolder};
|
||||||
|
logFolder.remove(QRegularExpression(".$"));
|
||||||
|
QString link {path};
|
||||||
|
link.remove(logFolder);
|
||||||
|
link.remove(QRegularExpression("\\.txt$"));
|
||||||
|
replaceTag(message, "ANCHOR", link+"#"+ANCHOR_SUFFIX+QString::number(messageAnchorCounter-1));
|
||||||
replaceTag(message, "USERNAME", rawMessage.first);
|
replaceTag(message, "USERNAME", rawMessage.first);
|
||||||
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
|
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
|
||||||
matchedPathsAndMessages[path].push_back(message);
|
matchedPathsAndMessages[path].push_back(message);
|
||||||
|
@ -1006,6 +1034,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
buffer = file.readLine();
|
buffer = file.readLine();
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
|
messageAnchorCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (month.isEmpty() and not year.isEmpty()){
|
else if (month.isEmpty() and not year.isEmpty()){
|
||||||
|
@ -1029,6 +1058,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
}
|
}
|
||||||
QString buffer {file.readLine()};
|
QString buffer {file.readLine()};
|
||||||
while (not buffer.isEmpty()) {
|
while (not buffer.isEmpty()) {
|
||||||
|
messageAnchorCounter++;
|
||||||
removeBrakelineSymbols(buffer);
|
removeBrakelineSymbols(buffer);
|
||||||
|
|
||||||
bool finded = false;
|
bool finded = false;
|
||||||
|
@ -1053,13 +1083,34 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
message.replace("class=\"main_payload__chat\"",
|
message.replace("class=\"main_payload__chat\"",
|
||||||
"class=\"main_payload__chat\" style=\"opacity: .5\"");
|
"class=\"main_payload__chat\" style=\"opacity: .5\"");
|
||||||
}
|
}
|
||||||
|
message.remove(" name=\"{{ANCHOR}}\"");
|
||||||
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
|
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
|
||||||
if (QRegularExpression("^^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
|
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
|
||||||
message.replace("class=\"main_payload__chat_username\"",
|
if (lastGreenNickname.first == rawMessage.first) {
|
||||||
"class=\"main_payload__chat_username\" style=\"color: green\"");
|
replaceTag(message, "COLOR", lastGreenNickname.second);
|
||||||
|
}else{
|
||||||
|
replaceTag(message, "COLOR", nickColorist.getGreenColor());
|
||||||
|
lastGreenNickname.first = rawMessage.first;
|
||||||
|
lastGreenNickname.second = nickColorist.getGreenColor(false);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (not colorEdited) {
|
||||||
|
if (lastRedNickname.first == rawMessage.first) {
|
||||||
|
replaceTag(message, "COLOR", lastRedNickname.second);
|
||||||
|
}else{
|
||||||
|
replaceTag(message, "COLOR", nickColorist.getRedColor());
|
||||||
|
lastRedNickname.first = rawMessage.first;
|
||||||
|
lastRedNickname.second = nickColorist.getRedColor(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QString logFolder {m_dataFolder};
|
||||||
|
logFolder.remove(QRegularExpression(".$"));
|
||||||
|
QString link {path};
|
||||||
|
link.remove(logFolder);
|
||||||
|
link.remove(QRegularExpression("\\.txt$"));
|
||||||
|
replaceTag(message, "ANCHOR", link+"#"+ANCHOR_SUFFIX+QString::number(messageAnchorCounter-1));
|
||||||
replaceTag(message, "USERNAME", rawMessage.first);
|
replaceTag(message, "USERNAME", rawMessage.first);
|
||||||
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
|
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
|
||||||
matchedPathsAndMessages[path].push_back(message);
|
matchedPathsAndMessages[path].push_back(message);
|
||||||
|
@ -1067,6 +1118,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
buffer = file.readLine();
|
buffer = file.readLine();
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
|
messageAnchorCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1108,6 +1160,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
QString buffer {file.readLine()};
|
QString buffer {file.readLine()};
|
||||||
while (not buffer.isEmpty()) {
|
while (not buffer.isEmpty()) {
|
||||||
removeBrakelineSymbols(buffer);
|
removeBrakelineSymbols(buffer);
|
||||||
|
messageAnchorCounter++;
|
||||||
|
|
||||||
bool finded = false;
|
bool finded = false;
|
||||||
if (rgxIsValid) {
|
if (rgxIsValid) {
|
||||||
|
@ -1131,13 +1184,34 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
message.replace("class=\"main_payload__chat\"",
|
message.replace("class=\"main_payload__chat\"",
|
||||||
"class=\"main_payload__chat\" style=\"opacity: .5\"");
|
"class=\"main_payload__chat\" style=\"opacity: .5\"");
|
||||||
}
|
}
|
||||||
|
message.remove(" name=\"{{ANCHOR}}\"");
|
||||||
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
|
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
|
||||||
if (QRegularExpression("^^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
|
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
|
||||||
message.replace("class=\"main_payload__chat_username\"",
|
if (lastGreenNickname.first == rawMessage.first) {
|
||||||
"class=\"main_payload__chat_username\" style=\"color: green\"");
|
replaceTag(message, "COLOR", lastGreenNickname.second);
|
||||||
|
}else{
|
||||||
|
replaceTag(message, "COLOR", nickColorist.getGreenColor());
|
||||||
|
lastGreenNickname.first = rawMessage.first;
|
||||||
|
lastGreenNickname.second = nickColorist.getGreenColor(false);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (not colorEdited) {
|
||||||
|
if (lastRedNickname.first == rawMessage.first) {
|
||||||
|
replaceTag(message, "COLOR", lastRedNickname.second);
|
||||||
|
}else{
|
||||||
|
replaceTag(message, "COLOR", nickColorist.getRedColor());
|
||||||
|
lastRedNickname.first = rawMessage.first;
|
||||||
|
lastRedNickname.second = nickColorist.getRedColor(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QString logFolder {m_dataFolder};
|
||||||
|
logFolder.remove(QRegularExpression(".$"));
|
||||||
|
QString link {path};
|
||||||
|
link.remove(logFolder);
|
||||||
|
link.remove(QRegularExpression("\\.txt$"));
|
||||||
|
replaceTag(message, "ANCHOR", link+"#"+ANCHOR_SUFFIX+QString::number(messageAnchorCounter-1));
|
||||||
replaceTag(message, "USERNAME", rawMessage.first);
|
replaceTag(message, "USERNAME", rawMessage.first);
|
||||||
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
|
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
|
||||||
matchedPathsAndMessages[path].push_back(message);
|
matchedPathsAndMessages[path].push_back(message);
|
||||||
|
@ -1145,6 +1219,7 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
buffer = file.readLine();
|
buffer = file.readLine();
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
|
messageAnchorCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1321,11 +1396,27 @@ void HttpServer::writeRegularPage(QTcpSocket *socket, QString &urlPath, bool isH
|
||||||
}
|
}
|
||||||
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
|
for (const auto &user: m_servers[originalServerName][originalChannelName]) {
|
||||||
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
|
if (QRegularExpression("^(.*;|~|@|\\&|\\+)?"+rawMessage.first+"$").match(user).hasMatch()) {
|
||||||
message.replace("class=\"main_payload__chat_username\"",
|
if (lastGreenNickname.first == rawMessage.first) {
|
||||||
"class=\"main_payload__chat_username\" style=\"color: green\"");
|
replaceTag(message, "COLOR", lastGreenNickname.second);
|
||||||
|
}else{
|
||||||
|
replaceTag(message, "COLOR", nickColorist.getGreenColor());
|
||||||
|
lastGreenNickname.first = rawMessage.first;
|
||||||
|
lastGreenNickname.second = nickColorist.getGreenColor(false);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (not colorEdited) {
|
||||||
|
if (lastRedNickname.first == rawMessage.first) {
|
||||||
|
replaceTag(message, "COLOR", lastRedNickname.second);
|
||||||
|
}else{
|
||||||
|
replaceTag(message, "COLOR", nickColorist.getRedColor());
|
||||||
|
lastRedNickname.first = rawMessage.first;
|
||||||
|
lastRedNickname.second = nickColorist.getRedColor(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
message.replace("href=\"", "href=\"#");
|
||||||
|
replaceTag(message, "ANCHOR", ANCHOR_SUFFIX+QString::number(messageAnchorCounter++));
|
||||||
replaceTag(message, "USERNAME", rawMessage.first);
|
replaceTag(message, "USERNAME", rawMessage.first);
|
||||||
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
|
replaceTag(message, "MESSAGE_TEXT", rawMessage.second);
|
||||||
payloadBlock += message;
|
payloadBlock += message;
|
||||||
|
@ -2098,3 +2189,31 @@ void MessagePool::messageToDelete(qint64 timestamp)
|
||||||
m_messages.erase(it);
|
m_messages.erase(it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QString &NickColorist::getGreenColor(bool next)
|
||||||
|
{
|
||||||
|
if (not next) {
|
||||||
|
return *m_currentGreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_currentGreen == &GREEN_1) {
|
||||||
|
m_currentGreen = &GREEN_2;
|
||||||
|
}else{
|
||||||
|
m_currentGreen = &GREEN_1;
|
||||||
|
}
|
||||||
|
return *m_currentGreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString &NickColorist::getRedColor(bool next)
|
||||||
|
{
|
||||||
|
if (not next) {
|
||||||
|
return *m_currentRed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_currentRed == &RED_1) {
|
||||||
|
m_currentRed = &RED_2;
|
||||||
|
}else{
|
||||||
|
m_currentRed = &RED_1;
|
||||||
|
}
|
||||||
|
return *m_currentRed;
|
||||||
|
}
|
||||||
|
|
21
httpserver.h
21
httpserver.h
|
@ -13,6 +13,23 @@ constexpr int MAX_MESSAGE_LENGTH_WITHOUT_WBR = 30;
|
||||||
constexpr int MAX_NICKNAME_LENGTH_WITHOUT_WBR = 20;
|
constexpr int MAX_NICKNAME_LENGTH_WITHOUT_WBR = 20;
|
||||||
constexpr int BUFFER_SIZE = 2048;
|
constexpr int BUFFER_SIZE = 2048;
|
||||||
const QString HTTP_ACTUAL_ETAG {__DATE__ __TIME__};
|
const QString HTTP_ACTUAL_ETAG {__DATE__ __TIME__};
|
||||||
|
const QString ANCHOR_SUFFIX {"msg"};
|
||||||
|
|
||||||
|
const QString RED_1 {"#753d08"};
|
||||||
|
const QString RED_2 {"#b83e3e"};
|
||||||
|
const QString GREEN_1 {"#60940c"};
|
||||||
|
const QString GREEN_2 {"#27940c"};
|
||||||
|
|
||||||
|
class NickColorist
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const QString& getGreenColor(bool next = true);
|
||||||
|
const QString& getRedColor(bool next = true);
|
||||||
|
|
||||||
|
private:
|
||||||
|
const QString* m_currentGreen = &GREEN_1;
|
||||||
|
const QString* m_currentRed = &RED_1;
|
||||||
|
};
|
||||||
|
|
||||||
class Message : public QObject
|
class Message : public QObject
|
||||||
{
|
{
|
||||||
|
@ -193,9 +210,9 @@ Content-Length: {{SIZE}}\r\n\r\n";
|
||||||
|
|
||||||
const QString HTML_PAYLOAD_LIST_CHAT_MESSAGE = "\
|
const QString HTML_PAYLOAD_LIST_CHAT_MESSAGE = "\
|
||||||
<div class=\"main_payload__chat\">\n\
|
<div class=\"main_payload__chat\">\n\
|
||||||
<span class=\"main_payload__chat_username\">\n\
|
<a name=\"{{ANCHOR}}\" href=\"{{ANCHOR}}\" class=\"main_payload__chat_username\" style=\"color: {{COLOR}}\">\n\
|
||||||
{{USERNAME}}\n\
|
{{USERNAME}}\n\
|
||||||
</span>\n\
|
</a>\n\
|
||||||
<span class=\"main_payload__chat_mail\">\n\
|
<span class=\"main_payload__chat_mail\">\n\
|
||||||
{{MESSAGE_TEXT}}\n\
|
{{MESSAGE_TEXT}}\n\
|
||||||
</span>\n\
|
</span>\n\
|
||||||
|
|
Loading…
Reference in New Issue