Rename key and values for m.room.history_visibility. Support 'invited' value

pull/196/head
Erik Johnston 2015-07-06 13:05:52 +01:00
parent c3e2600c67
commit fb47c3cfbe
4 changed files with 61 additions and 24 deletions

View File

@ -75,7 +75,7 @@ def prune_event(event):
elif event_type == EventTypes.Aliases:
add_fields("aliases")
elif event_type == EventTypes.RoomHistoryVisibility:
add_fields("visibility")
add_fields("history_visibility")
allowed_fields = {
k: v

View File

@ -239,22 +239,28 @@ class FederationHandler(BaseHandler):
return event
history = state.get((EventTypes.RoomHistoryVisibility, ''), None)
if history and history.content.get("visibility", None) == "after_join":
for ev in state.values():
if ev.type != EventTypes.Member:
continue
try:
domain = UserID.from_string(ev.state_key).domain
except:
continue
if history:
visibility = history.content.get("history_visibility", "shared")
if visibility in ["invited", "joined"]:
for ev in state.values():
if ev.type != EventTypes.Member:
continue
try:
domain = UserID.from_string(ev.state_key).domain
except:
continue
if domain != server_name:
continue
if domain != server_name:
continue
if ev.membership == Membership.JOIN:
return event
else:
return prune_event(event)
memtype = ev.membership
if memtype == Membership.JOIN:
return event
elif memtype == Membership.INVITE:
if visibility == "invited":
return event
else:
return prune_event(event)
return event

View File

@ -149,13 +149,29 @@ class MessageHandler(BaseHandler):
if event.type == EventTypes.RoomHistoryVisibility:
return True
membership = state.get((EventTypes.Member, user_id), None)
if membership and membership.membership == Membership.JOIN:
membership_ev = state.get((EventTypes.Member, user_id), None)
if membership_ev:
membership = membership_ev.membership
else:
membership = Membership.LEAVE
if membership == Membership.JOIN:
return True
history = state.get((EventTypes.RoomHistoryVisibility, ''), None)
if history and history.content.get("visibility", None) == "after_join":
return False
if history:
visibility = history.content.get("history_visibility", "shared")
else:
visibility = "shared"
if visibility == "public":
return True
elif visibility == "shared":
return True
elif visibility == "joined":
return membership == Membership.JOIN
elif visibility == "invited":
return membership == Membership.INVITE
return True

View File

@ -306,16 +306,31 @@ class SyncHandler(BaseHandler):
if event.type == EventTypes.RoomHistoryVisibility:
return True
membership = state.get((EventTypes.Member, user_id), None)
if membership and membership.membership == Membership.JOIN:
membership_ev = state.get((EventTypes.Member, user_id), None)
if membership_ev:
membership = membership_ev.membership
else:
membership = Membership.LEAVE
if membership == Membership.JOIN:
return True
history = state.get((EventTypes.RoomHistoryVisibility, ''), None)
if history and history.content.get("visibility", None) == "after_join":
return False
if history:
visibility = history.content.get("history_visibility", "shared")
else:
visibility = "shared"
if visibility == "public":
return True
elif visibility == "shared":
return True
elif visibility == "joined":
return membership == Membership.JOIN
elif visibility == "invited":
return membership == Membership.INVITE
return True
events_and_states = filter(allowed, events_and_states)
defer.returnValue([
ev