mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
Ran qmlformat and make license
This commit is contained in:
parent
f2560b7531
commit
9ab1296131
4 changed files with 244 additions and 225 deletions
|
@ -1,195 +1,216 @@
|
|||
// SPDX-FileCopyrightText: 2021 Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import "./ui"
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.3
|
||||
import im.nheko 1.0
|
||||
|
||||
ApplicationWindow {
|
||||
id: roomDirectoryWindow
|
||||
visible: true
|
||||
|
||||
property RoomDirectoryModel publicRooms : RoomDirectoryModel {}
|
||||
|
||||
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
|
||||
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
|
||||
minimumWidth: 650
|
||||
minimumHeight: 420
|
||||
palette: Nheko.colors
|
||||
color: Nheko.colors.window
|
||||
modality: Qt.WindowModal
|
||||
flags: Qt.Dialog | Qt.WindowCloseButtonHint
|
||||
title: qsTr("Explore Public Rooms")
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.Cancel
|
||||
onActivated: roomDirectoryWindow.close()
|
||||
}
|
||||
|
||||
header: RowLayout {
|
||||
id: searchBarLayout
|
||||
spacing: Nheko.paddingMedium
|
||||
width: parent.width
|
||||
|
||||
implicitHeight: roomSearch.height
|
||||
|
||||
MatrixTextField {
|
||||
id: roomSearch
|
||||
|
||||
Layout.fillWidth: true
|
||||
selectByMouse: true
|
||||
|
||||
font.pixelSize: fontMetrics.font.pixelSize
|
||||
padding: Nheko.paddingMedium
|
||||
color: Nheko.colors.text
|
||||
placeholderText: qsTr("Search for public rooms")
|
||||
onTextChanged: searchTimer.restart()
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: searchTimer
|
||||
|
||||
interval: 350
|
||||
onTriggered: roomDirView.model.setSearchTerm(roomSearch.text)
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: roomDirView
|
||||
anchors.fill: parent
|
||||
model: publicRooms
|
||||
delegate: Rectangle {
|
||||
id: roomDirDelegate
|
||||
|
||||
property color background: Nheko.colors.window
|
||||
property color importantText: Nheko.colors.text
|
||||
property color unimportantText: Nheko.colors.buttonText
|
||||
property int avatarSize: fontMetrics.lineSpacing * 4
|
||||
|
||||
color: background
|
||||
|
||||
height: avatarSize + 2.5 * Nheko.paddingMedium
|
||||
width: ListView.view.width
|
||||
|
||||
RowLayout {
|
||||
|
||||
spacing: Nheko.paddingMedium
|
||||
anchors.fill: parent
|
||||
anchors.margins: Nheko.paddingMedium
|
||||
implicitHeight: textContent.height
|
||||
|
||||
Avatar {
|
||||
id: roomAvatar
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
width: avatarSize
|
||||
height: avatarSize
|
||||
url: model.avatarUrl.replace("mxc://", "image://MxcImage/")
|
||||
displayName: model.name
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: textContent
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
width: parent.width - avatar.width
|
||||
Layout.preferredWidth: parent.width - avatar.width
|
||||
Layout.preferredHeight: roomNameRow.height + roomDescriptionRow.height
|
||||
spacing: Nheko.paddingSmall
|
||||
|
||||
RowLayout {
|
||||
id: roomNameRow
|
||||
Layout.fillWidth: true
|
||||
spacing: 0
|
||||
|
||||
ElidedLabel {
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
color: roomDirDelegate.importantText
|
||||
elideWidth: textContent.width * 0.5 - Nheko.paddingMedium
|
||||
font.pixelSize: fontMetrics.font.pixelSize * 1.1
|
||||
fullText: model.name
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: roomDescriptionRow
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: parent.width
|
||||
spacing: Nheko.paddingSmall
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.preferredHeight: fontMetrics.lineSpacing * 4
|
||||
|
||||
Label {
|
||||
id: roomTopic
|
||||
color: roomDirDelegate.unimportantText
|
||||
font.weight: Font.Thin
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
font.pixelSize: fontMetrics.font.pixelSize
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 2
|
||||
Layout.fillWidth: true
|
||||
text: model.topic
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Item {
|
||||
id: numMembersRectangle
|
||||
Layout.fillWidth: false
|
||||
Layout.margins: Nheko.paddingSmall
|
||||
width: roomCount.width
|
||||
|
||||
Label {
|
||||
id: roomCount
|
||||
color: roomDirDelegate.unimportantText
|
||||
anchors.centerIn: parent
|
||||
Layout.fillWidth: false
|
||||
font.weight: Font.Thin
|
||||
font.pixelSize: fontMetrics.font.pixelSize
|
||||
text: model.numMembers.toString()
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: buttonRectangle
|
||||
Layout.fillWidth: false
|
||||
Layout.margins: Nheko.paddingSmall
|
||||
width: joinRoomButton.width
|
||||
Button {
|
||||
id: joinRoomButton
|
||||
visible: publicRooms.canJoinRoom(model.roomid)
|
||||
anchors.centerIn: parent
|
||||
width: Math.ceil(0.1 * roomDirectoryWindow.width)
|
||||
text: "Join"
|
||||
onClicked: publicRooms.joinRoom(model.index)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
footer: Item {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: parent.width
|
||||
visible: (publicRooms.reachedEndOfPagination == false) && publicRooms.loadingMoreRooms
|
||||
// hacky but works
|
||||
height: loadingSpinner.height + 2 * Nheko.paddingLarge
|
||||
anchors.margins: Nheko.paddingLarge
|
||||
|
||||
Spinner {
|
||||
id: loadingSpinner
|
||||
|
||||
anchors.centerIn: parent
|
||||
anchors.margins: Nheko.paddingLarge
|
||||
running: visible
|
||||
foreground: Nheko.colors.mid
|
||||
z: 7
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// SPDX-FileCopyrightText: 2021 Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import "./ui"
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.3
|
||||
import im.nheko 1.0
|
||||
|
||||
ApplicationWindow {
|
||||
id: roomDirectoryWindow
|
||||
|
||||
property RoomDirectoryModel publicRooms
|
||||
|
||||
visible: true
|
||||
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
|
||||
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
|
||||
minimumWidth: 650
|
||||
minimumHeight: 420
|
||||
palette: Nheko.colors
|
||||
color: Nheko.colors.window
|
||||
modality: Qt.WindowModal
|
||||
flags: Qt.Dialog | Qt.WindowCloseButtonHint
|
||||
title: qsTr("Explore Public Rooms")
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.Cancel
|
||||
onActivated: roomDirectoryWindow.close()
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: roomDirView
|
||||
|
||||
anchors.fill: parent
|
||||
model: publicRooms
|
||||
|
||||
delegate: Rectangle {
|
||||
id: roomDirDelegate
|
||||
|
||||
property color background: Nheko.colors.window
|
||||
property color importantText: Nheko.colors.text
|
||||
property color unimportantText: Nheko.colors.buttonText
|
||||
property int avatarSize: fontMetrics.lineSpacing * 4
|
||||
|
||||
color: background
|
||||
height: avatarSize + 2.5 * Nheko.paddingMedium
|
||||
width: ListView.view.width
|
||||
|
||||
RowLayout {
|
||||
spacing: Nheko.paddingMedium
|
||||
anchors.fill: parent
|
||||
anchors.margins: Nheko.paddingMedium
|
||||
implicitHeight: textContent.height
|
||||
|
||||
Avatar {
|
||||
id: roomAvatar
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
width: avatarSize
|
||||
height: avatarSize
|
||||
url: model.avatarUrl.replace("mxc://", "image://MxcImage/")
|
||||
displayName: model.name
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: textContent
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
width: parent.width - avatar.width
|
||||
Layout.preferredWidth: parent.width - avatar.width
|
||||
Layout.preferredHeight: roomNameRow.height + roomDescriptionRow.height
|
||||
spacing: Nheko.paddingSmall
|
||||
|
||||
RowLayout {
|
||||
id: roomNameRow
|
||||
|
||||
Layout.fillWidth: true
|
||||
spacing: 0
|
||||
|
||||
ElidedLabel {
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
color: roomDirDelegate.importantText
|
||||
elideWidth: textContent.width * 0.5 - Nheko.paddingMedium
|
||||
font.pixelSize: fontMetrics.font.pixelSize * 1.1
|
||||
fullText: model.name
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: roomDescriptionRow
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: parent.width
|
||||
spacing: Nheko.paddingSmall
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.preferredHeight: fontMetrics.lineSpacing * 4
|
||||
|
||||
Label {
|
||||
id: roomTopic
|
||||
|
||||
color: roomDirDelegate.unimportantText
|
||||
font.weight: Font.Thin
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
font.pixelSize: fontMetrics.font.pixelSize
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 2
|
||||
Layout.fillWidth: true
|
||||
text: model.topic
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
Item {
|
||||
id: numMembersRectangle
|
||||
|
||||
Layout.fillWidth: false
|
||||
Layout.margins: Nheko.paddingSmall
|
||||
width: roomCount.width
|
||||
|
||||
Label {
|
||||
id: roomCount
|
||||
|
||||
color: roomDirDelegate.unimportantText
|
||||
anchors.centerIn: parent
|
||||
Layout.fillWidth: false
|
||||
font.weight: Font.Thin
|
||||
font.pixelSize: fontMetrics.font.pixelSize
|
||||
text: model.numMembers.toString()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Item {
|
||||
id: buttonRectangle
|
||||
|
||||
Layout.fillWidth: false
|
||||
Layout.margins: Nheko.paddingSmall
|
||||
width: joinRoomButton.width
|
||||
|
||||
Button {
|
||||
id: joinRoomButton
|
||||
|
||||
visible: publicRooms.canJoinRoom(model.roomid)
|
||||
anchors.centerIn: parent
|
||||
width: Math.ceil(0.1 * roomDirectoryWindow.width)
|
||||
text: "Join"
|
||||
onClicked: publicRooms.joinRoom(model.index)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
footer: Item {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: parent.width
|
||||
visible: (publicRooms.reachedEndOfPagination == false) && publicRooms.loadingMoreRooms
|
||||
// hacky but works
|
||||
height: loadingSpinner.height + 2 * Nheko.paddingLarge
|
||||
anchors.margins: Nheko.paddingLarge
|
||||
|
||||
Spinner {
|
||||
id: loadingSpinner
|
||||
|
||||
anchors.centerIn: parent
|
||||
anchors.margins: Nheko.paddingLarge
|
||||
running: visible
|
||||
foreground: Nheko.colors.mid
|
||||
z: 7
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
publicRooms: RoomDirectoryModel {
|
||||
}
|
||||
|
||||
header: RowLayout {
|
||||
id: searchBarLayout
|
||||
|
||||
spacing: Nheko.paddingMedium
|
||||
width: parent.width
|
||||
implicitHeight: roomSearch.height
|
||||
|
||||
MatrixTextField {
|
||||
id: roomSearch
|
||||
|
||||
Layout.fillWidth: true
|
||||
selectByMouse: true
|
||||
font.pixelSize: fontMetrics.font.pixelSize
|
||||
padding: Nheko.paddingMedium
|
||||
color: Nheko.colors.text
|
||||
placeholderText: qsTr("Search for public rooms")
|
||||
onTextChanged: searchTimer.restart()
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: searchTimer
|
||||
|
||||
interval: 350
|
||||
onTriggered: roomDirView.model.setSearchTerm(roomSearch.text)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -82,10 +82,10 @@ RoomDirectoryModel::getViasForRoom(const std::vector<std::string> &aliases)
|
|||
|
||||
vias.reserve(aliases.size());
|
||||
|
||||
std::transform(
|
||||
aliases.begin(), aliases.end(), std::back_inserter(vias), [](const auto &alias) {
|
||||
return alias.substr(alias.find(":") + 1);
|
||||
});
|
||||
std::transform(aliases.begin(),
|
||||
aliases.end(),
|
||||
std::back_inserter(vias),
|
||||
[](const auto &alias) { return alias.substr(alias.find(":") + 1); });
|
||||
|
||||
return vias;
|
||||
}
|
||||
|
@ -126,7 +126,8 @@ RoomDirectoryModel::data(const QModelIndex &index, int role) const
|
|||
void
|
||||
RoomDirectoryModel::fetchMore(const QModelIndex &)
|
||||
{
|
||||
if (!canFetchMore_) return;
|
||||
if (!canFetchMore_)
|
||||
return;
|
||||
|
||||
nhlog::net()->debug("Fetching more rooms from mtxclient...");
|
||||
|
||||
|
@ -137,18 +138,18 @@ RoomDirectoryModel::fetchMore(const QModelIndex &)
|
|||
// req.third_party_instance_id = third_party_instance_id;
|
||||
auto requested_server = server_;
|
||||
|
||||
reachedEndOfPagination_ = false;
|
||||
emit reachedEndOfPaginationChanged();
|
||||
reachedEndOfPagination_ = false;
|
||||
emit reachedEndOfPaginationChanged();
|
||||
|
||||
loadingMoreRooms_ = true;
|
||||
emit loadingMoreRoomsChanged();
|
||||
loadingMoreRooms_ = true;
|
||||
emit loadingMoreRoomsChanged();
|
||||
|
||||
http::client()->post_public_rooms(
|
||||
req,
|
||||
[requested_server, this, req](const mtx::responses::PublicRooms &res,
|
||||
mtx::http::RequestErr err) {
|
||||
loadingMoreRooms_ = false;
|
||||
emit loadingMoreRoomsChanged();
|
||||
loadingMoreRooms_ = false;
|
||||
emit loadingMoreRoomsChanged();
|
||||
|
||||
if (err) {
|
||||
nhlog::net()->error(
|
||||
|
@ -184,12 +185,12 @@ RoomDirectoryModel::displayRooms(std::vector<mtx::responses::PublicRoomsChunk> f
|
|||
endInsertRows();
|
||||
|
||||
if (next_batch.empty()) {
|
||||
canFetchMore_ = false;
|
||||
reachedEndOfPagination_ = true;
|
||||
emit reachedEndOfPaginationChanged();
|
||||
canFetchMore_ = false;
|
||||
reachedEndOfPagination_ = true;
|
||||
emit reachedEndOfPaginationChanged();
|
||||
}
|
||||
|
||||
prevBatch_ = next_batch;
|
||||
|
||||
nhlog::ui()->debug ("Finished loading rooms");
|
||||
nhlog::ui()->debug("Finished loading rooms");
|
||||
}
|
||||
|
|
|
@ -27,8 +27,9 @@ class RoomDirectoryModel : public QAbstractListModel
|
|||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY (bool loadingMoreRooms READ loadingMoreRooms NOTIFY loadingMoreRoomsChanged)
|
||||
Q_PROPERTY (bool reachedEndOfPagination READ reachedEndOfPagination NOTIFY reachedEndOfPaginationChanged)
|
||||
Q_PROPERTY(bool loadingMoreRooms READ loadingMoreRooms NOTIFY loadingMoreRoomsChanged)
|
||||
Q_PROPERTY(bool reachedEndOfPagination READ reachedEndOfPagination NOTIFY
|
||||
reachedEndOfPaginationChanged)
|
||||
|
||||
public:
|
||||
explicit RoomDirectoryModel(QObject *parent = nullptr, const std::string &s = "");
|
||||
|
@ -52,14 +53,11 @@ public:
|
|||
return static_cast<int>(publicRoomsData_.size());
|
||||
}
|
||||
|
||||
bool canFetchMore(const QModelIndex &) const override
|
||||
{
|
||||
return canFetchMore_;
|
||||
}
|
||||
bool canFetchMore(const QModelIndex &) const override { return canFetchMore_; }
|
||||
|
||||
bool loadingMoreRooms() const { return loadingMoreRooms_; }
|
||||
bool loadingMoreRooms() const { return loadingMoreRooms_; }
|
||||
|
||||
bool reachedEndOfPagination() const { return reachedEndOfPagination_; }
|
||||
bool reachedEndOfPagination() const { return reachedEndOfPagination_; }
|
||||
|
||||
void fetchMore(const QModelIndex &) override;
|
||||
|
||||
|
@ -69,8 +67,8 @@ public:
|
|||
signals:
|
||||
void fetchedRoomsBatch(std::vector<mtx::responses::PublicRoomsChunk> rooms,
|
||||
const std::string &next_batch);
|
||||
void loadingMoreRoomsChanged();
|
||||
void reachedEndOfPaginationChanged();
|
||||
void loadingMoreRoomsChanged();
|
||||
void reachedEndOfPaginationChanged();
|
||||
|
||||
public slots:
|
||||
void displayRooms(std::vector<mtx::responses::PublicRoomsChunk> rooms,
|
||||
|
@ -85,9 +83,9 @@ private:
|
|||
std::string userSearchString_;
|
||||
std::string prevBatch_;
|
||||
std::string nextBatch_;
|
||||
bool canFetchMore_ {true};
|
||||
bool loadingMoreRooms_ {false};
|
||||
bool reachedEndOfPagination_ {false};
|
||||
bool canFetchMore_{true};
|
||||
bool loadingMoreRooms_{false};
|
||||
bool reachedEndOfPagination_{false};
|
||||
std::vector<mtx::responses::PublicRoomsChunk> publicRoomsData_;
|
||||
|
||||
std::vector<std::string> getViasForRoom(const std::vector<std::string> &room);
|
||||
|
|
|
@ -286,8 +286,7 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par
|
|||
"EmojiCategory",
|
||||
"Error: Only enums");
|
||||
|
||||
qmlRegisterType<RoomDirectoryModel>(
|
||||
"im.nheko", 1, 0, "RoomDirectoryModel");
|
||||
qmlRegisterType<RoomDirectoryModel>("im.nheko", 1, 0, "RoomDirectoryModel");
|
||||
|
||||
#ifdef USE_QUICK_VIEW
|
||||
view = new QQuickView(parent);
|
||||
|
|
Loading…
Reference in a new issue