import { invoke } from "@tauri-apps/api/core" import { platform } from "@tauri-apps/plugin-os" import { parse } from "valibot" import { AppInfo, IconEnum, SysCommand } from "../models" import { generateJarvisPluginCommand } from "./common" export function openTrash(): Promise { return invoke(generateJarvisPluginCommand("open_trash")) } export function emptyTrash(): Promise { return invoke(generateJarvisPluginCommand("empty_trash")) } export function shutdown(): Promise { return invoke(generateJarvisPluginCommand("shutdown")) } export function reboot(): Promise { return invoke(generateJarvisPluginCommand("reboot")) } export function sleep(): Promise { return invoke(generateJarvisPluginCommand("sleep")) } export function toggleSystemAppearance(): Promise { return invoke(generateJarvisPluginCommand("toggle_system_appearance")) } export function showDesktop(): Promise { return invoke(generateJarvisPluginCommand("show_desktop")) } export function quitAllApps(): Promise { return invoke(generateJarvisPluginCommand("quit_app_apps")) } export function sleepDisplays(): Promise { return invoke(generateJarvisPluginCommand("sleep_displays")) } export function setVolume(percentage: number): Promise { return invoke(generateJarvisPluginCommand("set_volume"), { percentage }) } export function setVolumeTo0(): Promise { return setVolume(0) } export function setVolumeTo25(): Promise { return setVolume(25) } export function setVolumeTo50(): Promise { return setVolume(50) } export function setVolumeTo75(): Promise { return setVolume(75) } export function setVolumeTo100(): Promise { return setVolume(100) } export function turnVolumeUp(): Promise { return invoke(generateJarvisPluginCommand("turn_volume_up")) } export function turnVolumeDown(): Promise { return invoke(generateJarvisPluginCommand("turn_volume_down")) } export function toggleStageManager(): Promise { return invoke(generateJarvisPluginCommand("toggle_stage_manager")) } export function toggleBluetooth(): Promise { return invoke(generateJarvisPluginCommand("toggle_bluetooth")) } export function toggleHiddenFiles(): Promise { return invoke(generateJarvisPluginCommand("toggle_hidden_files")) } export function ejectAllDisks(): Promise { return invoke(generateJarvisPluginCommand("eject_all_disks")) } export function logoutUser(): Promise { return invoke(generateJarvisPluginCommand("logout_user")) } export function toggleMute(): Promise { return invoke(generateJarvisPluginCommand("toggle_mute")) } export function mute(): Promise { return invoke(generateJarvisPluginCommand("mute")) } export function unmute(): Promise { return invoke(generateJarvisPluginCommand("unmute")) } export function getFrontmostApp(): Promise { return invoke(generateJarvisPluginCommand("get_frontmost_app")).then((app) => parse(AppInfo, app)) } export function hideAllAppsExceptFrontmost(): Promise { return invoke(generateJarvisPluginCommand("hide_all_apps_except_frontmost")) } export function getSelectedFilesInFileExplorer(): Promise { return invoke(generateJarvisPluginCommand("get_selected_files_in_file_explorer")) } export const rawSystemCommands = [ { name: "Open Trash", icon: "uil:trash", confirmRequired: false, function: openTrash, platforms: ["macos", "linux", "windows"] }, { name: "Empty Trash", icon: "uil:trash", confirmRequired: true, function: emptyTrash, platforms: ["macos", "linux", "windows"] }, { name: "Shutdown", icon: "mdi:shutdown", confirmRequired: true, function: shutdown, platforms: ["macos", "linux", "windows"] }, { name: "Reboot", icon: "mdi:restart", confirmRequired: true, function: reboot, platforms: ["macos", "linux", "windows"] }, { name: "Sleep", icon: "carbon:asleep", confirmRequired: false, function: sleep, platforms: ["macos", "linux", "windows"] }, { name: "Toggle System Appearance", icon: "line-md:light-dark", confirmRequired: false, function: toggleSystemAppearance, platforms: ["macos"] }, { name: "Show Desktop", icon: "bi:window-desktop", confirmRequired: false, function: showDesktop, platforms: ["macos"] }, { name: "Quit App", icon: "charm:cross", confirmRequired: false, function: quitAllApps, platforms: [] // platforms: ["macos"] }, { name: "Sleep Displays", icon: "solar:display-broken", confirmRequired: false, function: sleepDisplays, platforms: ["macos"] }, { name: "Set Volume to 0%", icon: "flowbite:volume-mute-outline", confirmRequired: false, function: setVolumeTo0, platforms: ["macos", "linux", "windows"] }, { name: "Set Volume to 25%", icon: "flowbite:volume-down-solid", confirmRequired: false, function: setVolumeTo25, platforms: ["macos", "linux", "windows"] }, { name: "Set Volume to 50%", icon: "flowbite:volume-down-solid", confirmRequired: false, function: setVolumeTo50, platforms: ["macos", "linux", "windows"] }, { name: "Set Volume to 75%", icon: "flowbite:volume-down-solid", confirmRequired: false, function: setVolumeTo75, platforms: ["macos", "linux", "windows"] }, { name: "Set Volume to 100%", icon: "flowbite:volume-up-solid", confirmRequired: false, function: setVolumeTo100, platforms: ["macos", "linux", "windows"] }, { name: "Turn Volume Up", icon: "flowbite:volume-down-solid", confirmRequired: false, function: turnVolumeUp, platforms: ["macos", "linux", "windows"] }, { name: "Turn Volume Down", icon: "flowbite:volume-down-outline", confirmRequired: false, function: turnVolumeDown, platforms: ["macos", "linux", "windows"] }, { name: "Toggle Mute", icon: "flowbite:volume-down-outline", confirmRequired: false, function: toggleMute, platforms: ["macos", "linux", "windows"] }, { name: "Mute", icon: "flowbite:volume-mute-solid", confirmRequired: false, function: mute, platforms: ["macos", "linux"] }, { name: "Unmute", icon: "flowbite:volume-mute-solid", confirmRequired: false, function: unmute, platforms: ["macos", "linux"] }, { name: "Toggle Stage Manager", icon: "material-symbols:dashboard", confirmRequired: false, function: toggleStageManager, platforms: [] }, { name: "Toggle Bluetooth", icon: "material-symbols:bluetooth", confirmRequired: false, function: toggleBluetooth, platforms: [] }, { name: "Toggle Hidden Files", icon: "mdi:hide", confirmRequired: false, function: toggleHiddenFiles, platforms: [] }, { name: "Eject All Disks", icon: "ph:eject-fill", confirmRequired: true, function: ejectAllDisks, platforms: ["macos"] }, { name: "Log Out User", icon: "ic:baseline-logout", confirmRequired: false, function: logoutUser, platforms: ["macos", "linux", "windows"] }, { name: "Hide All Apps Except Frontmost", icon: "mdi:hide", confirmRequired: false, function: hideAllAppsExceptFrontmost, platforms: [] } ] export function getSystemCommands(): SysCommand[] { return rawSystemCommands .filter(async (cmd) => cmd.platforms.includes(platform())) // Filter out system commands that are not supported on the current platform .map((cmd) => ({ name: cmd.name, value: "system-cmd" + cmd.name.split(" ").join("-").toLowerCase(), icon: { value: cmd.icon, type: IconEnum.Iconify }, keywords: cmd.name.split(" "), function: cmd.function, confirmRequired: cmd.confirmRequired })) }