|
|
@ -265,14 +265,16 @@ QHash<int, QByteArray> |
|
|
|
TimelineModel::roleNames() const |
|
|
|
TimelineModel::roleNames() const |
|
|
|
{ |
|
|
|
{ |
|
|
|
return { |
|
|
|
return { |
|
|
|
{Section, "section"}, |
|
|
|
|
|
|
|
{Type, "type"}, |
|
|
|
{Type, "type"}, |
|
|
|
{TypeString, "typeString"}, |
|
|
|
{TypeString, "typeString"}, |
|
|
|
{IsOnlyEmoji, "isOnlyEmoji"}, |
|
|
|
{IsOnlyEmoji, "isOnlyEmoji"}, |
|
|
|
{Body, "body"}, |
|
|
|
{Body, "body"}, |
|
|
|
{FormattedBody, "formattedBody"}, |
|
|
|
{FormattedBody, "formattedBody"}, |
|
|
|
|
|
|
|
{PreviousMessageUserId, "previousMessageUserId"}, |
|
|
|
{UserId, "userId"}, |
|
|
|
{UserId, "userId"}, |
|
|
|
{UserName, "userName"}, |
|
|
|
{UserName, "userName"}, |
|
|
|
|
|
|
|
{PreviousMessageDay, "previousMessageDay"}, |
|
|
|
|
|
|
|
{Day, "day"}, |
|
|
|
{Timestamp, "timestamp"}, |
|
|
|
{Timestamp, "timestamp"}, |
|
|
|
{Url, "url"}, |
|
|
|
{Url, "url"}, |
|
|
|
{ThumbnailUrl, "thumbnailUrl"}, |
|
|
|
{ThumbnailUrl, "thumbnailUrl"}, |
|
|
@ -323,6 +325,11 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r |
|
|
|
case UserName: |
|
|
|
case UserName: |
|
|
|
return QVariant(displayName(QString::fromStdString(acc::sender(event)))); |
|
|
|
return QVariant(displayName(QString::fromStdString(acc::sender(event)))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case Day: { |
|
|
|
|
|
|
|
QDateTime prevDate = origin_server_ts(event); |
|
|
|
|
|
|
|
prevDate.setTime(QTime()); |
|
|
|
|
|
|
|
return QVariant(prevDate.toMSecsSinceEpoch()); |
|
|
|
|
|
|
|
} |
|
|
|
case Timestamp: |
|
|
|
case Timestamp: |
|
|
|
return QVariant(origin_server_ts(event)); |
|
|
|
return QVariant(origin_server_ts(event)); |
|
|
|
case Type: |
|
|
|
case Type: |
|
|
@ -450,7 +457,6 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r |
|
|
|
QVariantMap m; |
|
|
|
QVariantMap m; |
|
|
|
auto names = roleNames(); |
|
|
|
auto names = roleNames(); |
|
|
|
|
|
|
|
|
|
|
|
// m.insert(names[Section], data(id, static_cast<int>(Section)));
|
|
|
|
|
|
|
|
m.insert(names[Type], data(event, static_cast<int>(Type))); |
|
|
|
m.insert(names[Type], data(event, static_cast<int>(Type))); |
|
|
|
m.insert(names[TypeString], data(event, static_cast<int>(TypeString))); |
|
|
|
m.insert(names[TypeString], data(event, static_cast<int>(TypeString))); |
|
|
|
m.insert(names[IsOnlyEmoji], data(event, static_cast<int>(IsOnlyEmoji))); |
|
|
|
m.insert(names[IsOnlyEmoji], data(event, static_cast<int>(IsOnlyEmoji))); |
|
|
@ -458,6 +464,7 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r |
|
|
|
m.insert(names[FormattedBody], data(event, static_cast<int>(FormattedBody))); |
|
|
|
m.insert(names[FormattedBody], data(event, static_cast<int>(FormattedBody))); |
|
|
|
m.insert(names[UserId], data(event, static_cast<int>(UserId))); |
|
|
|
m.insert(names[UserId], data(event, static_cast<int>(UserId))); |
|
|
|
m.insert(names[UserName], data(event, static_cast<int>(UserName))); |
|
|
|
m.insert(names[UserName], data(event, static_cast<int>(UserName))); |
|
|
|
|
|
|
|
m.insert(names[Day], data(event, static_cast<int>(Day))); |
|
|
|
m.insert(names[Timestamp], data(event, static_cast<int>(Timestamp))); |
|
|
|
m.insert(names[Timestamp], data(event, static_cast<int>(Timestamp))); |
|
|
|
m.insert(names[Url], data(event, static_cast<int>(Url))); |
|
|
|
m.insert(names[Url], data(event, static_cast<int>(Url))); |
|
|
|
m.insert(names[ThumbnailUrl], data(event, static_cast<int>(ThumbnailUrl))); |
|
|
|
m.insert(names[ThumbnailUrl], data(event, static_cast<int>(ThumbnailUrl))); |
|
|
@ -498,30 +505,17 @@ TimelineModel::data(const QModelIndex &index, int role) const |
|
|
|
if (!event) |
|
|
|
if (!event) |
|
|
|
return ""; |
|
|
|
return ""; |
|
|
|
|
|
|
|
|
|
|
|
if (role == Section) { |
|
|
|
if (role == PreviousMessageDay || role == PreviousMessageUserId) { |
|
|
|
QDateTime date = origin_server_ts(*event); |
|
|
|
int prevIdx = rowCount() - index.row() - 2; |
|
|
|
date.setTime(QTime()); |
|
|
|
if (prevIdx < 0) |
|
|
|
|
|
|
|
return QVariant(); |
|
|
|
std::string userId = acc::sender(*event); |
|
|
|
auto tempEv = events.get(prevIdx); |
|
|
|
|
|
|
|
|
|
|
|
for (int r = rowCount() - index.row(); r < events.size(); r++) { |
|
|
|
|
|
|
|
auto tempEv = events.get(r); |
|
|
|
|
|
|
|
if (!tempEv) |
|
|
|
if (!tempEv) |
|
|
|
break; |
|
|
|
return QVariant(); |
|
|
|
|
|
|
|
if (role == PreviousMessageUserId) |
|
|
|
QDateTime prevDate = origin_server_ts(*tempEv); |
|
|
|
return data(*tempEv, UserId); |
|
|
|
prevDate.setTime(QTime()); |
|
|
|
else |
|
|
|
if (prevDate != date) |
|
|
|
return data(*tempEv, Day); |
|
|
|
return QString("%2 %1") |
|
|
|
|
|
|
|
.arg(date.toMSecsSinceEpoch()) |
|
|
|
|
|
|
|
.arg(QString::fromStdString(userId)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::string prevUserId = acc::sender(*tempEv); |
|
|
|
|
|
|
|
if (userId != prevUserId) |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return QString("%1").arg(QString::fromStdString(userId)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return data(*event, role); |
|
|
|
return data(*event, role); |
|
|
|