mirror of
https://github.com/zimplexing/OrionTV.git
synced 2026-02-04 11:44:44 +08:00
52 lines
1.5 KiB
TypeScript
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()}` });
|
|
},
|
|
})); |