use new livekit welshman properties
This commit is contained in:
@@ -1,9 +1,8 @@
|
||||
<script lang="ts">
|
||||
import {get} from "svelte/store"
|
||||
import type {Snippet} from "svelte"
|
||||
import {assoc, append, nth, uniqBy} from "@welshman/lib"
|
||||
import type {RoomMeta, TrustedEvent} from "@welshman/util"
|
||||
import {getTag, makeRoomMeta} from "@welshman/util"
|
||||
import type {RoomMeta} from "@welshman/util"
|
||||
import {makeRoomMeta} from "@welshman/util"
|
||||
import {waitForThunkError, createRoom, editRoom, joinRoom} from "@welshman/app"
|
||||
import StickerSmileSquare from "@assets/icons/sticker-smile-square.svg?dataurl"
|
||||
import Hashtag from "@assets/icons/hashtag.svg?dataurl"
|
||||
@@ -21,23 +20,12 @@
|
||||
|
||||
type RoomMode = "text" | "voice" | "both"
|
||||
|
||||
const getRoomModeFromEvent = (event?: TrustedEvent): RoomMode => {
|
||||
const tags = event?.tags ?? []
|
||||
const hasLivekit = !!getTag("livekit", tags)
|
||||
const hasNoText = !!getTag("no-text", tags)
|
||||
if (hasLivekit && hasNoText) return "voice"
|
||||
if (hasLivekit) return "both"
|
||||
const getRoomMode = (room: RoomMeta): RoomMode => {
|
||||
if (room.livekit && room.noText) return "voice"
|
||||
if (room.livekit) return "both"
|
||||
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 = {
|
||||
url: string
|
||||
header: Snippet
|
||||
@@ -49,7 +37,7 @@
|
||||
const {url, header, footer, onsubmit, initialValues = makeRoomMeta()}: Props = $props()
|
||||
|
||||
const values = $state(initialValues)
|
||||
let roomMode = $state<RoomMode>(getRoomModeFromEvent(initialValues.event))
|
||||
let roomMode = $state<RoomMode>(getRoomMode(initialValues))
|
||||
const relayHasLivekit = deriveHasLivekit(url)
|
||||
|
||||
const submit = async () => {
|
||||
@@ -82,10 +70,9 @@
|
||||
return pushToast({theme: "error", message: createMessage})
|
||||
}
|
||||
|
||||
if (room.event && get(relayHasLivekit)) {
|
||||
const existingTags = room.event.tags ?? []
|
||||
const tags = buildTagsWithRoomMode(existingTags, roomMode)
|
||||
room.event = assoc("tags", tags)(room.event) as RoomMeta["event"]
|
||||
if (get(relayHasLivekit)) {
|
||||
room.livekit = roomMode === "both" || roomMode === "voice"
|
||||
room.noText = roomMode === "voice"
|
||||
}
|
||||
const editMessage = await waitForThunkError(editRoom(url, room))
|
||||
|
||||
|
||||
+2
-13
@@ -103,7 +103,6 @@ import {
|
||||
getListTags,
|
||||
getPubkeyTagValues,
|
||||
getRelayTagValues,
|
||||
getTag,
|
||||
getTagValues,
|
||||
isRelayUrl,
|
||||
normalizeRelayUrl,
|
||||
@@ -669,7 +668,7 @@ export const deriveRoomsWithLivekit = (url: string) =>
|
||||
derived(roomsById, $roomsById => {
|
||||
const set = new Set<string>()
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -680,23 +679,13 @@ export const deriveRoomsNoText = (url: string) =>
|
||||
derived(roomsById, $roomsById => {
|
||||
const set = new Set<string>()
|
||||
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)
|
||||
}
|
||||
}
|
||||
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
|
||||
|
||||
export const groupListsByPubkey = deriveItemsByKey({
|
||||
|
||||
Reference in New Issue
Block a user