Files
NanoKVM-MIRROR/web/src/api/vm.ts
watermeko 2ba45a2147 feat(web): enhance configurable input regions
Make input-region calibration work across MJPEG and H.264 video modes, including robust four-sided black-border detection and initial-selection edge snapping. Persist multiple reusable manual regions, keep manual and original-resolution choices mutually exclusive, migrate legacy settings, and localize the new controls for every supported language.
2026-08-25 09:36:13 +08:00

243 lines
5.1 KiB
TypeScript

import { ControlRegionMode, InputRegion, OriginalResolution } from '@/types';
import { http } from '@/lib/http.ts';
// get NanoKVM information
export function getInfo() {
return http.get('/api/vm/info');
}
// get hardware information
export function getHardware() {
return http.get('/api/vm/hardware');
}
// set gpio value
export function setGpio(type: string, duration: number) {
const data = {
type,
duration
};
return http.post('/api/vm/gpio', data);
}
// get gpio value
export function getGpio() {
return http.get('/api/vm/gpio');
}
// update screen arguments
export function updateScreen(type: string, value: number) {
const data = {
type,
value
};
return http.post('/api/vm/screen', data);
}
// get the device-level absolute mouse input region
export function getInputRegion() {
return http.get('/api/vm/input-region');
}
export function getInputResolution() {
return http.get('/api/vm/input-resolution');
}
// save the device-level absolute mouse input region
export function setInputRegion(region: InputRegion) {
return http.post('/api/vm/input-region', { mode: 'manual', ...region });
}
export function setInputRegionConfig(
region: InputRegion,
regions: InputRegion[],
selectedRegion: string
) {
return http.post('/api/vm/input-region', {
mode: 'manual',
...region,
regions,
selectedRegion,
selectedResolution: ''
});
}
export function setControlRegionMode(mode: ControlRegionMode) {
return http.post('/api/vm/input-region', { mode });
}
export function setOriginalResolutions(mode: ControlRegionMode, resolutions: OriginalResolution[]) {
return http.post('/api/vm/input-region', { mode, resolutions });
}
export function setOriginalResolutionConfig(
resolutions: OriginalResolution[],
selectedResolution: string,
selectedRegion: string
) {
return http.post('/api/vm/input-region', {
mode: 'manual',
resolutions,
selectedResolution,
selectedRegion
});
}
export function setSelectedOriginalResolution(selectedResolution: string) {
return http.post('/api/vm/input-region', {
mode: 'manual',
selectedResolution,
selectedRegion: ''
});
}
export function setManualRegions(
regions: InputRegion[],
selectedRegion: string,
selectedResolution = ''
) {
return http.post('/api/vm/input-region', {
mode: 'manual',
regions,
selectedRegion,
selectedResolution
});
}
// get memory limit
export function getMemoryLimit() {
return http.get('/api/vm/memory/limit');
}
// set memory limit
export function setMemoryLimit(enabled: boolean, limit: number) {
const data = {
enabled,
limit
};
return http.post('/api/vm/memory/limit', data);
}
// get OLED configuration
export function getOLED() {
return http.get('/api/vm/oled');
}
// set OLED configuration
export function setOLED(sleep: number) {
return http.post('/api/vm/oled', { sleep });
}
// reset HDMI
export function resetHdmi() {
return http.post('/api/vm/hdmi/reset');
}
// get HDMI state
export function getHdmiState() {
return http.get('/api/vm/hdmi');
}
// enable HDMI
export function enableHdmi() {
return http.post('/api/vm/hdmi/enable');
}
// disable HDMI
export function disableHdmi() {
return http.post('/api/vm/hdmi/disable');
}
// set HDMI state
export function setHdmiState(enabled: boolean) {
if (enabled) {
return enableHdmi();
}
return disableHdmi();
}
// set HDMI idle timeout in minutes
export function setHdmiIdleTimeout(minutes: number) {
return http.post('/api/vm/hdmi/timeout', { minutes });
}
// get SSH state
export function getSSHState() {
return http.get('/api/vm/ssh');
}
// enable SSH
export function enableSSH() {
return http.post('/api/vm/ssh/enable');
}
// disable SSH
export function disableSSH() {
return http.post('/api/vm/ssh/disable');
}
// get swap file size
export function getSwap() {
return http.get('/api/vm/swap');
}
// set swap file size
export function setSwap(size: number) {
return http.post('/api/vm/swap', { size });
}
// get mouse jiggler
export function getMouseJiggler() {
return http.get('/api/vm/mouse-jiggler');
}
// set mouse jiggler
export function setMouseJiggler(enabled: boolean, mode: string) {
return http.post('/api/vm/mouse-jiggler', { enabled, mode });
}
// get Hostname
export function getHostname() {
return http.get('/api/vm/hostname');
}
// set Hostname
export function setHostname(hostname: string) {
return http.post('/api/vm/hostname', { hostname });
}
// get WebTitle
export function getWebTitle() {
return http.get('/api/vm/web-title');
}
// set WebTitle
export function setWebTitle(title: string) {
return http.post('/api/vm/web-title', { title });
}
// get mDNS state
export function getMdnsState() {
return http.get('/api/vm/mdns');
}
// enable mDNS
export function enableMdns() {
return http.post('/api/vm/mdns/enable');
}
// disable mDNS
export function disableMdns() {
return http.post('/api/vm/mdns/disable');
}
// enable / disable TLS
export function setTLS(enabled: boolean) {
return http.post('/api/vm/tls', { enabled });
}
// reboot
export function reboot() {
return http.post('/api/vm/system/reboot');
}