whatsapp-pi 1.0.41 → 1.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "whatsapp-pi",
3
- "version": "1.0.41",
3
+ "version": "1.0.42",
4
4
  "type": "module",
5
5
  "description": "WhatsApp integration extension for Pi",
6
6
  "main": "whatsapp-pi.ts",
@@ -93,24 +93,38 @@ export class RecentsService {
93
93
  const summaries = new Map<string, RecentConversationSummary>();
94
94
 
95
95
  for (const [senderNumber, messages] of Object.entries(this.store.messagesBySender)) {
96
- if (messages.length === 0) continue;
97
- const lastMessage = messages[messages.length - 1];
96
+ const latestMessage = this.getLatestConversationMessage(messages);
97
+ if (!latestMessage) continue;
98
+
98
99
  summaries.set(senderNumber, {
99
100
  senderNumber,
100
101
  senderName: previousNames.get(senderNumber),
101
- lastMessagePreview: this.buildPreview(lastMessage.text),
102
- lastMessageTime: lastMessage.timestamp,
103
- lastMessageDirection: lastMessage.direction,
102
+ lastMessagePreview: this.buildPreview(latestMessage.text),
103
+ lastMessageTime: latestMessage.timestamp,
104
+ lastMessageDirection: latestMessage.direction,
104
105
  messageCount: messages.length,
105
106
  isAllowed: this.sessionManager.isAllowed(senderNumber)
106
107
  });
107
108
  }
108
109
 
109
- this.store.conversations = Array.from(summaries.values())
110
- .sort((left, right) => right.lastMessageTime - left.lastMessageTime)
110
+ this.store.conversations = this.sortConversationsByLatestMessage(Array.from(summaries.values()))
111
111
  .slice(0, 20);
112
112
  }
113
113
 
114
+ private getLatestConversationMessage(messages: RecentConversationMessage[]): RecentConversationMessage | undefined {
115
+ return messages[messages.length - 1];
116
+ }
117
+
118
+ private sortConversationsByLatestMessage(conversations: RecentConversationSummary[]): RecentConversationSummary[] {
119
+ return [...conversations].sort((left, right) => {
120
+ if (right.lastMessageTime !== left.lastMessageTime) {
121
+ return right.lastMessageTime - left.lastMessageTime;
122
+ }
123
+
124
+ return left.senderNumber.localeCompare(right.senderNumber);
125
+ });
126
+ }
127
+
114
128
  private buildPreview(text: string): string {
115
129
  const normalized = text.trim().replace(/\s+/g, ' ');
116
130
  if (normalized.length <= 80) return normalized;
@@ -172,12 +186,10 @@ export class RecentsService {
172
186
  isAllowed: this.sessionManager.isAllowed(senderNumber)
173
187
  };
174
188
 
175
- this.store.conversations = [
189
+ this.store.conversations = this.sortConversationsByLatestMessage([
176
190
  summary,
177
191
  ...this.store.conversations.filter(item => item.senderNumber !== senderNumber)
178
- ]
179
- .sort((left, right) => right.lastMessageTime - left.lastMessageTime)
180
- .slice(0, 20);
192
+ ]).slice(0, 20);
181
193
 
182
194
  await this.persistStore();
183
195
  }