/***************************************************************************
- * Copyright (C) 2005-2015 by the Quassel Project *
+ * Copyright (C) 2005-2018 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QTextCodec>
#include <QDebug>
-INIT_SYNCABLE_OBJECT(IrcUser)
IrcUser::IrcUser(const QString &hostmask, Network *network) : SyncableObject(network),
_initialized(false),
_nick(nickFromMask(hostmask)),
_server(),
// _idleTime(QDateTime::currentDateTime()),
_ircOperator(),
- _lastAwayMessage(0),
+ _lastAwayMessageTime(),
_whoisServiceReply(),
_encrypted(false),
_network(network),
_codecForDecoding(0)
{
updateObjectName();
+ _lastAwayMessageTime.setTimeSpec(Qt::UTC);
+ _lastAwayMessageTime.setMSecsSinceEpoch(0);
}
QDateTime IrcUser::idleTime()
{
- if (QDateTime::currentDateTime().toTime_t() - _idleTimeSet.toTime_t() > 1200)
+ if ((QDateTime::currentDateTime().toMSecsSinceEpoch() - _idleTimeSet.toMSecsSinceEpoch())
+ > 1200000) {
+ // 20 * 60 * 1000 = 1200000
+ // 20 minutes have elapsed, clear the known idle time as it's likely inaccurate by now
_idleTime = QDateTime();
+ }
return _idleTime;
}
}
-void IrcUser::setAway(const bool &away)
+void IrcUser::setAccount(const QString &account)
+{
+ if (_account != account) {
+ _account = account;
+ SYNC(ARG(account))
+ }
+}
+
+
+void IrcUser::setAway(bool away)
{
if (away != _away) {
_away = away;
+ markAwayChanged();
SYNC(ARG(away))
emit awaySet(away);
}
{
if (!awayMessage.isEmpty() && _awayMessage != awayMessage) {
_awayMessage = awayMessage;
+ markAwayChanged();
SYNC(ARG(awayMessage))
}
}
}
-void IrcUser::setLastAwayMessage(const int &lastAwayMessage)
+// This function is only ever called by SYNC calls from legacy cores (pre-0.13).
+// Therefore, no SYNC call is needed here.
+void IrcUser::setLastAwayMessage(int lastAwayMessage)
+{
+#if QT_VERSION >= 0x050800
+ QDateTime lastAwayMessageTime = QDateTime::fromSecsSinceEpoch(lastAwayMessage);
+#else
+ // toSecsSinceEpoch() was added in Qt 5.8. Manually downconvert to seconds for now.
+ // See https://doc.qt.io/qt-5/qdatetime.html#toMSecsSinceEpoch
+ QDateTime lastAwayMessageTime = QDateTime::fromMSecsSinceEpoch(lastAwayMessage * 1000);
+#endif
+ lastAwayMessageTime.setTimeSpec(Qt::UTC);
+ setLastAwayMessageTime(lastAwayMessageTime);
+}
+
+
+void IrcUser::setLastAwayMessageTime(const QDateTime &lastAwayMessageTime)
{
- if (lastAwayMessage > _lastAwayMessage) {
- _lastAwayMessage = lastAwayMessage;
- SYNC(ARG(lastAwayMessage))
+ if (lastAwayMessageTime > _lastAwayMessageTime) {
+ _lastAwayMessageTime = lastAwayMessageTime;
+ SYNC(ARG(lastAwayMessageTime))
}
}