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

#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;
}