Scroll infinite.

This commit is contained in:
retoor 2025-02-17 18:42:59 +01:00
parent 8c33bc63d6
commit 477ca5917a
2 changed files with 31 additions and 5 deletions

View File

@ -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:

View File

@ -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;