Add link previews, voice tiles and a menu volume slider; tidy the profile
- Link previews for web links in chat, fetched by the f0ckm upload host by default (linked sites never see the user's IP), or directly, or off - Voice channel tiles above the chat on windows too narrow for the member list - Per-person volume slider in the user context menu - Profile panel: channel on its own line under the name, no Guest badge, voice actions moved to the context menu - User information dialog refreshes every second - Rate limiting mirrors Murmur's whole-second bucket leak, so irregular bursts are queued instead of dropped - CHANGELOG.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+10
-2
@@ -27,8 +27,7 @@ export function userMenu(u: User): MenuItem[] {
|
||||
const self = session.self;
|
||||
const isSelf = u.session === self?.session;
|
||||
const items: MenuItem[] = [
|
||||
{ label: 'View profile', action: () => { session.showUser(u.session); ui.panelOpen = true; } },
|
||||
{ label: 'Information', action: () => (ui.userInfo = u.session) }
|
||||
{ label: 'View profile', action: () => { session.showUser(u.session); ui.panelOpen = true; } }
|
||||
];
|
||||
if (isSelf) {
|
||||
items.push(
|
||||
@@ -41,6 +40,14 @@ export function userMenu(u: User): MenuItem[] {
|
||||
items.push(
|
||||
{ label: 'Send message', action: () => session.selectView(`dm:${u.session}`) },
|
||||
{ label: 'Mute for me', checked: !!voice.settings.localMutes[userKey(u)], action: () => voice.setLocalMute(u, !voice.settings.localMutes[userKey(u)]) },
|
||||
{
|
||||
label: 'Volume',
|
||||
slider: {
|
||||
value: voice.settings.userVolumes[userKey(u)] ?? 1, min: 0, max: 3, step: 0.05,
|
||||
format: v => `${Math.round(v * 100)}%`,
|
||||
oninput: v => voice.setUserVolume(u, v)
|
||||
}
|
||||
},
|
||||
{ label: 'Set nickname...', action: () => nicknamePrompt(u) }
|
||||
);
|
||||
if (self && u.channelId !== self.channelId) {
|
||||
@@ -63,6 +70,7 @@ export function userMenu(u: User): MenuItem[] {
|
||||
}
|
||||
items.push({ separator: true, label: '' }, { label: 'Copy name', action: () => navigator.clipboard.writeText(u.name) });
|
||||
if (u.hash) items.push({ label: 'Copy certificate hash', action: () => navigator.clipboard.writeText(u.hash) });
|
||||
items.push({ separator: true, label: '' }, { label: 'Information', action: () => (ui.userInfo = u.session) });
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user