Fix outdated presence for lazy loaded members

This commit is contained in:
vslg
2020-07-01 17:55:03 -03:00
committed by miruka
parent 59198da3b0
commit 6e202c3e27
6 changed files with 55 additions and 39 deletions

View File

@@ -29,10 +29,26 @@ class TypeSpecifier(AutoStrEnum):
MembershipChange = auto()
class Presence(AutoStrEnum):
Offline = auto() # can mean offline, invisible or unknwon
Unavailable = auto()
Online = auto()
@dataclass
class Presence():
class State(AutoStrEnum):
offline = auto() # can mean offline, invisible or unknwon
unavailable = auto()
online = auto()
def __lt__(self, other: "Presence.State") -> bool:
order = [self.online, self.unavailable, self.offline]
return (
order.index(self) # type: ignore
) < (
order.index(other) # type: ignore
)
status_msg: str = ""
presence: State = State.offline
last_active_ago: int = -1
currently_active: bool = False
@dataclass
@@ -169,7 +185,7 @@ class AccountOrRoom(Account, Room):
@dataclass
class Member(ModelItem):
class Member(Presence, ModelItem):
"""A member in a matrix room."""
id: str = field()
@@ -183,22 +199,22 @@ class Member(ModelItem):
last_read_event: str = ""
last_read_at: datetime = ZeroDate
last_active_ago: int = -1
currently_active: bool = False
presence: Presence = Presence.Offline
status_message: str = ""
def __lt__(self, other: "Member") -> bool:
"""Sort by power level, then by display name/user ID."""
"""Sort by presence, power level, then by display name/user ID."""
name = self.display_name or self.id[1:]
other_name = other.display_name or other.id[1:]
return (
self.invited, other.power_level, name.lower(),
self.presence,
self.invited,
other.power_level,
name.lower(),
) < (
other.invited, self.power_level, other_name.lower(),
other.presence,
other.invited,
self.power_level,
other_name.lower(),
)