Skip to content
This repository was archived by the owner on May 29, 2026. It is now read-only.

Commit 1f4d658

Browse files
staticoclaude
andcommitted
Fix 5 bugs: Logger.warn data loss, falsy value handling, logging flag, boolean upsert, DM query
- Logger.warn: Accept Error|Record as 3rd param so Error objects aren't silently treated as data, dropping the actual data argument - NodeStore: Use ?? instead of || for hwModel and snr so valid zero values (hwModel=UNSET, snr=0) aren't discarded - enableLogging: Default to false so --enable-logging flag actually works (was always true, making the flag a no-op) - upsertNode: Pass 0 instead of null for false viaMqtt/isFavorite so COALESCE doesn't silently preserve stale true values - getDMConversations: Use correlated subquery for last_message instead of bare column with GROUP BY, which returns indeterminate results in SQLite Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> (cherry picked from commit 805e17f)
1 parent 621b1fa commit 1f4d658

4 files changed

Lines changed: 33 additions & 19 deletions

File tree

src/db/index.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,9 @@ export function upsertNode(node: DbNode) {
423423
node.channelUtilization ?? null,
424424
node.airUtilTx ?? null,
425425
node.channel ?? null,
426-
node.viaMqtt ? 1 : null,
426+
node.viaMqtt != null ? (node.viaMqtt ? 1 : 0) : null,
427427
node.hopsAway ?? null,
428-
node.isFavorite ? 1 : null,
428+
node.isFavorite != null ? (node.isFavorite ? 1 : 0) : null,
429429
node.publicKey ?? null,
430430
Date.now(),
431431
]);
@@ -879,19 +879,27 @@ export function getDMConversations(myNodeNum: number): DMConversation[] {
879879
// A DM is either: to_node = myNodeNum (received) or from_node = myNodeNum AND to_node != broadcast (sent)
880880
const rows = ensureDb().query(`
881881
SELECT
882-
CASE
883-
WHEN from_node = ? THEN to_node
884-
ELSE from_node
885-
END as other_node,
886-
text as last_message,
887-
MAX(timestamp) as last_timestamp,
888-
SUM(CASE WHEN from_node != ? AND status = 'received' THEN 1 ELSE 0 END) as unread_count
889-
FROM messages
890-
WHERE to_node != ?
891-
AND (from_node = ? OR to_node = ?)
882+
other_node,
883+
(SELECT m2.text FROM messages m2
884+
WHERE m2.to_node != ?
885+
AND ((m2.from_node = ? AND m2.to_node = other_node) OR (m2.from_node = other_node AND m2.to_node = ?))
886+
ORDER BY m2.timestamp DESC LIMIT 1) as last_message,
887+
MAX(m.timestamp) as last_timestamp,
888+
SUM(CASE WHEN m.from_node != ? AND m.status = 'received' THEN 1 ELSE 0 END) as unread_count
889+
FROM (
890+
SELECT
891+
CASE
892+
WHEN from_node = ? THEN to_node
893+
ELSE from_node
894+
END as other_node,
895+
from_node, timestamp, status
896+
FROM messages
897+
WHERE to_node != ?
898+
AND (from_node = ? OR to_node = ?)
899+
) m
892900
GROUP BY other_node
893901
ORDER BY last_timestamp DESC
894-
`).all(myNodeNum, myNodeNum, BROADCAST_ADDR, myNodeNum, myNodeNum) as Array<{
902+
`).all(BROADCAST_ADDR, myNodeNum, myNodeNum, myNodeNum, myNodeNum, BROADCAST_ADDR, myNodeNum, myNodeNum) as Array<{
895903
other_node: number;
896904
last_message: string;
897905
last_timestamp: number;

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ let session = "default";
283283
let clearSession = false;
284284
let meshViewUrl: string | undefined;
285285
let useFahrenheit = false;
286-
let enableLogging = true;
286+
let enableLogging = false;
287287
let packetLimit = 1000;
288288
let httpPort: number | undefined;
289289
let useTls = false;

src/logger.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,14 @@ class Logger {
4242
Logger.instance?.log(LogLevel.INFO, context, message, data);
4343
}
4444

45-
static warn(context: string, message: string, data?: Record<string, any>): void {
46-
Logger.instance?.log(LogLevel.WARN, context, message, data);
45+
static warn(context: string, message: string, errorOrData?: Error | Record<string, any>, data?: Record<string, any>): void {
46+
let errorData: Record<string, any> | undefined;
47+
if (errorOrData instanceof Error) {
48+
errorData = { ...data, error: errorOrData.message, stack: errorOrData.stack };
49+
} else {
50+
errorData = errorOrData;
51+
}
52+
Logger.instance?.log(LogLevel.WARN, context, message, errorData);
4753
}
4854

4955
static error(context: string, message: string, error?: Error, data?: Record<string, any>): void {

src/protocol/node-store.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ export class NodeStore {
6868
userId: info.user?.id || existing.userId,
6969
longName: info.user?.longName || existing.longName,
7070
shortName: info.user?.shortName || existing.shortName,
71-
hwModel: info.user?.hwModel || existing.hwModel,
71+
hwModel: info.user?.hwModel ?? existing.hwModel,
7272
publicKey: info.user?.publicKey?.length ? info.user.publicKey : existing.publicKey,
7373
latitudeI: info.position?.latitudeI ?? existing.latitudeI,
7474
longitudeI: info.position?.longitudeI ?? existing.longitudeI,
7575
altitude: info.position?.altitude ?? existing.altitude,
76-
snr: info.snr || existing.snr,
76+
snr: info.snr ?? existing.snr,
7777
lastHeard: info.lastHeard || existing.lastHeard || Date.now() / 1000,
7878
batteryLevel: info.deviceMetrics?.batteryLevel ?? existing.batteryLevel,
7979
voltage: info.deviceMetrics?.voltage ?? existing.voltage,
@@ -96,7 +96,7 @@ export class NodeStore {
9696
userId: user.id || existing.userId,
9797
longName: user.longName || existing.longName,
9898
shortName: user.shortName || existing.shortName,
99-
hwModel: user.hwModel || existing.hwModel,
99+
hwModel: user.hwModel ?? existing.hwModel,
100100
role: user.role ?? existing.role,
101101
publicKey: user.publicKey?.length ? user.publicKey : existing.publicKey,
102102
lastHeard: Date.now() / 1000,

0 commit comments

Comments
 (0)