Bug fix and minor improvements

Improvements:
- Add instant feedback upon setting a different
  presence for account (local echo)
- Sort room members by power level and then
  presence
- Periodically update members' `last_acitve_at`
  field on the room pane
- Move status message field up on account context
  menu, and put invisible before offline again

Bug fix:
- Do not try to override presence set from
  another client, accept it
This commit is contained in:
vslg
2020-07-09 20:53:25 -03:00
committed by miruka
parent a3c9ac20c6
commit 43df8fd60b
6 changed files with 94 additions and 60 deletions

View File

@@ -71,12 +71,13 @@ HAvatar {
anchors.bottom: parent.bottom
anchors.right: parent.right
radius: diameter / 2
opacity: presence.includes("echo") ? 0.4 : 1
color:
presence === "online" ?
presence.includes("online") ?
theme.controls.presence.online :
presence === "unavailable" ?
presence.includes("unavailable") ?
theme.controls.presence.unavailable :
theme.controls.presence.offline
@@ -84,6 +85,9 @@ HAvatar {
border.color: theme.controls.presence.border
border.width: diameter / 10
Behavior on color { HColorAnimation {} }
Behavior on opacity { HNumberAnimation {} }
HoverHandler { id: presenceHover }
HToolTip {

View File

@@ -21,38 +21,6 @@ HMenu {
}
HMenuItem {
icon.name: "presence"
icon.color: theme.controls.presence.online
text: qsTr("Online")
onTriggered: setPresence("online")
}
HMenuItem {
enabled: presence
icon.name: "presence-busy"
icon.color: theme.controls.presence.unavailable
text: qsTr("Unavailable")
onTriggered: setPresence("unavailable")
}
HMenuItem {
icon.name: "presence-offline"
icon.color: theme.controls.presence.offline
text: qsTr("Offline")
onTriggered: setPresence("offline")
}
HMenuItem {
enabled: presence
icon.name: "presence-invisible"
icon.color: theme.controls.presence.offline
text: qsTr("Invisible")
onTriggered: setPresence("invisible")
}
HMenuSeparator { }
HLabeledItem {
id: statusMsgLabel
enabled: presence && presence !== "offline"
@@ -95,6 +63,38 @@ HMenu {
}
}
HMenuSeparator { }
HMenuItem {
icon.name: "presence"
icon.color: theme.controls.presence.online
text: qsTr("Online")
onTriggered: setPresence("online")
}
HMenuItem {
enabled: presence
icon.name: "presence-busy"
icon.color: theme.controls.presence.unavailable
text: qsTr("Unavailable")
onTriggered: setPresence("unavailable")
}
HMenuItem {
enabled: presence
icon.name: "presence-invisible"
icon.color: theme.controls.presence.offline
text: qsTr("Invisible")
onTriggered: setPresence("invisible")
}
HMenuItem {
icon.name: "presence-offline"
icon.color: theme.controls.presence.offline
text: qsTr("Offline")
onTriggered: setPresence("offline")
}
HMenuSeparator {
visible: statusMsgLabel.visible
height: visible ? implicitHeight : 0

View File

@@ -44,11 +44,25 @@ HTile {
TitleRightInfoLabel {
tile: member
text:
model.presence !== "online" &&
model.last_active_ago !== -1 ?
utils.formatRelativeTime(model.last_active_ago) :
""
visible: presenceTimer.running
Timer {
id: presenceTimer
running:
! model.currently_active &&
model.last_active_at > new Date(1)
repeat: true
interval:
new Date() - model.last_active_at < 60000 ?
10000 :
60000
triggeredOnStart: true
onTriggered: parent.text = Qt.binding(() =>
utils.formatRelativeTime(
new Date() - model.last_active_at
)
)
}
}
}