This works around https://github.com/sandsmark/QuasselDroid/issues/98 on
the server side by preventing new buffers from being created if the user
accidentally (or maliciously) attempts to send chat messages in status buffers.
Previously, this would have screwed up the status buffer requiring a manual
DB query to fix. This should be fixed in Quasseldroid quite soon, but this
patch will just ensure that the core's DB does not get corrupted by older
Quasseldroid clients if the users do not update.
+bool BufferInfo::acceptsRegularMessages() const
+{
+ if(_type == StatusBuffer || _type == InvalidBuffer)
+ return false;
+ return true;
+}
+
+
QDebug operator<<(QDebug dbg, const BufferInfo &b)
{
dbg.nospace() << "(bufId: " << b.bufferId() << ", netId: " << b.networkId() << ", groupId: " << b.groupId() << ", buf: " << b.bufferName() << ")";
QDebug operator<<(QDebug dbg, const BufferInfo &b)
{
dbg.nospace() << "(bufId: " << b.bufferId() << ", netId: " << b.networkId() << ", groupId: " << b.groupId() << ", buf: " << b.bufferName() << ")";
void setGroupId(uint gid) { _groupId = gid; }
QString bufferName() const;
void setGroupId(uint gid) { _groupId = gid; }
QString bufferName() const;
+ bool acceptsRegularMessages() const;
inline bool operator==(const BufferInfo &other) const { return _bufferId == other._bufferId; }
inline bool operator==(const BufferInfo &other) const { return _bufferId == other._bufferId; }
QStringList parms = msg.split(' ', QString::SkipEmptyParts);
QStringList parms = msg.split(' ', QString::SkipEmptyParts);
- if (parms.isEmpty() && !bufferInfo.bufferName().isEmpty())
+ if (parms.isEmpty() && !bufferInfo.bufferName().isEmpty() && bufferInfo.acceptsRegularMessages())
parms.prepend(bufferInfo.bufferName());
if (parms.isEmpty()) {
parms.prepend(bufferInfo.bufferName());
if (parms.isEmpty()) {
QStringList parms = msg.split(' ', QString::SkipEmptyParts);
QStringList parms = msg.split(' ', QString::SkipEmptyParts);
- if (parms.count() == 0 && !bufferInfo.bufferName().isEmpty())
+ if (parms.count() == 0 && !bufferInfo.bufferName().isEmpty() && bufferInfo.acceptsRegularMessages())
parms.prepend(bufferInfo.bufferName());
else if (parms.count() != 1) {
emit displayMsg(Message::Info, typeByTarget(bufname), bufname,
parms.prepend(bufferInfo.bufferName());
else if (parms.count() != 1) {
emit displayMsg(Message::Info, typeByTarget(bufname), bufname,
void CoreUserInputHandler::handleMe(const BufferInfo &bufferInfo, const QString &msg)
{
void CoreUserInputHandler::handleMe(const BufferInfo &bufferInfo, const QString &msg)
{
- if (bufferInfo.bufferName().isEmpty()) return; // server buffer
+ if (bufferInfo.bufferName().isEmpty() || !bufferInfo.acceptsRegularMessages())
+ return; // server buffer
// FIXME make this a proper event
coreNetwork()->coreSession()->ctcpParser()->query(coreNetwork(), bufferInfo.bufferName(), "ACTION", msg);
emit displayMsg(Message::Action, bufferInfo.type(), bufferInfo.bufferName(), msg, network()->myNick(), Message::Self);
// FIXME make this a proper event
coreNetwork()->coreSession()->ctcpParser()->query(coreNetwork(), bufferInfo.bufferName(), "ACTION", msg);
emit displayMsg(Message::Action, bufferInfo.type(), bufferInfo.bufferName(), msg, network()->myNick(), Message::Self);
void CoreUserInputHandler::handleSay(const BufferInfo &bufferInfo, const QString &msg)
{
void CoreUserInputHandler::handleSay(const BufferInfo &bufferInfo, const QString &msg)
{
- if (bufferInfo.bufferName().isEmpty())
+ if (bufferInfo.bufferName().isEmpty() || !bufferInfo.acceptsRegularMessages())
return; // server buffer
QByteArray encMsg = channelEncode(bufferInfo.bufferName(), msg);
return; // server buffer
QByteArray encMsg = channelEncode(bufferInfo.bufferName(), msg);
QStringList parms = msg.split(' ', QString::SkipEmptyParts);
QStringList parms = msg.split(' ', QString::SkipEmptyParts);
- if (parms.count() == 1 && !bufferInfo.bufferName().isEmpty())
+ if (parms.count() == 1 && !bufferInfo.bufferName().isEmpty() && bufferInfo.acceptsRegularMessages())
parms.prepend(bufferInfo.bufferName());
else if (parms.count() != 2) {
emit displayMsg(Message::Info, typeByTarget(bufname), bufname,
parms.prepend(bufferInfo.bufferName());
else if (parms.count() != 2) {
emit displayMsg(Message::Info, typeByTarget(bufname), bufname,
QStringList parms = msg.split(' ', QString::SkipEmptyParts);
QStringList parms = msg.split(' ', QString::SkipEmptyParts);
- if (parms.isEmpty() && !bufferInfo.bufferName().isEmpty())
+ if (parms.isEmpty() && !bufferInfo.bufferName().isEmpty() && bufferInfo.acceptsRegularMessages())
parms.prepend(bufferInfo.bufferName());
if (parms.isEmpty()) {
parms.prepend(bufferInfo.bufferName());
if (parms.isEmpty()) {
void CoreUserInputHandler::handleTopic(const BufferInfo &bufferInfo, const QString &msg)
{
void CoreUserInputHandler::handleTopic(const BufferInfo &bufferInfo, const QString &msg)
{
- if (bufferInfo.bufferName().isEmpty())
+ if (bufferInfo.bufferName().isEmpty() || !bufferInfo.acceptsRegularMessages())
return;
QList<QByteArray> params;
return;
QList<QByteArray> params;