summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c4b49f3)
* When processing a new message, find the mode the user that
sent this message has in a channel (for example o or hv)
* Convert it to a prefix (for example @ or +%)
* Store this in a new sendermode column in the backlog table
Schema for both SQLite and PostgreSQL is updated.
27 files changed:
-Message::Message(const BufferInfo &bufferInfo, Type type, const QString &contents, const QString &sender, Flags flags)
+Message::Message(const BufferInfo &bufferInfo, Type type, const QString &contents, const QString &sender, const QString &senderPrefixes, Flags flags)
: _timestamp(QDateTime::currentDateTime().toUTC()),
_bufferInfo(bufferInfo),
_contents(contents),
_sender(sender),
: _timestamp(QDateTime::currentDateTime().toUTC()),
_bufferInfo(bufferInfo),
_contents(contents),
_sender(sender),
+ _senderPrefixes(senderPrefixes),
_type(type),
_flags(flags)
{
}
_type(type),
_flags(flags)
{
}
-Message::Message(const QDateTime &ts, const BufferInfo &bufferInfo, Type type, const QString &contents, const QString &sender, Flags flags)
+Message::Message(const QDateTime &ts, const BufferInfo &bufferInfo, Type type, const QString &contents, const QString &sender, const QString &senderPrefixes, Flags flags)
: _timestamp(ts),
_bufferInfo(bufferInfo),
_contents(contents),
_sender(sender),
: _timestamp(ts),
_bufferInfo(bufferInfo),
_contents(contents),
_sender(sender),
+ _senderPrefixes(senderPrefixes),
_type(type),
_flags(flags)
{
_type(type),
_flags(flags)
{
msg._bufferInfo = buf;
msg._timestamp = QDateTime::fromTime_t(ts);
msg._sender = QString::fromUtf8(s);
msg._bufferInfo = buf;
msg._timestamp = QDateTime::fromTime_t(ts);
msg._sender = QString::fromUtf8(s);
+ msg._senderPrefixes = QString("");
msg._contents = QString::fromUtf8(m);
return in;
}
msg._contents = QString::fromUtf8(m);
return in;
}
};
Q_DECLARE_FLAGS(Flags, Flag)
};
Q_DECLARE_FLAGS(Flags, Flag)
- Message(const BufferInfo &bufferInfo = BufferInfo(), Type type = Plain, const QString &contents = "", const QString &sender = "", Flags flags = None);
+ Message(const BufferInfo &bufferInfo = BufferInfo(), Type type = Plain, const QString &contents = "", const QString &sender = "", const QString &senderPrefixes = "", Flags flags = None);
Message(const QDateTime &ts, const BufferInfo &buffer = BufferInfo(), Type type = Plain,
Message(const QDateTime &ts, const BufferInfo &buffer = BufferInfo(), Type type = Plain,
- const QString &contents = "", const QString &sender = "", Flags flags = None);
+ const QString &contents = "", const QString &sender = "", const QString &senderPrefixes = "", Flags flags = None);
inline static Message ChangeOfDay(const QDateTime &day) { return Message(day, BufferInfo(), DayChange); }
inline const MsgId &msgId() const { return _msgId; }
inline static Message ChangeOfDay(const QDateTime &day) { return Message(day, BufferInfo(), DayChange); }
inline const MsgId &msgId() const { return _msgId; }
inline void setBufferId(BufferId id) { _bufferInfo.setBufferId(id); }
inline const QString &contents() const { return _contents; }
inline const QString &sender() const { return _sender; }
inline void setBufferId(BufferId id) { _bufferInfo.setBufferId(id); }
inline const QString &contents() const { return _contents; }
inline const QString &sender() const { return _sender; }
+ inline const QString &senderPrefixes() const { return _senderPrefixes; }
inline Type type() const { return _type; }
inline Flags flags() const { return _flags; }
inline void setFlags(Flags flags) { _flags = flags; }
inline Type type() const { return _type; }
inline Flags flags() const { return _flags; }
inline void setFlags(Flags flags) { _flags = flags; }
BufferInfo _bufferInfo;
QString _contents;
QString _sender;
BufferInfo _bufferInfo;
QString _contents;
QString _sender;
+ QString _senderPrefixes;
Type _type;
Flags _flags;
Type _type;
Flags _flags;
//Network::ConnectionState connectionState() const;
inline int connectionState() const { return _connectionState; }
//Network::ConnectionState connectionState() const;
inline int connectionState() const { return _connectionState; }
+ /**@{*/
+ /**
+ * Translates a user’s prefix to the channelmode associated with it.
+ * @param prefix Prefix to be translated.
+ */
QString prefixToMode(const QString &prefix) const;
inline QString prefixToMode(const QCharRef &prefix) const { return prefixToMode(QString(prefix)); }
QString prefixToMode(const QString &prefix) const;
inline QString prefixToMode(const QCharRef &prefix) const { return prefixToMode(QString(prefix)); }
+ inline QString prefixesToModes(const QString &prefix) const {
+ QString mode = "";
+ for (QChar c : prefix) {
+ mode += prefixToMode(c);
+ }
+ return mode;
+ }
+ /**@}*/
+
+ /**@{*/
+ /**
+ * Translates a user’s prefix to the channelmode associated with it.
+ * @param prefix Prefix to be translated.
+ */
QString modeToPrefix(const QString &mode) const;
inline QString modeToPrefix(const QCharRef &mode) const { return modeToPrefix(QString(mode)); }
QString modeToPrefix(const QString &mode) const;
inline QString modeToPrefix(const QCharRef &mode) const { return modeToPrefix(QString(mode)); }
+ inline QString modesToPrefixes(const QString &mode) const {
+ QString prefix = "";
+ for (QChar c : mode) {
+ prefix += modeToPrefix(c);
+ }
+ return prefix;
+ }
+ /**@}*/
ChannelModeType channelModeType(const QString &mode);
inline ChannelModeType channelModeType(const QCharRef &mode) { return channelModeType(QString(mode)); }
ChannelModeType channelModeType(const QString &mode);
inline ChannelModeType channelModeType(const QCharRef &mode) { return channelModeType(QString(mode)); }
-INSERT INTO backlog (time, bufferid, type, flags, senderid, message)
-VALUES ($1, $2, $3, $4, $5, $6)
+INSERT INTO backlog (time, bufferid, type, flags, senderid, senderprefixes, message)
+VALUES ($1, $2, $3, $4, $5, $6, $7)
-INSERT INTO backlog (messageid, time, bufferid, type, flags, senderid, message)
-VALUES (?, ?, ?, ?, ?, ?, ?)
+INSERT INTO backlog (messageid, time, bufferid, type, flags, senderid, senderprefixes, message)
+VALUES (?, ?, ?, ?, ?, ?, ?, ?)
-SELECT messageid, bufferid, time, type, flags, sender, message
+SELECT messageid, bufferid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.bufferid IN (SELECT bufferid FROM buffer WHERE userid = :userid)
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.bufferid IN (SELECT bufferid FROM buffer WHERE userid = :userid)
-SELECT messageid, bufferid, time, type, flags, sender, message
+SELECT messageid, bufferid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.bufferid IN (SELECT bufferid FROM buffer WHERE userid = :userid)
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.bufferid IN (SELECT bufferid FROM buffer WHERE userid = :userid)
-SELECT messageid, time, type, flags, sender, message
+SELECT messageid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.messageid >= $1
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.messageid >= $1
-SELECT messageid, time, type, flags, sender, message
+SELECT messageid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE bufferid = $1
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE bufferid = $1
-SELECT messageid, time, type, flags, sender, message
+SELECT messageid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.messageid >= $1
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.messageid >= $1
type integer NOT NULL,
flags integer NOT NULL,
senderid integer NOT NULL REFERENCES sender (senderid) ON DELETE SET NULL,
type integer NOT NULL,
flags integer NOT NULL,
senderid integer NOT NULL REFERENCES sender (senderid) ON DELETE SET NULL,
--- /dev/null
+ALTER TABLE backlog
+ADD COLUMN senderprefixes TEXT;
-INSERT INTO backlog (time, bufferid, type, flags, senderid, message)
-VALUES (:time, :bufferid, :type, :flags, (SELECT senderid FROM sender WHERE sender = :sender), :message)
+INSERT INTO backlog (time, bufferid, type, flags, senderid, senderprefixes, message)
+VALUES (:time, :bufferid, :type, :flags, (SELECT senderid FROM sender WHERE sender = :sender), :senderprefixes, :message)
-SELECT messageid, time, bufferid, type, flags, senderid, message
+SELECT messageid, time, bufferid, type, flags, senderid, senderprefixes, message
FROM backlog
WHERE messageid > ? AND messageid <= ?
ORDER BY messageid ASC
FROM backlog
WHERE messageid > ? AND messageid <= ?
ORDER BY messageid ASC
-SELECT messageid, bufferid, time, type, flags, sender, message
+SELECT messageid, bufferid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.bufferid IN (SELECT bufferid FROM buffer WHERE userid = :userid)
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.bufferid IN (SELECT bufferid FROM buffer WHERE userid = :userid)
-SELECT messageid, bufferid, time, type, flags, sender, message
+SELECT messageid, bufferid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.bufferid IN (SELECT bufferid FROM buffer WHERE userid = :userid)
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.bufferid IN (SELECT bufferid FROM buffer WHERE userid = :userid)
-SELECT messageid, time, type, flags, sender, message
+SELECT messageid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.messageid >= :firstmsg
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE backlog.messageid >= :firstmsg
-SELECT messageid, time, type, flags, sender, message
+SELECT messageid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE bufferid = :bufferid
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE bufferid = :bufferid
-SELECT messageid, time, type, flags, sender, message
+SELECT messageid, time, type, flags, sender, senderprefixes, message
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE bufferid = :bufferid
FROM backlog
JOIN sender ON backlog.senderid = sender.senderid
WHERE bufferid = :bufferid
type INTEGER NOT NULL,
flags INTEGER NOT NULL,
senderid INTEGER NOT NULL,
type INTEGER NOT NULL,
flags INTEGER NOT NULL,
senderid INTEGER NOT NULL,
--- /dev/null
+ALTER TABLE backlog
+ADD COLUMN senderprefixes TEXT;
int type;
int flags;
int senderid;
int type;
int flags;
int senderid;
+ QString senderprefixes;
Q_ASSERT(!createBuffer);
bufferInfo = Core::bufferInfo(user(), rawMsg.networkId, BufferInfo::StatusBuffer, "");
}
Q_ASSERT(!createBuffer);
bufferInfo = Core::bufferInfo(user(), rawMsg.networkId, BufferInfo::StatusBuffer, "");
}
- Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, rawMsg.flags);
+ Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender,
+ senderPrefixes(rawMsg.sender, bufferInfo), rawMsg.flags);
if(Core::storeMessage(msg))
emit displayMsg(msg);
}
if(Core::storeMessage(msg))
emit displayMsg(msg);
}
}
bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo;
}
}
bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo;
}
- Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, rawMsg.flags);
+ Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender,
+ senderPrefixes(rawMsg.sender, bufferInfo), rawMsg.flags);
// add the StatusBuffer to the Cache in case there are more Messages for the original target
bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo;
}
// add the StatusBuffer to the Cache in case there are more Messages for the original target
bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo;
}
- Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, rawMsg.flags);
+ Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender,
+ senderPrefixes(rawMsg.sender, bufferInfo), rawMsg.flags);
+QString CoreSession::senderPrefixes(const QString &sender, const BufferInfo &bufferInfo) const
+{
+ CoreNetwork *currentNetwork = network(bufferInfo.networkId());
+ if (!currentNetwork) {
+ return "";
+ }
+
+ if (bufferInfo.type() != BufferInfo::ChannelBuffer) {
+ return "";
+ }
+
+ IrcChannel *currentChannel = currentNetwork->ircChannel(bufferInfo.bufferName());
+ if (!currentChannel) {
+ return "";
+ }
+
+ const QString modes = currentChannel->userModes(nickFromMask(sender).toLower());
+ return currentNetwork->modesToPrefixes(modes);
+}
Protocol::SessionState CoreSession::sessionState() const
{
Protocol::SessionState CoreSession::sessionState() const
{
QScriptEngine *scriptEngine;
QScriptEngine *scriptEngine;
+ /**
+ * This method obtains the prefixes of the message's sender within a channel, by looking up their channelmodes, and
+ * processing them to prefixes based on the network's settings.
+ * @param sender The hostmask of the sender
+ * @param bufferInfo The BufferInfo object of the buffer
+ */
+ QString senderPrefixes(const QString &sender, const BufferInfo &bufferInfo) const;
QList<RawMessage> _messageQueue;
bool _processMessages;
CoreIgnoreListManager _ignoreListManager;
QList<RawMessage> _messageQueue;
bool _processMessages;
CoreIgnoreListManager _ignoreListManager;
<< msg.type()
<< (int)msg.flags()
<< senderId
<< msg.type()
<< (int)msg.flags()
<< senderId
+ << msg.senderPrefixes()
<< msg.contents();
QSqlQuery logMessageQuery = executePreparedQuery("insert_message", params, db);
<< msg.contents();
QSqlQuery logMessageQuery = executePreparedQuery("insert_message", params, db);
<< msg.type()
<< (int)msg.flags()
<< senderIdList.at(i)
<< msg.type()
<< (int)msg.flags()
<< senderIdList.at(i)
+ << msg.senderPrefixes()
<< msg.contents();
QSqlQuery logMessageQuery = executePreparedQuery("insert_message", params, db);
if (!watchQuery(logMessageQuery)) {
<< msg.contents();
QSqlQuery logMessageQuery = executePreparedQuery("insert_message", params, db);
if (!watchQuery(logMessageQuery)) {
Message msg(timestamp,
bufferInfo,
(Message::Type)query.value(2).toUInt(),
Message msg(timestamp,
bufferInfo,
(Message::Type)query.value(2).toUInt(),
- query.value(5).toString(),
+ query.value(6).toString(),
query.value(4).toString(),
query.value(4).toString(),
+ query.value(5).toString(),
(Message::Flags)query.value(3).toUInt());
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
(Message::Flags)query.value(3).toUInt());
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
Message msg(timestamp,
bufferInfoHash[query.value(1).toInt()],
(Message::Type)query.value(3).toUInt(),
Message msg(timestamp,
bufferInfoHash[query.value(1).toInt()],
(Message::Type)query.value(3).toUInt(),
- query.value(6).toString(),
+ query.value(7).toString(),
query.value(5).toString(),
query.value(5).toString(),
+ query.value(6).toString(),
(Message::Flags)query.value(4).toUInt());
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
(Message::Flags)query.value(4).toUInt());
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
bindValue(3, backlog.type);
bindValue(4, (int)backlog.flags);
bindValue(5, backlog.senderid);
bindValue(3, backlog.type);
bindValue(4, (int)backlog.flags);
bindValue(5, backlog.senderid);
- bindValue(6, backlog.message);
+ bindValue(6, backlog.senderprefixes);
+ bindValue(7, backlog.message);
<file>./SQL/PostgreSQL/version/21/upgrade_000_add_function_backlog_lastmsgid_update.sql</file>
<file>./SQL/PostgreSQL/version/21/upgrade_001_add_trigger_backlog_lastmsgid_update.sql</file>
<file>./SQL/PostgreSQL/version/22/upgrade_000_alter_quasseluser_add_authenticator.sql</file>
<file>./SQL/PostgreSQL/version/21/upgrade_000_add_function_backlog_lastmsgid_update.sql</file>
<file>./SQL/PostgreSQL/version/21/upgrade_001_add_trigger_backlog_lastmsgid_update.sql</file>
<file>./SQL/PostgreSQL/version/22/upgrade_000_alter_quasseluser_add_authenticator.sql</file>
+ <file>./SQL/PostgreSQL/version/23/upgrade_000_create_mode.sql</file>
<file>./SQL/SQLite/delete_backlog_by_uid.sql</file>
<file>./SQL/SQLite/delete_backlog_for_buffer.sql</file>
<file>./SQL/SQLite/delete_backlog_for_network.sql</file>
<file>./SQL/SQLite/delete_backlog_by_uid.sql</file>
<file>./SQL/SQLite/delete_backlog_for_buffer.sql</file>
<file>./SQL/SQLite/delete_backlog_for_network.sql</file>
<file>./SQL/SQLite/version/22/upgrade_000_add_trigger_backlog_lastmsgid_update_direct_insert.sql</file>
<file>./SQL/SQLite/version/22/upgrade_001_add_trigger_backlog_lastmsgid_update_direct_update.sql</file>
<file>./SQL/SQLite/version/23/upgrade_000_alter_quasseluser_add_authenticator.sql</file>
<file>./SQL/SQLite/version/22/upgrade_000_add_trigger_backlog_lastmsgid_update_direct_insert.sql</file>
<file>./SQL/SQLite/version/22/upgrade_001_add_trigger_backlog_lastmsgid_update_direct_update.sql</file>
<file>./SQL/SQLite/version/23/upgrade_000_alter_quasseluser_add_authenticator.sql</file>
+ <file>./SQL/SQLite/version/24/upgrade_000_create_mode.sql</file>
logMessageQuery.bindValue(":type", msg.type());
logMessageQuery.bindValue(":flags", (int)msg.flags());
logMessageQuery.bindValue(":sender", msg.sender());
logMessageQuery.bindValue(":type", msg.type());
logMessageQuery.bindValue(":flags", (int)msg.flags());
logMessageQuery.bindValue(":sender", msg.sender());
+ logMessageQuery.bindValue(":senderprefixes", msg.senderPrefixes());
logMessageQuery.bindValue(":message", msg.contents());
lockForWrite();
logMessageQuery.bindValue(":message", msg.contents());
lockForWrite();
logMessageQuery.bindValue(":type", msg.type());
logMessageQuery.bindValue(":flags", (int)msg.flags());
logMessageQuery.bindValue(":sender", msg.sender());
logMessageQuery.bindValue(":type", msg.type());
logMessageQuery.bindValue(":flags", (int)msg.flags());
logMessageQuery.bindValue(":sender", msg.sender());
+ logMessageQuery.bindValue(":senderprefixes", msg.senderPrefixes());
logMessageQuery.bindValue(":message", msg.contents());
safeExec(logMessageQuery);
logMessageQuery.bindValue(":message", msg.contents());
safeExec(logMessageQuery);
Message msg(QDateTime::fromTime_t(query.value(1).toInt()),
bufferInfo,
(Message::Type)query.value(2).toUInt(),
Message msg(QDateTime::fromTime_t(query.value(1).toInt()),
bufferInfo,
(Message::Type)query.value(2).toUInt(),
- query.value(5).toString(),
+ query.value(6).toString(),
query.value(4).toString(),
query.value(4).toString(),
+ query.value(5).toString(),
(Message::Flags)query.value(3).toUInt());
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
(Message::Flags)query.value(3).toUInt());
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
Message msg(QDateTime::fromTime_t(query.value(2).toInt()),
bufferInfoHash[query.value(1).toInt()],
(Message::Type)query.value(3).toUInt(),
Message msg(QDateTime::fromTime_t(query.value(2).toInt()),
bufferInfoHash[query.value(1).toInt()],
(Message::Type)query.value(3).toUInt(),
- query.value(6).toString(),
+ query.value(7).toString(),
query.value(5).toString(),
query.value(5).toString(),
+ query.value(6).toString(),
(Message::Flags)query.value(4).toUInt());
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
(Message::Flags)query.value(4).toUInt());
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
backlog.type = value(3).toInt();
backlog.flags = value(4).toInt();
backlog.senderid = value(5).toInt();
backlog.type = value(3).toInt();
backlog.flags = value(4).toInt();
backlog.senderid = value(5).toInt();
- backlog.message = value(6).toString();
+ backlog.senderprefixes = value(6).toString();
+ backlog.message = value(7).toString();