Dead and trivial code rip out (whoof)

This commit is contained in:
Jack Kingsman
2026-02-04 12:06:36 -08:00
parent edfc95a2e2
commit ad5e799a62
21 changed files with 28 additions and 744 deletions
-7
View File
@@ -204,13 +204,6 @@ export const api = {
body: JSON.stringify({ type, id }),
}),
// Last message time tracking
updateLastMessageTime: (stateKey: string, timestamp: number) =>
fetchJson<{ status: string }>('/settings/last-message-time', {
method: 'POST',
body: JSON.stringify({ state_key: stateKey, timestamp }),
}),
// Preferences migration (one-time, from localStorage to database)
migratePreferences: (request: MigratePreferencesRequest) =>
fetchJson<MigratePreferencesResponse>('/settings/migrate', {
+1 -2
View File
@@ -12,8 +12,7 @@ import {
type SimulationLinkDatum,
} from 'd3-force';
import { MeshCoreDecoder, PayloadType } from '@michaelhart/meshcore-decoder';
import type { Contact, RawPacket, RadioConfig } from '../types';
import { CONTACT_TYPE_REPEATER } from '../utils/contactAvatar';
import { CONTACT_TYPE_REPEATER, type Contact, type RawPacket, type RadioConfig } from '../types';
import { Checkbox } from './ui/checkbox';
// =============================================================================
+11 -11
View File
@@ -1,9 +1,14 @@
import { useState } from 'react';
import type { Contact, Channel, Conversation, Favorite } from '../types';
import {
CONTACT_TYPE_REPEATER,
type Contact,
type Channel,
type Conversation,
type Favorite,
} from '../types';
import { getStateKey, type ConversationTimes } from '../utils/conversationState';
import { getContactDisplayName } from '../utils/pubkey';
import { ContactAvatar } from './ContactAvatar';
import { CONTACT_TYPE_REPEATER } from '../utils/contactAvatar';
import { isFavorite } from '../utils/favorites';
import { Input } from './ui/input';
import { Button } from './ui/button';
@@ -32,11 +37,6 @@ interface SidebarProps {
onSortOrderChange?: (order: SortOrder) => void;
}
/** Format unread count for display */
function formatUnreadCount(count: number): string {
return `${count}`;
}
export function Sidebar({
contacts,
channels,
@@ -379,7 +379,7 @@ export function Sidebar({
: 'bg-primary text-primary-foreground'
)}
>
{formatUnreadCount(unreadCount)}
{unreadCount}
</span>
)}
</div>
@@ -422,7 +422,7 @@ export function Sidebar({
: 'bg-primary text-primary-foreground'
)}
>
{formatUnreadCount(unreadCount)}
{unreadCount}
</span>
)}
</div>
@@ -474,7 +474,7 @@ export function Sidebar({
: 'bg-primary text-primary-foreground'
)}
>
{formatUnreadCount(unreadCount)}
{unreadCount}
</span>
)}
</div>
@@ -535,7 +535,7 @@ export function Sidebar({
: 'bg-primary text-primary-foreground'
)}
>
{formatUnreadCount(unreadCount)}
{unreadCount}
</span>
)}
</div>
+3 -7
View File
@@ -1,7 +1,3 @@
export { useRepeaterMode, type UseRepeaterModeResult } from './useRepeaterMode';
export { useUnreadCounts, type UseUnreadCountsResult } from './useUnreadCounts';
export {
useConversationMessages,
type UseConversationMessagesResult,
getMessageContentKey,
} from './useConversationMessages';
export { useRepeaterMode } from './useRepeaterMode';
export { useUnreadCounts } from './useUnreadCounts';
export { useConversationMessages, getMessageContentKey } from './useConversationMessages';
-41
View File
@@ -15,7 +15,6 @@ export interface UseUnreadCountsResult {
lastMessageTimes: ConversationTimes;
incrementUnread: (stateKey: string, hasMention?: boolean) => void;
markAllRead: () => void;
markConversationRead: (conv: Conversation) => void;
trackNewMessage: (msg: Message) => void;
}
@@ -136,45 +135,6 @@ export function useUnreadCounts(
});
}, []);
// Mark a specific conversation as read
// Calls server API to persist read state across devices
const markConversationRead = useCallback((conv: Conversation) => {
if (conv.type === 'raw' || conv.type === 'map' || conv.type === 'visualizer') return;
const key = getStateKey(conv.type as 'channel' | 'contact', conv.id);
// Update local state immediately
setUnreadCounts((prev) => {
if (prev[key]) {
const next = { ...prev };
delete next[key];
return next;
}
return prev;
});
// Also clear mentions for this conversation
setMentions((prev) => {
if (prev[key]) {
const next = { ...prev };
delete next[key];
return next;
}
return prev;
});
// Persist to server (fire-and-forget)
if (conv.type === 'channel') {
api.markChannelRead(conv.id).catch((err) => {
console.error('Failed to mark channel as read on server:', err);
});
} else if (conv.type === 'contact') {
api.markContactRead(conv.id).catch((err) => {
console.error('Failed to mark contact as read on server:', err);
});
}
}, []);
// Track a new incoming message for unread counts
const trackNewMessage = useCallback((msg: Message) => {
let conversationKey: string | null = null;
@@ -197,7 +157,6 @@ export function useUnreadCounts(
lastMessageTimes,
incrementUnread,
markAllRead,
markConversationRead,
trackNewMessage,
};
}
+2 -6
View File
@@ -1,10 +1,6 @@
import { describe, it, expect } from 'vitest';
import {
getAvatarText,
getAvatarColor,
getContactAvatar,
CONTACT_TYPE_REPEATER,
} from '../utils/contactAvatar';
import { getAvatarText, getAvatarColor, getContactAvatar } from '../utils/contactAvatar';
import { CONTACT_TYPE_REPEATER } from '../types';
describe('getAvatarText', () => {
it('returns first emoji when name contains emoji', () => {
+2 -13
View File
@@ -1,14 +1,3 @@
/**
* Type aliases for key types used throughout the application.
* These are all hex strings but serve different purposes.
*/
/** 64-character hex string identifying a contact/node */
export type PublicKey = string;
/** 32-character hex string identifying a channel */
export type ChannelKey = string;
export interface RadioSettings {
freq: number;
bw: number;
@@ -48,7 +37,7 @@ export interface MaintenanceResult {
}
export interface Contact {
public_key: PublicKey;
public_key: string;
name: string | null;
type: number;
flags: number;
@@ -64,7 +53,7 @@ export interface Contact {
}
export interface Channel {
key: ChannelKey;
key: string;
name: string;
is_hashtag: boolean;
on_radio: boolean;
+1 -2
View File
@@ -6,8 +6,7 @@
* Repeaters (type=2) always show 🛜 with a gray background.
*/
// Contact type constants (matches backend)
export const CONTACT_TYPE_REPEATER = 2;
import { CONTACT_TYPE_REPEATER } from '../types';
// Repeater avatar styling
const REPEATER_AVATAR = {
+1 -1
View File
@@ -13,7 +13,7 @@ const LAST_MESSAGE_KEY = 'remoteterm-lastMessageTime';
const SORT_ORDER_KEY = 'remoteterm-sortOrder';
export type ConversationTimes = Record<string, number>;
export type SortOrder = 'recent' | 'alpha';
type SortOrder = 'recent' | 'alpha';
// In-memory cache of last message times (loaded from server on init)
let lastMessageTimesCache: ConversationTimes = {};
-3
View File
@@ -43,6 +43,3 @@ export function clearLocalStorageFavorites(): void {
// localStorage might be disabled
}
}
// Re-export the Favorite type for convenience
export type { Favorite };
+1 -1
View File
@@ -14,7 +14,7 @@ const PUBKEY_PREFIX_LENGTH = 12;
* Extract the 12-character prefix from a public key.
* Works with both full keys and existing prefixes.
*/
export function getPubkeyPrefix(key: string): string {
function getPubkeyPrefix(key: string): string {
return key.slice(0, PUBKEY_PREFIX_LENGTH);
}
+1 -1
View File
@@ -1,6 +1,6 @@
import type { Conversation } from '../types';
export interface ParsedHashConversation {
interface ParsedHashConversation {
type: 'channel' | 'contact' | 'raw' | 'map' | 'visualizer';
name: string;
/** For map view: public key prefix to focus on */