aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrygve Aaberge <trygveaa@gmail.com>2020-05-16 19:08:00 +0200
committerTrygve Aaberge <trygveaa@gmail.com>2020-05-30 21:13:21 +0200
commitba2b1c77fd32ae88fbccf2b238d4f2c15a8d0ccd (patch)
tree4d9d9669923f18b0bea20709ee34f34c12af2231
parent624d5ba2e15ee5a2794273f9b9989d617d9d149a (diff)
downloadwee-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.py30
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"])