mirror of
https://github.com/zimplexing/OrionTV.git
synced 2026-02-23 19:54:45 +08:00
feat: Support remote input
This commit is contained in:
52
stores/remoteControlStore.ts
Normal file
52
stores/remoteControlStore.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
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()}` });
|
||||
},
|
||||
}));
|
||||
Reference in New Issue
Block a user