cmds.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. import dayjs from "dayjs";
  2. import { invoke } from "@tauri-apps/api/tauri";
  3. import { Notice } from "@/components/base";
  4. export async function getClashLogs() {
  5. const regex = /time="(.+?)"\s+level=(.+?)\s+msg="(.+?)"/;
  6. const newRegex = /(.+?)\s+(.+?)\s+(.+)/;
  7. const logs = await invoke<string[]>("get_clash_logs");
  8. return logs
  9. .map((log) => {
  10. const result = log.match(regex);
  11. if (result) {
  12. const [_, _time, type, payload] = result;
  13. const time = dayjs(_time).format("MM-DD HH:mm:ss");
  14. return { time, type, payload };
  15. }
  16. const result2 = log.match(newRegex);
  17. if (result2) {
  18. const [_, time, type, payload] = result2;
  19. return { time, type, payload };
  20. }
  21. return null;
  22. })
  23. .filter(Boolean) as ILogItem[];
  24. }
  25. export async function getProfiles() {
  26. return invoke<IProfilesConfig>("get_profiles");
  27. }
  28. export async function enhanceProfiles() {
  29. return invoke<void>("enhance_profiles");
  30. }
  31. export async function patchProfilesConfig(profiles: IProfilesConfig) {
  32. return invoke<void>("patch_profiles_config", { profiles });
  33. }
  34. export async function createProfile(
  35. item: Partial<IProfileItem>,
  36. fileData?: string | null
  37. ) {
  38. return invoke<void>("create_profile", { item, fileData });
  39. }
  40. export async function viewProfile(index: string) {
  41. return invoke<void>("view_profile", { index });
  42. }
  43. export async function readProfileFile(index: string) {
  44. return invoke<string>("read_profile_file", { index });
  45. }
  46. export async function saveProfileFile(index: string, fileData: string) {
  47. return invoke<void>("save_profile_file", { index, fileData });
  48. }
  49. export async function importProfile(url: string) {
  50. return invoke<void>("import_profile", {
  51. url,
  52. option: { with_proxy: true },
  53. });
  54. }
  55. export async function reorderProfile(activeId: string, overId: string) {
  56. return invoke<void>("reorder_profile", {
  57. activeId,
  58. overId,
  59. });
  60. }
  61. export async function updateProfile(index: string, option?: IProfileOption) {
  62. return invoke<void>("update_profile", { index, option });
  63. }
  64. export async function deleteProfile(index: string) {
  65. return invoke<void>("delete_profile", { index });
  66. }
  67. export async function patchProfile(
  68. index: string,
  69. profile: Partial<IProfileItem>
  70. ) {
  71. return invoke<void>("patch_profile", { index, profile });
  72. }
  73. export async function getClashInfo() {
  74. return invoke<IClashInfo | null>("get_clash_info");
  75. }
  76. // Get runtime config which controlled by verge
  77. export async function getRuntimeConfig() {
  78. return invoke<IConfigData | null>("get_runtime_config");
  79. }
  80. export async function getRuntimeYaml() {
  81. return invoke<string | null>("get_runtime_yaml");
  82. }
  83. export async function getRuntimeExists() {
  84. return invoke<string[]>("get_runtime_exists");
  85. }
  86. export async function getRuntimeLogs() {
  87. return invoke<Record<string, [string, string][]>>("get_runtime_logs");
  88. }
  89. export async function patchClashConfig(payload: Partial<IConfigData>) {
  90. return invoke<void>("patch_clash_config", { payload });
  91. }
  92. export async function getVergeConfig() {
  93. return invoke<IVergeConfig>("get_verge_config");
  94. }
  95. export async function patchVergeConfig(payload: IVergeConfig) {
  96. return invoke<void>("patch_verge_config", { payload });
  97. }
  98. export async function getSystemProxy() {
  99. return invoke<{
  100. enable: boolean;
  101. server: string;
  102. bypass: string;
  103. }>("get_sys_proxy");
  104. }
  105. export async function changeClashCore(clashCore: string) {
  106. return invoke<any>("change_clash_core", { clashCore });
  107. }
  108. export async function restartSidecar() {
  109. return invoke<void>("restart_sidecar");
  110. }
  111. export async function grantPermission(core: string) {
  112. return invoke<void>("grant_permission", { core });
  113. }
  114. export async function getAppDir() {
  115. return invoke<string>("get_app_dir");
  116. }
  117. export async function openAppDir() {
  118. return invoke<void>("open_app_dir").catch((err) =>
  119. Notice.error(err?.message || err.toString(), 1500)
  120. );
  121. }
  122. export async function openCoreDir() {
  123. return invoke<void>("open_core_dir").catch((err) =>
  124. Notice.error(err?.message || err.toString(), 1500)
  125. );
  126. }
  127. export async function openLogsDir() {
  128. return invoke<void>("open_logs_dir").catch((err) =>
  129. Notice.error(err?.message || err.toString(), 1500)
  130. );
  131. }
  132. export async function openWebUrl(url: string) {
  133. return invoke<void>("open_web_url", { url });
  134. }
  135. export async function cmdGetProxyDelay(
  136. name: string,
  137. timeout: number,
  138. url?: string
  139. ) {
  140. name = encodeURIComponent(name);
  141. return invoke<{ delay: number }>("clash_api_get_proxy_delay", {
  142. name,
  143. url,
  144. timeout,
  145. });
  146. }
  147. export async function cmdTestDelay(url: string) {
  148. return invoke<number>("test_delay", { url });
  149. }
  150. /// service mode
  151. export async function checkService() {
  152. try {
  153. const result = await invoke<any>("check_service");
  154. if (result?.code === 0) return "active";
  155. if (result?.code === 400) return "installed";
  156. return "unknown";
  157. } catch (err: any) {
  158. return "uninstall";
  159. }
  160. }
  161. export async function installService() {
  162. return invoke<void>("install_service");
  163. }
  164. export async function uninstallService() {
  165. return invoke<void>("uninstall_service");
  166. }
  167. export async function invoke_uwp_tool() {
  168. return invoke<void>("invoke_uwp_tool").catch((err) =>
  169. Notice.error(err?.message || err.toString(), 1500)
  170. );
  171. }
  172. export async function getPortableFlag() {
  173. return invoke<boolean>("get_portable_flag");
  174. }
  175. export async function openDevTools() {
  176. return invoke("open_devtools");
  177. }
  178. export async function exitApp() {
  179. return invoke("exit_app");
  180. }
  181. export async function copyIconFile(
  182. path: string,
  183. name: "common.png" | "sysproxy.png" | "tun.png"
  184. ) {
  185. return invoke<void>("copy_icon_file", { path, name });
  186. }
  187. export async function downloadIconCache(url: string, name: string) {
  188. return invoke<string>("download_icon_cache", { url, name });
  189. }