widget parole 26
This commit is contained in:
parent
cf2e398ce0
commit
21aa9c041b
@ -163,12 +163,10 @@ export async function GET(request: Request) {
|
|||||||
|
|
||||||
const messages: any[] = [];
|
const messages: any[] = [];
|
||||||
const processedRooms = new Set();
|
const processedRooms = new Set();
|
||||||
|
const latestMessagePerRoom: { [key: string]: any } = {};
|
||||||
|
|
||||||
// Step 5: Fetch messages using user token
|
// Step 5: Fetch messages using user token
|
||||||
for (const subscription of userSubscriptions) {
|
for (const subscription of userSubscriptions) {
|
||||||
if (messages.length >= 10 || processedRooms.has(subscription.rid)) continue;
|
|
||||||
processedRooms.add(subscription.rid);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Determine the correct endpoint and parameters based on room type
|
// Determine the correct endpoint and parameters based on room type
|
||||||
let endpoint;
|
let endpoint;
|
||||||
@ -188,7 +186,7 @@ export async function GET(request: Request) {
|
|||||||
|
|
||||||
const queryParams = new URLSearchParams({
|
const queryParams = new URLSearchParams({
|
||||||
roomId: subscription.rid,
|
roomId: subscription.rid,
|
||||||
count: '5'
|
count: '5' // Keep this to ensure we get the latest message
|
||||||
});
|
});
|
||||||
|
|
||||||
const messagesResponse = await fetch(
|
const messagesResponse = await fetch(
|
||||||
@ -215,36 +213,39 @@ export async function GET(request: Request) {
|
|||||||
const validMessages = messageData.messages.filter((message: any) => {
|
const validMessages = messageData.messages.filter((message: any) => {
|
||||||
// For channels, apply strict filtering
|
// For channels, apply strict filtering
|
||||||
if (subscription.t === 'c') {
|
if (subscription.t === 'c') {
|
||||||
// Skip if:
|
|
||||||
// 1. No message text
|
|
||||||
// 2. System message (has type 't')
|
|
||||||
// 3. No user info
|
|
||||||
// 4. Join/leave messages
|
|
||||||
// 5. User added/removed messages
|
|
||||||
if (!message.msg || // No message text
|
if (!message.msg || // No message text
|
||||||
message.t || // System message
|
message.t || // System message
|
||||||
!message.u || // No user info
|
!message.u || // No user info
|
||||||
message.msg.includes('has joined the channel') ||
|
message.msg.includes('has joined the channel') ||
|
||||||
message.msg.includes('has left the channel') ||
|
message.msg.includes('has left the channel') ||
|
||||||
message.msg.includes('added') ||
|
message.msg.includes('added') ||
|
||||||
message.msg.includes('removed')) {
|
message.msg.includes('removed') ||
|
||||||
|
(message.msg.includes('started a call') && message.u._id === currentUser._id)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Process filtered messages
|
// Only process the latest valid message from this room
|
||||||
for (const message of validMessages) {
|
if (validMessages.length > 0) {
|
||||||
const messageUser = message.u || {};
|
// Get the latest message (they should already be sorted by timestamp)
|
||||||
|
const latestMessage = validMessages[0];
|
||||||
|
const messageUser = latestMessage.u || {};
|
||||||
const username = messageUser.username || 'unknown';
|
const username = messageUser.username || 'unknown';
|
||||||
|
|
||||||
// Get proper display names
|
// Get proper display names
|
||||||
let roomDisplayName = subscription.fname || subscription.name;
|
let roomDisplayName = subscription.fname || subscription.name;
|
||||||
let userDisplayName = messageUser.name || username;
|
let userDisplayName = messageUser.name || username;
|
||||||
|
|
||||||
|
// Handle call messages
|
||||||
|
let messageText = latestMessage.msg || '';
|
||||||
|
if (messageText.includes('started a call')) {
|
||||||
|
messageText = '📞 Call received';
|
||||||
|
}
|
||||||
|
|
||||||
// Format timestamp
|
// Format timestamp
|
||||||
const timestamp = new Date(message.ts);
|
const timestamp = new Date(latestMessage.ts);
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
let formattedTime = '';
|
let formattedTime = '';
|
||||||
|
|
||||||
@ -270,11 +271,11 @@ export async function GET(request: Request) {
|
|||||||
.join('')
|
.join('')
|
||||||
.toUpperCase();
|
.toUpperCase();
|
||||||
|
|
||||||
messages.push({
|
const processedMessage = {
|
||||||
id: message._id,
|
id: latestMessage._id,
|
||||||
text: message.msg || '',
|
text: messageText,
|
||||||
timestamp: formattedTime,
|
timestamp: formattedTime,
|
||||||
rawTimestamp: message.ts,
|
rawTimestamp: latestMessage.ts,
|
||||||
roomName: roomDisplayName,
|
roomName: roomDisplayName,
|
||||||
roomType: subscription.t,
|
roomType: subscription.t,
|
||||||
sender: {
|
sender: {
|
||||||
@ -294,7 +295,13 @@ export async function GET(request: Request) {
|
|||||||
isDirect: subscription.t === 'd',
|
isDirect: subscription.t === 'd',
|
||||||
link: `${baseUrl}/${subscription.t === 'd' ? 'direct' : subscription.t === 'p' ? 'group' : 'channel'}/${subscription.name}`
|
link: `${baseUrl}/${subscription.t === 'd' ? 'direct' : subscription.t === 'p' ? 'group' : 'channel'}/${subscription.name}`
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
|
// Store this message if it's the latest for this room
|
||||||
|
if (!latestMessagePerRoom[subscription.rid] ||
|
||||||
|
new Date(latestMessage.ts).getTime() > new Date(latestMessagePerRoom[subscription.rid].rawTimestamp).getTime()) {
|
||||||
|
latestMessagePerRoom[subscription.rid] = processedMessage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -303,15 +310,19 @@ export async function GET(request: Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort messages by timestamp (newest first) and limit
|
// Convert the latest messages object to an array and sort by timestamp
|
||||||
const sortedMessages = messages
|
const sortedMessages = Object.values(latestMessagePerRoom)
|
||||||
.sort((a, b) => new Date(b.rawTimestamp).getTime() - new Date(a.rawTimestamp).getTime())
|
.sort((a, b) => {
|
||||||
|
const dateA = new Date(a.rawTimestamp);
|
||||||
|
const dateB = new Date(b.rawTimestamp);
|
||||||
|
return dateB.getTime() - dateA.getTime();
|
||||||
|
})
|
||||||
.slice(0, 10);
|
.slice(0, 10);
|
||||||
|
|
||||||
return NextResponse.json({
|
return NextResponse.json({
|
||||||
messages: sortedMessages,
|
messages: sortedMessages,
|
||||||
total: messages.length,
|
total: Object.keys(latestMessagePerRoom).length,
|
||||||
hasMore: messages.length > 10
|
hasMore: Object.keys(latestMessagePerRoom).length > 10
|
||||||
}, { status: 200 });
|
}, { status: 200 });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error in messages endpoint:', error);
|
console.error('Error in messages endpoint:', error);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user