Make offline presence to stop sync
Setting the presence of an account to offline will make the client to end sync task and will prevent messages from being sent. Setting it to online again or any other presence will start sync task again. Left: - Local echo to presence change - UI Control to affect all members presence - Block more requests to be sent (e.g. member actions)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Shapes 1.15
|
||||
import QtQuick.Shapes 1.12
|
||||
|
||||
HAvatar {
|
||||
name: displayName || userId.substring(1) // no leading @
|
||||
|
@@ -12,18 +12,16 @@ HMenu {
|
||||
property string userId
|
||||
property string presence
|
||||
property string statusMsg
|
||||
property bool firstSyncDone
|
||||
|
||||
onOpened: statusText.forceActiveFocus()
|
||||
|
||||
|
||||
function setPresence(presence, statusMsg = null) {
|
||||
function setPresence(presence, statusMsg = undefined) {
|
||||
py.callClientCoro(userId, "set_presence", [presence, statusMsg])
|
||||
}
|
||||
|
||||
|
||||
HMenuItem {
|
||||
enabled: firstSyncDone
|
||||
icon.name: "presence"
|
||||
icon.color: theme.controls.presence.online
|
||||
text: qsTr("Online")
|
||||
@@ -31,8 +29,7 @@ HMenu {
|
||||
}
|
||||
|
||||
HMenuItem {
|
||||
visible: presence
|
||||
enabled: firstSyncDone
|
||||
enabled: presence
|
||||
icon.name: "presence-busy"
|
||||
icon.color: theme.controls.presence.unavailable
|
||||
text: qsTr("Unavailable")
|
||||
@@ -40,7 +37,6 @@ HMenu {
|
||||
}
|
||||
|
||||
HMenuItem {
|
||||
enabled: firstSyncDone
|
||||
icon.name: "presence-offline"
|
||||
icon.color: theme.controls.presence.offline
|
||||
text: qsTr("Offline")
|
||||
@@ -48,8 +44,7 @@ HMenu {
|
||||
}
|
||||
|
||||
HMenuItem {
|
||||
visible: presence
|
||||
enabled: firstSyncDone
|
||||
enabled: presence
|
||||
icon.name: "presence-invisible"
|
||||
icon.color: theme.controls.presence.offline
|
||||
text: qsTr("Invisible")
|
||||
@@ -60,8 +55,7 @@ HMenu {
|
||||
|
||||
HLabeledItem {
|
||||
id: statusMsgLabel
|
||||
visible: presence
|
||||
enabled: firstSyncDone
|
||||
enabled: presence && presence !== "offline"
|
||||
width: parent.width
|
||||
height: visible ? implicitHeight : 0
|
||||
label.text: qsTr("Status message:")
|
||||
@@ -80,12 +74,14 @@ HMenu {
|
||||
}
|
||||
|
||||
defaultText: statusMsg
|
||||
placeholderText: ! presence ? "Unsupported server" : ""
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
HButton {
|
||||
id: button
|
||||
visible: presence
|
||||
|
||||
icon.name: "apply"
|
||||
icon.color: theme.colors.positiveBackground
|
||||
|
@@ -13,7 +13,12 @@ HTile {
|
||||
tile: account
|
||||
spacing: 0
|
||||
opacity:
|
||||
collapsed ? theme.mainPane.listView.account.collapsedOpacity : 1
|
||||
collapsed ?
|
||||
theme.mainPane.listView.account.collapsedOpacity :
|
||||
|
||||
model.presence == "offline" ?
|
||||
theme.mainPane.listView.offlineOpacity :
|
||||
1
|
||||
|
||||
Behavior on opacity { HNumberAnimation {} }
|
||||
|
||||
@@ -25,14 +30,14 @@ HTile {
|
||||
radius: theme.mainPane.listView.account.avatarRadius
|
||||
compact: account.compact
|
||||
|
||||
presence: model.presence
|
||||
presence: model.presence_support ? model.presence : ""
|
||||
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
HLoader {
|
||||
anchors.fill: parent
|
||||
z: 9998
|
||||
opacity: model.first_sync_done ? 0 : 1
|
||||
opacity: model.connecting ? 1 : 0
|
||||
active: opacity > 0
|
||||
|
||||
sourceComponent: Rectangle {
|
||||
@@ -157,12 +162,12 @@ HTile {
|
||||
}
|
||||
|
||||
contextMenu: AccountContextMenu {
|
||||
userId: model.id
|
||||
presence: model.presence_support ? model.presence : null
|
||||
statusMsg: model.status_msg
|
||||
|
||||
// Gray out buttons before first sync
|
||||
firstSyncDone: model.first_sync_done
|
||||
userId: model.id
|
||||
presence:
|
||||
model.presence_support || model.presence === "offline" ?
|
||||
model.presence :
|
||||
null
|
||||
statusMsg: model.status_msg
|
||||
}
|
||||
|
||||
|
||||
|
@@ -15,7 +15,13 @@ HTile {
|
||||
|
||||
contentItem: ContentRow {
|
||||
tile: room
|
||||
opacity: model.left ? theme.mainPane.listView.room.leftRoomOpacity : 1
|
||||
opacity:
|
||||
accountModel.presence === "offline" ?
|
||||
theme.mainPane.listView.offlineOpacity :
|
||||
|
||||
model.left ?
|
||||
theme.mainPane.listView.room.leftRoomOpacity :
|
||||
1
|
||||
|
||||
Behavior on opacity { HNumberAnimation {} }
|
||||
|
||||
@@ -179,6 +185,10 @@ HTile {
|
||||
readonly property ListModel eventModel:
|
||||
ModelStore.get(model.for_account, model.id, "events")
|
||||
|
||||
// TODO: binding loop
|
||||
readonly property QtObject accountModel:
|
||||
ModelStore.get("accounts").find(model.for_account)
|
||||
|
||||
readonly property QtObject lastEvent:
|
||||
eventModel.count > 0 ? eventModel.get(0) : null
|
||||
}
|
||||
|
@@ -57,6 +57,10 @@ MultiviewPane {
|
||||
}
|
||||
|
||||
|
||||
readonly property QtObject accountModel:
|
||||
ModelStore.get("accounts").find(chat.roomInfo.for_account)
|
||||
|
||||
|
||||
function toggleFocus() {
|
||||
if (roomPane.activeFocus) {
|
||||
if (roomPane.collapse) roomPane.close()
|
||||
@@ -78,7 +82,9 @@ MultiviewPane {
|
||||
}
|
||||
|
||||
MemberView {}
|
||||
SettingsView {}
|
||||
SettingsView {
|
||||
enabled: accountModel.presence !== "offline"
|
||||
}
|
||||
|
||||
HShortcut {
|
||||
sequences: window.settings.keys.toggleFocusRoomPane
|
||||
|
Reference in New Issue
Block a user