From 477ca5917a59d3720a6a5ae01b307dec1a74cfaf Mon Sep 17 00:00:00 2001 From: retoor Date: Mon, 17 Feb 2025 18:42:59 +0100 Subject: [PATCH] Scroll infinite. --- src/snek/service/channel_message.py | 10 +++++----- src/snek/templates/web.html | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/snek/service/channel_message.py b/src/snek/service/channel_message.py index 953881e..9683631 100644 --- a/src/snek/service/channel_message.py +++ b/src/snek/service/channel_message.py @@ -55,14 +55,14 @@ class ChannelMessageService(BaseService): results = [] offset = page * page_size try: - if not timestamp: - async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid ORDER BY created_at DESC LIMIT :page_size OFFSET :offset",dict(channel_uid=channel_uid, page_size=page_size, offset=offset)): + if timestamp: + async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid AND created_at < :timestamp ORDER BY created_at DESC LIMIT :page_size OFFSET :offset",dict(channel_uid=channel_uid, page_size=page_size, offset=offset, timestamp=timestamp)): results.append(model) - elif page >= 0: - async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid WHERE created_at > :timestamp ORDER BY created_at DESC LIMIT :page_size OFFSET :offset",dict(channel_uid=channel_uid, page_size=page_size, offset=offset,timestamp=timestamp )): + elif page > 0: + async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid WHERE created_at < :timestamp ORDER BY created_at DESC LIMIT :page_size",dict(channel_uid=channel_uid, page_size=page_size, offset=offset,timestamp=timestamp )): results.append(model) else: - async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid WHERE created_at < :timestamp ORDER BY created_at DESC LIMIT :page_size OFFSET :offset",dict(channel_uid=channel_uid, page_size=page_size, offset=offset,timestamp=timestamp )): + async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid ORDER BY created_at DESC LIMIT :page_size OFFSET :offset",dict(channel_uid=channel_uid, page_size=page_size, offset=offset)): results.append(model) except: diff --git a/src/snek/templates/web.html b/src/snek/templates/web.html index 34972e7..1415497 100644 --- a/src/snek/templates/web.html +++ b/src/snek/templates/web.html @@ -55,6 +55,32 @@ rect.right <= (window.innerWidth || document.documentElement.clientWidth) ); } + + const messagesContainer = document.querySelector(".chat-messages"); + async function loadExtra() { + + const fourthMessage = messagesContainer.querySelector(".chat-messages :nth-child(4)"); + if(!fourthMessage){ + return + } + const firstMessage = messagesContainer.querySelector(".message:first-child"); + if(fourthMessage.dataset.seen){ + return + } + + if(isElementVisible(fourthMessage)){ + fourthMessage.dataset.seen = true + console.info(channelUid, fourthMessage.dataset.created_at) + const messages = await app.rpc.get_messages(channelUid, 1, fourthMessage.dataset.created_at); + messages.forEach((message) => { + firstMessage.insertAdjacentHTML("beforebegin", message.html); + }) + console.info(messages) + } + } + messagesContainer.addEventListener("scroll",()=>{ + loadExtra() + }); function updateLayout(doScrollDown) { const messagesContainer = document.querySelector(".chat-messages"); //messagesContainer.scrollTop = messagesContainer.scrollHeight + 1000;