feat: Ältere Nachrichten nachladen per Button (500er Batches)
- Backend: beforeId-Parameter + GetActiveMessagesBeforeId + GetActiveMessageCountBeforeId - Frontend: Button 'X ältere Nachrichten laden' statt Info-Text - Archiv-Button erscheint erst wenn alle älteren Nachrichten geladen - Scroll-Position bleibt beim Nachladen erhalten - Fix: wwwroot Quell-Dateien mit publish synchronisiert
This commit is contained in:
1 parent
38bdb4408c
commit
575e5c1d44
7 files changed
+233
-18
No files matched your search
@@ -34,9 +34,26 @@ public static class HistoryEndpoint
|
||||
}
|
||||
|
||||
const int messageLimit = 500;
|
||||
var beforeStr = ctx.Request.Query["beforeId"].FirstOrDefault();
|
||||
var beforeId = long.TryParse(beforeStr, out var b) ? b : 0;
|
||||
|
||||
var totalCount = await db.GetActiveMessageCount(sessionId);
|
||||
var messages = await db.GetLatestActiveMessages(sessionId, messageLimit);
|
||||
|
||||
List<MessageRecord> messages;
|
||||
if (beforeId > 0)
|
||||
{
|
||||
messages = await db.GetActiveMessagesBeforeId(sessionId, beforeId, messageLimit);
|
||||
}
|
||||
else
|
||||
{
|
||||
messages = await db.GetLatestActiveMessages(sessionId, messageLimit);
|
||||
}
|
||||
|
||||
// Zähle wie viele Nachrichten es VOR der ältesten geladenen noch gibt
|
||||
var oldestLoadedId = messages.Count > 0 ? messages[0].Id : 0;
|
||||
var remainingOlder = oldestLoadedId > 0
|
||||
? await db.GetActiveMessageCountBeforeId(sessionId, oldestLoadedId)
|
||||
: 0;
|
||||
|
||||
// Nach Chain gruppieren (Reihenfolge beibehalten)
|
||||
var chainIds = messages.Select(m => m.ChainId).Distinct().ToList();
|
||||
@@ -54,7 +71,8 @@ public static class HistoryEndpoint
|
||||
await ctx.Response.WriteAsJsonAsync(new
|
||||
{
|
||||
entries = result,
|
||||
hasMore = totalCount > messageLimit,
|
||||
hasMore = remainingOlder > 0,
|
||||
remainingCount = remainingOlder,
|
||||
totalCount,
|
||||
loadedCount = messages.Count
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user