From 48963c1cdfef7fcbd4eacefdff49a030543da2ff Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Tue, 10 Dec 2013 10:35:16 -0500 Subject: [PATCH] Replace accepts_event_type with accepts_event. This is in preparation for allowing queues to only accept some messages. (imported from commit 6bca11a9084aeff52931762085c4c771edbce56e) --- zerver/lib/event_queue.py | 13 ++++++++----- zerver/tornado_callbacks.py | 23 ++++++++++++++--------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/zerver/lib/event_queue.py b/zerver/lib/event_queue.py index b4ba288ac4..a2dbe42e9b 100644 --- a/zerver/lib/event_queue.py +++ b/zerver/lib/event_queue.py @@ -113,10 +113,14 @@ class ClientDescriptor(object): return True return False - def accepts_event_type(self, type): + def accepts_event(self, event): if self.event_types is None: return True - return type in self.event_types + return event["type"] in self.event_types + + # TODO: Refactor so we don't need this function + def accepts_messages(self): + return self.event_types is None or "message" in self.event_types def idle(self, now): if not hasattr(self, 'queue_timeout'): @@ -379,9 +383,8 @@ def load_event_queues(): def send_restart_events(): event = dict(type='restart', server_generation=settings.SERVER_GENERATION) for client in clients.itervalues(): - if not client.accepts_event_type('restart'): - continue - client.add_event(event.copy()) + if client.accepts_event(event): + client.add_event(event.copy()) def setup_event_queue(): load_event_queues() diff --git a/zerver/tornado_callbacks.py b/zerver/tornado_callbacks.py index 65ae109936..39647718d6 100644 --- a/zerver/tornado_callbacks.py +++ b/zerver/tornado_callbacks.py @@ -28,7 +28,7 @@ NOTIFY_AFTER_IDLE_HOURS = 1 def update_pointer(user_profile_id, new_pointer): event = dict(type='pointer', pointer=new_pointer) for client in get_client_descriptors_for_user(user_profile_id): - if client.accepts_event_type(event['type']): + if client.accepts_event(event): client.add_event(event.copy()) @@ -116,7 +116,7 @@ def receiver_is_idle(user_profile, realm_presences): # If a user has no message-receiving event queues, they've got no open zulip # session so we notify them all_client_descriptors = get_client_descriptors_for_user(user_profile.id) - message_event_queues = [client for client in all_client_descriptors if client.accepts_event_type('message')] + message_event_queues = [client for client in all_client_descriptors if client.accepts_messages()] off_zulip = len(message_event_queues) == 0 # It's possible a recipient is not in the realm of a sender. We don't have @@ -180,12 +180,10 @@ def process_new_message(data): queue_json_publish("missedmessage_mobile_notifications", event, lambda event: None) for client, flags in send_to_clients.itervalues(): - if not client.accepts_event_type('message'): - continue - - # The below prevents (Zephyr) mirroring loops. - if ('mirror' in message.sending_client.name and - message.sending_client == client.client_type): + if not client.accepts_messages(): + # The actual check is the accepts_event() check below; + # this line is just an optimization to avoid copying + # message data unnecessarily continue if client.apply_markdown: @@ -199,13 +197,20 @@ def process_new_message(data): message_dict["invite_only_stream"] = True event = dict(type='message', message=message_dict, flags=flags) + if not client.accepts_event(event): + continue + + # The below prevents (Zephyr) mirroring loops. + if ('mirror' in message.sending_client.name and + message.sending_client == client.client_type): + continue client.add_event(event) def process_event(data): event = data['event'] for user_profile_id in data['users']: for client in get_client_descriptors_for_user(user_profile_id): - if client.accepts_event_type(event['type']): + if client.accepts_event(event): client.add_event(event.copy()) def process_notification(data):