encrypted messages now are displayed in the feed
This commit is contained in:
parent
637eb702a8
commit
0a530bfa93
34 changed files with 439 additions and 245 deletions
|
@ -29,6 +29,7 @@ const QHash<int, QByteArray> Models::MessageFeed::roles = {
|
|||
{Sender, "sender"},
|
||||
{Date, "date"},
|
||||
{DeliveryState, "deliveryState"},
|
||||
{Encryption, "encryption"},
|
||||
{Correction, "correction"},
|
||||
{SentByMe,"sentByMe"},
|
||||
{Avatar, "avatar"},
|
||||
|
@ -51,20 +52,16 @@ Models::MessageFeed::MessageFeed(const Element* ri, QObject* parent):
|
|||
failedUploads(),
|
||||
unreadMessages(new std::set<QString>()),
|
||||
observersAmount(0)
|
||||
{
|
||||
}
|
||||
{}
|
||||
|
||||
Models::MessageFeed::~MessageFeed()
|
||||
{
|
||||
Models::MessageFeed::~MessageFeed() {
|
||||
delete unreadMessages;
|
||||
|
||||
for (Shared::Message* message : storage) {
|
||||
for (Shared::Message* message : storage)
|
||||
delete message;
|
||||
}
|
||||
}
|
||||
|
||||
void Models::MessageFeed::addMessage(const Shared::Message& msg)
|
||||
{
|
||||
void Models::MessageFeed::addMessage(const Shared::Message& msg) {
|
||||
QString id = msg.getId();
|
||||
StorageById::const_iterator itr = indexById.find(id);
|
||||
if (itr != indexById.end()) {
|
||||
|
@ -75,11 +72,11 @@ void Models::MessageFeed::addMessage(const Shared::Message& msg)
|
|||
Shared::Message* copy = new Shared::Message(msg);
|
||||
StorageByTime::const_iterator tItr = indexByTime.upper_bound(msg.getTime());
|
||||
int position;
|
||||
if (tItr == indexByTime.end()) {
|
||||
if (tItr == indexByTime.end())
|
||||
position = storage.size();
|
||||
} else {
|
||||
else
|
||||
position = indexByTime.rank(tItr);
|
||||
}
|
||||
|
||||
beginInsertRows(QModelIndex(), position, position);
|
||||
storage.insert(copy);
|
||||
endInsertRows();
|
||||
|
@ -93,8 +90,7 @@ void Models::MessageFeed::addMessage(const Shared::Message& msg)
|
|||
}
|
||||
}
|
||||
|
||||
void Models::MessageFeed::changeMessage(const QString& id, const QMap<QString, QVariant>& data)
|
||||
{
|
||||
void Models::MessageFeed::changeMessage(const QString& id, const QMap<QString, QVariant>& data) {
|
||||
StorageById::iterator itr = indexById.find(id);
|
||||
if (itr == indexById.end()) {
|
||||
qDebug() << "received a command to change a message, but the message couldn't be found, skipping";
|
||||
|
@ -159,9 +155,8 @@ void Models::MessageFeed::changeMessage(const QString& id, const QMap<QString, Q
|
|||
}
|
||||
|
||||
QVector<int> cr;
|
||||
for (MessageRoles role : changeRoles) {
|
||||
for (MessageRoles role : changeRoles)
|
||||
cr.push_back(role);
|
||||
}
|
||||
|
||||
emit dataChanged(index, index, cr);
|
||||
|
||||
|
@ -173,14 +168,15 @@ void Models::MessageFeed::changeMessage(const QString& id, const QMap<QString, Q
|
|||
}
|
||||
}
|
||||
|
||||
std::set<Models::MessageFeed::MessageRoles> Models::MessageFeed::detectChanges(const Shared::Message& msg, const QMap<QString, QVariant>& data) const
|
||||
{
|
||||
std::set<Models::MessageFeed::MessageRoles> Models::MessageFeed::detectChanges(
|
||||
const Shared::Message& msg,
|
||||
const QMap<QString, QVariant>& data
|
||||
) const {
|
||||
std::set<MessageRoles> roles;
|
||||
Shared::Message::State state = msg.getState();
|
||||
QMap<QString, QVariant>::const_iterator itr = data.find("state");
|
||||
if (itr != data.end() && static_cast<Shared::Message::State>(itr.value().toUInt()) != state) {
|
||||
if (itr != data.end() && static_cast<Shared::Message::State>(itr.value().toUInt()) != state)
|
||||
roles.insert(MessageRoles::DeliveryState);
|
||||
}
|
||||
|
||||
itr = data.find("outOfBandUrl");
|
||||
bool att = false;
|
||||
|
@ -255,9 +251,8 @@ QVariant Models::MessageFeed::data(const QModelIndex& index, int role) const {
|
|||
case Qt::DisplayRole:
|
||||
case Text: {
|
||||
QString body = msg->getBody();
|
||||
if (body != msg->getOutOfBandUrl()) {
|
||||
if (body != msg->getOutOfBandUrl())
|
||||
answer = body;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Sender:
|
||||
|
@ -276,6 +271,9 @@ QVariant Models::MessageFeed::data(const QModelIndex& index, int role) const {
|
|||
case DeliveryState:
|
||||
answer = static_cast<unsigned int>(msg->getState());
|
||||
break;
|
||||
case Encryption:
|
||||
answer = QVariant::fromValue(msg->getEncryption());
|
||||
break;
|
||||
case Correction:
|
||||
answer.setValue(fillCorrection(*msg));;
|
||||
break;
|
||||
|
@ -318,13 +316,13 @@ QVariant Models::MessageFeed::data(const QModelIndex& index, int role) const {
|
|||
item.sentByMe = sentByMe(*msg);
|
||||
item.date = msg->getTime();
|
||||
item.state = msg->getState();
|
||||
item.encryption = msg->getEncryption();
|
||||
item.error = msg->getErrorText();
|
||||
item.correction = fillCorrection(*msg);
|
||||
|
||||
QString body = msg->getBody();
|
||||
if (body != msg->getOutOfBandUrl()) {
|
||||
if (body != msg->getOutOfBandUrl())
|
||||
item.text = body;
|
||||
}
|
||||
|
||||
item.avatar.clear();
|
||||
if (item.sentByMe) {
|
||||
|
@ -419,13 +417,11 @@ QModelIndex Models::MessageFeed::index(int row, int column, const QModelIndex& p
|
|||
return QModelIndex();
|
||||
|
||||
StorageByTime::iterator itr = indexByTime.nth(row);
|
||||
if (itr != indexByTime.end()) {
|
||||
Shared::Message* msg = *itr;
|
||||
|
||||
return createIndex(row, column, msg);
|
||||
} else {
|
||||
if (itr == indexByTime.end())
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
Shared::Message* msg = *itr;
|
||||
return createIndex(row, column, msg);
|
||||
}
|
||||
|
||||
QHash<int, QByteArray> Models::MessageFeed::roleNames() const {return roles;}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue