Files
OrionTV/stores/remoteControlStore.ts
2025-07-10 22:18:34 +08:00

52 lines
1.5 KiB
TypeScript

import { create } from 'zustand';
import { remoteControlService } from '@/services/remoteControlService';
interface RemoteControlState {
isServerRunning: boolean;
serverUrl: string | null;
error: string | null;
startServer: () => Promise<void>;
stopServer: () => void;
isModalVisible: boolean;
showModal: () => void;
hideModal: () => void;
lastMessage: string | null;
setMessage: (message: string) => void;
}
export const useRemoteControlStore = create<RemoteControlState>((set, get) => ({
isServerRunning: false,
serverUrl: null,
error: null,
isModalVisible: false,
lastMessage: null,
startServer: async () => {
if (get().isServerRunning) {
return;
}
try {
const url = await remoteControlService.startServer();
console.log(`[RemoteControlStore] Server started, URL: ${url}`);
set({ isServerRunning: true, serverUrl: url, error: null });
} catch (e: any) {
const errorMessage = e.message || 'Failed to start server';
console.error('[RemoteControlStore] Failed to start server:', errorMessage);
set({ error: errorMessage });
}
},
stopServer: () => {
if (get().isServerRunning) {
remoteControlService.stopServer();
set({ isServerRunning: false, serverUrl: null });
}
},
showModal: () => set({ isModalVisible: true }),
hideModal: () => set({ isModalVisible: false }),
setMessage: (message: string) => {
set({ lastMessage: `${message}_${Date.now()}` });
},
}));