|
230 | 230 | .sds-id { |
231 | 231 | font-size: 7px; |
232 | 232 | } |
| 233 | + |
| 234 | + .source-label { |
| 235 | + font-size: 8px; |
| 236 | + } |
233 | 237 | } |
234 | 238 |
|
235 | 239 | /* Very small screens */ |
|
295 | 299 | margin-left: 1px; |
296 | 300 | } |
297 | 301 |
|
298 | | - /* SDS Message ID styling */ |
299 | | - .sds-id { |
| 302 | + /* Source label styling */ |
| 303 | + .source-label { |
300 | 304 | position: absolute; |
301 | 305 | right: 0; |
302 | 306 | top: 0; |
303 | | - font-size: 8px; |
| 307 | + font-size: 9px; |
304 | 308 | color: #00ff00; |
305 | 309 | opacity: 0.4; |
306 | 310 | font-family: 'Share Tech Mono', monospace; |
307 | 311 | transition: opacity 0.2s ease; |
308 | 312 | pointer-events: none; |
309 | 313 | z-index: 1; |
310 | 314 | background: rgba(0, 17, 0, 0.8); |
311 | | - padding: 1px 3px; |
| 315 | + padding: 1px 4px; |
312 | 316 | border-radius: 2px; |
313 | 317 | border: 1px solid rgba(0, 255, 0, 0.2); |
| 318 | + font-weight: bold; |
| 319 | + white-space: nowrap; |
314 | 320 | } |
315 | 321 |
|
316 | | - .message:hover .sds-id { |
| 322 | + .message:hover .source-label { |
317 | 323 | opacity: 0.9; |
318 | 324 | color: #00ff00; |
319 | 325 | } |
320 | 326 |
|
321 | | - .message.system-message .sds-id { |
| 327 | + .message.system-message .source-label { |
322 | 328 | display: none; |
323 | 329 | } |
324 | 330 |
|
325 | | - .message.historical-message .sds-id { |
| 331 | + .message.historical-message .source-label { |
326 | 332 | color: #0088aa; |
327 | 333 | opacity: 0.3; |
328 | 334 | } |
329 | 335 |
|
330 | | - .message.historical-message:hover .sds-id { |
| 336 | + .message.historical-message:hover .source-label { |
331 | 337 | opacity: 0.7; |
332 | 338 | } |
333 | 339 |
|
|
551 | 557 | if (retrievedSdsMessage.messageId === messageId) { |
552 | 558 | console.log(`Successfully retrieved ${messageId} using hash query`); |
553 | 559 |
|
| 560 | + // Mark the message as retrieved via hash query before feeding to SDS |
| 561 | + retrievedSdsMessage._retrievalSource = 'store - sds'; |
| 562 | + |
554 | 563 | // Feed the retrieved message back to SDS |
555 | 564 | this.messageChannel.receiveMessage(retrievedSdsMessage); |
556 | 565 | foundMessage = true; |
|
627 | 636 | const sdsMessage = decodeMessage(message.payload); |
628 | 637 |
|
629 | 638 | if (sdsMessage.content && sdsMessage.content.length > 0) { |
| 639 | + this.messageChannel.receiveMessage(sdsMessage); |
| 640 | + |
630 | 641 | // Found a valid SDS message! |
631 | 642 | foundSDSMessage = true; |
632 | 643 | if (!firstSDSMessage) { |
|
641 | 652 | timestamp: Number(decodedMessage.timestamp) * 1000, |
642 | 653 | sender: decodedMessage.nick, |
643 | 654 | text: new TextDecoder().decode(decodedMessage.payload), |
644 | | - sdsMessageId: sdsMessage.messageId || 'hist-' + Math.random().toString(36).substr(2, 6) |
| 655 | + sdsMessageId: sdsMessage.messageId || undefined, |
| 656 | + source: 'store - time' |
645 | 657 | }; |
646 | 658 |
|
647 | 659 | historicalMessages.push(chatMessage); |
|
1100 | 1112 | // Send through SDS for reliability |
1101 | 1113 | await this.messageChannel.sendMessage(payload, async (sdsMessage) => { |
1102 | 1114 | try { |
| 1115 | + // Mark the SDS message as sent by local app |
| 1116 | + sdsMessage._retrievalSource = 'sent'; |
| 1117 | + |
1103 | 1118 | // Create Waku message with SDS wrapper (causal history automatically included by SDS) |
1104 | 1119 | const wakuMessage = { payload: encodeMessage(sdsMessage) }; |
1105 | 1120 |
|
|
1262 | 1277 | sender: decodedMessage.nick, |
1263 | 1278 | text: new TextDecoder().decode(decodedMessage.payload), |
1264 | 1279 | sdsMessageId: sdsMessage.messageId || 'unknown', |
1265 | | - lamportTimestamp: sdsMessage.lamportTimestamp || 0 |
| 1280 | + lamportTimestamp: sdsMessage.lamportTimestamp || 0, |
| 1281 | + source: sdsMessage._retrievalSource || 'filter' // Use marked source or default to filter |
1266 | 1282 | }; |
1267 | 1283 |
|
1268 | 1284 | // Create content fingerprint using timestampMs for more precise duplicate detection |
|
1371 | 1387 | messageElement.className = 'message'; |
1372 | 1388 |
|
1373 | 1389 | const timestamp = new Date(message.timestamp).toLocaleTimeString(); |
1374 | | - const sdsId = message.sdsMessageId ? this.truncateSDSId(message.sdsMessageId) : 'no-id'; |
1375 | 1390 |
|
1376 | | - console.log('Adding chat message with SDS ID:', message.sdsMessageId, 'truncated to:', sdsId); |
| 1391 | + console.log('Adding chat message with source:', message.source); |
1377 | 1392 |
|
1378 | 1393 | messageElement.innerHTML = ` |
1379 | 1394 | <div class="message-content"> |
1380 | 1395 | <span class="timestamp">[${timestamp}]</span> |
1381 | 1396 | <span class="sender"><${this.escapeHtml(message.sender)}></span> |
1382 | 1397 | <span class="message-text"> ${this.escapeHtml(message.text)}</span> |
1383 | 1398 | </div> |
1384 | | - <div class="sds-id" title="SDS ID: ${message.sdsMessageId || 'Unknown'}">${sdsId}</div> |
| 1399 | + <div class="source-label" title="Message source: ${message.source}">${message.source}</div> |
1385 | 1400 | `; |
1386 | 1401 |
|
1387 | 1402 | this.chatContainer.appendChild(messageElement); |
|
1465 | 1480 | } |
1466 | 1481 |
|
1467 | 1482 | updateMessageSDSId(messageId, sdsMessageId) { |
1468 | | - const messageElement = this.chatContainer.querySelector(`[data-message-id="${messageId}"]`); |
1469 | | - if (messageElement) { |
1470 | | - const sdsElement = messageElement.querySelector('.sds-id'); |
1471 | | - if (sdsElement && sdsMessageId) { |
1472 | | - const truncatedId = this.truncateSDSId(sdsMessageId); |
1473 | | - sdsElement.textContent = truncatedId; |
1474 | | - sdsElement.title = `SDS ID: ${sdsMessageId}`; |
1475 | | - } |
1476 | | - } |
| 1483 | + // This function is no longer needed since we're using source labels instead of SDS IDs |
| 1484 | + // Keep it for compatibility but make it a no-op |
| 1485 | + console.log('updateMessageSDSId called but using source labels instead'); |
1477 | 1486 | } |
1478 | 1487 |
|
1479 | 1488 | truncateSDSId(sdsMessageId) { |
|
0 commit comments