use new livekit welshman properties

This commit is contained in:
mplorentz
2026-03-09 10:42:46 -04:00
committed by hodlbod
parent 84be1ae47b
commit a691f7b80a
2 changed files with 11 additions and 35 deletions
+9 -22
View File
@@ -1,9 +1,8 @@
<script lang="ts"> <script lang="ts">
import {get} from "svelte/store" import {get} from "svelte/store"
import type {Snippet} from "svelte" import type {Snippet} from "svelte"
import {assoc, append, nth, uniqBy} from "@welshman/lib" import type {RoomMeta} from "@welshman/util"
import type {RoomMeta, TrustedEvent} from "@welshman/util" import {makeRoomMeta} from "@welshman/util"
import {getTag, makeRoomMeta} from "@welshman/util"
import {waitForThunkError, createRoom, editRoom, joinRoom} from "@welshman/app" import {waitForThunkError, createRoom, editRoom, joinRoom} from "@welshman/app"
import StickerSmileSquare from "@assets/icons/sticker-smile-square.svg?dataurl" import StickerSmileSquare from "@assets/icons/sticker-smile-square.svg?dataurl"
import Hashtag from "@assets/icons/hashtag.svg?dataurl" import Hashtag from "@assets/icons/hashtag.svg?dataurl"
@@ -21,23 +20,12 @@
type RoomMode = "text" | "voice" | "both" type RoomMode = "text" | "voice" | "both"
const getRoomModeFromEvent = (event?: TrustedEvent): RoomMode => { const getRoomMode = (room: RoomMeta): RoomMode => {
const tags = event?.tags ?? [] if (room.livekit && room.noText) return "voice"
const hasLivekit = !!getTag("livekit", tags) if (room.livekit) return "both"
const hasNoText = !!getTag("no-text", tags)
if (hasLivekit && hasNoText) return "voice"
if (hasLivekit) return "both"
return "text" return "text"
} }
const buildTagsWithRoomMode = (existingTags: string[][], roomMode: RoomMode): string[][] => {
const filtered = existingTags.filter(t => t[0] !== "livekit" && t[0] !== "no-text")
if (roomMode === "both") return uniqBy(nth(0), append(["livekit"], filtered))
if (roomMode === "voice")
return uniqBy(nth(0), append(["no-text"], append(["livekit"], filtered)))
return filtered
}
type Props = { type Props = {
url: string url: string
header: Snippet header: Snippet
@@ -49,7 +37,7 @@
const {url, header, footer, onsubmit, initialValues = makeRoomMeta()}: Props = $props() const {url, header, footer, onsubmit, initialValues = makeRoomMeta()}: Props = $props()
const values = $state(initialValues) const values = $state(initialValues)
let roomMode = $state<RoomMode>(getRoomModeFromEvent(initialValues.event)) let roomMode = $state<RoomMode>(getRoomMode(initialValues))
const relayHasLivekit = deriveHasLivekit(url) const relayHasLivekit = deriveHasLivekit(url)
const submit = async () => { const submit = async () => {
@@ -82,10 +70,9 @@
return pushToast({theme: "error", message: createMessage}) return pushToast({theme: "error", message: createMessage})
} }
if (room.event && get(relayHasLivekit)) { if (get(relayHasLivekit)) {
const existingTags = room.event.tags ?? [] room.livekit = roomMode === "both" || roomMode === "voice"
const tags = buildTagsWithRoomMode(existingTags, roomMode) room.noText = roomMode === "voice"
room.event = assoc("tags", tags)(room.event) as RoomMeta["event"]
} }
const editMessage = await waitForThunkError(editRoom(url, room)) const editMessage = await waitForThunkError(editRoom(url, room))
+2 -13
View File
@@ -103,7 +103,6 @@ import {
getListTags, getListTags,
getPubkeyTagValues, getPubkeyTagValues,
getRelayTagValues, getRelayTagValues,
getTag,
getTagValues, getTagValues,
isRelayUrl, isRelayUrl,
normalizeRelayUrl, normalizeRelayUrl,
@@ -669,7 +668,7 @@ export const deriveRoomsWithLivekit = (url: string) =>
derived(roomsById, $roomsById => { derived(roomsById, $roomsById => {
const set = new Set<string>() const set = new Set<string>()
for (const room of $roomsById.values()) { for (const room of $roomsById.values()) {
if (room.url === url && getTag("livekit", room.event?.tags ?? [])) { if (room.url === url && room.livekit) {
set.add(room.h) set.add(room.h)
} }
} }
@@ -680,23 +679,13 @@ export const deriveRoomsNoText = (url: string) =>
derived(roomsById, $roomsById => { derived(roomsById, $roomsById => {
const set = new Set<string>() const set = new Set<string>()
for (const room of $roomsById.values()) { for (const room of $roomsById.values()) {
if (room.url === url && getTag("no-text", room.event?.tags ?? [])) { if (room.url === url && room.noText) {
set.add(room.h) set.add(room.h)
} }
} }
return set return set
}) })
export const roomHasLivekit = (url: string, h: string) => {
const room = getRoom(makeRoomId(url, h))
return !!getTag("livekit", room?.event?.tags ?? [])
}
export const roomIsNoText = (url: string, h: string) => {
const room = getRoom(makeRoomId(url, h))
return !!getTag("no-text", room?.event?.tags ?? [])
}
// User space/room lists // User space/room lists
export const groupListsByPubkey = deriveItemsByKey({ export const groupListsByPubkey = deriveItemsByKey({