Move ActiveStatus pull parsing into the model
This commit is contained in:
@@ -3199,53 +3199,25 @@ class Client(object):
|
|||||||
|
|
||||||
# Chat timestamp
|
# Chat timestamp
|
||||||
elif mtype == "chatproxy-presence":
|
elif mtype == "chatproxy-presence":
|
||||||
buddylist = dict()
|
statuses = dict()
|
||||||
for _id in m.get("buddyList", {}):
|
for id_, data in m.get("buddyList", {}).items():
|
||||||
payload = m["buddyList"][_id]
|
statuses[id_] = ActiveStatus._from_chatproxy_presence(id_, data)
|
||||||
|
self._buddylist[id_] = statuses[id_]
|
||||||
|
|
||||||
last_active = payload.get("lat")
|
self.onChatTimestamp(buddylist=statuses, msg=m)
|
||||||
active = payload.get("p") in [2, 3]
|
|
||||||
in_game = int(_id) in m.get("gamers", {})
|
|
||||||
|
|
||||||
buddylist[_id] = last_active
|
|
||||||
|
|
||||||
if self._buddylist.get(_id):
|
|
||||||
self._buddylist[_id].last_active = last_active
|
|
||||||
self._buddylist[_id].active = active
|
|
||||||
self._buddylist[_id].in_game = in_game
|
|
||||||
else:
|
|
||||||
self._buddylist[_id] = ActiveStatus(
|
|
||||||
active=active, last_active=last_active, in_game=in_game
|
|
||||||
)
|
|
||||||
|
|
||||||
self.onChatTimestamp(buddylist=buddylist, msg=m)
|
|
||||||
|
|
||||||
# Buddylist overlay
|
# Buddylist overlay
|
||||||
elif mtype == "buddylist_overlay":
|
elif mtype == "buddylist_overlay":
|
||||||
statuses = dict()
|
statuses = dict()
|
||||||
for _id in m.get("overlay", {}):
|
for id_, data in m.get("overlay", {}).items():
|
||||||
payload = m["overlay"][_id]
|
old_in_game = None
|
||||||
|
if id_ in self._buddylist:
|
||||||
|
old_in_game = self._buddylist[id_].in_game
|
||||||
|
|
||||||
last_active = payload.get("la")
|
statuses[id_] = ActiveStatus._from_buddylist_overlay(
|
||||||
active = payload.get("a") in [2, 3]
|
data, old_in_game
|
||||||
in_game = (
|
|
||||||
self._buddylist[_id].in_game
|
|
||||||
if self._buddylist.get(_id)
|
|
||||||
else False
|
|
||||||
)
|
)
|
||||||
|
self._buddylist[id_] = statuses[id_]
|
||||||
status = ActiveStatus(
|
|
||||||
active=active, last_active=last_active, in_game=in_game
|
|
||||||
)
|
|
||||||
|
|
||||||
if self._buddylist.get(_id):
|
|
||||||
self._buddylist[_id].last_active = last_active
|
|
||||||
self._buddylist[_id].active = active
|
|
||||||
self._buddylist[_id].in_game = in_game
|
|
||||||
else:
|
|
||||||
self._buddylist[_id] = status
|
|
||||||
|
|
||||||
statuses[_id] = status
|
|
||||||
|
|
||||||
self.onBuddylistOverlay(statuses=statuses, msg=m)
|
self.onBuddylistOverlay(statuses=statuses, msg=m)
|
||||||
|
|
||||||
|
@@ -74,3 +74,19 @@ class ActiveStatus(object):
|
|||||||
last_active = attr.ib(None)
|
last_active = attr.ib(None)
|
||||||
#: Whether the user is playing Messenger game now
|
#: Whether the user is playing Messenger game now
|
||||||
in_game = attr.ib(None)
|
in_game = attr.ib(None)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _from_chatproxy_presence(cls, id_, data):
|
||||||
|
return cls(
|
||||||
|
active=data["p"] in [2, 3] if "p" in data else None,
|
||||||
|
last_active=data.get("lat"),
|
||||||
|
in_game=int(id_) in data.get("gamers", {}),
|
||||||
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _from_buddylist_overlay(cls, data, in_game=None):
|
||||||
|
return cls(
|
||||||
|
active=data["a"] in [2, 3] if "a" in data else None,
|
||||||
|
last_active=data.get("la"),
|
||||||
|
in_game=None,
|
||||||
|
)
|
||||||
|
Reference in New Issue
Block a user