Cache User Mentions
Cache user mentions when they are retrieved from the server. This logic currently isn't being utilized by the UI. Additionally, the app should use a 'since' value to only get mentions newer than those stored in the DB, to avoid excessive web requests. This will be implemented in a future commit.
This commit is contained in:
parent
41dc420edd
commit
3f563e1e6e
9 changed files with 112 additions and 504 deletions
|
|
@ -1,101 +0,0 @@
|
|||
#include <QTabWidget>
|
||||
#include <QTimer>
|
||||
|
||||
#include "UserMentions.h"
|
||||
#include "timeline/TimelineItem.h"
|
||||
|
||||
using namespace dialogs;
|
||||
|
||||
UserMentions::UserMentions(QWidget *parent)
|
||||
: QWidget{parent}
|
||||
{
|
||||
tab_layout_ = new QTabWidget(this);
|
||||
|
||||
top_layout_ = new QVBoxLayout(this);
|
||||
top_layout_->setSpacing(0);
|
||||
top_layout_->setMargin(0);
|
||||
|
||||
local_scroll_area_ = new QScrollArea(this);
|
||||
local_scroll_area_->setWidgetResizable(true);
|
||||
local_scroll_area_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
|
||||
local_scroll_widget_ = new QWidget(this);
|
||||
local_scroll_widget_->setObjectName("local_scroll_widget");
|
||||
|
||||
all_scroll_area_ = new QScrollArea(this);
|
||||
all_scroll_area_->setWidgetResizable(true);
|
||||
all_scroll_area_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
|
||||
all_scroll_widget_ = new QWidget(this);
|
||||
all_scroll_widget_->setObjectName("all_scroll_widget");
|
||||
|
||||
// Height of the typing display.
|
||||
QFont f;
|
||||
f.setPointSizeF(f.pointSizeF() * 0.9);
|
||||
const int bottomMargin = QFontMetrics(f).height() + 6;
|
||||
|
||||
local_scroll_layout_ = new QVBoxLayout(local_scroll_widget_);
|
||||
local_scroll_layout_->setContentsMargins(4, 0, 15, bottomMargin);
|
||||
local_scroll_layout_->setSpacing(0);
|
||||
local_scroll_layout_->setObjectName("localcrollarea");
|
||||
|
||||
all_scroll_layout_ = new QVBoxLayout(all_scroll_widget_);
|
||||
all_scroll_layout_->setContentsMargins(4, 0, 15, bottomMargin);
|
||||
all_scroll_layout_->setSpacing(0);
|
||||
all_scroll_layout_->setObjectName("allcrollarea");
|
||||
|
||||
local_scroll_area_->setWidget(local_scroll_widget_);
|
||||
local_scroll_area_->setAlignment(Qt::AlignBottom);
|
||||
|
||||
all_scroll_area_->setWidget(all_scroll_widget_);
|
||||
all_scroll_area_->setAlignment(Qt::AlignBottom);
|
||||
|
||||
tab_layout_->addTab(local_scroll_area_, tr("This Room"));
|
||||
tab_layout_->addTab(all_scroll_area_, tr("All Rooms"));
|
||||
top_layout_->addWidget(tab_layout_);
|
||||
|
||||
setLayout(top_layout_);
|
||||
}
|
||||
|
||||
void
|
||||
UserMentions::pushItem(const QString &event_id,
|
||||
const QString &user_id,
|
||||
const QString &body,
|
||||
const QString &room_id,
|
||||
const QString ¤t_room_id)
|
||||
{
|
||||
setUpdatesEnabled(false);
|
||||
|
||||
// Add to the 'all' section
|
||||
TimelineItem *view_item = new TimelineItem(
|
||||
mtx::events::MessageType::Text, user_id, body, true, room_id, all_scroll_widget_);
|
||||
view_item->setEventId(event_id);
|
||||
view_item->hide();
|
||||
|
||||
all_scroll_layout_->addWidget(view_item);
|
||||
QTimer::singleShot(0, this, [view_item, this]() {
|
||||
view_item->show();
|
||||
view_item->adjustSize();
|
||||
setUpdatesEnabled(true);
|
||||
});
|
||||
|
||||
// if it matches the current room... add it to the current room as well.
|
||||
if (QString::compare(room_id, current_room_id, Qt::CaseInsensitive) == 0) {
|
||||
// Add to the 'local' section
|
||||
TimelineItem *local_view_item = new TimelineItem(mtx::events::MessageType::Text,
|
||||
user_id,
|
||||
body,
|
||||
true,
|
||||
room_id,
|
||||
local_scroll_widget_);
|
||||
local_view_item->setEventId(event_id);
|
||||
local_view_item->hide();
|
||||
|
||||
local_scroll_layout_->addWidget(local_view_item);
|
||||
|
||||
QTimer::singleShot(0, this, [local_view_item]() {
|
||||
local_view_item->show();
|
||||
local_view_item->adjustSize();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include <QScrollArea>
|
||||
#include <QScrollBar>
|
||||
#include <QTabWidget>
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidget>
|
||||
|
||||
namespace dialogs {
|
||||
|
||||
class UserMentions : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
UserMentions(QWidget *parent = nullptr);
|
||||
void pushItem(const QString &event_id,
|
||||
const QString &user_id,
|
||||
const QString &body,
|
||||
const QString &room_id,
|
||||
const QString ¤t_room_id);
|
||||
|
||||
private:
|
||||
QTabWidget *tab_layout_;
|
||||
QVBoxLayout *top_layout_;
|
||||
QVBoxLayout *local_scroll_layout_;
|
||||
QVBoxLayout *all_scroll_layout_;
|
||||
|
||||
QScrollArea *local_scroll_area_;
|
||||
QWidget *local_scroll_widget_;
|
||||
|
||||
QScrollArea *all_scroll_area_;
|
||||
QWidget *all_scroll_widget_;
|
||||
};
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue