You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.2 KiB
82 lines
2.2 KiB
#include <QObject>
|
|
#include <QDebug>
|
|
|
|
#include "models/ChatModel.h"
|
|
|
|
ChatMessage::ChatMessage(const QString &name, const QDateTime &date, const QString &message) : m_date(date),
|
|
m_message(message) {
|
|
if(name == "ferdi" || name == "d4irc") m_name = "_self";
|
|
else m_name = name;
|
|
}
|
|
|
|
QString ChatMessage::name() const { return m_name; }
|
|
QDateTime ChatMessage::date() const { return m_date; }
|
|
QString ChatMessage::hourstr() const { return m_date.toString("hh:mm"); }
|
|
QString ChatMessage::datestr() const { return m_date.toString("dd/MM/yyyy"); }
|
|
QString ChatMessage::message() const { return m_message; }
|
|
bool ChatMessage::isHead() const {
|
|
if(previous == nullptr) return true;
|
|
if(previous->name() == m_name) return false;
|
|
return true;
|
|
}
|
|
bool ChatMessage::isLast() const {
|
|
if(previous == nullptr || next == nullptr) return false;
|
|
if(previous->name() == m_name && next->name() != m_name) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
ChatModel::ChatModel(QObject *parent)
|
|
: QAbstractListModel(parent) {
|
|
}
|
|
|
|
void ChatModel::appendMessage(ChatMessage *message) {
|
|
int idx = rowCount();
|
|
if(idx != 0 && !chats.isEmpty()) {
|
|
auto *prev = chats.at(idx - 1);
|
|
prev->next = message;
|
|
message->previous = prev;
|
|
}
|
|
|
|
beginInsertRows(QModelIndex(), idx, rowCount());
|
|
chats << message;
|
|
endInsertRows();
|
|
}
|
|
|
|
int ChatModel::rowCount(const QModelIndex & parent) const {
|
|
Q_UNUSED(parent);
|
|
return chats.count();
|
|
}
|
|
|
|
QVariant ChatModel::data(const QModelIndex &index, int role) const {
|
|
if (index.row() < 0 || index.row() >= chats.count())
|
|
return QVariant();
|
|
|
|
const ChatMessage *message = chats[index.row()];
|
|
if (role == NameRole)
|
|
return message->name();
|
|
else if (role == DateRole)
|
|
return message->datestr();
|
|
else if (role == HourRole)
|
|
return message->hourstr();
|
|
else if (role == MessageRole)
|
|
return message->message();
|
|
else if (role == isHeadRole)
|
|
return message->isHead();
|
|
else if (role == isLastRole)
|
|
return message->isLast();
|
|
return QVariant();
|
|
}
|
|
|
|
QHash<int, QByteArray> ChatModel::roleNames() const {
|
|
QHash<int, QByteArray> roles;
|
|
roles[NameRole] = "name";
|
|
roles[DateRole] = "datestr";
|
|
roles[HourRole] = "hourstr";
|
|
roles[MessageRole] = "message";
|
|
roles[isHeadRole] = "isHead";
|
|
roles[isLastRole] = "isLast";
|
|
return roles;
|
|
}
|