Open user profile on matrix.to links

This commit is contained in:
Konstantinos Sideris 2018-09-12 20:54:44 +03:00
parent e9ee29978d
commit 9c06ba5d25
3 changed files with 53 additions and 0 deletions

View file

@ -3,6 +3,8 @@
## [Unreleased]
### Features
- Support for sending & receiving markdown formatted messages. (#283)
- Context menu option to show the raw text message of an event. (#437)
- Clicking on a user pill link will open the user profile.
### Improvements
- Update Polish translation (#430)

View file

@ -16,6 +16,7 @@
*/
#include <QContextMenuEvent>
#include <QDesktopServices>
#include <QFontDatabase>
#include <QMenu>
#include <QTimer>
@ -35,6 +36,7 @@
#include "timeline/widgets/VideoItem.h"
#include "dialogs/RawMessage.h"
#include "mtx/identifiers.hpp"
constexpr int MSG_RIGHT_MARGIN = 7;
constexpr int MSG_PADDING = 20;
@ -61,8 +63,47 @@ TextLabel::TextLabel(const QString &text, QWidget *parent)
&TextLabel::adjustHeight);
document()->setDocumentMargin(0);
setFocusPolicy(Qt::NoFocus);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
setFixedHeight(0);
connect(this, &TextLabel::linkActivated, this, [](const QUrl &url) {
auto parts = url.toString().split('/');
auto defaultHandler = [](const QUrl &url) { QDesktopServices::openUrl(url); };
if (url.host() != "matrix.to" || parts.isEmpty())
return defaultHandler(url);
try {
using namespace mtx::identifiers;
parse<User>(parts.last().toStdString());
} catch (const std::exception &) {
return defaultHandler(url);
}
auto user_id = parts.last();
auto room_id = ChatPage::instance()->currentRoom();
MainWindow::instance()->openUserProfile(user_id, room_id);
});
}
void
TextLabel::mousePressEvent(QMouseEvent *e)
{
link_ = (e->button() & Qt::LeftButton) ? anchorAt(e->pos()) : QString();
QTextBrowser::mousePressEvent(e);
}
void
TextLabel::mouseReleaseEvent(QMouseEvent *e)
{
if (e->button() & Qt::LeftButton && !link_.isEmpty() && anchorAt(e->pos()) == link_) {
emit linkActivated(link_);
return;
}
QTextBrowser::mouseReleaseEvent(e);
}
StatusIndicator::StatusIndicator(QWidget *parent)

View file

@ -105,8 +105,18 @@ public:
void wheelEvent(QWheelEvent *event) override { event->ignore(); }
protected:
void mousePressEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
private slots:
void adjustHeight(const QSizeF &size) { setFixedHeight(size.height()); }
signals:
void linkActivated(const QUrl &link);
private:
QString link_;
};
class UserProfileFilter : public QObject