Merge branch 'master' into kirigami2
This commit is contained in:
@@ -56,7 +56,7 @@ class MatrixImageProvider : public QObject, public QQuickAsyncImageProvider {
|
||||
|
||||
Quotient::Connection* connection() { return m_connection; }
|
||||
void setConnection(Quotient::Connection* connection) {
|
||||
m_connection.store(connection);
|
||||
m_connection.storeRelaxed(connection);
|
||||
emit connectionChanged();
|
||||
}
|
||||
|
||||
|
||||
@@ -203,13 +203,13 @@ int MessageEventModel::refreshEventRoles(const QString& id,
|
||||
}
|
||||
|
||||
inline bool hasValidTimestamp(const Quotient::TimelineItem& ti) {
|
||||
return ti->timestamp().isValid();
|
||||
return ti->originTimestamp().isValid();
|
||||
}
|
||||
|
||||
QDateTime MessageEventModel::makeMessageTimestamp(
|
||||
const Quotient::Room::rev_iter_t& baseIt) const {
|
||||
const auto& timeline = m_currentRoom->messageEvents();
|
||||
auto ts = baseIt->event()->timestamp();
|
||||
auto ts = baseIt->event()->originTimestamp();
|
||||
if (ts.isValid())
|
||||
return ts;
|
||||
|
||||
@@ -218,10 +218,10 @@ QDateTime MessageEventModel::makeMessageTimestamp(
|
||||
using Quotient::TimelineItem;
|
||||
auto rit = std::find_if(baseIt, timeline.rend(), hasValidTimestamp);
|
||||
if (rit != timeline.rend())
|
||||
return {rit->event()->timestamp().date(), {0, 0}, Qt::LocalTime};
|
||||
return {rit->event()->originTimestamp().date(), {0, 0}, Qt::LocalTime};
|
||||
auto it = std::find_if(baseIt.base(), timeline.end(), hasValidTimestamp);
|
||||
if (it != timeline.end())
|
||||
return {it->event()->timestamp().date(), {0, 0}, Qt::LocalTime};
|
||||
return {it->event()->originTimestamp().date(), {0, 0}, Qt::LocalTime};
|
||||
|
||||
// What kind of room is that?..
|
||||
qCritical() << "No valid timestamps in the room timeline!";
|
||||
@@ -238,7 +238,8 @@ QString MessageEventModel::renderDate(QDateTime timestamp) const {
|
||||
return tr("The day before yesterday");
|
||||
if (date > QDate::currentDate().addDays(-7))
|
||||
return date.toString("dddd");
|
||||
return date.toString(Qt::DefaultLocaleShortDate);
|
||||
|
||||
return QLocale::system().toString(date, QLocale::ShortFormat);
|
||||
}
|
||||
|
||||
void MessageEventModel::refreshLastUserEvents(int baseTimelineRow) {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
|
||||
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD)
|
||||
#include <QtDBus/QDBusArgument>
|
||||
#include <QtDBus/QDBusInterface>
|
||||
#endif
|
||||
@@ -25,8 +25,9 @@ class NotificationsManager : public QObject {
|
||||
void notificationClicked(const QString roomId, const QString eventId);
|
||||
|
||||
private:
|
||||
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD)
|
||||
QDBusInterface dbus;
|
||||
bool serverSupportsHtml = false;
|
||||
uint showNotification(const QString summary,
|
||||
const QString text,
|
||||
const QImage image);
|
||||
@@ -49,7 +50,7 @@ class NotificationsManager : public QObject {
|
||||
const QImage& icon);
|
||||
};
|
||||
|
||||
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD)
|
||||
QDBusArgument& operator<<(QDBusArgument& arg, const QImage& image);
|
||||
const QDBusArgument& operator>>(const QDBusArgument& arg, QImage&);
|
||||
#endif
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <QtDBus/QDBusConnection>
|
||||
#include <QtDBus/QDBusMessage>
|
||||
#include <QtDBus/QDBusMetaType>
|
||||
#include <QtDBus/QDBusReply>
|
||||
|
||||
NotificationsManager::NotificationsManager(QObject *parent)
|
||||
: QObject(parent),
|
||||
@@ -13,6 +14,15 @@ NotificationsManager::NotificationsManager(QObject *parent)
|
||||
this) {
|
||||
qDBusRegisterMetaType<QImage>();
|
||||
|
||||
const QDBusReply<QStringList> capabilitiesReply = dbus.call("GetCapabilities");
|
||||
|
||||
if (capabilitiesReply.isValid()) {
|
||||
const QStringList capabilities = capabilitiesReply.value();
|
||||
serverSupportsHtml = capabilities.contains("body-markup");
|
||||
} else {
|
||||
qWarning() << "Could not get notification server capabilities" << capabilitiesReply.error();
|
||||
}
|
||||
|
||||
QDBusConnection::sessionBus().connect(
|
||||
"org.freedesktop.Notifications", "/org/freedesktop/Notifications",
|
||||
"org.freedesktop.Notifications", "ActionInvoked", this,
|
||||
@@ -54,14 +64,17 @@ uint NotificationsManager::showNotification(const QString summary,
|
||||
croppedImage = image;
|
||||
}
|
||||
|
||||
const QString body = serverSupportsHtml ? text.toHtmlEscaped() : text;
|
||||
|
||||
QVariantMap hints;
|
||||
hints["image-data"] = croppedImage;
|
||||
hints["desktop-entry"] = "org.eu.encom.spectral";
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << "Spectral"; // app_name
|
||||
argumentList << uint(0); // replace_id
|
||||
argumentList << ""; // app_icon
|
||||
argumentList << summary; // summary
|
||||
argumentList << text; // body
|
||||
argumentList << body; // body
|
||||
argumentList << (QStringList("default") << "reply"); // actions
|
||||
argumentList << hints; // hints
|
||||
argumentList << int(-1); // timeout in ms
|
||||
|
||||
@@ -110,15 +110,14 @@ void PublicRoomListModel::next(int count) {
|
||||
attempted = true;
|
||||
|
||||
if (job->status() == BaseJob::Success) {
|
||||
auto resp = job->data();
|
||||
nextBatch = resp.nextBatch;
|
||||
nextBatch = job->nextBatch();
|
||||
|
||||
this->beginInsertRows({}, rooms.count(),
|
||||
rooms.count() + resp.chunk.count() - 1);
|
||||
rooms.append(resp.chunk);
|
||||
rooms.count() + job->chunk().count() - 1);
|
||||
rooms.append(job->chunk());
|
||||
this->endInsertRows();
|
||||
|
||||
if (resp.nextBatch.isEmpty()) {
|
||||
if (job->nextBatch().isEmpty()) {
|
||||
emit hasMoreChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ void SpectralRoom::countChanged() {
|
||||
QDateTime SpectralRoom::lastActiveTime() const {
|
||||
if (timelineSize() == 0)
|
||||
return QDateTime();
|
||||
return messageEvents().rbegin()->get()->timestamp();
|
||||
return messageEvents().rbegin()->get()->originTimestamp();
|
||||
}
|
||||
|
||||
int SpectralRoom::savedTopVisibleIndex() const {
|
||||
@@ -397,30 +397,30 @@ void SpectralRoom::changeAvatar(QUrl localFile) {
|
||||
const auto job = connection()->uploadFile(localFile.toLocalFile());
|
||||
if (isJobRunning(job)) {
|
||||
connect(job, &BaseJob::success, this, [this, job] {
|
||||
connection()->callApi<SetRoomStateJob>(
|
||||
id(), "m.room.avatar", QJsonObject{{"url", job->contentUri()}});
|
||||
connection()->callApi<SetRoomStateWithKeyJob>(
|
||||
id(), "m.room.avatar", localUser()->id(), QJsonObject{{"url", job->contentUri()}});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void SpectralRoom::addLocalAlias(const QString& alias) {
|
||||
auto aliases = localAliases();
|
||||
if (aliases.contains(alias))
|
||||
auto a = aliases();
|
||||
if (a.contains(alias))
|
||||
return;
|
||||
|
||||
aliases += alias;
|
||||
a += alias;
|
||||
|
||||
setLocalAliases(aliases);
|
||||
setLocalAliases(a);
|
||||
}
|
||||
|
||||
void SpectralRoom::removeLocalAlias(const QString& alias) {
|
||||
auto aliases = localAliases();
|
||||
if (!aliases.contains(alias))
|
||||
auto a = aliases();
|
||||
if (!a.contains(alias))
|
||||
return;
|
||||
|
||||
aliases.removeAll(alias);
|
||||
a.removeAll(alias);
|
||||
|
||||
setLocalAliases(aliases);
|
||||
setLocalAliases(a);
|
||||
}
|
||||
|
||||
QString SpectralRoom::markdownToHTML(const QString& markdown) {
|
||||
|
||||
Reference in New Issue
Block a user