mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
Implemented loading recent messages. (#162)
This commit is contained in:
parent
2fc546cada
commit
223f4af55a
5 changed files with 46 additions and 14 deletions
|
@ -204,6 +204,7 @@ void IrcManager::joinChannel(const QString &channelName)
|
||||||
this->readConnection->sendRaw("JOIN #" + channelName);
|
this->readConnection->sendRaw("JOIN #" + channelName);
|
||||||
this->writeConnection->sendRaw("JOIN #" + channelName);
|
this->writeConnection->sendRaw("JOIN #" + channelName);
|
||||||
}
|
}
|
||||||
|
this->dontParse.append(channelName);
|
||||||
|
|
||||||
this->connectionMutex.unlock();
|
this->connectionMutex.unlock();
|
||||||
}
|
}
|
||||||
|
@ -223,9 +224,10 @@ void IrcManager::partChannel(const QString &channelName)
|
||||||
void IrcManager::privateMessageReceived(Communi::IrcPrivateMessage *message)
|
void IrcManager::privateMessageReceived(Communi::IrcPrivateMessage *message)
|
||||||
{
|
{
|
||||||
this->onPrivateMessage.invoke(message);
|
this->onPrivateMessage.invoke(message);
|
||||||
auto c = this->channelManager.getTwitchChannel(message->target().mid(1));
|
QString channel = message->target().mid(1);
|
||||||
|
auto c = this->channelManager.getTwitchChannel(channel);
|
||||||
|
|
||||||
if (!c) {
|
if (!c || this->dontParse.contains(channel)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,6 +288,7 @@ void IrcManager::handleRoomStateMessage(Communi::IrcMessage *message)
|
||||||
channelManager.getTwitchChannel(channel)->setRoomID(roomID);
|
channelManager.getTwitchChannel(channel)->setRoomID(roomID);
|
||||||
|
|
||||||
this->resources.loadChannelData(roomID);
|
this->resources.loadChannelData(roomID);
|
||||||
|
this->fetchRecentMessages(roomID, channel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,4 +523,23 @@ void IrcManager::onDisconnected()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IrcManager::fetchRecentMessages(QString &roomID, QString &channel)
|
||||||
|
{
|
||||||
|
static QString genericURL =
|
||||||
|
"https://tmi.twitch.tv/api/rooms/%1/recent_messages?client_id=" + getDefaultClientID();
|
||||||
|
|
||||||
|
util::twitch::get(genericURL.arg(roomID), this, [=](QJsonObject obj) {
|
||||||
|
this->dontParse.removeAll(channel);
|
||||||
|
auto msgArray = obj.value("messages").toArray();
|
||||||
|
if (msgArray.size())
|
||||||
|
for (int i = 0; i < msgArray.size(); i++) {
|
||||||
|
QByteArray content = msgArray[i].toString().toUtf8();
|
||||||
|
auto msg = Communi::IrcMessage::fromData(content, this->readConnection.get());
|
||||||
|
auto privMsg = static_cast<Communi::IrcPrivateMessage *>(msg);
|
||||||
|
privateMessageReceived(privMsg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
|
@ -90,6 +90,9 @@ private:
|
||||||
void onConnected();
|
void onConnected();
|
||||||
void onDisconnected();
|
void onDisconnected();
|
||||||
|
|
||||||
|
void fetchRecentMessages(QString &roomID, QString &channel);
|
||||||
|
QVector<QString> dontParse;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QByteArray messageSuffix;
|
QByteArray messageSuffix;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#include "emotemanager.hpp"
|
#include "emotemanager.hpp"
|
||||||
#include "resources.hpp"
|
#include "resources.hpp"
|
||||||
|
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
namespace messages {
|
namespace messages {
|
||||||
|
|
||||||
|
@ -24,8 +26,7 @@ void MessageBuilder::appendWord(const Word &&word)
|
||||||
|
|
||||||
void MessageBuilder::appendTimestamp()
|
void MessageBuilder::appendTimestamp()
|
||||||
{
|
{
|
||||||
std::time_t t;
|
QDateTime t = QDateTime::currentDateTime();
|
||||||
time(&t);
|
|
||||||
this->appendTimestamp(t);
|
this->appendTimestamp(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,20 +35,16 @@ void MessageBuilder::setHighlight(bool value)
|
||||||
this->message->setHighlight(value);
|
this->message->setHighlight(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessageBuilder::appendTimestamp(time_t time)
|
void MessageBuilder::appendTimestamp(QDateTime &time)
|
||||||
{
|
{
|
||||||
char timeStampBuffer[69];
|
|
||||||
|
|
||||||
// Add word for timestamp with no seconds
|
// Add word for timestamp with no seconds
|
||||||
strftime(timeStampBuffer, 69, "%H:%M", localtime(&time));
|
QString timestampNoSeconds(time.toString("hh:mm"));
|
||||||
QString timestampNoSeconds(timeStampBuffer);
|
|
||||||
this->appendWord(Word(timestampNoSeconds, Word::TimestampNoSeconds,
|
this->appendWord(Word(timestampNoSeconds, Word::TimestampNoSeconds,
|
||||||
MessageColor(MessageColor::System), FontManager::Medium, QString(),
|
MessageColor(MessageColor::System), FontManager::Medium, QString(),
|
||||||
QString()));
|
QString()));
|
||||||
|
|
||||||
// Add word for timestamp with seconds
|
// Add word for timestamp with seconds
|
||||||
strftime(timeStampBuffer, 69, "%H:%M:%S", localtime(&time));
|
QString timestampWithSeconds(time.toString("hh:mm:ss"));
|
||||||
QString timestampWithSeconds(timeStampBuffer);
|
|
||||||
this->appendWord(Word(timestampWithSeconds, Word::TimestampWithSeconds,
|
this->appendWord(Word(timestampWithSeconds, Word::TimestampWithSeconds,
|
||||||
MessageColor(MessageColor::System), FontManager::Medium, QString(),
|
MessageColor(MessageColor::System), FontManager::Medium, QString(),
|
||||||
QString()));
|
QString()));
|
||||||
|
|
|
@ -18,7 +18,7 @@ public:
|
||||||
|
|
||||||
void appendWord(const Word &&word);
|
void appendWord(const Word &&word);
|
||||||
void appendTimestamp();
|
void appendTimestamp();
|
||||||
void appendTimestamp(std::time_t time);
|
void appendTimestamp(QDateTime &time);
|
||||||
void setHighlight(bool value);
|
void setHighlight(bool value);
|
||||||
|
|
||||||
QString matchLink(const QString &string);
|
QString matchLink(const QString &string);
|
||||||
|
|
|
@ -47,7 +47,17 @@ SharedMessage TwitchMessageBuilder::parse()
|
||||||
|
|
||||||
// The timestamp is always appended to the builder
|
// The timestamp is always appended to the builder
|
||||||
// Whether or not will be rendered is decided/checked later
|
// Whether or not will be rendered is decided/checked later
|
||||||
|
|
||||||
|
// Appends the correct timestamp if the message is a past message
|
||||||
|
bool isPastMsg = this->tags.contains("historical");
|
||||||
|
if(isPastMsg) {
|
||||||
|
// This may be architecture dependent(datatype)
|
||||||
|
qint64 ts = this->tags.value("tmi-sent-ts").toLongLong();
|
||||||
|
QDateTime time = QDateTime::fromMSecsSinceEpoch(ts);
|
||||||
|
this->appendTimestamp(time);
|
||||||
|
} else {
|
||||||
this->appendTimestamp();
|
this->appendTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
this->parseMessageID();
|
this->parseMessageID();
|
||||||
|
|
||||||
|
@ -66,7 +76,7 @@ SharedMessage TwitchMessageBuilder::parse()
|
||||||
this->appendUsername();
|
this->appendUsername();
|
||||||
|
|
||||||
// highlights
|
// highlights
|
||||||
if (settings.enableHighlights) {
|
if (settings.enableHighlights && !isPastMsg) {
|
||||||
this->parseHighlights();
|
this->parseHighlights();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue