diff --git a/imports/Spectral/Panel/RoomDrawer.qml b/imports/Spectral/Panel/RoomDrawer.qml index 6ba25b5..dc07bbd 100644 --- a/imports/Spectral/Panel/RoomDrawer.qml +++ b/imports/Spectral/Panel/RoomDrawer.qml @@ -115,58 +115,49 @@ Drawer { room: roomDrawer.room } - delegate: Column { - property bool expanded: false + delegate: SwipeDelegate { + width: userListView.width + height: 48 - ItemDelegate { - width: userListView.width - height: 48 + RowLayout { + anchors.fill: parent + anchors.margins: 8 + spacing: 12 - RowLayout { - anchors.fill: parent - anchors.margins: 8 - spacing: 12 + ImageItem { + Layout.preferredWidth: height + Layout.fillHeight: true - ImageItem { - Layout.preferredWidth: height - Layout.fillHeight: true - - source: paintable - hint: name - } - - Label { - Layout.fillWidth: true - - text: name - } + source: paintable + hint: name } - onClicked: expanded = !expanded - } - - ColumnLayout { - width: parent.width - 32 - height: expanded ? implicitHeight : 0 - anchors.horizontalCenter: parent.horizontalCenter - - spacing: 0 - - clip: true - - Button { + Label { Layout.fillWidth: true - text: "Kick" - highlighted: true - - onClicked: room.kickMember(userId) - } - - Behavior on height { - PropertyAnimation { easing.type: Easing.InOutCubic; duration: 200 } + text: name } } + + swipe.right: Rectangle { + width: height + height: parent.height + anchors.right: parent.right + color: Material.accent + + MaterialIcon { + anchors.fill: parent + icon: "\ue879" + color: "white" + } + + SwipeDelegate.onClicked: { + room.kickMember(userId) + swipe.close() + } + } + + onClicked: swipe.open(SwipeDelegate.Right) } ScrollBar.vertical: ScrollBar {} diff --git a/src/controller.cpp b/src/controller.cpp index 98bb431..06dffed 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -40,6 +40,13 @@ Controller::Controller(QObject* parent) QTimer::singleShot(0, this, SLOT(invokeLogin())); } +Controller::~Controller() { + for (Connection* c : m_connections) { + c->saveState(); + c->stopSync(); + } +} + inline QString accessTokenFileName(const AccountSettings& account) { QString fileName = account.userId(); fileName.replace(':', '_'); @@ -103,8 +110,10 @@ void Controller::addConnection(Connection* c) { m_connections.push_back(c); connect(c, &Connection::syncDone, this, [=] { - c->saveState(); c->sync(30000); + + static int counter = 0; + if (++counter % 17 == 2) c->saveState(); }); connect(c, &Connection::loggedOut, this, [=] { dropConnection(c); }); diff --git a/src/controller.h b/src/controller.h index 8638455..0234fb4 100644 --- a/src/controller.h +++ b/src/controller.h @@ -23,7 +23,7 @@ class Controller : public QObject { public: explicit Controller(QObject* parent = nullptr); - ~Controller(){}; + ~Controller(); // All the Q_INVOKABLEs. Q_INVOKABLE void loginWithCredentials(QString, QString, QString);