use new livekit welshman properties
This commit is contained in:
@@ -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
@@ -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({
|
||||||
|
|||||||
Reference in New Issue
Block a user