feat: Soundboard Plugin + Radio Globe Fixes
- Add Soundboard plugin (full Jukebox port): server + frontend + CSS - Fix Radio Globe: swap geo coords (API returns [lng,lat] not [lat,lng]) - Fix Radio stations showing "Unbekannt": use item.page.title + fix channel ID regex - Add DirectMessages + MessageContent intents for DM commands - Register SoundboardTab in App.tsx with scoped theme/card-size CSS vars Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
6696fed9d7
commit
901dfe54be
9 changed files with 4545 additions and 14 deletions
|
|
@ -1,5 +1,6 @@
|
|||
import { useState, useEffect, useRef } from 'react';
|
||||
import RadioTab from './plugins/radio/RadioTab';
|
||||
import SoundboardTab from './plugins/soundboard/SoundboardTab';
|
||||
|
||||
interface PluginInfo {
|
||||
name: string;
|
||||
|
|
@ -10,6 +11,7 @@ interface PluginInfo {
|
|||
// Plugin tab components
|
||||
const tabComponents: Record<string, React.FC<{ data: any }>> = {
|
||||
radio: RadioTab,
|
||||
soundboard: SoundboardTab,
|
||||
};
|
||||
|
||||
export function registerTab(pluginName: string, component: React.FC<{ data: any }>) {
|
||||
|
|
|
|||
|
|
@ -100,7 +100,8 @@ export default function RadioTab({ data }: { data: any }) {
|
|||
setStationsLoading(true);
|
||||
setStations([]);
|
||||
if (globeRef.current) {
|
||||
globeRef.current.pointOfView({ lat: point.geo[0], lng: point.geo[1], altitude: 0.4 }, 800);
|
||||
// Radio Garden geo format: [lng, lat]
|
||||
globeRef.current.pointOfView({ lat: point.geo[1], lng: point.geo[0], altitude: 0.4 }, 800);
|
||||
}
|
||||
fetch(`/api/radio/place/${point.id}/channels`)
|
||||
.then(r => r.json())
|
||||
|
|
@ -123,8 +124,9 @@ export default function RadioTab({ data }: { data: any }) {
|
|||
.atmosphereColor('rgba(230, 126, 34, 0.25)')
|
||||
.atmosphereAltitude(0.12)
|
||||
.pointsData(places)
|
||||
.pointLat((d: any) => d.geo[0])
|
||||
.pointLng((d: any) => d.geo[1])
|
||||
// Radio Garden geo format: [lng, lat]
|
||||
.pointLat((d: any) => d.geo[1])
|
||||
.pointLng((d: any) => d.geo[0])
|
||||
.pointColor(() => 'rgba(230, 126, 34, 0.85)')
|
||||
.pointRadius((d: any) => Math.max(0.12, Math.min(0.45, 0.06 + (d.size ?? 1) * 0.005)))
|
||||
.pointAltitude(0.003)
|
||||
|
|
|
|||
1516
web/src/plugins/soundboard/SoundboardTab.tsx
Normal file
1516
web/src/plugins/soundboard/SoundboardTab.tsx
Normal file
File diff suppressed because it is too large
Load diff
2029
web/src/plugins/soundboard/soundboard.css
Normal file
2029
web/src/plugins/soundboard/soundboard.css
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue