diff options
author | Trygve Aaberge <trygveaa@gmail.com> | 2020-05-16 19:08:00 +0200 |
---|---|---|
committer | Trygve Aaberge <trygveaa@gmail.com> | 2020-05-30 21:13:21 +0200 |
commit | ba2b1c77fd32ae88fbccf2b238d4f2c15a8d0ccd (patch) | |
tree | 4d9d9669923f18b0bea20709ee34f34c12af2231 | |
parent | 624d5ba2e15ee5a2794273f9b9989d617d9d149a (diff) | |
download | wee-slack-ba2b1c77fd32ae88fbccf2b238d4f2c15a8d0ccd.tar.gz |
Use ts instead of count to limit visible_messages
When fetching replies for older threads, the messages in the thread
older than the first message we fetched from history would be displayed
in the buffer. We don't want these to be displayed, because there may be
other messages in between which we haven't fetched.
-rw-r--r-- | wee_slack.py | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/wee_slack.py b/wee_slack.py index 6b541fb..d05fc16 100644 --- a/wee_slack.py +++ b/wee_slack.py @@ -1572,11 +1572,7 @@ class SlackChannelCommon(object): if self.channel_buffer: w.buffer_clear(self.channel_buffer) for message in self.visible_messages.values(): - if message is not None: - self.prnt_message(message, history_message, no_log, force_render) - else: - w.prnt_date_tags(self.channel_buffer, SlackTS().major, - tag(backlog=True, no_log=True), '\tmissing message') + self.prnt_message(message, history_message, no_log, force_render) if (self.identifier in self.pending_history_requests or config.thread_messages_in_channel and self.pending_history_requests): self.print_getting_history() @@ -2139,23 +2135,34 @@ class SlackChannel(SlackChannelCommon): class SlackChannelVisibleMessages(MappingReversible): """ Class with a reversible mapping interface (like a read-only OrderedDict) - which limits the number of messages to SCROLLBACK_SIZE + which doesn't include the messages older than first_ts_to_display. """ def __init__(self, channel): self.channel = channel + self.first_ts_to_display = SlackTS(0) def __getitem__(self, key): + if key < self.first_ts_to_display: + raise KeyError(key) return self.channel.messages[key] def __iter__(self): - return islice(self.channel.messages, len(self.channel.messages) - len(self), None) + for ts in self.channel.messages: + if ts >= self.first_ts_to_display: + yield ts def __len__(self): - return min(len(self.channel.messages), SCROLLBACK_SIZE) + i = 0 + for _ in self: + i += 1 + return i def __reversed__(self): - return islice(reversed(self.channel.messages), SCROLLBACK_SIZE) + for ts in reversed(self.channel.messages): + if ts < self.first_ts_to_display: + break + yield ts class SlackChannelHashedMessages(dict): @@ -2535,7 +2542,7 @@ class SlackThreadChannelMessages(MappingReversible): def __getitem__(self, key): if key != self._parent_message.ts and key not in self._parent_message.submessages: raise KeyError(key) - return self.thread_channel.parent_channel.messages.get(key) + return self.thread_channel.parent_channel.messages[key] def __iter__(self): yield self._parent_message.ts @@ -3026,7 +3033,10 @@ def handle_history(message_json, eventrouter, team, channel, metadata, includes_ if (not includes_threads and config.thread_messages_in_channel and message and message.number_of_replies()): channel.get_thread_history(message.ts, metadata["slow_queue"], metadata["no_log"]) + channel.pending_history_requests.discard(channel.identifier) + if channel.visible_messages.first_ts_to_display.major == 0 and message_json["messages"]: + channel.visible_messages.first_ts_to_display = SlackTS(message_json["messages"][-1]["ts"]) channel.reprint_messages(history_message=True, no_log=metadata["no_log"]) for thread_channel in channel.thread_channels.values(): thread_channel.reprint_messages(history_message=True, no_log=metadata["no_log"]) |